package rx.plugins; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.badoo.unittest.rx.SchedulerFactory; import rx.Scheduler; import rx.android.plugins.RxAndroidPlugins; import rx.android.plugins.RxAndroidSchedulersHook; import rx.schedulers.Schedulers; /** * Class to change the schedulers used by rxJava during testing. */ public class RxTestSchedulerProxy { private static final RxTestSchedulerProxy INSTANCE = new RxTestSchedulerProxy(); public static RxTestSchedulerProxy getInstance() { return INSTANCE; } @Nullable private SchedulerFactory mFactory; private RxTestSchedulerProxy() { RxJavaPlugins.getInstance().registerSchedulersHook(new RxJavaSchedulersHook() { @Override public Scheduler getIOScheduler() { if (mFactory == null) { return Schedulers.immediate(); } return mFactory.createIOScheduler(); } @Override public Scheduler getComputationScheduler() { if (mFactory == null) { return Schedulers.immediate(); } return mFactory.createComputationScheduler(); } @Override public Scheduler getNewThreadScheduler() { if (mFactory == null) { return Schedulers.immediate(); } return mFactory.createNewThreadScheduler(); } }); RxAndroidPlugins.getInstance().registerSchedulersHook(new RxAndroidSchedulersHook() { @Override public Scheduler getMainThreadScheduler() { if (mFactory == null) { return Schedulers.immediate(); } return mFactory.createMainThreadScheduler(); } }); } public void setSchedulerFactory(@NonNull SchedulerFactory factory) { mFactory = factory; } public void reset() { mFactory = null; } }