Skip to content

Commit 582da06

Browse files
committed
Adds sanity check implementation for pure Swift delegate proxy.
1 parent a42c66b commit 582da06

File tree

1 file changed

+42
-4
lines changed

1 file changed

+42
-4
lines changed

Tests/RxCocoaTests/DelegateProxyTest.swift

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -354,10 +354,19 @@ extension DelegateProxyTest {
354354
let mock = MockPureSwiftDelegate()
355355

356356
view.delegate = mock
357-
357+
358358
let proxy = view.rx.proxy
359359
XCTAssertTrue(view.delegate === proxy)
360360
XCTAssertTrue(view.rx.proxy.forwardToDelegate() === mock)
361+
362+
var latestValue: Int? = nil
363+
_ = view.rx.testIt.subscribe(onNext: {
364+
latestValue = $0
365+
})
366+
367+
XCTAssertEqual(latestValue, nil)
368+
view.testIt(with: 3)
369+
XCTAssertEqual(latestValue, 3)
361370
}
362371
}
363372

@@ -628,10 +637,16 @@ class ExtendClassViewDelegateProxy_b: InitialClassViewDelegateProxy {
628637
}
629638

630639

631-
protocol PureSwiftDelegate: class {}
640+
protocol PureSwiftDelegate: class {
641+
func delegateTestIt(with: Int)
642+
}
632643

633644
class PureSwiftView: ReactiveCompatible {
634645
weak var delegate: PureSwiftDelegate?
646+
647+
func testIt(with: Int) {
648+
self.delegate?.delegateTestIt(with: with)
649+
}
635650
}
636651

637652
extension Reactive where Base: PureSwiftView {
@@ -640,11 +655,19 @@ extension Reactive where Base: PureSwiftView {
640655
}
641656
}
642657

658+
extension Reactive where Base: PureSwiftView {
659+
var testIt: ControlEvent<Int> {
660+
return ControlEvent(events: PureSwiftDelegateProxy.proxy(for: base).testItObserver)
661+
}
662+
}
663+
643664
class PureSwiftDelegateProxy
644665
: DelegateProxy<PureSwiftView, PureSwiftDelegate>
645666
, DelegateProxyType
646667
, PureSwiftDelegate {
647-
668+
669+
fileprivate let testItObserver = PublishSubject<Int>()
670+
648671
init(parentObject: PureSwiftView) {
649672
super.init(parentObject: parentObject, delegateProxy: PureSwiftDelegateProxy.self)
650673
}
@@ -660,9 +683,24 @@ class PureSwiftDelegateProxy
660683
static func setCurrentDelegate(_ delegate: PureSwiftDelegate?, to object: ParentObject) {
661684
return object.delegate = delegate
662685
}
686+
687+
func delegateTestIt(with: Int) {
688+
testItObserver.on(.next(with))
689+
self.forwardToDelegate()?.delegateTestIt(with: with)
690+
}
691+
692+
deinit {
693+
self.testItObserver.on(.completed)
694+
}
663695
}
664696

665-
final class MockPureSwiftDelegate: PureSwiftDelegate {}
697+
final class MockPureSwiftDelegate: PureSwiftDelegate {
698+
var latestValue: Int?
699+
700+
func delegateTestIt(with: Int) {
701+
latestValue = with
702+
}
703+
}
666704

667705
// }
668706

0 commit comments

Comments
 (0)