diff --git a/Modules/Parser/Sources/FeedParser/Feeds/FeedType.swift b/Modules/Parser/Sources/FeedParser/Feeds/FeedType.swift index 4e4bf9960..aa718a336 100644 --- a/Modules/Parser/Sources/FeedParser/Feeds/FeedType.swift +++ b/Modules/Parser/Sources/FeedParser/Feeds/FeedType.swift @@ -10,7 +10,7 @@ import Foundation import SAX public enum FeedType: Sendable { - + case rss case atom case jsonFeed @@ -42,6 +42,9 @@ public enum FeedType: Sendable { if isProbablyRSS(cCharPointer, count) { return .rss } + if isProbablyAtom(cCharPointer, count) { + return .atom + } return .unknown } @@ -82,6 +85,11 @@ private extension FeedType { return didFindString("", bytes, count) && didFindString("", bytes, count) } + static func isProbablyAtom(_ bytes: UnsafePointer, _ count: Int) -> Bool { + + didFindString(", _ bytes: UnsafePointer, _ numberOfBytes: Int) -> Bool { let foundString = strnstr(bytes, string, numberOfBytes) diff --git a/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift b/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift index dc28935ab..f81e76963 100644 --- a/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift +++ b/Modules/Parser/Tests/FeedParserTests/FeedParserTypeTests.swift @@ -114,27 +114,27 @@ class FeedParserTypeTests: XCTestCase { // MARK: Atom -// func testDaringFireballAtomType() { -// -// // File extension is .rss, but it’s 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) -// } -// -// func testRussCoxAtomType() { -// let d = parserData("russcox", "atom", "https://research.swtch.com/") -// let type = feedType(d) -// XCTAssertTrue(type == .atom) -// } -// + func testDaringFireballAtomType() { + + // File extension is .rss, but it’s really an Atom feed. + let d = parserData("DaringFireball", "rss", "http://daringfireball.net/") + let type = FeedType.feedType(d.data) + XCTAssertTrue(type == .atom) + } + + func testOneFootTsunamiAtomType() { + + let d = parserData("OneFootTsunami", "atom", "http://onefoottsunami.com/") + let type = FeedType.feedType(d.data) + XCTAssertTrue(type == .atom) + } + + func testRussCoxAtomType() { + let d = parserData("russcox", "atom", "https://research.swtch.com/") + let type = FeedType.feedType(d.data) + XCTAssertTrue(type == .atom) + } + // // MARK: RSS-in-JSON // // func testScriptingNewsJSONType() {