Skip to content

Commit 0f88e19

Browse files
Finalize the entire suite of tests
1 parent 0d77b79 commit 0f88e19

File tree

1 file changed

+76
-5
lines changed

1 file changed

+76
-5
lines changed

Tests/RxSwiftTests/Anomalies.swift

Lines changed: 76 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,85 @@ extension AnomaliesTest {
178178
}
179179

180180
func testShareReplayOneInitialEmissionDeadlock() {
181-
let exp = expectation(description: "`share(replay: 1)` doesn't cause a deadlock in multithreaded environment because it replays with its own lock acquired")
182-
183-
let sharedSource = Observable<Void>.create { observer in
181+
let immediatelyEmittingSource = Observable<Void>.create { observer in
184182
observer.on(.next(()))
185183
return Disposables.create()
186184
}
187185
.share(replay: 1)
188186

187+
let exp = createInitialEmissionsDeadlockExpectation(
188+
sourceName: "`share(replay: 1)`",
189+
immediatelyEmittingSource: immediatelyEmittingSource
190+
)
191+
192+
wait(for: [exp], timeout: 1)
193+
}
194+
195+
func testIdleBehaviorSubjectInitialEmissionDeadlock() {
196+
let immediatelyEmittingSource = BehaviorSubject<Void>(value: ())
197+
198+
let exp = createInitialEmissionsDeadlockExpectation(
199+
sourceName: "'Idle BehaviorSubject'",
200+
immediatelyEmittingSource: immediatelyEmittingSource
201+
)
202+
203+
wait(for: [exp], timeout: 1)
204+
}
205+
206+
func testCompletedBehaviorSubjectInitialEmissionDeadlock() {
207+
let immediatelyEmittingSource = BehaviorSubject<Void>(value: ())
208+
immediatelyEmittingSource.on(.completed)
209+
210+
let exp = createInitialEmissionsDeadlockExpectation(
211+
sourceName: "'BehaviorSubject with completed event'",
212+
immediatelyEmittingSource: immediatelyEmittingSource
213+
)
214+
215+
wait(for: [exp], timeout: 1)
216+
}
217+
218+
func testCompletedPublishSubjectInitialEmissionDeadlock() {
219+
let immediatelyEmittingSource = PublishSubject<Void>()
220+
immediatelyEmittingSource.on(.completed)
221+
222+
let exp = createInitialEmissionsDeadlockExpectation(
223+
sourceName: "'PublishSubject with completed event'",
224+
immediatelyEmittingSource: immediatelyEmittingSource
225+
)
226+
227+
wait(for: [exp], timeout: 1)
228+
}
229+
230+
func testIdleReplaySubjectInitialEmissionDeadlock() {
231+
let immediatelyEmittingSource = ReplaySubject<Void>.create(bufferSize: 1)
232+
immediatelyEmittingSource.on(.next(()))
233+
234+
let exp = createInitialEmissionsDeadlockExpectation(
235+
sourceName: "'Idle ReplaySubject'",
236+
immediatelyEmittingSource: immediatelyEmittingSource
237+
)
238+
239+
wait(for: [exp], timeout: 1)
240+
}
241+
242+
func testCompletedReplaySubjectInitialEmissionDeadlock() {
243+
let immediatelyEmittingSource = ReplaySubject<Void>.create(bufferSize: 1)
244+
immediatelyEmittingSource.on(.completed)
245+
246+
let exp = createInitialEmissionsDeadlockExpectation(
247+
sourceName: "'ReplaySubject with completed event'",
248+
immediatelyEmittingSource: immediatelyEmittingSource
249+
)
250+
251+
wait(for: [exp], timeout: 1)
252+
}
253+
254+
private func createInitialEmissionsDeadlockExpectation(
255+
sourceName: String,
256+
immediatelyEmittingSource: Observable<Void>
257+
) -> XCTestExpectation {
258+
let exp = expectation(description: "`\(sourceName)` doesn't cause a deadlock in multithreaded environment because it replays with its own lock acquired")
259+
189260
let triggerRange = 0..<100
190261

191262
let concurrentScheduler = ConcurrentDispatchQueueScheduler(qos: .userInitiated)
@@ -194,7 +265,7 @@ extension AnomaliesTest {
194265
Observable.just(())
195266
.observe(on: concurrentScheduler)
196267
.flatMap { _ in
197-
sharedSource
268+
immediatelyEmittingSource
198269
}
199270
.take(1)
200271
})
@@ -203,6 +274,6 @@ extension AnomaliesTest {
203274
exp.fulfill()
204275
})
205276

206-
wait(for: [exp], timeout: 1)
277+
return exp
207278
}
208279
}

0 commit comments

Comments
 (0)