import XCTest @testable import RSSuper final class FeedParserTests: XCTestCase { func testParsesRSS20Feed() throws { let parser = FeedParser() let result = try parser.parse( data: Data(rssSample.utf8), sourceURL: "https://example.com/rss.xml" ) XCTAssertEqual(result.feedType, .rss) XCTAssertEqual(result.feed.title, "Example Podcast") XCTAssertEqual(result.feed.subtitle, "Weekly iOS and Swift updates") XCTAssertEqual(result.feed.items.count, 2) XCTAssertEqual(result.feed.ttl, 60) let firstItem = try XCTUnwrap(result.feed.items.first) XCTAssertEqual(firstItem.title, "Episode 1") XCTAssertEqual(firstItem.author, "Host Name") XCTAssertEqual(firstItem.guid, "episode-1") XCTAssertEqual(firstItem.categories, ["Swift"]) XCTAssertEqual(firstItem.enclosure?.url, "https://example.com/audio/ep1.mp3") XCTAssertEqual(firstItem.enclosure?.type, "audio/mpeg") XCTAssertEqual(firstItem.enclosure?.length, 12345) XCTAssertEqual(firstItem.content, "
Full content for episode 1.
") } func testParsesAtom10Feed() throws { let parser = FeedParser() let result = try parser.parse( data: Data(atomSample.utf8), sourceURL: "https://example.com/atom.xml" ) XCTAssertEqual(result.feedType, .atom) XCTAssertEqual(result.feed.title, "Example Atom Feed") XCTAssertEqual(result.feed.subtitle, "Recent engineering posts") XCTAssertEqual(result.feed.link, "https://example.com") XCTAssertEqual(result.feed.items.count, 2) let firstItem = try XCTUnwrap(result.feed.items.first) XCTAssertEqual(firstItem.guid, "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a") XCTAssertEqual(firstItem.link, "https://example.com/posts/1") XCTAssertEqual(firstItem.author, "Jane Author") XCTAssertEqual(firstItem.enclosure?.url, "https://example.com/audio/post1.mp3") XCTAssertEqual(firstItem.enclosure?.type, "audio/mpeg") XCTAssertEqual(firstItem.enclosure?.length, 2048) } func testHandlesITunesNamespace() throws { let parser = FeedParser() let result = try parser.parse( data: Data(rssWithITunesSample.utf8), sourceURL: "https://example.com/itunes.xml" ) XCTAssertEqual(result.feed.subtitle, "Podcast subtitle") XCTAssertEqual(result.feed.description, "Feed-level summary") let item = try XCTUnwrap(result.feed.items.first) XCTAssertEqual(item.author, "Podcast Author") XCTAssertEqual(item.description, "Item-level summary") } func testThrowsForMalformedXML() { let parser = FeedParser() XCTAssertThrowsError( try parser.parse( data: Data("