import Foundation import Testing @testable import NorgKit struct TaskStatusTests { @Test func parsesEveryMarker() { #expect(TaskStatus(marker: " ") == .undone) #expect(TaskStatus(marker: "x") == .done) #expect(TaskStatus(marker: "?") == .needsInput) #expect(TaskStatus(marker: "!") == .urgent) #expect(TaskStatus(marker: "+") == .recurring) #expect(TaskStatus(marker: "-") == .pending) #expect(TaskStatus(marker: "=") == .onHold) #expect(TaskStatus(marker: "_") == .cancelled) } @Test func rejectsUnknownMarker() { #expect(TaskStatus(marker: "z") == nil) } @Test func parsesEveryMarkerByte() { #expect(TaskStatus(markerByte: UInt8(ascii: " ")) == .undone) #expect(TaskStatus(markerByte: UInt8(ascii: "x")) == .done) #expect(TaskStatus(markerByte: UInt8(ascii: "?")) == .needsInput) #expect(TaskStatus(markerByte: UInt8(ascii: "!")) == .urgent) #expect(TaskStatus(markerByte: UInt8(ascii: "+")) == .recurring) #expect(TaskStatus(markerByte: UInt8(ascii: "-")) == .pending) #expect(TaskStatus(markerByte: UInt8(ascii: "=")) == .onHold) #expect(TaskStatus(markerByte: UInt8(ascii: "_")) == .cancelled) } @Test func rejectsUnknownMarkerByte() { #expect(TaskStatus(markerByte: UInt8(ascii: "z")) == nil) } @Test func idEqualsRawValue() { for status in TaskStatus.allCases { #expect(status.id == status.rawValue) } } @Test func rawValuesMatchMarkers() { #expect(TaskStatus.undone.rawValue == " ") #expect(TaskStatus.done.rawValue == "x") #expect(TaskStatus.allCases.count == 8) } @Test func roundTripsThroughJSON() throws { let data = try JSONEncoder().encode(TaskStatus.urgent) #expect(try JSONDecoder().decode(TaskStatus.self, from: data) == .urgent) } }