Skip to content

Instantly share code, notes, and snippets.

@amadeu01
Created May 15, 2018 19:18
Show Gist options
  • Save amadeu01/96de1a1c258169af010a4fd41eb67a81 to your computer and use it in GitHub Desktop.
Save amadeu01/96de1a1c258169af010a4fd41eb67a81 to your computer and use it in GitHub Desktop.
TestRule
public class RxImmediateSchedulerRule implements TestRule {
private Scheduler immediate = new Scheduler() {
@Override
public Disposable scheduleDirect(@NonNull Runnable run, long delay, @NonNull TimeUnit unit) {
// this prevents StackOverflowErrors when scheduling with a delay
return super.scheduleDirect(run, 0, unit);
}
@Override
public Worker createWorker() {
return new ExecutorScheduler.ExecutorWorker(Runnable::run);
}
};
@Override
public Statement apply(final Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
RxJavaPlugins.setInitIoSchedulerHandler(scheduler -> immediate);
RxJavaPlugins.setInitComputationSchedulerHandler(scheduler -> immediate);
RxJavaPlugins.setInitNewThreadSchedulerHandler(scheduler -> immediate);
RxJavaPlugins.setInitSingleSchedulerHandler(scheduler -> immediate);
RxAndroidPlugins.setInitMainThreadSchedulerHandler(scheduler -> immediate);
try {
base.evaluate();
} finally {
RxJavaPlugins.reset();
RxAndroidPlugins.reset();
}
}
};
}
}
@amadeu01
Copy link
Author

Thanks for that question

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment