PuzzleCatalogTests.swift (1792B)
1 import Testing 2 3 @testable import Crossmate 4 5 @Suite("PuzzleCatalog") 6 struct PuzzleCatalogTests { 7 @Test("Puzzle bundles are discoverable") 8 func puzzleBundlesAreDiscoverable() { 9 let bundles = PuzzleCatalog.bundles() 10 11 #expect(bundles.count == 1) 12 13 let starter = bundles.first { $0.name == "Crossmate Starter" } 14 #expect(starter != nil) 15 16 let puzzles = starter?.puzzles ?? [] 17 #expect(puzzles.count == 10) 18 #expect(puzzles.map(\.title).contains("Crossmate Starter #1")) 19 #expect(puzzles.map(\.title).contains("Crossmate Starter #10")) 20 #expect(puzzles.allSatisfy { $0.publisher == "Michael Camilleri" }) 21 #expect(puzzles.allSatisfy { $0.blockCells.count == $0.gridWidth * $0.gridHeight }) 22 #expect(puzzles.map(\.id) == [ 23 "cm-starter-0001", 24 "cm-starter-0002", 25 "cm-starter-0003", 26 "cm-starter-0004", 27 "cm-starter-0005", 28 "cm-starter-0006", 29 "cm-starter-0007", 30 "cm-starter-0008", 31 "cm-starter-0009", 32 "cm-starter-0010" 33 ]) 34 35 // The catalog holds no source text; it is read from the `.xd` 36 // resource on demand. 37 let firstSource = try? puzzles.first?.loadSource() 38 #expect(firstSource?.isEmpty == false) 39 } 40 41 @Test("The debug bundle is excluded from the bundles") 42 func debugBundleIsExcludedFromBundles() { 43 #expect(PuzzleCatalog.bundles().allSatisfy { $0.id != "debug" }) 44 } 45 46 @Test("Debug puzzle resources are discoverable") 47 func debugPuzzleResourcesAreDiscoverable() { 48 let puzzles = PuzzleCatalog.debugPuzzles() 49 50 #expect(puzzles.count == 3) 51 #expect(puzzles.map(\.id) == ["garden", "morning", "sample"]) 52 } 53 }