Skip to content

Commit

Permalink
Merge pull request square#578 from square/jw/mock-scheduling
Browse files Browse the repository at this point in the history
Simplify scheduling of mock observers.
  • Loading branch information
JakeWharton committed Oct 7, 2014
2 parents 60b4970 + 4cf02b2 commit 702e005
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 22 deletions.
33 changes: 13 additions & 20 deletions retrofit-mock/src/main/java/retrofit/MockRestAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
import java.lang.reflect.Proxy;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import retrofit.client.Request;
import retrofit.client.Response;
import rx.Observable;
import rx.Subscriber;
import rx.Scheduler;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

import static retrofit.RestAdapter.LogLevel;
import static retrofit.RetrofitError.unexpectedError;
Expand Down Expand Up @@ -468,36 +469,28 @@ private static long uptimeMillis() {

/** Indirection to avoid VerifyError if RxJava isn't present. */
private static class MockRxSupport {
private final Executor httpExecutor;
private final Scheduler httpScheduler;
private final ErrorHandler errorHandler;

MockRxSupport(RestAdapter restAdapter) {
httpExecutor = restAdapter.httpExecutor;
httpScheduler = Schedulers.from(restAdapter.httpExecutor);
errorHandler = restAdapter.errorHandler;
}

Observable createMockObservable(final MockHandler mockHandler, final RestMethodInfo methodInfo,
final RequestInterceptor interceptor, final Object[] args) {
return Observable.create(new Observable.OnSubscribe<Object>() {
@Override public void call(final Subscriber<? super Object> subscriber) {
if (subscriber.isUnsubscribed()) return;
httpExecutor.execute(new Runnable() {
@Override public void run() {
return Observable.just("nothing") //
.flatMap(new Func1<String, Observable<?>>() {
@Override public Observable<?> call(String s) {
try {
if (subscriber.isUnsubscribed()) return;
Observable observable =
(Observable) mockHandler.invokeSync(methodInfo, interceptor, args);
//noinspection unchecked
observable.subscribe(subscriber);
return (Observable) mockHandler.invokeSync(methodInfo, interceptor, args);
} catch (RetrofitError e) {
subscriber.onError(errorHandler.handleError(e));
} catch (Throwable e) {
subscriber.onError(e);
return Observable.error(errorHandler.handleError(e));
} catch (Throwable throwable) {
return Observable.error(throwable);
}
}
});
}
});
}).subscribeOn(httpScheduler);
}
}
}
4 changes: 2 additions & 2 deletions retrofit-mock/src/test/java/retrofit/MockRestAdapterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ class MockObservableExample implements ObservableExample {
}
});

verify(httpExecutor, atLeastOnce()).execute(any(Runnable.class));
verify(httpExecutor).execute(any(Runnable.class));
verifyZeroInteractions(callbackExecutor);

RetrofitError error = errorRef.get();
Expand Down Expand Up @@ -518,7 +518,7 @@ class MockObservableExample implements ObservableExample {
}
});

verify(httpExecutor, atLeastOnce()).execute(any(Runnable.class));
verify(httpExecutor).execute(any(Runnable.class));
verifyZeroInteractions(callbackExecutor);

RetrofitError error = errorRef.get();
Expand Down

0 comments on commit 702e005

Please sign in to comment.