12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- @testable import Nextcloud
- import XCTest
- class ParallelWorkerTest: XCTestCase {
- func testWorkerComplete() throws {
- let expectation = XCTestExpectation(description: "Worker executes all tasks")
- let taskCount = 20
- var tasksComplete = 0
- let worker = ParallelWorker(n: 5, titleKey: nil, totalTasks: nil, hudView: nil)
- for _ in 0..<taskCount {
- worker.execute { completion in
- tasksComplete += 1
- completion()
- }
- }
- worker.completeWork {
- XCTAssertEqual(tasksComplete, taskCount)
- if tasksComplete == taskCount {
- expectation.fulfill()
- }
- }
- let result = XCTWaiter.wait(for: [expectation], timeout: 5)
- XCTAssertEqual(result, .completed)
- }
- func testWorkerOrder() throws {
- let expectation = XCTestExpectation(description: "Worker executes work in sequence for n = 1")
- let sortedArray = Array(0..<20)
- var array: [Int] = []
- let worker = ParallelWorker(n: 1, titleKey: nil, totalTasks: nil, hudView: nil)
- for i in sortedArray {
- worker.execute { completion in
- DispatchQueue.main.asyncAfter(deadline: .now() + Double.random(in: 0...0.2)) {
- array.append(i)
- completion()
- }
- }
- }
- worker.completeWork {
- XCTAssertEqual(sortedArray, array)
- if sortedArray == array {
- expectation.fulfill()
- }
- }
- let result = XCTWaiter.wait(for: [expectation], timeout: 5)
- XCTAssertEqual(result, .completed)
- }
- func testWorkerFailsWithoutCompletion() throws {
- let expectation = XCTestExpectation(description: "Worker fails if completion isn't called")
- expectation.isInverted = true
- let worker = ParallelWorker(n: 5, titleKey: nil, totalTasks: nil, hudView: nil)
- for _ in 0..<20 {
- worker.execute { _ in }
- }
- worker.completeWork { expectation.fulfill() }
- let result = XCTWaiter.wait(for: [expectation], timeout: 5)
- XCTAssertEqual(result, .completed)
- }
- }
|