31
31
import org .junit .Before ;
32
32
import org .junit .Test ;
33
33
import org .mockito .InOrder ;
34
+ import static org .mockito .Matchers .anyInt ;
34
35
import org .mockito .Mock ;
36
+ import static org .mockito .Mockito .mock ;
35
37
import org .mockito .MockitoAnnotations ;
36
38
37
39
import rx .Observable ;
38
40
import rx .Observer ;
39
41
import rx .Subscriber ;
42
+ import rx .exceptions .TestException ;
40
43
import rx .functions .Action1 ;
41
44
import rx .functions .Func1 ;
42
45
import rx .functions .Functions ;
@@ -283,14 +286,44 @@ public void call(GroupedObservable<Integer, Integer> t1) {
283
286
284
287
inner .get ().subscribe (observer );
285
288
286
- verify (observer , times (1 )).onCompleted ();
289
+ verify (observer ).onNext (0 );
290
+ verify (observer ).onCompleted ();
287
291
verify (observer , never ()).onError (any (Throwable .class ));
288
- verify (observer , never ()).onNext (any ());
292
+ }
293
+
294
+ @ Test
295
+ public void innerEscapeCompletedTwice () {
296
+ Observable <Integer > source = Observable .from (0 );
297
+
298
+ final AtomicReference <GroupedObservable <Integer , Integer >> inner = new AtomicReference <GroupedObservable <Integer , Integer >>();
299
+
300
+ Func1 <GroupedObservable <Integer , Integer >, Observable <Object >> duration = just (Observable .never ());
301
+
302
+ Observable <GroupedObservable <Integer , Integer >> m = source .groupByUntil (identity , dbl , duration );
303
+
304
+ m .subscribe (new Action1 <GroupedObservable <Integer , Integer >>() {
305
+ @ Override
306
+ public void call (GroupedObservable <Integer , Integer > t1 ) {
307
+ inner .set (t1 );
308
+ }
309
+ });
310
+
311
+ inner .get ().subscribe (observer );
312
+
313
+ @ SuppressWarnings ("unchecked" )
314
+ Observer <Integer > o2 = mock (Observer .class );
315
+
316
+ inner .get ().subscribe (o2 );
317
+
318
+ verify (o2 , never ()).onCompleted ();
319
+ verify (o2 , never ()).onNext (anyInt ());
320
+ verify (o2 ).onError (any (IllegalStateException .class ));
289
321
}
290
322
291
323
@ Test
292
324
public void innerEscapeError () {
293
- Observable <Integer > source = Observable .concat (Observable .from (0 ), Observable .<Integer > error (new RuntimeException ("Forced failure" )));
325
+ Observable <Integer > source = Observable .concat (Observable .from (0 ), Observable .<Integer > error (
326
+ new TestException ("Forced failure" )));
294
327
295
328
final AtomicReference <GroupedObservable <Integer , Integer >> inner = new AtomicReference <GroupedObservable <Integer , Integer >>();
296
329
@@ -316,8 +349,47 @@ public void onCompleted() {
316
349
317
350
inner .get ().subscribe (observer );
318
351
319
- verify (observer , times (1 )).onError (any (Throwable .class ));
352
+ verify (observer ).onNext (0 );
353
+ verify (observer ).onError (any (TestException .class ));
320
354
verify (observer , never ()).onCompleted ();
321
- verify (observer , never ()).onNext (any ());
355
+ }
356
+
357
+ @ Test
358
+ public void innerEscapeErrorTwice () {
359
+ Observable <Integer > source = Observable .concat (Observable .from (0 ), Observable .<Integer > error (
360
+ new TestException ("Forced failure" )));
361
+
362
+ final AtomicReference <GroupedObservable <Integer , Integer >> inner = new AtomicReference <GroupedObservable <Integer , Integer >>();
363
+
364
+ Func1 <GroupedObservable <Integer , Integer >, Observable <Object >> duration = just (Observable .never ());
365
+
366
+ Observable <GroupedObservable <Integer , Integer >> m = source .groupByUntil (identity , dbl , duration );
367
+
368
+ m .subscribe (new Subscriber <GroupedObservable <Integer , Integer >>() {
369
+ @ Override
370
+ public void onNext (GroupedObservable <Integer , Integer > t1 ) {
371
+ inner .set (t1 );
372
+ }
373
+
374
+ @ Override
375
+ public void onError (Throwable e ) {
376
+ }
377
+
378
+ @ Override
379
+ public void onCompleted () {
380
+ }
381
+
382
+ });
383
+
384
+ inner .get ().subscribe (observer );
385
+
386
+ @ SuppressWarnings ("unchecked" )
387
+ Observer <Integer > o2 = mock (Observer .class );
388
+
389
+ inner .get ().subscribe (o2 );
390
+
391
+ verify (o2 , never ()).onCompleted ();
392
+ verify (o2 , never ()).onNext (anyInt ());
393
+ verify (o2 ).onError (any (IllegalStateException .class ));
322
394
}
323
395
}
0 commit comments