2023-05-22 17:27:39 +02:00
|
|
|
//
|
2024-09-06 16:34:30 +03:00
|
|
|
// Copyright 2023, 2024 New Vector Ltd.
|
2023-05-22 17:27:39 +02:00
|
|
|
//
|
2025-01-06 11:27:37 +01:00
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
|
|
// Please see LICENSE files in the repository root for full details.
|
2023-05-22 17:27:39 +02:00
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
import XCTest
|
|
|
|
|
|
|
|
@testable import ElementX
|
|
|
|
|
|
|
|
class ExpiringTaskRunnerTests: XCTestCase {
|
|
|
|
enum ExpiringTaskTestError: Error {
|
|
|
|
case failed
|
|
|
|
}
|
|
|
|
|
|
|
|
func testSuccedingTask() async {
|
|
|
|
let runner = ExpiringTaskRunner {
|
|
|
|
try? await Task.sleep(for: .milliseconds(300))
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
let result = try? await runner.run(timeout: .seconds(1))
|
|
|
|
XCTAssertEqual(result, true)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testFailingTask() async {
|
|
|
|
let runner: ExpiringTaskRunner<Result<String, ExpiringTaskTestError>> = ExpiringTaskRunner {
|
|
|
|
try? await Task.sleep(for: .milliseconds(300))
|
|
|
|
return .failure(.failed)
|
|
|
|
}
|
|
|
|
|
|
|
|
do {
|
2023-05-29 11:21:01 +03:00
|
|
|
_ = try await runner.run(timeout: .seconds(1))
|
2023-05-22 17:27:39 +02:00
|
|
|
} catch {
|
|
|
|
XCTAssertEqual(error as? ExpiringTaskTestError, ExpiringTaskTestError.failed)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func testTimeoutTask() async {
|
|
|
|
let runner = ExpiringTaskRunner {
|
|
|
|
try? await Task.sleep(for: .milliseconds(300))
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
do {
|
2023-05-29 11:21:01 +03:00
|
|
|
_ = try await runner.run(timeout: .milliseconds(100))
|
2023-05-22 17:27:39 +02:00
|
|
|
} catch {
|
|
|
|
XCTAssertEqual(error as? ExpiringTaskRunnerError, ExpiringTaskRunnerError.timeout)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|