import XCTest @testable import iPX final class WidgetTests: XCTestCase { private var defaults: UserDefaults! override func setUp() { defaults = UserDefaults(suiteName: "ipx.tests.\(UUID().uuidString)") LastPlayed.defaults = defaults } func testTheWidgetReadsBackWhatTheAppWrote() { var s = Snapshot() s.unread = 7 s.title = "An Episode" s.position = 450 s.duration = 1800 s.playing = true s.save(to: defaults) XCTAssertEqual(Snapshot.load(from: defaults), s) XCTAssertEqual(s.progress, 0.25) } func testNothingWrittenYetIsAnEmptyWidget() { XCTAssertEqual(Snapshot.load(from: defaults), Snapshot()) XCTAssertNil(Snapshot().progress, "no bar without a length") } private func item(_ guid: String) -> Playback.Item { Playback.Item(url: URL(string: "https://x/media/1")!, enc: 1, feedId: "f", guid: guid, title: "T", feedTitle: "F", artwork: nil, duration: 60) } func testResumeCarriesOnFromTheLastPlace() { LastPlayed.item = item("a") LastPlayed.position = 42 LastPlayed.item = item("a") XCTAssertEqual(LastPlayed.position, 42, "loading the same episode again keeps its place") } func testAnotherEpisodeDoesNotInheritThePlace() { LastPlayed.item = item("a") LastPlayed.position = 42 LastPlayed.item = item("b") XCTAssertNil(LastPlayed.position) XCTAssertEqual(LastPlayed.item?.guid, "b") } }