public static void runMainLooperOneTask() { getShadowMainLooper().runOneTask(); }
@Test public void testWarmTexture() { Drawable drawable = mock(Drawable.class); TextureWarmer.WarmDrawable warmDrawable = new TextureWarmer.WarmDrawable(drawable, 1, 1); mTextureWarmer.warmDrawable(warmDrawable); mShadowLooper.runOneTask(); verify(drawable).draw(any(Canvas.class)); }
@Test public void testWarmGlyph() { Layout layout = mock(Layout.class); mTextureWarmer.warmLayout(layout); mShadowLooper.runOneTask(); verify(layout).draw(any(Canvas.class)); }
@Test public void testDoesNotRecycleChildResourceSynchronously() { Resource<?> parent = mockResource(); final Resource<?> child = mockResource(); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocationOnMock) throws Throwable { recycler.recycle(child); return null; } }).when(parent).recycle(); Shadows.shadowOf(Looper.getMainLooper()).pause(); recycler.recycle(parent); verify(parent).recycle(); verify(child, never()).recycle(); Shadows.shadowOf(Looper.getMainLooper()).runOneTask(); verify(child).recycle(); } }
@Test public void testMessengerSend() throws Exception { Handler handler = new Handler(); Messenger messenger = new Messenger(handler); ShadowLooper.pauseMainLooper(); Message msg = Message.obtain(null, 123); messenger.send(msg); assertThat(handler.hasMessages(123)).isTrue(); Looper looper = Looper.myLooper(); shadowOf(looper).runOneTask(); assertThat(handler.hasMessages(123)).isFalse(); }
@Test public void testSplitBgThreadLayouts() { SplitLayoutResolver.createForTag(splitTag, mMainConfig, mBgConfig, mEnabledComponent); SplitLayoutResolver resolver = SplitLayoutResolver.getForTag(splitTag); when(ThreadUtils.isMainThread()).thenReturn(false); Whitebox.setInternalState(resolver, "mainService", mainService); Whitebox.setInternalState(resolver, "bgService", bgService); final ComponentTree tree = ComponentTree.create(mContext, mComponent).splitLayoutTag(splitTag).build(); tree.setRootAndSizeSpecAsync( mComponent, makeSizeSpec(100, EXACTLY), makeSizeSpec(100, EXACTLY)); mLayoutThreadShadowLooper.runOneTask(); verify(bgService).submit(any(Runnable.class), eq(0)); verify(bgService).submit(any(Runnable.class), eq(1)); verify(bgService, never()).submit(any(Runnable.class), eq(2)); verify(mainService, never()).submit(any(Runnable.class), any()); }
@Test public void testOnlyMainEnabled() { SplitLayoutResolver.createForTag(splitTag, mMainConfig, null, mEnabledComponent); SplitLayoutResolver resolver = SplitLayoutResolver.getForTag(splitTag); when(ThreadUtils.isMainThread()).thenReturn(false); Whitebox.setInternalState(resolver, "mainService", mainService); final ComponentTree tree = ComponentTree.create(mContext, mComponent).splitLayoutTag(splitTag).build(); tree.setRootAndSizeSpecAsync( mComponent, makeSizeSpec(100, EXACTLY), makeSizeSpec(100, EXACTLY)); mLayoutThreadShadowLooper.runOneTask(); verify(bgService, never()).submit(any(Runnable.class), eq(0)); } }
@Test public void testSetSizeSpecAsync() { ComponentTree componentTree = create(mContext, mComponent) .build(); componentTree.setSizeSpecAsync(mWidthSpec, mHeightSpec); // Only fields changed but no layout is done yet. assertThat(componentTreeHasSizeSpec(componentTree)).isTrue(); assertThat((int) getInternalState(componentTree, "mWidthSpec")) .isEqualTo(mWidthSpec); assertThat((int) getInternalState(componentTree, "mHeightSpec")) .isEqualTo(mHeightSpec); Assert.assertNull(getInternalState(componentTree, "mMainThreadLayoutState")); Assert.assertNull(getInternalState(componentTree, "mBackgroundLayoutState")); // Now the background thread run the queued task. mLayoutThreadShadowLooper.runOneTask(); // Since this happens post creation, it's not in general safe to update the main thread layout // state synchronously, so the result should be in the background layout state postSizeSpecChecks(componentTree, "mBackgroundLayoutState"); }
@Test public void testSetRootAsync() { final Section section = TestSectionCreator.createChangeSetComponent( "leaf1", Change.insert(0, makeComponentInfo())); final TestTarget changeSetHandler = new TestTarget(); SectionTree tree = SectionTree.create(mSectionContext, changeSetHandler) .build(); tree.setRootAsync(section); mChangeSetThreadShadowLooper.runOneTask(); assertChangeSetHandled(changeSetHandler); }
mLayoutThreadShadowLooper.runOneTask();
@Test public void testUpdateStateAsync() { final Section section = TestSectionCreator.createChangeSetComponent( "leaf1", Change.insert(0, makeComponentInfo())); section.setKey("key"); final TestTarget changeSetHandler = new TestTarget(); SectionTree tree = SectionTree.create(mSectionContext, changeSetHandler) .build(); tree.setRoot(section); assertChangeSetHandled(changeSetHandler); final StateUpdate stateUpdate = new StateUpdate(); changeSetHandler.clear(); tree.updateStateAsync("key", stateUpdate, "test"); assertThat(stateUpdate.mUpdateStateCalled).isFalse(); mChangeSetThreadShadowLooper.runOneTask(); assertThat(stateUpdate.mUpdateStateCalled).isTrue(); assertChangeSetNotSeen(changeSetHandler); }
mLayoutThreadShadowLooper.runOneTask(); mLayoutThreadShadowLooper.runOneTask();
@Test public void testWarmGlyph() { mGlyphWarmerImpl.warmLayout(mLayout); mShadowLooper.runOneTask(); verify(mLayout).draw(any(Canvas.class)); }
@Test public void testWarmGlyphForNullLayout() { mGlyphWarmerImpl.warmLayout(null); mShadowLooper.runOneTask(); } }
/** * @deprecated * @see ShadowLooper#runMainLooperOneTask() () */ public static void runMainLooperOneTask() { shadowOf(Looper.myLooper()).runOneTask(); }
/** * @deprecated * @see ShadowLooper#runMainLooperOneTask() () */ @Deprecated public static void runMainLooperOneTask() { shadowOf(Looper.myLooper()).runOneTask(); }
/** * @deprecated * @see ShadowLooper#runMainLooperOneTask() () */ @Deprecated public static void runMainLooperOneTask() { shadowOf(Looper.myLooper()).runOneTask(); }
public static void runMainLooperOneTask() { getShadowMainLooper().runOneTask(); }
public static void runMainLooperOneTask() { getShadowMainLooper().runOneTask(); }
public static void runMainLooperOneTask() { getShadowMainLooper().runOneTask(); }