2017-06-26 02:15:47 +02:00
|
|
|
|
//
|
|
|
|
|
// 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/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .notAFeed)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testFurboHTMLType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("furbo", "html", "http://furbo.org/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .notAFeed)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testInessentialHTMLType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("inessential", "html", "http://inessential.com/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .notAFeed)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testSixColorsHTMLType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("sixcolors", "html", "https://sixcolors.com/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .notAFeed)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: RSS
|
|
|
|
|
|
|
|
|
|
func testEMarleyRSSType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("EMarley", "rss", "https://medium.com/@emarley")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .rss)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testScriptingNewsRSSType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("scriptingNews", "rss", "http://scripting.com/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .rss)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testKatieFloydRSSType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("KatieFloyd", "rss", "https://katiefloyd.com/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .rss)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testMantonRSSType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("manton", "rss", "http://manton.org/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
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/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .atom)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testOneFootTsunamiAtomType() {
|
|
|
|
|
|
|
|
|
|
let d = parserData("OneFootTsunami", "atom", "http://onefoottsunami.com/")
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let type = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
XCTAssertTrue(type == .atom)
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-27 04:37:30 +02:00
|
|
|
|
// 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)
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-26 02:15:47 +02:00
|
|
|
|
// MARK: Performance
|
|
|
|
|
|
|
|
|
|
func testFeedTypePerformance() {
|
|
|
|
|
|
2017-06-27 04:37:30 +02:00
|
|
|
|
// 0.000 on my 2012 iMac.
|
2017-06-26 02:15:47 +02:00
|
|
|
|
|
|
|
|
|
let d = parserData("EMarley", "rss", "https://medium.com/@emarley")
|
|
|
|
|
self.measure {
|
2017-06-27 04:37:30 +02:00
|
|
|
|
let _ = feedType(d)
|
2017-06-26 02:15:47 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2017-06-27 04:37:30 +02:00
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-06-26 02:15:47 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
}
|