66 lines
1.8 KiB
Swift
66 lines
1.8 KiB
Swift
//
|
|
// TestServiceContainer.swift
|
|
// GazeTests
|
|
//
|
|
// Test-specific dependency injection container.
|
|
//
|
|
|
|
import Foundation
|
|
@testable import Gaze
|
|
|
|
/// A dependency injection container configured for testing.
|
|
/// Provides injectable dependencies and test-specific utilities.
|
|
@MainActor
|
|
final class TestServiceContainer {
|
|
/// The settings manager instance
|
|
private(set) var settingsManager: any SettingsProviding
|
|
|
|
/// The timer engine instance
|
|
private var _timerEngine: TimerEngine?
|
|
|
|
/// Time provider for deterministic testing
|
|
let timeProvider: TimeProviding
|
|
|
|
/// Creates a test container with default mock settings
|
|
convenience init() {
|
|
self.init(settings: AppSettings())
|
|
}
|
|
|
|
/// Creates a test container with custom settings
|
|
init(settings: AppSettings) {
|
|
self.settingsManager = EnhancedMockSettingsManager(settings: settings)
|
|
self.timeProvider = MockTimeProvider()
|
|
}
|
|
|
|
/// Creates a test container with a custom settings manager
|
|
init(settingsManager: any SettingsProviding) {
|
|
self.settingsManager = settingsManager
|
|
self.timeProvider = MockTimeProvider()
|
|
}
|
|
|
|
/// Gets or creates the timer engine for testing
|
|
var timerEngine: TimerEngine {
|
|
if let engine = _timerEngine {
|
|
return engine
|
|
}
|
|
let engine = TimerEngine(
|
|
settingsManager: settingsManager,
|
|
enforceModeService: nil,
|
|
timeProvider: timeProvider
|
|
)
|
|
_timerEngine = engine
|
|
return engine
|
|
}
|
|
|
|
/// Sets a custom timer engine
|
|
func setTimerEngine(_ engine: TimerEngine) {
|
|
_timerEngine = engine
|
|
}
|
|
|
|
/// Resets the container for test isolation
|
|
func reset() {
|
|
_timerEngine?.stop()
|
|
_timerEngine = nil
|
|
}
|
|
}
|