@Override public void run() { try { ShadowLooper.resetThreadLoopers(); } catch (Throwable t) { ex.set(t); } } };
@Test public void resetThreadLoopers_clears_messages() { HandlerThread backgroundThread = new HandlerThread("resetTest"); backgroundThread.start(); Looper backgroundLooper = backgroundThread.getLooper(); Handler handler = new Handler(backgroundLooper); for (int i = 0; i < 5; i++) { handler.sendEmptyMessageDelayed(1, 100); ShadowLooper.resetThreadLoopers(); assertThat(handler.hasMessages(1)).isFalse(); } }
@Test public void resetThreadLoopers_shouldQuitAllNonMainLoopers() throws InterruptedException { QuitThread test = getQuitThread(); assertThat(test.hasContinued).named("hasContinued:before").isFalse(); ShadowLooper.resetThreadLoopers(); test.join(5000); assertThat(test.hasContinued).named("hasContinued:after").isTrue(); }
@Test public void resetThreadLoopers_resets_background_thread_schedulers() { HandlerThread backgroundThread = new HandlerThread("resetTest"); backgroundThread.start(); Looper backgroundLooper = backgroundThread.getLooper(); Handler handler = new Handler(backgroundLooper); Runnable empty = new Runnable() { @Override public void run() {} }; // There should be at least two iterations of this loop because resetThreadLoopers calls // 'quit' on background loopers once, which also resets the scheduler. for (int i = 0; i < 5; i++) { assertThat(shadowOf(backgroundLooper).getScheduler().size()).isEqualTo(0); assertThat(shadowOf(backgroundLooper).getScheduler().getCurrentTime()).isEqualTo(100L); handler.post(empty); handler.postDelayed(empty, 5000); // increment scheduler's time by 5000 shadowOf(backgroundLooper).runToEndOfTasks(); assertThat(shadowOf(backgroundLooper).getScheduler().getCurrentTime()).isEqualTo(5100L); ShadowLooper.resetThreadLoopers(); } }
@Test public void soStaticRefsToLoopersInAppWorksAcrossTests_shouldRetainSameLooperForMainThreadBetweenResetsButGiveItAFreshScheduler() throws Exception { Looper mainLooper = Looper.getMainLooper(); Scheduler scheduler = shadowOf(mainLooper).getScheduler(); shadowOf(mainLooper).quit = true; assertThat(ApplicationProvider.getApplicationContext().getMainLooper()).isSameAs(mainLooper); Scheduler s = new Scheduler(); RuntimeEnvironment.setMasterScheduler(s); ShadowLooper.resetThreadLoopers(); Application application = new Application(); ReflectionHelpers.callInstanceMethod( application, "attach", ReflectionHelpers.ClassParameter.from( Context.class, ((Application) ApplicationProvider.getApplicationContext()).getBaseContext())); assertThat(Looper.getMainLooper()).named("Looper.getMainLooper()").isSameAs(mainLooper); assertThat(application.getMainLooper()).named("app.getMainLooper()").isSameAs(mainLooper); assertThat(shadowOf(mainLooper).getScheduler()).named("scheduler").isNotSameAs(scheduler); assertThat(shadowOf(mainLooper).getScheduler()).named("scheduler").isSameAs(s); assertThat(shadowOf(mainLooper).hasQuit()).named("quit").isFalse(); }
if (org.robolectric.RuntimeEnvironment.getApiLevel() >= 24) ShadowLegacyResourcesImpl.reset(); ShadowLog.reset(); ShadowLooper.resetThreadLoopers(); ShadowMediaMetadataRetriever.reset(); ShadowMediaPlayer.resetStaticState();
public void reset() { ShadowAccountManager.reset(); ShadowAudioEffect.reset(); ShadowBackgroundThread.reset(); ShadowBinder.reset(); ShadowBitmapFactory.reset(); ShadowChoreographer.reset(); ShadowContentResolver.reset(); ShadowCookieManager.resetCookies(); ShadowDialog.reset(); ShadowDrawable.clearCorruptStreamSources(); ShadowEnvironment.reset(); ShadowLog.reset(); ShadowLooper.resetThreadLoopers(); ShadowMediaMetadataRetriever.reset(); ShadowMediaPlayer.resetStaticState(); ShadowMessage.reset(); ShadowMimeTypeMap.reset(); ShadowPendingIntent.reset(); ShadowPowerManager.reset(); ShadowProcess.reset(); ShadowRenderNodeAnimator.reset(); ShadowResourceManager.reset(); ShadowResources.reset(); ShadowSQLiteConnection.reset(); ShadowStatFs.reset(); ShadowTypeface.reset(); ShadowValueAnimator.reset(); }
ShadowEnvironment.reset(); ShadowLog.reset(); ShadowLooper.resetThreadLoopers(); ShadowMediaMetadataRetriever.reset(); ShadowMediaPlayer.resetStaticState();
ShadowEnvironment.reset(); ShadowLog.reset(); ShadowLooper.resetThreadLoopers(); ShadowMediaMetadataRetriever.reset(); ShadowMediaPlayer.resetStaticState();
if (org.robolectric.RuntimeEnvironment.getApiLevel() >= 24) ShadowLegacyResourcesImpl.reset(); ShadowLog.reset(); ShadowLooper.resetThreadLoopers(); ShadowMediaMetadataRetriever.reset(); ShadowMediaPlayer.resetStaticState();