.append(mMountedView.isAttachedToWindow()) .append(", getWindowVisibility(): ") .append(mMountedView.getWindowVisibility()) .append(", vie visible hierarchy: ") .append(getVisibleHierarchy(mMountedView))
@Test public void testDataRenderedCallbacksAreNotTriggered() { final ChangeSetCompleteCallback changeSetCompleteCallback = mock(ChangeSetCompleteCallback.class); final ComponentsLogger componentsLogger = mock(ComponentsLogger.class); final ComponentContext componentContext = new ComponentContext(RuntimeEnvironment.application, "", componentsLogger); final RecyclerBinder recyclerBinder = new RecyclerBinder.Builder().rangeRatio(RANGE_RATIO).build(componentContext); for (int i = 0; i < 40; i++) { recyclerBinder.notifyChangeSetComplete(true, changeSetCompleteCallback); } final RecyclerView recyclerView = mock(LithoRecylerView.class); when(recyclerView.hasPendingAdapterUpdates()).thenReturn(true); when(recyclerView.isAttachedToWindow()).thenReturn(true); when(recyclerView.getWindowVisibility()).thenReturn(View.VISIBLE); when(recyclerView.getAlpha()).thenReturn(1f); when(recyclerView.getVisibility()).thenReturn(View.VISIBLE); when(recyclerView.getGlobalVisibleRect(any(Rect.class))).thenReturn(true); recyclerBinder.mount(recyclerView); recyclerBinder.notifyChangeSetComplete(true, changeSetCompleteCallback); verify(componentsLogger).emitMessage(eq(ComponentsLogger.LogLevel.ERROR), anyString()); assertThat(recyclerBinder.mDataRenderedCallbacks).isEmpty(); }
@Test public void testOnDataRenderedWithViewVisibilityIsGone() { final ChangeSetCompleteCallback changeSetCompleteCallback = mock(ChangeSetCompleteCallback.class); final RecyclerBinder recyclerBinder = new RecyclerBinder.Builder().rangeRatio(RANGE_RATIO).build(mComponentContext); final ArrayList<RenderInfo> renderInfos = new ArrayList<>(); for (int i = 0; i < 5; i++) { final Component component = TestDrawableComponent.create(mComponentContext).widthPx(100).heightPx(100).build(); renderInfos.add(ComponentRenderInfo.create().component(component).build()); } final RecyclerView recyclerView = mock(LithoRecylerView.class); when(recyclerView.hasPendingAdapterUpdates()).thenReturn(true); when(recyclerView.isAttachedToWindow()).thenReturn(true); when(recyclerView.getWindowVisibility()).thenReturn(View.GONE); when(recyclerView.getAlpha()).thenReturn(1f); when(recyclerView.getVisibility()).thenReturn(View.GONE); when(recyclerView.getGlobalVisibleRect(any(Rect.class))).thenReturn(false); recyclerBinder.mount(recyclerView); recyclerBinder.insertRangeAt(0, renderInfos); recyclerBinder.notifyChangeSetComplete(true, changeSetCompleteCallback); verify(changeSetCompleteCallback).onDataRendered(eq(true), anyLong()); }
@Test public void testOnDataRenderedWithViewDetachedFromWindow() { final ChangeSetCompleteCallback changeSetCompleteCallback = mock(ChangeSetCompleteCallback.class); final RecyclerBinder recyclerBinder = new RecyclerBinder.Builder().rangeRatio(RANGE_RATIO).build(mComponentContext); final ArrayList<RenderInfo> renderInfos = new ArrayList<>(); for (int i = 0; i < 5; i++) { final Component component = TestDrawableComponent.create(mComponentContext).widthPx(100).heightPx(100).build(); renderInfos.add(ComponentRenderInfo.create().component(component).build()); } final RecyclerView recyclerView = mock(LithoRecylerView.class); when(recyclerView.hasPendingAdapterUpdates()).thenReturn(true); when(recyclerView.isAttachedToWindow()).thenReturn(false); when(recyclerView.getWindowVisibility()).thenReturn(View.VISIBLE); when(recyclerView.getAlpha()).thenReturn(1f); when(recyclerView.getVisibility()).thenReturn(View.VISIBLE); when(recyclerView.getGlobalVisibleRect(any(Rect.class))).thenReturn(true); recyclerBinder.mount(recyclerView); recyclerBinder.insertRangeAt(0, renderInfos); recyclerBinder.notifyChangeSetComplete(true, changeSetCompleteCallback); verify(changeSetCompleteCallback).onDataRendered(eq(true), anyLong()); }
@Test public void testOnDataRenderedWithNoPendingUpdate() { final ChangeSetCompleteCallback changeSetCompleteCallback = mock(ChangeSetCompleteCallback.class); final RecyclerBinder recyclerBinder = new RecyclerBinder.Builder().rangeRatio(RANGE_RATIO).build(mComponentContext); final ArrayList<RenderInfo> renderInfos = new ArrayList<>(); for (int i = 0; i < 5; i++) { final Component component = TestDrawableComponent.create(mComponentContext).widthPx(100).heightPx(100).build(); renderInfos.add(ComponentRenderInfo.create().component(component).build()); } final RecyclerView recyclerView = mock(LithoRecylerView.class); when(recyclerView.hasPendingAdapterUpdates()).thenReturn(false); when(recyclerView.isAttachedToWindow()).thenReturn(true); when(recyclerView.getWindowVisibility()).thenReturn(View.VISIBLE); when(recyclerView.getAlpha()).thenReturn(1f); when(recyclerView.getVisibility()).thenReturn(View.VISIBLE); when(recyclerView.getGlobalVisibleRect(any(Rect.class))).thenReturn(true); recyclerBinder.mount(recyclerView); recyclerBinder.insertRangeAt(0, renderInfos); recyclerBinder.notifyChangeSetComplete(true, changeSetCompleteCallback); verify(changeSetCompleteCallback).onDataRendered(eq(true), anyLong()); }