Files
iccery-v2-mac/Tests/ICCeryCoreTests/TestAppEnvironment.swift
gronodandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 150d094632 test(m9): convert pure core test suites from Swift Testing to XCTest
Slice 2 (Phase 1a) of the M9 Monterey retarget. Converts all pure Core
suites (argv builders, CGATS/CUPS/profcheck/gamut-mesh parsers, colour
math, file/artefact helpers, classifiers) to XCTestCase, and adds the
shared assertAsyncThrows helper for the async-throws sites that Slice 3
will convert.

Deferred to Slice 3 (kept on Swift Testing in mixed files):
ProcessManagerTests, ArgyllRunner*Tests, ProcessRunSupportTests,
store/UI suites, and the runner suites embedded in TargenTests /
PrinttargTests / ProcessManagerTests.

Also qualifies six bare `throw .case` expressions in CGATSParser with
CGATSParseError — they only compiled under typed throws, which Slice 1
demoted to untyped `throws`; without this the ICCeryCore target fails to
build and no test gate can run.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-11 20:43:42 +01:00

62 lines
2.3 KiB
Swift

import Foundation
@testable import ICCeryCore
@testable import ICCery
/// Shared app-test dependency factory (issue #82).
///
/// Every store is pointed at a unique temporary directory so tests never
/// read or write the user's real Application Support tree, and a fresh
/// `ProcessManager` keeps child-process state isolated per test. The
/// global process environment is never mutated.
struct TestAppEnvironment {
/// Root temp directory holding all per-test state files.
let root: URL
let environment: AppEnvironment
var settingsURL: URL { root.appendingPathComponent("settings.json") }
var stateURL: URL { root.appendingPathComponent("wizard_state.json") }
var historyURL: URL {
root.appendingPathComponent("verification_history.json")
}
/// Creates an isolated environment under `NSTemporaryDirectory()`.
/// Call `cleanup()` when finished.
static func make() throws -> TestAppEnvironment {
let root = FileManager.default.temporaryDirectory
.appendingPathComponent("iccery-test-env-\(UUID().uuidString)")
try FileManager.default.createDirectory(
at: root, withIntermediateDirectories: true
)
let processManager = ProcessManager()
let settingsStore = SettingsStore(
fileURL: root.appendingPathComponent("settings.json")
)
let environment = AppEnvironment(
stateStore: WizardStateStore(
fileURL: root.appendingPathComponent("wizard_state.json")
),
settingsStore: settingsStore,
presetStore: PresetStore(settingsStore: settingsStore),
runner: ArgyllRunner(
processManager: processManager,
binaryResolver: BinaryResolver(overrideDir: nil)
),
cupsService: CupsService(
processManager: processManager,
binaryDir: root.appendingPathComponent("cups-bin")
),
historyStore: VerificationHistoryStore(
url: root.appendingPathComponent("verification_history.json")
)
)
return TestAppEnvironment(root: root, environment: environment)
}
/// Removes the temporary root directory.
func cleanup() {
try? FileManager.default.removeItem(at: root)
}
}