session-ios/SessionUtilitiesKit/General/Timer+MainThread.swift
Morgan Pretty a41f1c1366 Fixed the broken tests
Cleaned up the Dependencies so that tests can run synchronously without having to custom set queues as much
Sorted out the crypto and network dependencies to avoid needing weird dependency inheritance
Fixed the flaky tests so they are no longer flaky
Fixed some unexpected JobRunner behaviours
Updated the CI config to use a local build directory for derivedData (now works with build tweaks)
2023-08-01 14:27:41 +10:00

28 lines
1 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
extension Timer {
@discardableResult public static func scheduledTimerOnMainThread(
withTimeInterval timeInterval: TimeInterval,
repeats: Bool = false,
using dependencies: Dependencies = Dependencies(),
block: @escaping (Timer) -> Void
) -> Timer {
let timer = Timer(timeInterval: timeInterval, repeats: repeats, block: block)
// If we are forcing synchrnonous execution (ie. running unit tests) then ceil the
// timeInterval for execution and append it to the execution set so the test can
// trigger the logic in a synchronous way)
guard !dependencies.forceSynchronous else {
dependencies.asyncExecutions.appendTo(Int(ceil(dependencies.dateNow.timeIntervalSince1970 + timeInterval))) {
block(timer)
}
return timer
}
RunLoop.main.add(timer, forMode: .common)
return timer
}
}