Skip to content

Commit 84fc283

Browse files
committed
wip
1 parent 91f0984 commit 84fc283

File tree

1 file changed

+87
-60
lines changed

1 file changed

+87
-60
lines changed

Tests/CombineSchedulersTests/TestSchedulerTests.swift

Lines changed: 87 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
#if canImport(Combine)
22
import Combine
33
import CombineSchedulers
4+
import ConcurrencyExtras
45
import XCTest
56

67
final class CombineSchedulerTests: XCTestCase {
7-
var cancellables: Set<AnyCancellable> = []
8-
98
func testAdvance() {
9+
var cancellables: Set<AnyCancellable> = []
10+
1011
let scheduler = DispatchQueue.test
1112

1213
var value: Int?
1314
Just(1)
1415
.delay(for: 1, scheduler: scheduler)
1516
.sink { value = $0 }
16-
.store(in: &self.cancellables)
17+
.store(in: &cancellables)
1718

1819
XCTAssertEqual(value, nil)
1920

@@ -35,14 +36,16 @@
3536
}
3637

3738
func testAdvanceTo() {
39+
var cancellables: Set<AnyCancellable> = []
40+
3841
let scheduler = DispatchQueue.test
3942
let start = scheduler.now
4043

4144
var value: Int?
4245
Just(1)
4346
.delay(for: 1, scheduler: scheduler)
4447
.sink { value = $0 }
45-
.store(in: &self.cancellables)
48+
.store(in: &cancellables)
4649

4750
XCTAssertEqual(value, nil)
4851

@@ -64,13 +67,15 @@
6467
}
6568

6669
func testRunScheduler() {
70+
var cancellables: Set<AnyCancellable> = []
71+
6772
let scheduler = DispatchQueue.test
6873

6974
var value: Int?
7075
Just(1)
7176
.delay(for: 1_000_000_000, scheduler: scheduler)
7277
.sink { value = $0 }
73-
.store(in: &self.cancellables)
78+
.store(in: &cancellables)
7479

7580
XCTAssertEqual(value, nil)
7681

@@ -84,13 +89,15 @@
8489
}
8590

8691
func testDelay0Advance() {
92+
var cancellables: Set<AnyCancellable> = []
93+
8794
let scheduler = DispatchQueue.test
8895

8996
var value: Int?
9097
Just(1)
9198
.delay(for: 0, scheduler: scheduler)
9299
.sink { value = $0 }
93-
.store(in: &self.cancellables)
100+
.store(in: &cancellables)
94101

95102
XCTAssertEqual(value, nil)
96103

@@ -100,13 +107,15 @@
100107
}
101108

102109
func testSubscribeOnAdvance() {
110+
var cancellables: Set<AnyCancellable> = []
111+
103112
let scheduler = DispatchQueue.test
104113

105114
var value: Int?
106115
Just(1)
107116
.subscribe(on: scheduler)
108117
.sink { value = $0 }
109-
.store(in: &self.cancellables)
118+
.store(in: &cancellables)
110119

111120
XCTAssertEqual(value, nil)
112121

@@ -116,13 +125,15 @@
116125
}
117126

118127
func testReceiveOnAdvance() {
128+
var cancellables: Set<AnyCancellable> = []
129+
119130
let scheduler = DispatchQueue.test
120131

121132
var value: Int?
122133
Just(1)
123134
.receive(on: scheduler)
124135
.sink { value = $0 }
125-
.store(in: &self.cancellables)
136+
.store(in: &cancellables)
126137

127138
XCTAssertEqual(value, nil)
128139

@@ -146,15 +157,17 @@
146157
}
147158

148159
func testTwoIntervalOrdering() {
160+
var cancellables: Set<AnyCancellable> = []
161+
149162
let testScheduler = DispatchQueue.test
150163

151164
var values: [Int] = []
152165

153166
testScheduler.schedule(after: testScheduler.now, interval: 2) { values.append(1) }
154-
.store(in: &self.cancellables)
167+
.store(in: &cancellables)
155168

156169
testScheduler.schedule(after: testScheduler.now, interval: 1) { values.append(42) }
157-
.store(in: &self.cancellables)
170+
.store(in: &cancellables)
158171

159172
XCTAssertEqual(values, [])
160173
testScheduler.advance()
@@ -164,76 +177,90 @@
164177
}
165178

166179
func testAdvanceToFarFuture() async {
167-
let testScheduler = DispatchQueue.test
168-
169-
var tickCount = 0
170-
Publishers.Timer(every: .seconds(1), scheduler: testScheduler)
171-
.autoconnect()
172-
.sink { _ in tickCount += 1 }
173-
.store(in: &self.cancellables)
174-
175-
XCTAssertEqual(tickCount, 0)
176-
await testScheduler.advance(by: .seconds(1))
177-
XCTAssertEqual(tickCount, 1)
178-
await testScheduler.advance(by: .seconds(1))
179-
XCTAssertEqual(tickCount, 2)
180-
await testScheduler.advance(by: .seconds(1_000))
181-
XCTAssertEqual(tickCount, 1_002)
180+
await withMainSerialExecutor {
181+
var cancellables: Set<AnyCancellable> = []
182+
183+
let testScheduler = DispatchQueue.test
184+
185+
var tickCount = 0
186+
Publishers.Timer(every: .seconds(1), scheduler: testScheduler)
187+
.autoconnect()
188+
.sink { _ in tickCount += 1 }
189+
.store(in: &cancellables)
190+
191+
XCTAssertEqual(tickCount, 0)
192+
await testScheduler.advance(by: .seconds(1))
193+
XCTAssertEqual(tickCount, 1)
194+
await testScheduler.advance(by: .seconds(1))
195+
XCTAssertEqual(tickCount, 2)
196+
await testScheduler.advance(by: .seconds(1_000))
197+
XCTAssertEqual(tickCount, 1_002)
198+
}
182199
}
183200

184201
func testDelay0Advance_Async() async {
185-
let scheduler = DispatchQueue.test
202+
await withMainSerialExecutor {
203+
var cancellables: Set<AnyCancellable> = []
186204

187-
var value: Int?
188-
Just(1)
189-
.delay(for: 0, scheduler: scheduler)
190-
.sink { value = $0 }
191-
.store(in: &self.cancellables)
205+
let scheduler = DispatchQueue.test
192206

193-
XCTAssertEqual(value, nil)
207+
var value: Int?
208+
Just(1)
209+
.delay(for: 0, scheduler: scheduler)
210+
.sink { value = $0 }
211+
.store(in: &cancellables)
194212

195-
await scheduler.advance()
213+
XCTAssertEqual(value, nil)
196214

197-
XCTAssertEqual(value, 1)
215+
await scheduler.advance()
216+
217+
XCTAssertEqual(value, 1)
218+
}
198219
}
199220

200221
func testAsyncSleep() async throws {
201-
let testScheduler = DispatchQueue.test
222+
try await withMainSerialExecutor {
223+
let testScheduler = DispatchQueue.test
202224

203-
let task = Task {
204-
try await testScheduler.sleep(for: .seconds(1))
205-
}
225+
let task = Task {
226+
try await testScheduler.sleep(for: .seconds(1))
227+
}
206228

207-
await testScheduler.advance(by: .seconds(1))
208-
try await task.value
229+
await testScheduler.advance(by: .seconds(1))
230+
try await task.value
231+
}
209232
}
210233

211234
func testAsyncTimer() async throws {
212-
let testScheduler = DispatchQueue.test
213-
214-
let task = Task {
215-
await testScheduler.timer(interval: .seconds(1))
216-
.prefix(10)
217-
.reduce(into: 0) { accum, _ in accum += 1 }
235+
await withMainSerialExecutor {
236+
let testScheduler = DispatchQueue.test
237+
238+
let task = Task {
239+
await testScheduler.timer(interval: .seconds(1))
240+
.prefix(10)
241+
.reduce(into: 0) { accum, _ in accum += 1 }
242+
}
243+
244+
await testScheduler.advance(by: .seconds(10))
245+
let count = await task.value
246+
XCTAssertEqual(count, 10)
218247
}
219-
220-
await testScheduler.advance(by: .seconds(10))
221-
let count = await task.value
222-
XCTAssertEqual(count, 10)
223248
}
224249

225250
func testAsyncRun() async throws {
226-
let testScheduler = DispatchQueue.test
227-
228-
let task = Task {
229-
await testScheduler.timer(interval: .seconds(1))
230-
.prefix(10)
231-
.reduce(into: 0) { accum, _ in accum += 1 }
251+
await withMainSerialExecutor {
252+
let testScheduler = DispatchQueue.test
253+
254+
let task = Task {
255+
await testScheduler.timer(interval: .seconds(1))
256+
.prefix(10)
257+
.reduce(into: 0) { accum, _ in accum += 1 }
258+
}
259+
260+
await testScheduler.run()
261+
let count = await task.value
262+
XCTAssertEqual(count, 10)
232263
}
233-
234-
await testScheduler.run()
235-
let count = await task.value
236-
XCTAssertEqual(count, 10)
237264
}
238265

239266
func testNowIsAdvanced() {

0 commit comments

Comments
 (0)