Get AtomParserTests running and passing.
This commit is contained in:
parent
e1f3da7b09
commit
96cbc51d26
@ -40,11 +40,11 @@ public struct FeedParser {
|
||||
|
||||
case .rss:
|
||||
let feed = RSSParser.parsedFeed(with: parserData)
|
||||
return RSSFeedTransformer.parsedFeed(with: feed)
|
||||
return RSSFeedTransformer.parsedFeed(with: feed, feedType: .rss)
|
||||
|
||||
case .atom:
|
||||
let feed = AtomParser.parsedFeed(with: parserData)
|
||||
return RSSFeedTransformer.parsedFeed(with: feed)
|
||||
return RSSFeedTransformer.parsedFeed(with: feed, feedType: .atom)
|
||||
|
||||
case .unknown, .notAFeed:
|
||||
return nil
|
||||
|
@ -35,6 +35,6 @@ final class RSSAuthor {
|
||||
|
||||
func isEmpty() -> Bool {
|
||||
|
||||
name != nil || url != nil || avatarURL != nil || emailAddress != nil
|
||||
name == nil && url == nil && avatarURL == nil && emailAddress == nil
|
||||
}
|
||||
}
|
||||
|
@ -11,10 +11,10 @@ import Foundation
|
||||
struct RSSFeedTransformer {
|
||||
|
||||
/// 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)
|
||||
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)
|
||||
let items = parsedItems(feed.articles)
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,99 +9,99 @@
|
||||
import XCTest
|
||||
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.parse(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.parse(d)
|
||||
}
|
||||
}
|
||||
|
||||
func testGettingHomePageLink() {
|
||||
|
||||
let d = parserData("allthis", "atom", "http://leancrew.com/all-this")
|
||||
let parsedFeed = try! FeedParser.parse(d)!
|
||||
|
||||
XCTAssertTrue(parsedFeed.homePageURL == "http://leancrew.com/all-this")
|
||||
}
|
||||
|
||||
func testDaringFireball() {
|
||||
|
||||
let d = parserData("DaringFireball", "atom", "http://daringfireball.net/") //It’s actually an Atom feed
|
||||
let parsedFeed = try! 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() {
|
||||
|
||||
// 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! 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() {
|
||||
|
||||
// Another from Marco.
|
||||
|
||||
let d = parserData("expertopinionent", "atom", "http://expertopinionent.typepad.com/my-blog/")
|
||||
let parsedFeed = try! 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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user