/** * Causes all of the {@link Runnable}s that have been scheduled to run while advancing the scheduler's clock to the * start time of the last scheduled {@link Runnable}. */ public void runToEndOfTasks() { getScheduler().advanceToLastPostedRunnable(); }
/** * Causes only one of the next {@link Runnable}s that have been scheduled to run while advancing the scheduler's * clock to its start time. Only one {@link Runnable} will run even if more than one has ben scheduled to run at the * same time. */ public void runOneTask() { getScheduler().runOneTask(); }
/** * Causes {@link Runnable}s that have been scheduled to run within the next specified amount of time to run while * advancing the scheduler's clock. */ public void idle(long amount, TimeUnit unit) { getScheduler().advanceBy(amount, unit); }
/** * Causes the next {@link Runnable}(s) that have been scheduled to run while advancing the scheduler's clock to its * start time. If more than one {@link Runnable} is scheduled to run at this time then they will all be run. */ public void runToNextTask() { getScheduler().advanceToNextPostedRunnable(); }
private Scheduler getScheduler() { ShadowLooper shadowLooper = Shadow.extract(Looper.getMainLooper()); return shadowLooper.getScheduler(); }
public void idleConstantly(boolean shouldIdleConstantly) { getScheduler().idleConstantly(shouldIdleConstantly); }
@Implementation protected boolean removeCallbacks(Runnable callback) { ShadowLooper shadowLooper = Shadow.extract(Looper.getMainLooper()); shadowLooper.getScheduler().remove(callback); return true; }
public void quitUnchecked() { synchronized (realObject) { quit = true; realObject.notifyAll(); getScheduler().reset(); shadowOf(realObject.getQueue()).reset(); } }
@Override public void handleMessage(Message msg) { runAt.add(shadowOf(Looper.myLooper()).getScheduler().getCurrentTime()); } };
private void unschedule() { Handler target = realMessage.getTarget(); if (target != null && scheduledRunnable != null) { shadowOf(target.getLooper()).getScheduler().remove(scheduledRunnable); scheduledRunnable = null; } }
@Test public void reset_setsNewScheduler_forNonMainLooper_byDefault() { HandlerThread ht = getHandlerThread(); ShadowLooper sLooper = shadowOf(ht.getLooper()); Scheduler old = sLooper.getScheduler(); sLooper.reset(); assertThat(sLooper.getScheduler()).isNotSameAs(old); assertThat(sLooper.getScheduler()).isNotSameAs(RuntimeEnvironment.getMasterScheduler()); }
@Test public void shouldSetNewScheduler_whenLooperIsReset() { HandlerThread ht = getHandlerThread(); Looper looper = ht.getLooper(); ShadowLooper sLooper = shadowOf(looper); Scheduler old = sLooper.getScheduler(); sLooper.reset(); assertThat(old).isNotSameAs(sLooper.getScheduler()); }
@Test public void schedulerOnAnotherLooper_shouldNotBeMaster_byDefault() { HandlerThread ht = getHandlerThread(); assertThat(shadowOf(ht.getLooper()).getScheduler()).isNotSameAs(RuntimeEnvironment.getMasterScheduler()); }
private void runOnUiThread(Runnable action) { // This is meant to emulate the behavior of Activity.runOnUiThread(); shadowOf(handler.getLooper()).getScheduler().post(action); } }
private void runOnUiThread(Runnable action) { // This is meant to emulate the behavior of Activity.runOnUiThread(); shadowOf(handler.getLooper()).getScheduler().post(action); } }
@Test public void schedulerOnAnotherLooper_shouldBeMaster_ifAdvancedSchedulingEnabled() { setAdvancedScheduling(); HandlerThread ht = getHandlerThread(); assertThat(shadowOf(ht.getLooper()).getScheduler()).isSameAs(RuntimeEnvironment.getMasterScheduler()); }
@Test public void reset_setsGlobalScheduler_forMainLooper_byDefault() { ShadowLooper sMainLooper = ShadowLooper.getShadowMainLooper(); Scheduler s = new Scheduler(); RuntimeEnvironment.setMasterScheduler(s); sMainLooper.reset(); assertThat(sMainLooper.getScheduler()).isSameAs(s); }
@Test public void reset_setsSchedulerToMaster_forNonMainLooper_withAdvancedScheduling() { HandlerThread ht = getHandlerThread(); ShadowLooper sLooper = shadowOf(ht.getLooper()); Scheduler s = new Scheduler(); RuntimeEnvironment.setMasterScheduler(s); setAdvancedScheduling(); sLooper.reset(); assertThat(sLooper.getScheduler()).isSameAs(s); }
@Test public void setUpApplicationState_configuresGlobalScheduler() { bootstrapWrapper.callSetUpApplicationState(); assertThat(RuntimeEnvironment.getMasterScheduler()) .isSameAs(ShadowLooper.getShadowMainLooper().getScheduler()); assertThat(RuntimeEnvironment.getMasterScheduler()) .isSameAs(ShadowApplication.getInstance().getForegroundThreadScheduler()); }
@Test public void reset_setsGlobalScheduler_forMainLooper_withAdvancedScheduling() { setAdvancedScheduling(); ShadowLooper sMainLooper = ShadowLooper.getShadowMainLooper(); Scheduler s = new Scheduler(); RuntimeEnvironment.setMasterScheduler(s); sMainLooper.reset(); assertThat(sMainLooper.getScheduler()).isSameAs(s); }