1+ import Quick
2+ import Nimble
3+ import RxSwift
4+ import RxBlocking
5+ import Action
6+
7+ class BarButtonTests : QuickSpec {
8+ override func spec( ) {
9+
10+ it ( " is nil by default " ) {
11+ let subject = UIBarButtonItem ( barButtonSystemItem: . Save, target: nil , action: nil )
12+ expect ( subject. rx_action) . to ( beNil ( ) )
13+ }
14+
15+ it ( " respects setter " ) {
16+ let subject = UIBarButtonItem ( barButtonSystemItem: . Save, target: nil , action: nil )
17+
18+ let action = emptyAction ( )
19+
20+ subject. rx_action = action
21+
22+ expect ( subject. rx_action) === action
23+ }
24+
25+ it ( " disables the button while executing " ) {
26+ let subject = UIBarButtonItem ( barButtonSystemItem: . Save, target: nil , action: nil )
27+
28+ var observer : AnyObserver < Void > !
29+ let action = CocoaAction ( workFactory: { _ in
30+ return create { ( obsv) -> Disposable in
31+ observer = obsv
32+ return NopDisposable . instance
33+ }
34+ } )
35+
36+ subject. rx_action = action
37+
38+ action. execute ( )
39+ expect ( subject. enabled) . toEventually ( beFalse ( ) )
40+
41+ observer. onCompleted ( )
42+ expect ( subject. enabled) . toEventually ( beTrue ( ) )
43+ }
44+
45+ it ( " disables the button if the Action is disabled " ) {
46+ let subject = UIBarButtonItem ( barButtonSystemItem: . Save, target: nil , action: nil )
47+
48+ subject. rx_action = emptyAction ( just ( false ) )
49+
50+ expect ( subject. enabled) == false
51+ }
52+
53+ it ( " doesn't execute a disabled action when tapped " ) {
54+ let subject = UIBarButtonItem ( barButtonSystemItem: . Save, target: nil , action: nil )
55+
56+ var executed = false
57+ subject. rx_action = CocoaAction ( enabledIf: just ( false ) , workFactory: { _ in
58+ executed = true
59+ return empty ( )
60+ } )
61+
62+ subject. target? . performSelector ( subject. action, withObject: subject)
63+
64+ expect ( executed) == false
65+ }
66+
67+ it ( " executes the action when tapped " ) {
68+ let subject = UIBarButtonItem ( barButtonSystemItem: . Save, target: nil , action: nil )
69+
70+ var executed = false
71+ let action = CocoaAction ( workFactory: { _ in
72+ executed = true
73+ return empty ( )
74+ } )
75+ subject. rx_action = action
76+
77+ subject. target? . performSelector ( subject. action, withObject: subject)
78+
79+ expect ( executed) == true
80+ }
81+
82+ it ( " disposes of old action subscriptions when re-set " ) {
83+ let subject = UIBarButtonItem ( barButtonSystemItem: . Save, target: nil , action: nil )
84+
85+ var disposed = false
86+ autoreleasepool {
87+ let disposeBag = DisposeBag ( )
88+
89+ let action = emptyAction ( )
90+ subject. rx_action = action
91+
92+ action
93+ . elements
94+ . subscribe ( onNext: nil , onError: nil , onCompleted: nil , onDisposed: {
95+ disposed = true
96+ } )
97+ . addDisposableTo ( disposeBag)
98+ }
99+
100+ subject. rx_action = nil
101+
102+ expect ( disposed) == true
103+ }
104+ }
105+ }
0 commit comments