-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathSYNQueueTests.swift
More file actions
115 lines (91 loc) · 3.98 KB
/
SYNQueueTests.swift
File metadata and controls
115 lines (91 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//
// SYNQueueTests.swift
// SYNQueueTests
//
import UIKit
import XCTest
@testable import SYNQueue
class SYNQueueTests: XCTestCase {
var logger = ConsoleLogger()
var serializer = NSUserDefaultsSerializer()
let testTaskType = "testTaskType"
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
logger = ConsoleLogger()
serializer = NSUserDefaultsSerializer()
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testInitialization() {
let name = randomQueueName()
let queue = SYNQueue(queueName: name, maxConcurrency: 3, maxRetries: 2, logProvider: logger, serializationProvider: serializer) { (error: NSError?, task: SYNQueueTask) -> Void in
//
}
XCTAssertNotNil(queue)
XCTAssert(queue.name == name)
XCTAssert(queue.maxConcurrentOperationCount == 3)
XCTAssert(queue.maxRetries == 2)
XCTAssertNotNil(queue.logProvider)
XCTAssertNotNil(queue.serializationProvider)
XCTAssertNotNil(queue.completionBlock)
}
func testTaskCompletion() {
let taskCompletionExpectation = expectationWithDescription("taskCompletion")
let queue = SYNQueue(queueName: randomQueueName(), maxConcurrency: 3, maxRetries: 2, logProvider: logger, serializationProvider: serializer) { (error: NSError?, task: SYNQueueTask) -> Void in
taskCompletionExpectation.fulfill()
}
queue.addTaskHandler(testTaskType) { $0.completed(nil) }
let task = SYNQueueTask(queue: queue, taskType: testTaskType)
queue.addOperation(task)
XCTAssert(queue.operationCount == 1)
waitForExpectationsWithTimeout(5, handler: { error in
XCTAssertNil(error, "Error")
})
}
func testSerialization() {
let name = randomQueueName()
// Creating a queue
var queue: SYNQueue? = SYNQueue(queueName: name, maxConcurrency: 3, maxRetries: 2, logProvider: logger, serializationProvider: serializer) { (error: NSError?, task: SYNQueueTask) -> Void in
//
}
// Add a task to the queue
queue!.addTaskHandler(testTaskType) {
NSThread.sleepForTimeInterval(2)
$0.completed(nil)
}
let task = SYNQueueTask(queue: queue!, taskType: testTaskType)
queue!.addOperation(task)
// Nil out the queue to simulate app backgrounded or quit
queue = nil
// Now create a new queue (with the same name) and load serialized tasks
let queue2 = SYNQueue(queueName: name, maxConcurrency: 3, maxRetries: 2, logProvider: logger, serializationProvider: serializer) { (error: NSError?, task: SYNQueueTask) -> Void in
//
}
queue2.loadSerializedTasks()
XCTAssert(queue2.operationCount == 1)
let serializedTasks = queue2.serializationProvider?.deserializeTasksInQueue(queue2)
serializedTasks?.forEach({ (task: SYNQueueTask) -> () in
queue2.serializationProvider?.removeTask(task.taskID, queue: queue2)
})
}
func testEnqueuingPerformance() {
let queue = SYNQueue(queueName: "testQueue", maxConcurrency: 3, maxRetries: 2, logProvider: logger, serializationProvider: serializer) { (error: NSError?, task: SYNQueueTask) -> Void in
//
}
queue.addTaskHandler(testTaskType) {
NSThread.sleepForTimeInterval(1)
$0.completed(nil)
}
let task = SYNQueueTask(queue: queue, taskType: testTaskType)
self.measureBlock() {
queue.addOperation(task)
}
}
}
// MARK: Helper methods
func randomQueueName() -> String {
return NSUUID().UUIDString
}