1+ <?php
2+
3+ namespace Rx \Functional \Operator ;
4+
5+ use Rx \Functional \FunctionalTestCase ;
6+
7+ class IsEmptyTest extends FunctionalTestCase
8+ {
9+
10+ /**
11+ * @test
12+ */
13+ public function should_return_true_if_source_is_empty ()
14+ {
15+ $ xs = $ this ->createHotObservable ([
16+ onCompleted (300 )
17+ ]);
18+
19+ $ results = $ this ->scheduler ->startWithCreate (function () use ($ xs ) {
20+ return $ xs ->isEmpty ();
21+ });
22+
23+ $ this ->assertMessages ([
24+ onNext (300 , true ),
25+ onCompleted (300 ),
26+ ], $ results ->getMessages ());
27+
28+ $ this ->assertSubscriptions ([
29+ subscribe (200 , 300 ),
30+ ], $ xs ->getSubscriptions ());
31+ }
32+
33+ /**
34+ * @test
35+ */
36+ public function should_return_false_if_source_emits_element ()
37+ {
38+ $ xs = $ this ->createHotObservable ([
39+ onNext (150 , 'a ' ),
40+ onNext (300 , 'b ' ),
41+ onCompleted (300 )
42+ ]);
43+
44+ $ results = $ this ->scheduler ->startWithCreate (function () use ($ xs ) {
45+ return $ xs ->isEmpty ();
46+ });
47+
48+ $ this ->assertMessages ([
49+ onNext (300 , false ),
50+ onCompleted (300 ),
51+ ], $ results ->getMessages ());
52+
53+ $ this ->assertSubscriptions ([
54+ subscribe (200 , 300 ),
55+ ], $ xs ->getSubscriptions ());
56+ }
57+
58+ /**
59+ * @test
60+ */
61+ public function should_return_true_if_source_emits_before_subscription ()
62+ {
63+ $ xs = $ this ->createHotObservable ([
64+ onNext (150 , 'a ' ),
65+ onCompleted (300 )
66+ ]);
67+
68+ $ results = $ this ->scheduler ->startWithCreate (function () use ($ xs ) {
69+ return $ xs ->isEmpty ();
70+ });
71+
72+ $ this ->assertMessages ([
73+ onNext (300 , true ),
74+ onCompleted (300 ),
75+ ], $ results ->getMessages ());
76+
77+ $ this ->assertSubscriptions ([
78+ subscribe (200 , 300 ),
79+ ], $ xs ->getSubscriptions ());
80+ }
81+
82+ /**
83+ * @test
84+ */
85+ public function should_raise_error_if_source_raise_error ()
86+ {
87+ $ e = new \Exception ();
88+
89+ $ xs = $ this ->createHotObservable ([
90+ onError (300 , $ e ),
91+ ]);
92+
93+ $ results = $ this ->scheduler ->startWithCreate (function () use ($ xs ) {
94+ return $ xs ->isEmpty ();
95+ });
96+
97+ $ this ->assertMessages ([
98+ onError (300 , $ e ),
99+ ], $ results ->getMessages ());
100+
101+ $ this ->assertSubscriptions ([
102+ subscribe (200 , 300 ),
103+ ], $ xs ->getSubscriptions ());
104+ }
105+
106+ /**
107+ * @test
108+ */
109+ public function should_not_complete_if_source_never_emits ()
110+ {
111+ $ xs = $ this ->createHotObservable ([]);
112+
113+ $ results = $ this ->scheduler ->startWithCreate (function () use ($ xs ) {
114+ return $ xs ->isEmpty ();
115+ });
116+
117+ $ this ->assertMessages ([], $ results ->getMessages ());
118+ $ this ->assertSubscriptions ([
119+ subscribe (200 , 1000 ),
120+ ], $ xs ->getSubscriptions ());
121+ }
122+
123+ /**
124+ * @test
125+ */
126+ public function should_return_true_if_source_completes_immediately ()
127+ {
128+ $ xs = $ this ->createHotObservable ([
129+ onCompleted (201 ),
130+ ]);
131+
132+ $ results = $ this ->scheduler ->startWithCreate (function () use ($ xs ) {
133+ return $ xs ->isEmpty ();
134+ });
135+
136+ $ this ->assertMessages ([
137+ onNext (201 , true ),
138+ onCompleted (201 ),
139+ ], $ results ->getMessages ());
140+ $ this ->assertSubscriptions ([
141+ subscribe (200 , 201 ),
142+ ], $ xs ->getSubscriptions ());
143+ }
144+
145+ /**
146+ * @test
147+ */
148+ public function should_allow_unsubscribing_explicitly_and_early ()
149+ {
150+ $ xs = $ this ->createHotObservable ([
151+ onNext (600 , 'a ' ),
152+ onNext (700 , 'b ' ),
153+ ]);
154+
155+ $ results = $ this ->scheduler ->startWithDispose (function () use ($ xs ) {
156+ return $ xs ->isEmpty ();
157+ }, 500 );
158+
159+ $ this ->assertMessages ([], $ results ->getMessages ());
160+
161+ $ this ->assertSubscriptions ([
162+ subscribe (200 , 500 ),
163+ ], $ xs ->getSubscriptions ());
164+ }
165+
166+ /**
167+ * @test
168+ */
169+ public function should_not_break_unsubscription_chains_when_result_is_unsubscribed_explicitly ()
170+ {
171+ $ xs = $ this ->createHotObservable ([
172+ onNext (600 , 'a ' ),
173+ onNext (700 , 'b ' ),
174+ ]);
175+
176+ $ results = $ this ->scheduler ->startWithDispose (function () use ($ xs ) {
177+ return $ xs
178+ ->flatMap (function ($ value ) {
179+ return \Rx \Observable::just ($ value );
180+ })
181+ ->isEmpty ()
182+ ->flatMap (function ($ value ) {
183+ return \Rx \Observable::just ($ value );
184+ });
185+ }, 500 );
186+
187+ $ this ->assertMessages ([], $ results ->getMessages ());
188+
189+ $ this ->assertSubscriptions ([
190+ subscribe (200 , 500 ),
191+ ], $ xs ->getSubscriptions ());
192+ }
193+
194+ }
0 commit comments