@@ -23,11 +23,11 @@ class FoundationExtensionsSpec: QuickSpec {
2323 describe ( " NotificationCenter.reactive.notifications " ) {
2424 let center = NotificationCenter . default
2525
26- it ( " should send notifications on the producer " ) {
27- let producer = center. reactive. notifications ( forName: . racFirst)
26+ it ( " should send notifications on the signal " ) {
27+ let signal = center. reactive. notifications ( forName: . racFirst)
2828
2929 var notif : Notification ? = nil
30- let disposable = producer . startWithValues { notif = $0 }
30+ let disposable = signal . observeValues { notif = $0 }
3131
3232 center. post ( name: . racAnother, object: nil )
3333 expect ( notif) . to ( beNil ( ) )
@@ -36,26 +36,54 @@ class FoundationExtensionsSpec: QuickSpec {
3636 expect ( notif? . name) == . racFirst
3737
3838 notif = nil
39- disposable. dispose ( )
39+ disposable? . dispose ( )
4040
4141 center. post ( name: . racFirst, object: nil )
4242 expect ( notif) . to ( beNil ( ) )
4343 }
4444
45- it ( " should send Interrupted when the observed object is freed " ) {
46- var observedObject : AnyObject ? = NSObject ( )
47- let producer = center. reactive. notifications ( forName: nil , object: observedObject)
48- observedObject = nil
45+ it ( " should be freed if it is not reachable and no observer is attached " ) {
46+ weak var signal : Signal < Notification , NoError > ?
47+ var isDisposed = false
4948
50- var interrupted = false
51- let disposable = producer. startWithInterrupted {
52- interrupted = true
53- }
54- expect ( interrupted) == true
49+ let disposable : Disposable ? = {
50+ let innerSignal = center. reactive. notifications ( forName: nil )
51+ . on ( disposed: { isDisposed = true } )
5552
56- disposable. dispose ( )
53+ signal = innerSignal
54+ return innerSignal. observe { _ in }
55+ } ( )
56+
57+ expect ( isDisposed) == false
58+ expect ( signal) . toNot ( beNil ( ) )
59+
60+ disposable? . dispose ( )
61+
62+ expect ( isDisposed) == true
63+ expect ( signal) . to ( beNil ( ) )
5764 }
5865
66+ it ( " should be not freed if it still has one or more active observers " ) {
67+ weak var signal : Signal < Notification , NoError > ?
68+ var isDisposed = false
69+
70+ let disposable : Disposable ? = {
71+ let innerSignal = center. reactive. notifications ( forName: nil )
72+ . on ( disposed: { isDisposed = true } )
73+
74+ signal = innerSignal
75+ innerSignal. observe { _ in }
76+ return innerSignal. observe { _ in }
77+ } ( )
78+
79+ expect ( isDisposed) == false
80+ expect ( signal) . toNot ( beNil ( ) )
81+
82+ disposable? . dispose ( )
83+
84+ expect ( isDisposed) == false
85+ expect ( signal) . toNot ( beNil ( ) )
86+ }
5987 }
6088 }
6189}
0 commit comments