From 11f5d1f59d0c15d5be2912842cfb83b703815fba Mon Sep 17 00:00:00 2001 From: QuentinJin Date: Sun, 26 Aug 2018 22:58:06 +0800 Subject: [PATCH] Add more tests for Task --- Sources/Schedule/Task.swift | 3 ++- Tests/ScheduleTests/TaskTests.swift | 31 ++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Sources/Schedule/Task.swift b/Sources/Schedule/Task.swift index df7cb05..45555ea 100644 --- a/Sources/Schedule/Task.swift +++ b/Sources/Schedule/Task.swift @@ -135,7 +135,7 @@ public class Task { } /// Suspensions of this task. - public var suspends: UInt64 { + public var suspensions: UInt64 { return _lock.withLock { _suspensions } @@ -240,6 +240,7 @@ public class Task { /// if new lifetime is shorter than its age, subtracting will fail, too. /// /// - Returns: `true` if set successfully, `false` if not. + @discardableResult public func subtractLifetime(_ interval: Interval) -> Bool { return addLifetime(interval.opposite) } diff --git a/Tests/ScheduleTests/TaskTests.swift b/Tests/ScheduleTests/TaskTests.swift index 80953d5..fb968ec 100644 --- a/Tests/ScheduleTests/TaskTests.swift +++ b/Tests/ScheduleTests/TaskTests.swift @@ -21,6 +21,30 @@ final class TaskTests: XCTestCase { task.cancel() } + func testSuspendResume() { + let block = { + let task = Schedule.distantFuture.do { } + XCTAssertEqual(task.suspensions, 0) + task.suspend() + task.suspend() + task.suspend() + XCTAssertEqual(task.suspensions, 3) + task.resume() + XCTAssertEqual(task.suspensions, 2) + } + block() + + let tag = UUID().uuidString + let task = Schedule.distantFuture.do { } + task.addTag(tag) + Task.suspend(byTag: tag) + XCTAssertEqual(task.suspensions, 1) + Task.resume(byTag: tag) + XCTAssertEqual(task.suspensions, 0) + Task.cancel(byTag: tag) + XCTAssertTrue(task.isCancelled) + } + func testAddAndRemoveActions() { let expectation = XCTestExpectation(description: "testAddAndRemoveActions") let task = Schedule.after(0.5.second).do { } @@ -34,6 +58,9 @@ final class TaskTests: XCTestCase { task.removeAction(byKey: key) XCTAssertEqual(task.countOfActions, 1) task.cancel() + + task.removeAllActions() + XCTAssertEqual(task.countOfActions, 0) } func testAddAndRemoveTags() { @@ -84,9 +111,11 @@ final class TaskTests: XCTestCase { let expectation = XCTestExpectation(description: "testLifetime") let task = Schedule.after(1.hour).do { } task.setLifetime(1.second) + XCTAssertEqual(task.lifetime, 1.second) + DispatchQueue.global().async(after: 0.5.second) { XCTAssertTrue(task.restOfLifetime.isAlmostEqual(to: 0.5.second, leeway: 0.1.second)) - task.addLifetime(0.5.second) + task.subtractLifetime(-0.5.second) } DispatchQueue.global().async(after: 1.second) { XCTAssertFalse(task.isCancelled)