3535import rx .Subscription ;
3636import rx .functions .Func1 ;
3737import rx .observers .TestSubscriber ;
38+ import rx .schedulers .Schedulers ;
3839
3940public class OperatorOnErrorResumeNextViaFunctionTest {
4041
@@ -47,6 +48,8 @@ public void testResumeNextWithSynchronousExecution() {
4748 public void call (Subscriber <? super String > observer ) {
4849 observer .onNext ("one" );
4950 observer .onError (new Throwable ("injected failure" ));
51+ observer .onNext ("two" );
52+ observer .onNext ("three" );
5053 }
5154 });
5255
@@ -226,6 +229,47 @@ public Observable<String> call(Throwable t1) {
226229 System .out .println (ts .getOnNextEvents ());
227230 ts .assertReceivedOnNext (Arrays .asList ("success" ));
228231 }
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+ }
229273
230274 private static class TestObservable implements Observable .OnSubscribe <String > {
231275
0 commit comments