35
35
import rx .Subscription ;
36
36
import rx .functions .Func1 ;
37
37
import rx .observers .TestSubscriber ;
38
+ import rx .schedulers .Schedulers ;
38
39
39
40
public class OperatorOnErrorResumeNextViaFunctionTest {
40
41
@@ -47,6 +48,8 @@ public void testResumeNextWithSynchronousExecution() {
47
48
public void call (Subscriber <? super String > observer ) {
48
49
observer .onNext ("one" );
49
50
observer .onError (new Throwable ("injected failure" ));
51
+ observer .onNext ("two" );
52
+ observer .onNext ("three" );
50
53
}
51
54
});
52
55
@@ -226,6 +229,47 @@ public Observable<String> call(Throwable t1) {
226
229
System .out .println (ts .getOnNextEvents ());
227
230
ts .assertReceivedOnNext (Arrays .asList ("success" ));
228
231
}
232
+
233
+ @ Test
234
+ public void testMapResumeAsyncNext () {
235
+ // Trigger multiple failures
236
+ Observable <String > w = Observable .just ("one" , "fail" , "two" , "three" , "fail" );
237
+
238
+ // Introduce map function that fails intermittently (Map does not prevent this when the observer is a
239
+ // rx.operator incl onErrorResumeNextViaObservable)
240
+ w = w .map (new Func1 <String , String >() {
241
+ @ Override
242
+ public String call (String s ) {
243
+ if ("fail" .equals (s ))
244
+ throw new RuntimeException ("Forced Failure" );
245
+ System .out .println ("BadMapper:" + s );
246
+ return s ;
247
+ }
248
+ });
249
+
250
+ Observable <String > observable = w .onErrorResumeNext (new Func1 <Throwable , Observable <String >>() {
251
+
252
+ @ Override
253
+ public Observable <String > call (Throwable t1 ) {
254
+ return Observable .just ("twoResume" , "threeResume" ).subscribeOn (Schedulers .computation ());
255
+ }
256
+
257
+ });
258
+
259
+ @ SuppressWarnings ("unchecked" )
260
+ Observer <String > observer = mock (Observer .class );
261
+ TestSubscriber <String > ts = new TestSubscriber <String >(observer );
262
+ observable .subscribe (ts );
263
+ ts .awaitTerminalEvent ();
264
+
265
+ verify (observer , Mockito .never ()).onError (any (Throwable .class ));
266
+ verify (observer , times (1 )).onCompleted ();
267
+ verify (observer , times (1 )).onNext ("one" );
268
+ verify (observer , Mockito .never ()).onNext ("two" );
269
+ verify (observer , Mockito .never ()).onNext ("three" );
270
+ verify (observer , times (1 )).onNext ("twoResume" );
271
+ verify (observer , times (1 )).onNext ("threeResume" );
272
+ }
229
273
230
274
private static class TestObservable implements Observable .OnSubscribe <String > {
231
275
0 commit comments