Get AtomParserTests running and passing.

This commit is contained in:
Brent Simmons 2024-09-14 15:03:34 -07:00
parent e1f3da7b09
commit 96cbc51d26
4 changed files with 102 additions and 102 deletions

View File

@ -40,11 +40,11 @@ public struct FeedParser {
case .rss: case .rss:
let feed = RSSParser.parsedFeed(with: parserData) let feed = RSSParser.parsedFeed(with: parserData)
return RSSFeedTransformer.parsedFeed(with: feed) return RSSFeedTransformer.parsedFeed(with: feed, feedType: .rss)
case .atom: case .atom:
let feed = AtomParser.parsedFeed(with: parserData) let feed = AtomParser.parsedFeed(with: parserData)
return RSSFeedTransformer.parsedFeed(with: feed) return RSSFeedTransformer.parsedFeed(with: feed, feedType: .atom)
case .unknown, .notAFeed: case .unknown, .notAFeed:
return nil return nil

View File

@ -35,6 +35,6 @@ final class RSSAuthor {
func isEmpty() -> Bool { func isEmpty() -> Bool {
name != nil || url != nil || avatarURL != nil || emailAddress != nil name == nil && url == nil && avatarURL == nil && emailAddress == nil
} }
} }

View File

@ -11,10 +11,10 @@ import Foundation
struct RSSFeedTransformer { struct RSSFeedTransformer {
/// Turn an internal RSSFeed into a public ParsedFeed. /// Turn an internal RSSFeed into a public ParsedFeed.
static func parsedFeed(with rssFeed: RSSFeed) -> ParsedFeed { static func parsedFeed(with feed: RSSFeed, feedType: FeedType) -> ParsedFeed {
let items = parsedItems(rssFeed.articles) let items = parsedItems(feed.articles)
return ParsedFeed(type: .rss, title: rssFeed.title, homePageURL: rssFeed.link, feedURL: rssFeed.urlString, language: rssFeed.language, feedDescription: nil, nextURL: nil, iconURL: nil, faviconURL: nil, authors: nil, expired: false, hubs: nil, items: items) return ParsedFeed(type: feedType, title: feed.title, homePageURL: feed.link, feedURL: feed.urlString, language: feed.language, feedDescription: nil, nextURL: nil, iconURL: nil, faviconURL: nil, authors: nil, expired: false, hubs: nil, items: items)
} }
} }

View File

