@Test public void testSizeCallbackIsCalledSynchronouslyIfLayoutParamsConcreteSizeSet() { int dimens = 444; LayoutParams layoutParams = new LayoutParams(dimens, dimens); view.setLayoutParams(layoutParams); shadowView.setIsLaidOut(true); target.getSize(cb); verify(cb).onSizeReady(eq(dimens), eq(dimens)); }
@Test public void testDoesAddSecondListenerIfFirstListenerIsRemovedBeforeSecondRequest() { SizeReadyCallback cb1 = mock(SizeReadyCallback.class); target.getSize(cb1); view.setLayoutParams(new LayoutParams(100, 100)); shadowView.setIsLaidOut(true); shadowObserver.fireOnPreDrawListeners(); assertThat(shadowObserver.getPreDrawListeners()).hasSize(0); SizeReadyCallback cb2 = mock(SizeReadyCallback.class); view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); target.getSize(cb2); view.setLayoutParams(new LayoutParams(100, 100)); shadowObserver.fireOnPreDrawListeners(); verify(cb2).onSizeReady(anyInt(), anyInt()); }
@Test public void testCanObtainFixedSizeFromView() { int width = 123; int height = 456; view.setLayoutParams(new ViewGroup.LayoutParams(width, height)); view.layout(0, 0, width, height); provider.setView(view); int[] size = provider.getPreloadSize(new Object(), 0, 0); assertThat(size).asList().containsExactly(width, height); }
@Test public void testMatchParentWidthAndHeight() { LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); view.setLayoutParams(params); target.getSize(cb); verify(cb, never()).onSizeReady(anyInt(), anyInt()); int width = 32; int height = 45; shadowView .setWidth(width) .setHeight(height) .setIsLaidOut(true); shadowObserver.fireOnPreDrawListeners(); verify(cb).onSizeReady(eq(width), eq(height)); }
@Test public void getSize_withWrapContentWidthAndMatchParentHeight_usesDisplayDimenWidthAndHeight() { LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); view.setLayoutParams(params); setDisplayDimens(500, 600); target.getSize(cb); verify(cb, never()).onSizeReady(anyInt(), anyInt()); int height = 32; shadowView .setHeight(height) .setIsLaidOut(true); shadowObserver.fireOnPreDrawListeners(); verify(cb).onSizeReady(600, height); }
@Test public void getSize_withMatchParentWidthAndWrapContentHeight_usesWidthAndDisplayDimenHeight() { LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); view.setLayoutParams(params); setDisplayDimens(300, 400); target.getSize(cb); verify(cb, never()).onSizeReady(anyInt(), anyInt()); int width = 32; shadowView .setWidth(width) .setIsLaidOut(true); shadowObserver.fireOnPreDrawListeners(); verify(cb).onSizeReady(width, 400); }
@Test public void testIgnoresNewViewIfAlreadyWaitingOnSizeOfAnotherView() { provider.setView(view); View newView = new View(RuntimeEnvironment.application); newView.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); provider.setView(newView); assertNull(provider.getPreloadSize(new Object(), 0, 0)); }
@Test public void testDoesNotThrowOnPreDrawIfViewTreeObserverIsDead() { target.getSize(cb); int width = 1; int height = 2; LayoutParams layoutParams = new LayoutParams(width, height); view.setLayoutParams(layoutParams); shadowView.setIsLaidOut(true); shadowObserver.setIsAlive(false); shadowObserver.fireOnPreDrawListeners(); verify(cb).onSizeReady(eq(width), eq(height)); }
@Test public void testDoesNotNotifyCallbackTwiceIfAddedTwice() { target.getSize(cb); target.getSize(cb); view.setLayoutParams(new LayoutParams(100, 100)); shadowView.setIsLaidOut(true); shadowObserver.fireOnPreDrawListeners(); verify(cb, times(1)).onSizeReady(anyInt(), anyInt()); }
@Test public void testDoesNotObtainSizeFromViewOnceSizeIsSet() { int width = 123; int height = 456; provider.onSizeReady(width, height); view.setLayoutParams(new ViewGroup.LayoutParams(1, 1)); view.layout(0, 0, 1, 1); provider.setView(view); int[] size = provider.getPreloadSize(new Object(), 0, 0); assertThat(size).asList().containsExactly(width, height); }
@Test public void getSize_withLayoutParams_emptyParams_notLaidOutOrLayoutRequested_callsSizeReady() { shadowView .setLayoutParams(new LayoutParams(0, 0)) .setWidth(100) .setHeight(100) .setIsLaidOut(false); target.getSize(cb); verify(cb).onSizeReady(100, 100); }
@Test public void getSize_withLayoutParams_notLaidOut_doesCallSizeReady() { shadowView .setLayoutParams(new LayoutParams(10, 10)) .setWidth(100) .setHeight(100) .setIsLaidOut(false); target.getSize(cb); verify(cb, times(1)).onSizeReady(anyInt(), anyInt()); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewPager viewPager = new ViewPager(this); viewPager.setId(View.generateViewId()); setContentView(viewPager, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); viewPager.setAdapter(new Issue117Adapter(getSupportFragmentManager())); }
@Test public void testCallbackIsNotCalledTwiceIfPreDrawFiresTwice() { target.getSize(cb); LayoutParams layoutParams = new LayoutParams(1234, 4123); view.setLayoutParams(layoutParams); shadowView.setIsLaidOut(true); shadowObserver.fireOnPreDrawListeners(); shadowObserver.fireOnPreDrawListeners(); verify(cb, times(1)).onSizeReady(anyInt(), anyInt()); }
@Test public void getSize_withWrapContentWidthAndValidHeight_usesDisplayDimenAndValidHeight() { int height = 100; LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, height); view.setLayoutParams(params); shadowView.setIsLaidOut(true); setDisplayDimens(100, 200); target.getSize(cb); verify(cb).onSizeReady(200, height); }
@Test public void getSize_withBothWrapContent_usesDisplayDimens() { LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); view.setLayoutParams(layoutParams); shadowView.setIsLaidOut(true); setDisplayDimens(200, 300); target.getSize(cb); verify(cb).onSizeReady(300, 300); }
@Test public void testCanObtainSizeFromViewWhenGivenViewInConstructor() { int width = 100; int height = 200; view.setLayoutParams(new ViewGroup.LayoutParams(width, height)); view.layout(0, 0, width, height); provider = new ViewPreloadSizeProvider<>(view); int[] size = provider.getPreloadSize(new Object(), 0, 0); assertThat(size).asList().containsExactly(width, height); } }
@Test public void testDecreasesDimensionsByViewPadding() { view.setLayoutParams(new LayoutParams(100, 100)); view.setPadding(25, 25, 25, 25); shadowView.setIsLaidOut(true); target.getSize(cb); verify(cb).onSizeReady(50, 50); }
@Test public void testSizeCallbackIsCalledPreDrawIfNoDimensAndNoLayoutParamsButLayoutParamsSetLater() { target.getSize(cb); int width = 689; int height = 354; LayoutParams layoutParams = new LayoutParams(width, height); view.setLayoutParams(layoutParams); shadowView.setIsLaidOut(true); shadowObserver.fireOnPreDrawListeners(); verify(cb).onSizeReady(eq(width), eq(height)); }
@Test public void getSize_withWrapContentHeightAndValidWidth_returnsWidthAndDisplayDimen() { int width = 100; LayoutParams params = new LayoutParams(width, LayoutParams.WRAP_CONTENT); view.setLayoutParams(params); shadowView.setIsLaidOut(true); setDisplayDimens(200, 100); target.getSize(cb); verify(cb).onSizeReady(width, 200); }