NetNewsWire/Frameworks/RSParser/RSParserTests/FeedParserTypeTests.swift

200 lines
4.4 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// FeedParserTypeTests.swift
// RSParser
//
// Created by Brent Simmons on 6/25/17.
// Copyright © 2017 Ranchero Software, LLC. All rights reserved.
//
import XCTest
import RSParser
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)
}
// MARK: Atom
func testDaringFireballAtomType() {
// File extension is .rss, but its 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)
}
// 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)
}
// MARK: Unknown
func testPartialAllThisUnknownFeedType() {
// In the case of this feed, the partial data isnt enough to detect that its 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 bundle = Bundle(for: FeedParserTypeTests.self)
let path = bundle.path(forResource: filename, ofType: fileExtension)!
let data = try! Data(contentsOf: URL(fileURLWithPath: path))
return ParserData(url: url, data: data)
}