From b23888a20b62216e11bde0c4b3f542ef2786d0af Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Mon, 9 Sep 2024 21:49:46 -0700 Subject: [PATCH] =?UTF-8?q?Get=20RSSParserTests=20working=20=E2=80=94?= =?UTF-8?q?=C2=A0comment=20out=20all=20the=20other=20tests=20which=20aren?= =?UTF-8?q?=E2=80=99t=20expected=20to=20work=20yet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FeedParser/Feeds/XML/RSSParser.swift | 1 + .../FeedParserTests/AtomParserTests.swift | 194 ++++---- .../FeedParserTests/EntityDecodingTests.swift | 74 +-- .../FeedParserTests/FeedParserTypeTests.swift | 456 +++++++++--------- .../Tests/FeedParserTests/HTMLLinkTests.swift | 65 ++- .../FeedParserTests/HTMLMetadataTests.swift | 287 ++++++----- .../FeedParserTests/JSONFeedParserTests.swift | 228 ++++----- .../Tests/FeedParserTests/ParserTests.swift | 2 +- .../RSSInJSONParserTests.swift | 36 +- .../FeedParserTests/RSSParserTests.swift | 73 +-- 10 files changed, 717 insertions(+), 699 deletions(-) diff --git a/Modules/Parser/Sources/FeedParser/Feeds/XML/RSSParser.swift b/Modules/Parser/Sources/FeedParser/Feeds/XML/RSSParser.swift index ee12e0f1b..e06007b59 100644 --- a/Modules/Parser/Sources/FeedParser/Feeds/XML/RSSParser.swift +++ b/Modules/Parser/Sources/FeedParser/Feeds/XML/RSSParser.swift @@ -52,6 +52,7 @@ private extension RSSParser { let saxParser = SAXParser(delegate: self, data: data) saxParser.parse() + feed.articles = articles } private struct XMLName { diff --git a/Modules/Parser/Tests/FeedParserTests/AtomParserTests.swift b/Modules/Parser/Tests/FeedParserTests/AtomParserTests.swift index dc9fb89d9..71647f10f 100644 --- a/Modules/Parser/Tests/FeedParserTests/AtomParserTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/AtomParserTests.swift @@ -7,101 +7,101 @@ // import XCTest -import Parser +import FeedParser -class AtomParserTests: XCTestCase { - - func testDaringFireballPerformance() { - - // 0.009 sec on my 2012 iMac. - let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //It’s actually an Atom feed - self.measure { - let _ = try! FeedParser.parseSync(d) - } - } - - func testAllThisPerformance() { - - // 0.003 sec on my 2012 iMac. - let d = parserData("allthis", "atom", "http://leancrew.com/all-this") - self.measure { - let _ = try! FeedParser.parseSync(d) - } - } - - func testGettingHomePageLink() async { - - let d = parserData("allthis", "atom", "http://leancrew.com/all-this") - let parsedFeed = try! await FeedParser.parse(d)! - - XCTAssertTrue(parsedFeed.homePageURL == "http://leancrew.com/all-this") - } - - func testDaringFireball() async { - - let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //It’s actually an Atom feed - let parsedFeed = try! await FeedParser.parse(d)! - - for article in parsedFeed.items { - - XCTAssertNotNil(article.url) - - XCTAssertTrue(article.uniqueID.hasPrefix("tag:daringfireball.net,2017:/")) - - XCTAssertEqual(article.authors!.count, 1) // TODO: parse Atom authors - let author = article.authors!.first! - if author.name == "Daring Fireball Department of Commerce" { - XCTAssertNil(author.url) - } - else { - XCTAssertEqual(author.name, "John Gruber") - XCTAssertEqual(author.url, "http://daringfireball.net/") - } - - XCTAssertNotNil(article.datePublished) - XCTAssert(article.attachments == nil) - - XCTAssertEqual(article.language, "en") - } - } - - func test4fsodonlineAttachments() async { - - // Thanks to Marco for finding me some Atom podcast feeds. Apparently they’re super-rare. - - let d = parserData("4fsodonline", "atom", "http://4fsodonline.blogspot.com/") - let parsedFeed = try! await FeedParser.parse(d)! - - for article in parsedFeed.items { - - XCTAssertTrue(article.attachments!.count > 0) - let attachment = article.attachments!.first! - - XCTAssertTrue(attachment.url.hasPrefix("http://www.blogger.com/video-play.mp4?")) - XCTAssertNil(attachment.sizeInBytes) - XCTAssertEqual(attachment.mimeType!, "video/mp4") - } - } - - func testExpertOpinionENTAttachments() async { - - // Another from Marco. - - let d = parserData("expertopinionent", "atom", "http://expertopinionent.typepad.com/my-blog/") - let parsedFeed = try! await FeedParser.parse(d)! - - for article in parsedFeed.items { - - guard let attachments = article.attachments else { - continue - } - - XCTAssertEqual(attachments.count, 1) - let attachment = attachments.first! - - XCTAssertTrue(attachment.url.hasSuffix(".mp3")) - XCTAssertNil(attachment.sizeInBytes) - XCTAssertEqual(attachment.mimeType!, "audio/mpeg") - } - } -} +//class AtomParserTests: XCTestCase { +// +// func testDaringFireballPerformance() { +// +// // 0.009 sec on my 2012 iMac. +// let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //It’s actually an Atom feed +// self.measure { +// let _ = try! FeedParser.parseSync(d) +// } +// } +// +// func testAllThisPerformance() { +// +// // 0.003 sec on my 2012 iMac. +// let d = parserData("allthis", "atom", "http://leancrew.com/all-this") +// self.measure { +// let _ = try! FeedParser.parseSync(d) +// } +// } +// +// func testGettingHomePageLink() async { +// +// let d = parserData("allthis", "atom", "http://leancrew.com/all-this") +// let parsedFeed = try! await FeedParser.parse(d)! +// +// XCTAssertTrue(parsedFeed.homePageURL == "http://leancrew.com/all-this") +// } +// +// func testDaringFireball() async { +// +// let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //It’s actually an Atom feed +// let parsedFeed = try! await FeedParser.parse(d)! +// +// for article in parsedFeed.items { +// +// XCTAssertNotNil(article.url) +// +// XCTAssertTrue(article.uniqueID.hasPrefix("tag:daringfireball.net,2017:/")) +// +// XCTAssertEqual(article.authors!.count, 1) // TODO: parse Atom authors +// let author = article.authors!.first! +// if author.name == "Daring Fireball Department of Commerce" { +// XCTAssertNil(author.url) +// } +// else { +// XCTAssertEqual(author.name, "John Gruber") +// XCTAssertEqual(author.url, "http://daringfireball.net/") +// } +// +// XCTAssertNotNil(article.datePublished) +// XCTAssert(article.attachments == nil) +// +// XCTAssertEqual(article.language, "en") +// } +// } +// +// func test4fsodonlineAttachments() async { +// +// // Thanks to Marco for finding me some Atom podcast feeds. Apparently they’re super-rare. +// +// let d = parserData("4fsodonline", "atom", "http://4fsodonline.blogspot.com/") +// let parsedFeed = try! await FeedParser.parse(d)! +// +// for article in parsedFeed.items { +// +// XCTAssertTrue(article.attachments!.count > 0) +// let attachment = article.attachments!.first! +// +// XCTAssertTrue(attachment.url.hasPrefix("http://www.blogger.com/video-play.mp4?")) +// XCTAssertNil(attachment.sizeInBytes) +// XCTAssertEqual(attachment.mimeType!, "video/mp4") +// } +// } +// +// func testExpertOpinionENTAttachments() async { +// +// // Another from Marco. +// +// let d = parserData("expertopinionent", "atom", "http://expertopinionent.typepad.com/my-blog/") +// let parsedFeed = try! await FeedParser.parse(d)! +// +// for article in parsedFeed.items { +// +// guard let attachments = article.attachments else { +// continue +// } +// +// XCTAssertEqual(attachments.count, 1) +// let attachment = attachments.first! +// +// XCTAssertTrue(attachment.url.hasSuffix(".mp3")) +// XCTAssertNil(attachment.sizeInBytes) +// XCTAssertEqual(attachment.mimeType!, "audio/mpeg") +// } +// } +//} diff --git a/Modules/Parser/Tests/FeedParserTests/EntityDecodingTests.swift b/Modules/Parser/Tests/FeedParserTests/EntityDecodingTests.swift index b72c26b34..7a2ea1cb4 100644 --- a/Modules/Parser/Tests/FeedParserTests/EntityDecodingTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/EntityDecodingTests.swift @@ -7,41 +7,41 @@ // import XCTest -import Parser +import FeedParser -class EntityDecodingTests: XCTestCase { - - func test39Decoding() { - - // Bug found by Manton Reece — the ' entity was not getting decoded by NetNewsWire in JSON Feeds from micro.blog. - - let s = "These are the times that try men's souls." - let decoded = s.rsparser_stringByDecodingHTMLEntities() - - XCTAssertEqual(decoded, "These are the times that try men's souls.") - } - - func testEntities() { - var s = "…" - var decoded = s.rsparser_stringByDecodingHTMLEntities() - - XCTAssertEqual(decoded, "…") - - s = "…" - decoded = s.rsparser_stringByDecodingHTMLEntities() - XCTAssertEqual(decoded, "…") - - s = "'" - decoded = s.rsparser_stringByDecodingHTMLEntities() - XCTAssertEqual(decoded, "'") - - s = "§" - decoded = s.rsparser_stringByDecodingHTMLEntities() - XCTAssertEqual(decoded, "§") - - s = "£" - decoded = s.rsparser_stringByDecodingHTMLEntities() - XCTAssertEqual(decoded, "£") - - } -} +//class EntityDecodingTests: XCTestCase { +// +// func test39Decoding() { +// +// // Bug found by Manton Reece — the ' entity was not getting decoded by NetNewsWire in JSON Feeds from micro.blog. +// +// let s = "These are the times that try men's souls." +// let decoded = s.rsparser_stringByDecodingHTMLEntities() +// +// XCTAssertEqual(decoded, "These are the times that try men's souls.") +// } +// +// func testEntities() { +// var s = "…" +// var decoded = s.rsparser_stringByDecodingHTMLEntities() +// +// XCTAssertEqual(decoded, "…") +// +// s = "…" +// decoded = s.rsparser_stringByDecodingHTMLEntities() +// XCTAssertEqual(decoded, "…") +// +// s = "'" +// decoded = s.rsparser_stringByDecodingHTMLEntities() +// XCTAssertEqual(decoded, "'") +// +// s = "§" +// decoded = s.rsparser_stringByDecodingHTMLEntities() +// XCTAssertEqual(decoded, "§") +// +// s = "£" +// decoded = s.rsparser_stringByDecodingHTMLEntities() +// XCTAssertEqual(decoded, "£") +// +// } +//} diff --git a/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift b/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift index 931db3fe2..5028ddef5 100644 --- a/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift @@ -7,235 +7,235 @@ // import XCTest -import Parser -import ParserObjC +import FeedParser +import SAX -class FeedParserTypeTests: XCTestCase { - - // MARK: HTML - - func testDaringFireballHTMLType() { - - let d = parserData("DaringFireball", "html", "http://daringfireball.net/") - let type = feedType(d) - XCTAssertTrue(type == .notAFeed) - } - - func testFurboHTMLType() { - - let d = parserData("furbo", "html", "http://furbo.org/") - let type = feedType(d) - XCTAssertTrue(type == .notAFeed) - } - - func testInessentialHTMLType() { - - let d = parserData("inessential", "html", "http://inessential.com/") - let type = feedType(d) - XCTAssertTrue(type == .notAFeed) - } - - func testSixColorsHTMLType() { - - let d = parserData("sixcolors", "html", "https://sixcolors.com/") - let type = feedType(d) - XCTAssertTrue(type == .notAFeed) - } - - // MARK: RSS - - func testEMarleyRSSType() { - - let d = parserData("EMarley", "rss", "https://medium.com/@emarley") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testScriptingNewsRSSType() { - - let d = parserData("scriptingNews", "rss", "http://scripting.com/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testKatieFloydRSSType() { - - let d = parserData("KatieFloyd", "rss", "https://katiefloyd.com/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testMantonRSSType() { - - let d = parserData("manton", "rss", "http://manton.org/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testDCRainmakerRSSType() { - - let d = parserData("dcrainmaker", "xml", "https://www.dcrainmaker.com/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testMacworldRSSType() { - - let d = parserData("macworld", "rss", "https://www.macworld.com/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testNatashaTheRobotRSSType() { - - let d = parserData("natasha", "xml", "https://www.natashatherobot.com/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testDontHitSaveRSSWithBOMType() { - - let d = parserData("donthitsave", "xml", "http://donthitsave.com/donthitsavefeed.xml") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testBioRDF() { - let d = parserData("bio", "rdf", "http://connect.biorxiv.org/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - func testPHPXML() { - let d = parserData("phpxml", "rss", "https://www.fcutrecht.net/") - let type = feedType(d) - XCTAssertTrue(type == .rss) - } - - // MARK: Atom - - func testDaringFireballAtomType() { - - // File extension is .rss, but it’s really an Atom feed. - let d = parserData("DaringFireball", "rss", "http://daringfireball.net/") - let type = feedType(d) - XCTAssertTrue(type == .atom) - } - - func testOneFootTsunamiAtomType() { - - let d = parserData("OneFootTsunami", "atom", "http://onefoottsunami.com/") - let type = feedType(d) - XCTAssertTrue(type == .atom) - } - - func testRussCoxAtomType() { - let d = parserData("russcox", "atom", "https://research.swtch.com/") - let type = feedType(d) - XCTAssertTrue(type == .atom) - } - - // MARK: RSS-in-JSON - - func testScriptingNewsJSONType() { - - let d = parserData("ScriptingNews", "json", "http://scripting.com/") - let type = feedType(d) - XCTAssertTrue(type == .rssInJSON) - } - - // MARK: JSON Feed - - func testInessentialJSONFeedType() { - - let d = parserData("inessential", "json", "http://inessential.com/") - let type = feedType(d) - XCTAssertTrue(type == .jsonFeed) - } - - func testAllThisJSONFeedType() { - - let d = parserData("allthis", "json", "http://leancrew.com/allthis/") - let type = feedType(d) - XCTAssertTrue(type == .jsonFeed) - } - - func testCurtJSONFeedType() { - - let d = parserData("curt", "json", "http://curtclifton.net/") - let type = feedType(d) - XCTAssertTrue(type == .jsonFeed) - } - - func testPixelEnvyJSONFeedType() { - - let d = parserData("pxlnv", "json", "http://pxlnv.com/") - let type = feedType(d) - XCTAssertTrue(type == .jsonFeed) - } - - func testRoseJSONFeedType() { - - let d = parserData("rose", "json", "https://www.rosemaryorchard.com/") - let type = feedType(d) - XCTAssertTrue(type == .jsonFeed) - } - - // MARK: Unknown - - func testPartialAllThisUnknownFeedType() { - - // In the case of this feed, the partial data isn’t enough to detect that it’s a JSON Feed. - // The type detector should return .unknown rather than .notAFeed. - - let d = parserData("allthis-partial", "json", "http://leancrew.com/allthis/") - let type = feedType(d, isPartialData: true) - XCTAssertEqual(type, .unknown) - } - - // MARK: Performance - - func testFeedTypePerformance() { - - // 0.000 on my 2012 iMac. - - let d = parserData("EMarley", "rss", "https://medium.com/@emarley") - self.measure { - let _ = feedType(d) - } - } - - func testFeedTypePerformance2() { - - // 0.000 on my 2012 iMac. - - let d = parserData("inessential", "json", "http://inessential.com/") - self.measure { - let _ = feedType(d) - } - } - - func testFeedTypePerformance3() { - - // 0.000 on my 2012 iMac. - - let d = parserData("DaringFireball", "html", "http://daringfireball.net/") - self.measure { - let _ = feedType(d) - } - } - - func testFeedTypePerformance4() { - - // 0.001 on my 2012 iMac. - - let d = parserData("DaringFireball", "rss", "http://daringfireball.net/") - self.measure { - let _ = feedType(d) - } - } - -} +//class FeedParserTypeTests: XCTestCase { +// +// // MARK: HTML +// +// func testDaringFireballHTMLType() { +// +// let d = parserData("DaringFireball", "html", "http://daringfireball.net/") +// let type = feedType(d) +// XCTAssertTrue(type == .notAFeed) +// } +// +// func testFurboHTMLType() { +// +// let d = parserData("furbo", "html", "http://furbo.org/") +// let type = feedType(d) +// XCTAssertTrue(type == .notAFeed) +// } +// +// func testInessentialHTMLType() { +// +// let d = parserData("inessential", "html", "http://inessential.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .notAFeed) +// } +// +// func testSixColorsHTMLType() { +// +// let d = parserData("sixcolors", "html", "https://sixcolors.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .notAFeed) +// } +// +// // MARK: RSS +// +// func testEMarleyRSSType() { +// +// let d = parserData("EMarley", "rss", "https://medium.com/@emarley") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testScriptingNewsRSSType() { +// +// let d = parserData("scriptingNews", "rss", "http://scripting.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testKatieFloydRSSType() { +// +// let d = parserData("KatieFloyd", "rss", "https://katiefloyd.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testMantonRSSType() { +// +// let d = parserData("manton", "rss", "http://manton.org/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testDCRainmakerRSSType() { +// +// let d = parserData("dcrainmaker", "xml", "https://www.dcrainmaker.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testMacworldRSSType() { +// +// let d = parserData("macworld", "rss", "https://www.macworld.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testNatashaTheRobotRSSType() { +// +// let d = parserData("natasha", "xml", "https://www.natashatherobot.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testDontHitSaveRSSWithBOMType() { +// +// let d = parserData("donthitsave", "xml", "http://donthitsave.com/donthitsavefeed.xml") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testBioRDF() { +// let d = parserData("bio", "rdf", "http://connect.biorxiv.org/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// func testPHPXML() { +// let d = parserData("phpxml", "rss", "https://www.fcutrecht.net/") +// let type = feedType(d) +// XCTAssertTrue(type == .rss) +// } +// +// // MARK: Atom +// +// func testDaringFireballAtomType() { +// +// // File extension is .rss, but it’s really an Atom feed. +// let d = parserData("DaringFireball", "rss", "http://daringfireball.net/") +// let type = feedType(d) +// XCTAssertTrue(type == .atom) +// } +// +// func testOneFootTsunamiAtomType() { +// +// let d = parserData("OneFootTsunami", "atom", "http://onefoottsunami.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .atom) +// } +// +// func testRussCoxAtomType() { +// let d = parserData("russcox", "atom", "https://research.swtch.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .atom) +// } +// +// // MARK: RSS-in-JSON +// +// func testScriptingNewsJSONType() { +// +// let d = parserData("ScriptingNews", "json", "http://scripting.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .rssInJSON) +// } +// +// // MARK: JSON Feed +// +// func testInessentialJSONFeedType() { +// +// let d = parserData("inessential", "json", "http://inessential.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .jsonFeed) +// } +// +// func testAllThisJSONFeedType() { +// +// let d = parserData("allthis", "json", "http://leancrew.com/allthis/") +// let type = feedType(d) +// XCTAssertTrue(type == .jsonFeed) +// } +// +// func testCurtJSONFeedType() { +// +// let d = parserData("curt", "json", "http://curtclifton.net/") +// let type = feedType(d) +// XCTAssertTrue(type == .jsonFeed) +// } +// +// func testPixelEnvyJSONFeedType() { +// +// let d = parserData("pxlnv", "json", "http://pxlnv.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .jsonFeed) +// } +// +// func testRoseJSONFeedType() { +// +// let d = parserData("rose", "json", "https://www.rosemaryorchard.com/") +// let type = feedType(d) +// XCTAssertTrue(type == .jsonFeed) +// } +// +// // MARK: Unknown +// +// func testPartialAllThisUnknownFeedType() { +// +// // In the case of this feed, the partial data isn’t enough to detect that it’s a JSON Feed. +// // The type detector should return .unknown rather than .notAFeed. +// +// let d = parserData("allthis-partial", "json", "http://leancrew.com/allthis/") +// let type = feedType(d, isPartialData: true) +// XCTAssertEqual(type, .unknown) +// } +// +// // MARK: Performance +// +// func testFeedTypePerformance() { +// +// // 0.000 on my 2012 iMac. +// +// let d = parserData("EMarley", "rss", "https://medium.com/@emarley") +// self.measure { +// let _ = feedType(d) +// } +// } +// +// func testFeedTypePerformance2() { +// +// // 0.000 on my 2012 iMac. +// +// let d = parserData("inessential", "json", "http://inessential.com/") +// self.measure { +// let _ = feedType(d) +// } +// } +// +// func testFeedTypePerformance3() { +// +// // 0.000 on my 2012 iMac. +// +// let d = parserData("DaringFireball", "html", "http://daringfireball.net/") +// self.measure { +// let _ = feedType(d) +// } +// } +// +// func testFeedTypePerformance4() { +// +// // 0.001 on my 2012 iMac. +// +// let d = parserData("DaringFireball", "rss", "http://daringfireball.net/") +// self.measure { +// let _ = feedType(d) +// } +// } +// +//} func parserData(_ filename: String, _ fileExtension: String, _ url: String) -> ParserData { let filename = "Resources/\(filename)" diff --git a/Modules/Parser/Tests/FeedParserTests/HTMLLinkTests.swift b/Modules/Parser/Tests/FeedParserTests/HTMLLinkTests.swift index 157445587..cd39f7847 100644 --- a/Modules/Parser/Tests/FeedParserTests/HTMLLinkTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/HTMLLinkTests.swift @@ -7,37 +7,36 @@ // import XCTest -import Parser -import ParserObjC +import FeedParser -class HTMLLinkTests: XCTestCase { - - func testSixColorsPerformance() { - - // 0.003 sec on my 2012 iMac - let d = parserData("sixcolors", "html", "http://sixcolors.com/") - self.measure { - let _ = RSHTMLLinkParser.htmlLinks(with: d) - } - } - - func testSixColorsLink() { - - let d = parserData("sixcolors", "html", "http://sixcolors.com/") - let links = RSHTMLLinkParser.htmlLinks(with: d) - - let linkToFind = "https://www.theincomparable.com/theincomparable/290/index.php" - let textToFind = "this week’s episode of The Incomparable" - - var found = false - for oneLink in links { - if let urlString = oneLink.urlString, let text = oneLink.text, urlString == linkToFind, text == textToFind { - found = true - } - } - - XCTAssertTrue(found) - XCTAssertEqual(links.count, 131) - } - -} +//class HTMLLinkTests: XCTestCase { +// +// func testSixColorsPerformance() { +// +// // 0.003 sec on my 2012 iMac +// let d = parserData("sixcolors", "html", "http://sixcolors.com/") +// self.measure { +// let _ = RSHTMLLinkParser.htmlLinks(with: d) +// } +// } +// +// func testSixColorsLink() { +// +// let d = parserData("sixcolors", "html", "http://sixcolors.com/") +// let links = RSHTMLLinkParser.htmlLinks(with: d) +// +// let linkToFind = "https://www.theincomparable.com/theincomparable/290/index.php" +// let textToFind = "this week’s episode of The Incomparable" +// +// var found = false +// for oneLink in links { +// if let urlString = oneLink.urlString, let text = oneLink.text, urlString == linkToFind, text == textToFind { +// found = true +// } +// } +// +// XCTAssertTrue(found) +// XCTAssertEqual(links.count, 131) +// } +// +//} diff --git a/Modules/Parser/Tests/FeedParserTests/HTMLMetadataTests.swift b/Modules/Parser/Tests/FeedParserTests/HTMLMetadataTests.swift index fed009ee6..bf30d68c9 100644 --- a/Modules/Parser/Tests/FeedParserTests/HTMLMetadataTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/HTMLMetadataTests.swift @@ -7,148 +7,147 @@ // import XCTest -import Parser -import ParserObjC +import FeedParser -class HTMLMetadataTests: XCTestCase { - - func testDaringFireball() { - - let d = parserData("DaringFireball", "html", "http://daringfireball.net/") - let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) - - XCTAssertEqual(metadata.favicons.first?.urlString, "http://daringfireball.net/graphics/favicon.ico?v=005") - - XCTAssertEqual(metadata.feedLinks.count, 1) - - let feedLink = metadata.feedLinks.first! - XCTAssertNil(feedLink.title) - XCTAssertEqual(feedLink.type, "application/atom+xml") - XCTAssertEqual(feedLink.urlString, "http://daringfireball.net/feeds/main") - } - - func testDaringFireballPerformance() { - - // 0.002 sec on my 2012 iMac - let d = parserData("DaringFireball", "html", "http://daringfireball.net/") - self.measure { - let _ = RSHTMLMetadataParser.htmlMetadata(with: d) - } - } - - func testFurbo() { - - let d = parserData("furbo", "html", "http://furbo.org/") - let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) - - XCTAssertEqual(metadata.favicons.first?.urlString, "http://furbo.org/favicon.ico") - - XCTAssertEqual(metadata.feedLinks.count, 1) - - let feedLink = metadata.feedLinks.first! - XCTAssertEqual(feedLink.title, "Iconfactory News Feed") - XCTAssertEqual(feedLink.type, "application/rss+xml") - } - - func testFurboPerformance() { - - // 0.001 sec on my 2012 iMac - let d = parserData("furbo", "html", "http://furbo.org/") - self.measure { - let _ = RSHTMLMetadataParser.htmlMetadata(with: d) - } - } - - func testInessential() { - - let d = parserData("inessential", "html", "http://inessential.com/") - let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) - - XCTAssertNil(metadata.favicons.first?.urlString) - - XCTAssertEqual(metadata.feedLinks.count, 1) - let feedLink = metadata.feedLinks.first! - XCTAssertEqual(feedLink.title, "RSS") - XCTAssertEqual(feedLink.type, "application/rss+xml") - XCTAssertEqual(feedLink.urlString, "http://inessential.com/xml/rss.xml") - - XCTAssertEqual(metadata.appleTouchIcons.count, 0); - } - - func testInessentialPerformance() { - - // 0.001 sec on my 2012 iMac - let d = parserData("inessential", "html", "http://inessential.com/") - self.measure { - let _ = RSHTMLMetadataParser.htmlMetadata(with: d) - } - } - - func testCocoPerformance() { - - // 0.004 sec on my 2012 iMac - let d = parserData("coco", "html", "https://www.theatlantic.com/entertainment/archive/2017/11/coco-is-among-pixars-best-movies-in-years/546695/") - self.measure { - let _ = RSHTMLMetadataParser.htmlMetadata(with: d) - } - } - - func testSixColors() { - - let d = parserData("sixcolors", "html", "http://sixcolors.com/") - let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) - - XCTAssertEqual(metadata.favicons.first?.urlString, "https://sixcolors.com/images/favicon.ico") - - XCTAssertEqual(metadata.feedLinks.count, 1); - let feedLink = metadata.feedLinks.first! - XCTAssertEqual(feedLink.title, "RSS"); - XCTAssertEqual(feedLink.type, "application/rss+xml"); - XCTAssertEqual(feedLink.urlString, "http://feedpress.me/sixcolors"); - - XCTAssertEqual(metadata.appleTouchIcons.count, 6); - let icon = metadata.appleTouchIcons[3]; - XCTAssertEqual(icon.rel, "apple-touch-icon"); - XCTAssertEqual(icon.sizes, "120x120"); - XCTAssertEqual(icon.urlString, "https://sixcolors.com/apple-touch-icon-120.png"); - } - - func testSixColorsPerformance() { - - // 0.002 sec on my 2012 iMac - let d = parserData("sixcolors", "html", "http://sixcolors.com/") - self.measure { - let _ = RSHTMLMetadataParser.htmlMetadata(with: d) - } - } - - func testCocoOGImage() { - - let d = parserData("coco", "html", "https://www.theatlantic.com/entertainment/archive/2017/11/coco-is-among-pixars-best-movies-in-years/546695/") - let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) - let openGraphData = metadata.openGraphProperties - let image = openGraphData.images.first! - XCTAssert(image.url == "https://cdn.theatlantic.com/assets/media/img/mt/2017/11/1033101_first_full_length_trailer_arrives_pixars_coco/facebook.jpg?1511382177") - } - - func testCocoTwitterImage() { - - let d = parserData("coco", "html", "https://www.theatlantic.com/entertainment/archive/2017/11/coco-is-among-pixars-best-movies-in-years/546695/") - let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) - let twitterData = metadata.twitterProperties - let imageURL = twitterData.imageURL! - XCTAssert(imageURL == "https://cdn.theatlantic.com/assets/media/img/mt/2017/11/1033101_first_full_length_trailer_arrives_pixars_coco/facebook.jpg?1511382177") - } - - func testYouTube() { - // YouTube is a special case — the feed links appear after the head section, in the body section. - let d = parserData("YouTubeTheVolvoRocks", "html", "https://www.youtube.com/user/TheVolvorocks") - let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) - - XCTAssertEqual(metadata.feedLinks.count, 1); - let feedLink = metadata.feedLinks.first! - XCTAssertEqual(feedLink.title, "RSS"); - XCTAssertEqual(feedLink.type, "application/rss+xml"); - XCTAssertEqual(feedLink.urlString, "https://www.youtube.com/feeds/videos.xml?channel_id=UCct7QF2jcWRY6dhXWMSq9LQ"); - } -} +//class HTMLMetadataTests: XCTestCase { +// +// func testDaringFireball() { +// +// let d = parserData("DaringFireball", "html", "http://daringfireball.net/") +// let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) +// +// XCTAssertEqual(metadata.favicons.first?.urlString, "http://daringfireball.net/graphics/favicon.ico?v=005") +// +// XCTAssertEqual(metadata.feedLinks.count, 1) +// +// let feedLink = metadata.feedLinks.first! +// XCTAssertNil(feedLink.title) +// XCTAssertEqual(feedLink.type, "application/atom+xml") +// XCTAssertEqual(feedLink.urlString, "http://daringfireball.net/feeds/main") +// } +// +// func testDaringFireballPerformance() { +// +// // 0.002 sec on my 2012 iMac +// let d = parserData("DaringFireball", "html", "http://daringfireball.net/") +// self.measure { +// let _ = RSHTMLMetadataParser.htmlMetadata(with: d) +// } +// } +// +// func testFurbo() { +// +// let d = parserData("furbo", "html", "http://furbo.org/") +// let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) +// +// XCTAssertEqual(metadata.favicons.first?.urlString, "http://furbo.org/favicon.ico") +// +// XCTAssertEqual(metadata.feedLinks.count, 1) +// +// let feedLink = metadata.feedLinks.first! +// XCTAssertEqual(feedLink.title, "Iconfactory News Feed") +// XCTAssertEqual(feedLink.type, "application/rss+xml") +// } +// +// func testFurboPerformance() { +// +// // 0.001 sec on my 2012 iMac +// let d = parserData("furbo", "html", "http://furbo.org/") +// self.measure { +// let _ = RSHTMLMetadataParser.htmlMetadata(with: d) +// } +// } +// +// func testInessential() { +// +// let d = parserData("inessential", "html", "http://inessential.com/") +// let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) +// +// XCTAssertNil(metadata.favicons.first?.urlString) +// +// XCTAssertEqual(metadata.feedLinks.count, 1) +// let feedLink = metadata.feedLinks.first! +// XCTAssertEqual(feedLink.title, "RSS") +// XCTAssertEqual(feedLink.type, "application/rss+xml") +// XCTAssertEqual(feedLink.urlString, "http://inessential.com/xml/rss.xml") +// +// XCTAssertEqual(metadata.appleTouchIcons.count, 0); +// } +// +// func testInessentialPerformance() { +// +// // 0.001 sec on my 2012 iMac +// let d = parserData("inessential", "html", "http://inessential.com/") +// self.measure { +// let _ = RSHTMLMetadataParser.htmlMetadata(with: d) +// } +// } +// +// func testCocoPerformance() { +// +// // 0.004 sec on my 2012 iMac +// let d = parserData("coco", "html", "https://www.theatlantic.com/entertainment/archive/2017/11/coco-is-among-pixars-best-movies-in-years/546695/") +// self.measure { +// let _ = RSHTMLMetadataParser.htmlMetadata(with: d) +// } +// } +// +// func testSixColors() { +// +// let d = parserData("sixcolors", "html", "http://sixcolors.com/") +// let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) +// +// XCTAssertEqual(metadata.favicons.first?.urlString, "https://sixcolors.com/images/favicon.ico") +// +// XCTAssertEqual(metadata.feedLinks.count, 1); +// let feedLink = metadata.feedLinks.first! +// XCTAssertEqual(feedLink.title, "RSS"); +// XCTAssertEqual(feedLink.type, "application/rss+xml"); +// XCTAssertEqual(feedLink.urlString, "http://feedpress.me/sixcolors"); +// +// XCTAssertEqual(metadata.appleTouchIcons.count, 6); +// let icon = metadata.appleTouchIcons[3]; +// XCTAssertEqual(icon.rel, "apple-touch-icon"); +// XCTAssertEqual(icon.sizes, "120x120"); +// XCTAssertEqual(icon.urlString, "https://sixcolors.com/apple-touch-icon-120.png"); +// } +// +// func testSixColorsPerformance() { +// +// // 0.002 sec on my 2012 iMac +// let d = parserData("sixcolors", "html", "http://sixcolors.com/") +// self.measure { +// let _ = RSHTMLMetadataParser.htmlMetadata(with: d) +// } +// } +// +// func testCocoOGImage() { +// +// let d = parserData("coco", "html", "https://www.theatlantic.com/entertainment/archive/2017/11/coco-is-among-pixars-best-movies-in-years/546695/") +// let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) +// let openGraphData = metadata.openGraphProperties +// let image = openGraphData.images.first! +// XCTAssert(image.url == "https://cdn.theatlantic.com/assets/media/img/mt/2017/11/1033101_first_full_length_trailer_arrives_pixars_coco/facebook.jpg?1511382177") +// } +// +// func testCocoTwitterImage() { +// +// let d = parserData("coco", "html", "https://www.theatlantic.com/entertainment/archive/2017/11/coco-is-among-pixars-best-movies-in-years/546695/") +// let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) +// let twitterData = metadata.twitterProperties +// let imageURL = twitterData.imageURL! +// XCTAssert(imageURL == "https://cdn.theatlantic.com/assets/media/img/mt/2017/11/1033101_first_full_length_trailer_arrives_pixars_coco/facebook.jpg?1511382177") +// } +// +// func testYouTube() { +// // YouTube is a special case — the feed links appear after the head section, in the body section. +// let d = parserData("YouTubeTheVolvoRocks", "html", "https://www.youtube.com/user/TheVolvorocks") +// let metadata = RSHTMLMetadataParser.htmlMetadata(with: d) +// +// XCTAssertEqual(metadata.feedLinks.count, 1); +// let feedLink = metadata.feedLinks.first! +// XCTAssertEqual(feedLink.title, "RSS"); +// XCTAssertEqual(feedLink.type, "application/rss+xml"); +// XCTAssertEqual(feedLink.urlString, "https://www.youtube.com/feeds/videos.xml?channel_id=UCct7QF2jcWRY6dhXWMSq9LQ"); +// } +//} diff --git a/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift b/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift index fc3af8e5e..688857de5 100644 --- a/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift @@ -7,118 +7,118 @@ // import XCTest -import Parser +import FeedParser -class JSONFeedParserTests: XCTestCase { - - func testInessentialPerformance() { - - // 0.001 sec on my 2012 iMac. - let d = parserData("inessential", "json", "http://inessential.com/") - self.measure { - let _ = try! FeedParser.parseSync(d) - } - } - - func testDaringFireballPerformance() { - - // 0.009 sec on my 2012 iMac. - let d = parserData("DaringFireball", "json", "http://daringfireball.net/") - self.measure { - let _ = try! FeedParser.parseSync(d) - } - } - - func testGettingFaviconAndIconURLs() async { - - let d = parserData("DaringFireball", "json", "http://daringfireball.net/") - let parsedFeed = try! await FeedParser.parse(d)! - - XCTAssert(parsedFeed.faviconURL == "https://daringfireball.net/graphics/favicon-64.png") - XCTAssert(parsedFeed.iconURL == "https://daringfireball.net/graphics/apple-touch-icon.png") - } - - func testAllThis() async { - - let d = parserData("allthis", "json", "http://leancrew.com/allthis/") - let parsedFeed = try! await FeedParser.parse(d)! - - XCTAssertEqual(parsedFeed.items.count, 12) - } - - func testCurt() async { - - let d = parserData("curt", "json", "http://curtclifton.net/") - let parsedFeed = try! await FeedParser.parse(d)! - - XCTAssertEqual(parsedFeed.items.count, 26) - - var didFindTwitterQuitterArticle = false - for article in parsedFeed.items { - if article.title == "Twitter Quitter" { - didFindTwitterQuitterArticle = true - XCTAssertTrue(article.contentHTML!.hasPrefix("

I’ve decided to close my Twitter account. William Van Hecke makes a convincing case")) - } - } - - XCTAssertTrue(didFindTwitterQuitterArticle) - } - - func testPixelEnvy() async { - - let d = parserData("pxlnv", "json", "http://pxlnv.com/") - let parsedFeed = try! await FeedParser.parse(d)! - XCTAssertEqual(parsedFeed.items.count, 20) - - } - - func testRose() async { - let d = parserData("rose", "json", "http://www.rosemaryorchard.com/") - let parsedFeed = try! await FeedParser.parse(d)! - XCTAssertEqual(parsedFeed.items.count, 84) - } - - func test3960() async { - let d = parserData("3960", "json", "http://journal.3960.org/") - let parsedFeed = try! await FeedParser.parse(d)! - XCTAssertEqual(parsedFeed.items.count, 20) - XCTAssertEqual(parsedFeed.language, "de-DE") - - for item in parsedFeed.items { - XCTAssertEqual(item.language, "de-DE") - } - } - - func testAuthors() async { - let d = parserData("authors", "json", "https://example.com/") - let parsedFeed = try! await FeedParser.parse(d)! - XCTAssertEqual(parsedFeed.items.count, 4) - - let rootAuthors = Set([ - ParsedAuthor(name: "Root Author 1", url: nil, avatarURL: nil, emailAddress: nil), - ParsedAuthor(name: "Root Author 2", url: nil, avatarURL: nil, emailAddress: nil) - ]) - let itemAuthors = Set([ - ParsedAuthor(name: "Item Author 1", url: nil, avatarURL: nil, emailAddress: nil), - ParsedAuthor(name: "Item Author 2", url: nil, avatarURL: nil, emailAddress: nil) - ]) - let legacyItemAuthors = Set([ - ParsedAuthor(name: "Legacy Item Author", url: nil, avatarURL: nil, emailAddress: nil) - ]) - - XCTAssertEqual(parsedFeed.authors?.count, 2) - XCTAssertEqual(parsedFeed.authors, rootAuthors) - - let noAuthorsItem = parsedFeed.items.first { $0.uniqueID == "Item without authors" }! - XCTAssertEqual(noAuthorsItem.authors, nil) - - let legacyAuthorItem = parsedFeed.items.first { $0.uniqueID == "Item with legacy author" }! - XCTAssertEqual(legacyAuthorItem.authors, legacyItemAuthors) - - let modernAuthorsItem = parsedFeed.items.first { $0.uniqueID == "Item with modern authors" }! - XCTAssertEqual(modernAuthorsItem.authors, itemAuthors) - - let bothAuthorsItem = parsedFeed.items.first { $0.uniqueID == "Item with both" }! - XCTAssertEqual(bothAuthorsItem.authors, itemAuthors) - } -} +//class JSONFeedParserTests: XCTestCase { +// +// func testInessentialPerformance() { +// +// // 0.001 sec on my 2012 iMac. +// let d = parserData("inessential", "json", "http://inessential.com/") +// self.measure { +// let _ = try! FeedParser.parseSync(d) +// } +// } +// +// func testDaringFireballPerformance() { +// +// // 0.009 sec on my 2012 iMac. +// let d = parserData("DaringFireball", "json", "http://daringfireball.net/") +// self.measure { +// let _ = try! FeedParser.parseSync(d) +// } +// } +// +// func testGettingFaviconAndIconURLs() async { +// +// let d = parserData("DaringFireball", "json", "http://daringfireball.net/") +// let parsedFeed = try! await FeedParser.parse(d)! +// +// XCTAssert(parsedFeed.faviconURL == "https://daringfireball.net/graphics/favicon-64.png") +// XCTAssert(parsedFeed.iconURL == "https://daringfireball.net/graphics/apple-touch-icon.png") +// } +// +// func testAllThis() async { +// +// let d = parserData("allthis", "json", "http://leancrew.com/allthis/") +// let parsedFeed = try! await FeedParser.parse(d)! +// +// XCTAssertEqual(parsedFeed.items.count, 12) +// } +// +// func testCurt() async { +// +// let d = parserData("curt", "json", "http://curtclifton.net/") +// let parsedFeed = try! await FeedParser.parse(d)! +// +// XCTAssertEqual(parsedFeed.items.count, 26) +// +// var didFindTwitterQuitterArticle = false +// for article in parsedFeed.items { +// if article.title == "Twitter Quitter" { +// didFindTwitterQuitterArticle = true +// XCTAssertTrue(article.contentHTML!.hasPrefix("

I’ve decided to close my Twitter account. William Van Hecke makes a convincing case")) +// } +// } +// +// XCTAssertTrue(didFindTwitterQuitterArticle) +// } +// +// func testPixelEnvy() async { +// +// let d = parserData("pxlnv", "json", "http://pxlnv.com/") +// let parsedFeed = try! await FeedParser.parse(d)! +// XCTAssertEqual(parsedFeed.items.count, 20) +// +// } +// +// func testRose() async { +// let d = parserData("rose", "json", "http://www.rosemaryorchard.com/") +// let parsedFeed = try! await FeedParser.parse(d)! +// XCTAssertEqual(parsedFeed.items.count, 84) +// } +// +// func test3960() async { +// let d = parserData("3960", "json", "http://journal.3960.org/") +// let parsedFeed = try! await FeedParser.parse(d)! +// XCTAssertEqual(parsedFeed.items.count, 20) +// XCTAssertEqual(parsedFeed.language, "de-DE") +// +// for item in parsedFeed.items { +// XCTAssertEqual(item.language, "de-DE") +// } +// } +// +// func testAuthors() async { +// let d = parserData("authors", "json", "https://example.com/") +// let parsedFeed = try! await FeedParser.parse(d)! +// XCTAssertEqual(parsedFeed.items.count, 4) +// +// let rootAuthors = Set([ +// ParsedAuthor(name: "Root Author 1", url: nil, avatarURL: nil, emailAddress: nil), +// ParsedAuthor(name: "Root Author 2", url: nil, avatarURL: nil, emailAddress: nil) +// ]) +// let itemAuthors = Set([ +// ParsedAuthor(name: "Item Author 1", url: nil, avatarURL: nil, emailAddress: nil), +// ParsedAuthor(name: "Item Author 2", url: nil, avatarURL: nil, emailAddress: nil) +// ]) +// let legacyItemAuthors = Set([ +// ParsedAuthor(name: "Legacy Item Author", url: nil, avatarURL: nil, emailAddress: nil) +// ]) +// +// XCTAssertEqual(parsedFeed.authors?.count, 2) +// XCTAssertEqual(parsedFeed.authors, rootAuthors) +// +// let noAuthorsItem = parsedFeed.items.first { $0.uniqueID == "Item without authors" }! +// XCTAssertEqual(noAuthorsItem.authors, nil) +// +// let legacyAuthorItem = parsedFeed.items.first { $0.uniqueID == "Item with legacy author" }! +// XCTAssertEqual(legacyAuthorItem.authors, legacyItemAuthors) +// +// let modernAuthorsItem = parsedFeed.items.first { $0.uniqueID == "Item with modern authors" }! +// XCTAssertEqual(modernAuthorsItem.authors, itemAuthors) +// +// let bothAuthorsItem = parsedFeed.items.first { $0.uniqueID == "Item with both" }! +// XCTAssertEqual(bothAuthorsItem.authors, itemAuthors) +// } +//} diff --git a/Modules/Parser/Tests/FeedParserTests/ParserTests.swift b/Modules/Parser/Tests/FeedParserTests/ParserTests.swift index e00240408..814773283 100644 --- a/Modules/Parser/Tests/FeedParserTests/ParserTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/ParserTests.swift @@ -1,5 +1,5 @@ import XCTest -@testable import Parser +import FeedParser final class ParserTests: XCTestCase { func testExample() throws { diff --git a/Modules/Parser/Tests/FeedParserTests/RSSInJSONParserTests.swift b/Modules/Parser/Tests/FeedParserTests/RSSInJSONParserTests.swift index cbfce4d13..df6bef373 100644 --- a/Modules/Parser/Tests/FeedParserTests/RSSInJSONParserTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/RSSInJSONParserTests.swift @@ -7,22 +7,22 @@ // import XCTest -import Parser +import FeedParser -class RSSInJSONParserTests: XCTestCase { - - func testScriptingNewsPerformance() { - - // 0.003 sec on my 2012 iMac. - let d = parserData("ScriptingNews", "json", "http://scripting.com/") - self.measure { - let _ = try! FeedParser.parseSync(d) - } - } - - func testFeedLanguage() { - let d = parserData("ScriptingNews", "json", "http://scripting.com/") - let parsedFeed = try! FeedParser.parseSync(d)! - XCTAssertEqual(parsedFeed.language, "en-us") - } -} +//class RSSInJSONParserTests: XCTestCase { +// +// func testScriptingNewsPerformance() { +// +// // 0.003 sec on my 2012 iMac. +// let d = parserData("ScriptingNews", "json", "http://scripting.com/") +// self.measure { +// let _ = try! FeedParser.parseSync(d) +// } +// } +// +// func testFeedLanguage() { +// let d = parserData("ScriptingNews", "json", "http://scripting.com/") +// let parsedFeed = try! FeedParser.parseSync(d)! +// XCTAssertEqual(parsedFeed.language, "en-us") +// } +//} diff --git a/Modules/Parser/Tests/FeedParserTests/RSSParserTests.swift b/Modules/Parser/Tests/FeedParserTests/RSSParserTests.swift index c60229ca3..4dea40bee 100644 --- a/Modules/Parser/Tests/FeedParserTests/RSSParserTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/RSSParserTests.swift @@ -7,7 +7,7 @@ // import XCTest -import Parser +import FeedParser class RSSParserTests: XCTestCase { @@ -17,7 +17,7 @@ class RSSParserTests: XCTestCase { // 0.002 2022 Mac Studio let d = parserData("scriptingNews", "rss", "http://scripting.com/") self.measure { - let _ = try! FeedParser.parseSync(d) + let _ = try! FeedParser.parse(d) } } @@ -27,7 +27,7 @@ class RSSParserTests: XCTestCase { // 0.001 2022 Mac Studio let d = parserData("KatieFloyd", "rss", "http://katiefloyd.com/") self.measure { - let _ = try! FeedParser.parseSync(d) + let _ = try! FeedParser.parse(d) } } @@ -37,7 +37,7 @@ class RSSParserTests: XCTestCase { // 0.0004 2022 Mac Studio let d = parserData("EMarley", "rss", "https://medium.com/@emarley") self.measure { - let _ = try! FeedParser.parseSync(d) + let _ = try! FeedParser.parse(d) } } @@ -47,21 +47,23 @@ class RSSParserTests: XCTestCase { // 0.0006 2022 Mac Studio let d = parserData("manton", "rss", "http://manton.org/") self.measure { - let _ = try! FeedParser.parseSync(d) + let _ = try! FeedParser.parse(d) } } func testNatashaTheRobot() async { let d = parserData("natasha", "xml", "https://www.natashatherobot.com/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! XCTAssertEqual(parsedFeed.items.count, 10) } func testTheOmniShowAttachments() async { let d = parserData("theomnishow", "rss", "https://theomnishow.omnigroup.com/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) for article in parsedFeed.items { XCTAssertNotNil(article.attachments) @@ -78,7 +80,9 @@ class RSSParserTests: XCTestCase { func testTheOmniShowUniqueIDs() async { let d = parserData("theomnishow", "rss", "https://theomnishow.omnigroup.com/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) for article in parsedFeed.items { XCTAssertNotNil(article.uniqueID) @@ -91,7 +95,7 @@ class RSSParserTests: XCTestCase { // Macworld’s feed doesn’t have guids, so they should be calculated unique IDs. let d = parserData("macworld", "rss", "https://www.macworld.com/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! for article in parsedFeed.items { XCTAssertNotNil(article.uniqueID) @@ -104,7 +108,9 @@ class RSSParserTests: XCTestCase { // Macworld uses names instead of email addresses (despite the RSS spec saying they should be email addresses). let d = parserData("macworld", "rss", "https://www.macworld.com/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) for article in parsedFeed.items { @@ -123,7 +129,9 @@ class RSSParserTests: XCTestCase { // detect this situation, and every article in the feed should have a permalink. let d = parserData("monkeydom", "rss", "https://coding.monkeydom.de/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) for article in parsedFeed.items { XCTAssertNil(article.url) @@ -136,7 +144,9 @@ class RSSParserTests: XCTestCase { // https://github.com/brentsimmons/NetNewsWire/issues/529 let d = parserData("atp", "rss", "http://atp.fm/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) for article in parsedFeed.items { XCTAssertNotNil(article.contentHTML) @@ -145,7 +155,10 @@ class RSSParserTests: XCTestCase { func testFeedKnownToHaveGuidsThatArentPermalinks() async { let d = parserData("livemint", "xml", "https://www.livemint.com/rss/news") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) + for article in parsedFeed.items { XCTAssertNil(article.url) } @@ -155,7 +168,10 @@ class RSSParserTests: XCTestCase { // This feed uses atom authors, and we don’t want author/title to be used as item/title. // https://github.com/brentsimmons/NetNewsWire/issues/943 let d = parserData("cloudblog", "rss", "https://cloudblog.withgoogle.com/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) + for article in parsedFeed.items { XCTAssertNotEqual(article.title, "Product Manager, Office of the CTO") XCTAssertNotEqual(article.title, "Developer Programs Engineer") @@ -167,26 +183,29 @@ class RSSParserTests: XCTestCase { // This invalid feed has elements inside s. // 17 Jan 2021 bug report — we’re not parsing titles in this feed. let d = parserData("aktuality", "rss", "https://www.aktuality.sk/") - let parsedFeed = try! await FeedParser.parse(d)! - for article in parsedFeed.items { + let parsedFeed = try! FeedParser.parse(d)! + + XCTAssertTrue(parsedFeed.items.count > 0) + + for article in parsedFeed.items { XCTAssertNotNil(article.title) } } func testFeedLanguage() async { let d = parserData("manton", "rss", "http://manton.org/") - let parsedFeed = try! await FeedParser.parse(d)! + let parsedFeed = try! FeedParser.parse(d)! XCTAssertEqual(parsedFeed.language, "en-US") } -// func testFeedWithGB2312Encoding() { -// // This feed has an encoding we don’t run into very often. -// // https://github.com/Ranchero-Software/NetNewsWire/issues/1477 -// let d = parserData("kc0011", "rss", "http://kc0011.net/") -// let parsedFeed = try! FeedParser.parse(d)! -// XCTAssert(parsedFeed.items.count > 0) -// for article in parsedFeed.items { -// XCTAssertNotNil(article.contentHTML) -// } -// } + func testFeedWithGB2312Encoding() { + // This feed has an encoding we don’t run into very often. + // https://github.com/Ranchero-Software/NetNewsWire/issues/1477 + let d = parserData("kc0011", "rss", "http://kc0011.net/") + let parsedFeed = try! FeedParser.parse(d)! + XCTAssert(parsedFeed.items.count > 0) + for article in parsedFeed.items { + XCTAssertNotNil(article.contentHTML) + } + } }