mirror of
https://github.com/ReactiveX/RxSwift.git
synced 2024-10-04 22:17:41 +03:00
Add DisposeBag function builder + tests
This commit is contained in:
parent
9b31a15520
commit
7cf93738a7
@ -84,13 +84,18 @@ public final class DisposeBag: DisposeBase {
|
||||
}
|
||||
|
||||
extension DisposeBag {
|
||||
|
||||
/// Convenience init allows a list of disposables to be gathered for disposal.
|
||||
public convenience init(disposing disposables: Disposable...) {
|
||||
self.init()
|
||||
self._disposables += disposables
|
||||
}
|
||||
|
||||
/// Convenience init which utilizes a function builder to let you pass in a list of
|
||||
/// disposables to make a DisposeBag of.
|
||||
public convenience init(@DisposableBuilder builder: () -> [Disposable]) {
|
||||
self.init(disposing: builder())
|
||||
}
|
||||
|
||||
/// Convenience init allows an array of disposables to be gathered for disposal.
|
||||
public convenience init(disposing disposables: [Disposable]) {
|
||||
self.init()
|
||||
@ -111,4 +116,12 @@ extension DisposeBag {
|
||||
self._disposables += disposables
|
||||
}
|
||||
}
|
||||
|
||||
/// A function builder accepting a list of Disposables and returning them as an array.
|
||||
@_functionBuilder
|
||||
public struct DisposableBuilder {
|
||||
public static func buildBlock(_ disposables: Disposable...) -> [Disposable] {
|
||||
return disposables
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -218,6 +218,7 @@ final class DisposeBagTest_ : DisposeBagTest, RxTestCase {
|
||||
("testDisposeBagInsert", DisposeBagTest.testDisposeBagInsert),
|
||||
("testDisposeBagVaradicInsert", DisposeBagTest.testDisposeBagVaradicInsert),
|
||||
("testDisposeBagVaradicInsertArray", DisposeBagTest.testDisposeBagVaradicInsertArray),
|
||||
("testDisposableBuilder", DisposeBagTest.testDisposableBuilder),
|
||||
] }
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,6 @@ extension DisposeBagTest {
|
||||
|
||||
// DisposeBag bag test
|
||||
extension DisposeBagTest {
|
||||
|
||||
func testDisposeBagVaradicInsert() {
|
||||
let disposable1 = TestDisposable()
|
||||
let disposable2 = TestDisposable()
|
||||
@ -73,7 +72,32 @@ extension DisposeBagTest {
|
||||
XCTAssert(disposable1.count == 1)
|
||||
XCTAssert(disposable2.count == 1)
|
||||
}
|
||||
}
|
||||
|
||||
// DisposeBag function builder initializer tests
|
||||
extension DisposeBagTest {
|
||||
func testDisposableBuilder() {
|
||||
let disposable1 = TestDisposable()
|
||||
let disposable2 = TestDisposable()
|
||||
let disposable3 = TestDisposable()
|
||||
|
||||
var disposeBag = DisposeBag {
|
||||
disposable1
|
||||
disposable2
|
||||
disposable3
|
||||
}
|
||||
|
||||
XCTAssert(disposable1.count == 0)
|
||||
XCTAssert(disposable2.count == 0)
|
||||
XCTAssert(disposable3.count == 0)
|
||||
disposeBag = DisposeBag()
|
||||
XCTAssert(disposable1.count == 1)
|
||||
XCTAssert(disposable2.count == 1)
|
||||
XCTAssert(disposable3.count == 1)
|
||||
|
||||
// Avoids "Variable 'disposeBag' was written to, but never read"
|
||||
_ = disposeBag
|
||||
}
|
||||
}
|
||||
|
||||
private class TestDisposable: Disposable {
|
||||
|
Loading…
Reference in New Issue
Block a user