pass 1
This commit is contained in:
33
GazeTests/Helpers/MockTimeProvider.swift
Normal file
33
GazeTests/Helpers/MockTimeProvider.swift
Normal file
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// MockTimeProvider.swift
|
||||
// GazeTests
|
||||
//
|
||||
// Mock time provider for deterministic timer testing.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
@testable import Gaze
|
||||
|
||||
/// A mock time provider for deterministic testing.
|
||||
/// Allows manual control over time in tests.
|
||||
final class MockTimeProvider: TimeProviding, @unchecked Sendable {
|
||||
private var currentTime: Date
|
||||
|
||||
init(startTime: Date = Date()) {
|
||||
self.currentTime = startTime
|
||||
}
|
||||
|
||||
func now() -> Date {
|
||||
currentTime
|
||||
}
|
||||
|
||||
/// Advances time by the specified interval
|
||||
func advance(by interval: TimeInterval) {
|
||||
currentTime = currentTime.addingTimeInterval(interval)
|
||||
}
|
||||
|
||||
/// Sets the current time to a specific date
|
||||
func setTime(_ date: Date) {
|
||||
currentTime = date
|
||||
}
|
||||
}
|
||||
65
GazeTests/Helpers/TestServiceContainer.swift
Normal file
65
GazeTests/Helpers/TestServiceContainer.swift
Normal file
@@ -0,0 +1,65 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user