@ -9,99 +9,99 @@
import XCTest import XCTest
import FeedParser import FeedParser
//class AtomParserTests: XCTestCase { class AtomParserTests: XCTestCase {
//
// func testDaringFireballPerformance() { func testDaringFireballPerformance() {
//
// // 0.009 sec on my 2012 iMac. // 0.009 sec on my 2012 iMac.
// let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //Its actually an Atom feed let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //Its actually an Atom feed
// self.measure { self.measure {
// let _ = try! FeedParser.parseSync(d) let _ = try! FeedParser.parse(d)
// } }
// } }
//
// func testAllThisPerformance() { func testAllThisPerformance() {
//
// // 0.003 sec on my 2012 iMac. // 0.003 sec on my 2012 iMac.
// let d = parserData("allthis", "atom", "http://leancrew.com/all-this") let d = parserData("allthis", "atom", "http://leancrew.com/all-this")
// self.measure { self.measure {
// let _ = try! FeedParser.parseSync(d) let _ = try! FeedParser.parse(d)
// } }
// } }
//
// func testGettingHomePageLink() async { func testGettingHomePageLink() {
//
// let d = parserData("allthis", "atom", "http://leancrew.com/all-this") let d = parserData("allthis", "atom", "http://leancrew.com/all-this")
// let parsedFeed = try! await FeedParser.parse(d)! let parsedFeed = try! FeedParser.parse(d)!
//
// XCTAssertTrue(parsedFeed.homePageURL == "http://leancrew.com/all-this") XCTAssertTrue(parsedFeed.homePageURL == "http://leancrew.com/all-this")
// } }
//
// func testDaringFireball() async { func testDaringFireball() {
//
// let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //Its actually an Atom feed let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //Its actually an Atom feed
// let parsedFeed = try! await FeedParser.parse(d)! let parsedFeed = try! FeedParser.parse(d)!
//
// for article in parsedFeed.items { for article in parsedFeed.items {
//
// XCTAssertNotNil(article.url) XCTAssertNotNil(article.url)
//
// XCTAssertTrue(article.uniqueID.hasPrefix("tag:daringfireball.net,2017:/")) XCTAssertTrue(article.uniqueID.hasPrefix("tag:daringfireball.net,2017:/"))
//
// XCTAssertEqual(article.authors!.count, 1) // TODO: parse Atom authors XCTAssertEqual(article.authors!.count, 1) // TODO: parse Atom authors
// let author = article.authors!.first! let author = article.authors!.first!
// if author.name == "Daring Fireball Department of Commerce" { if author.name == "Daring Fireball Department of Commerce" {
// XCTAssertNil(author.url) XCTAssertNil(author.url)
// } }
// else { else {
// XCTAssertEqual(author.name, "John Gruber") XCTAssertEqual(author.name, "John Gruber")
// XCTAssertEqual(author.url, "http://daringfireball.net/") XCTAssertEqual(author.url, "http://daringfireball.net/")
// } }
//
// XCTAssertNotNil(article.datePublished) XCTAssertNotNil(article.datePublished)
// XCTAssert(article.attachments == nil) XCTAssert(article.attachments == nil)
//
// XCTAssertEqual(article.language, "en") XCTAssertEqual(article.language, "en")
// } }
// } }
//
// func test4fsodonlineAttachments() async { func test4fsodonlineAttachments() {
//
// // Thanks to Marco for finding me some Atom podcast feeds. Apparently theyre super-rare. // Thanks to Marco for finding me some Atom podcast feeds. Apparently theyre super-rare.
//
// let d = parserData("4fsodonline", "atom", "http://4fsodonline.blogspot.com/") let d = parserData("4fsodonline", "atom", "http://4fsodonline.blogspot.com/")
// let parsedFeed = try! await FeedParser.parse(d)! let parsedFeed = try! FeedParser.parse(d)!
//
// for article in parsedFeed.items { for article in parsedFeed.items {
//
// XCTAssertTrue(article.attachments!.count > 0) XCTAssertTrue(article.attachments!.count > 0)
// let attachment = article.attachments!.first! let attachment = article.attachments!.first!
//
// XCTAssertTrue(attachment.url.hasPrefix("http://www.blogger.com/video-play.mp4?")) XCTAssertTrue(attachment.url.hasPrefix("http://www.blogger.com/video-play.mp4?"))
// XCTAssertNil(attachment.sizeInBytes) XCTAssertNil(attachment.sizeInBytes)
// XCTAssertEqual(attachment.mimeType!, "video/mp4") XCTAssertEqual(attachment.mimeType!, "video/mp4")
// } }
// } }
//
// func testExpertOpinionENTAttachments() async { func testExpertOpinionENTAttachments() {
//
// // Another from Marco. // Another from Marco.
//
// let d = parserData("expertopinionent", "atom", "http://expertopinionent.typepad.com/my-blog/") let d = parserData("expertopinionent", "atom", "http://expertopinionent.typepad.com/my-blog/")
// let parsedFeed = try! await FeedParser.parse(d)! let parsedFeed = try! FeedParser.parse(d)!
//
// for article in parsedFeed.items { for article in parsedFeed.items {
//
// guard let attachments = article.attachments else { guard let attachments = article.attachments else {
// continue continue
// } }
//
// XCTAssertEqual(attachments.count, 1) XCTAssertEqual(attachments.count, 1)
// let attachment = attachments.first! let attachment = attachments.first!
//
// XCTAssertTrue(attachment.url.hasSuffix(".mp3")) XCTAssertTrue(attachment.url.hasSuffix(".mp3"))
// XCTAssertNil(attachment.sizeInBytes) XCTAssertNil(attachment.sizeInBytes)
// XCTAssertEqual(attachment.mimeType!, "audio/mpeg") XCTAssertEqual(attachment.mimeType!, "audio/mpeg")
// } }
// } }
//} }