From 887ef8c22e2cd97818871eedc2727b02c2a1546d Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 21 Sep 2024 11:11:45 -0700 Subject: [PATCH] Make JSONFeedParserTests run. --- .../Sources/FeedParser/Feeds/FeedParser.swift | 2 +- .../FeedParserTests/JSONFeedParserTests.swift | 226 +++++++++--------- 2 files changed, 114 insertions(+), 114 deletions(-) diff --git a/Modules/Parser/Sources/FeedParser/Feeds/FeedParser.swift b/Modules/Parser/Sources/FeedParser/Feeds/FeedParser.swift index 2e60b7dad..153cf861b 100644 --- a/Modules/Parser/Sources/FeedParser/Feeds/FeedParser.swift +++ b/Modules/Parser/Sources/FeedParser/Feeds/FeedParser.swift @@ -33,7 +33,7 @@ public struct FeedParser { switch type { case .jsonFeed: - return nil // TODO: try JSONFeedParser.parse(parserData) + return try JSONFeedParser.parse(parserData) case .rssInJSON: return nil // TODO: try RSSInJSONParser.parse(parserData) diff --git a/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift b/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift index 688857de5..a315481af 100644 --- a/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/JSONFeedParserTests.swift @@ -9,116 +9,116 @@ import XCTest 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.parse(d) + } + } + + func testDaringFireballPerformance() { + + // 0.009 sec on my 2012 iMac. + let d = parserData("DaringFireball", "json", "http://daringfireball.net/") + self.measure { + let _ = try! FeedParser.parse(d) + } + } + + func testGettingFaviconAndIconURLs() async { + + let d = parserData("DaringFireball", "json", "http://daringfireball.net/") + let parsedFeed = try! 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! FeedParser.parse(d)! + + XCTAssertEqual(parsedFeed.items.count, 12) + } + + func testCurt() async { + + let d = parserData("curt", "json", "http://curtclifton.net/") + let parsedFeed = try! 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! FeedParser.parse(d)! + XCTAssertEqual(parsedFeed.items.count, 20) + + } + + func testRose() async { + let d = parserData("rose", "json", "http://www.rosemaryorchard.com/") + let parsedFeed = try! FeedParser.parse(d)! + XCTAssertEqual(parsedFeed.items.count, 84) + } + + func test3960() async { + let d = parserData("3960", "json", "http://journal.3960.org/") + let parsedFeed = try! 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! 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) + } +}