Files
divkit/client/ios/DivKitTests/Timers/Utils.swift
T
babaevmm 956c055cd8 update swiftformat, add organize rule
commit_hash:0f7ba811b37db6d2a9fc05efe5f94502feda4856
2025-08-04 16:24:48 +03:00

113 lines
2.1 KiB
Swift

@testable import DivKit
import Foundation
import VGSL
import XCTest
public final class TestTimer: TimerType {
public let timeInterval: TimeInterval
public var fireDate: Date
public private(set) var isValid = true
private let block: () -> Void
private let repeating: Bool
public init(
fireDate: Date = .distantFuture,
timeInterval: TimeInterval,
block: @escaping () -> Void,
repeating: Bool
) {
self.fireDate = fireDate
self.timeInterval = timeInterval
self.block = block
self.repeating = repeating
}
public func fire() {
guard isValid else {
XCTFail("Timer is not valid.")
return
}
block()
if !repeating {
invalidate()
}
}
public func invalidate() {
isValid = false
}
}
public final class TestTimerScheduler: Scheduling {
public var timers: [TestTimer] = []
public func makeTimer(fireDate: Date, handler: @escaping () -> Void) -> TimerType {
let timer = TestTimer(
fireDate: fireDate,
timeInterval: 0,
block: handler,
repeating: false
)
timers.append(timer)
return timer
}
public func makeTimer(
delay: TimeInterval,
handler: @escaping () -> Void
) -> TimerType {
makeTimer(
timeInterval: delay,
handler: handler,
repeating: false
)
}
public func makeRepeatingTimer(
interval: TimeInterval,
handler: @escaping () -> Void
) -> TimerType {
makeTimer(
timeInterval: interval,
handler: handler,
repeating: true
)
}
private func makeTimer(
timeInterval: TimeInterval,
handler: @escaping () -> Void,
repeating: Bool
) -> TimerType {
let timer = TestTimer(
timeInterval: timeInterval,
block: handler,
repeating: repeating
)
timers.append(timer)
return timer
}
}
public final class TestTimeMeasuring: TimeMeasuring {
var passedTime: TimeInterval = 0
var started = 0
var paused = 0
public func start() {
started += 1
paused = 0
}
public func pause() {
paused += 1
}
public func resume() {}
public func passedInterval() -> TimeInterval {
passedTime
}
}