diff options
Diffstat (limited to 'android/support/transition/SlideEdgeTest.java')
-rw-r--r-- | android/support/transition/SlideEdgeTest.java | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/android/support/transition/SlideEdgeTest.java b/android/support/transition/SlideEdgeTest.java new file mode 100644 index 00000000..af8d0b62 --- /dev/null +++ b/android/support/transition/SlideEdgeTest.java @@ -0,0 +1,273 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.support.transition; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; + +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.LargeTest; +import android.support.test.filters.MediumTest; +import android.support.transition.test.R; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; + +import org.junit.Test; + +@MediumTest +public class SlideEdgeTest extends BaseTransitionTest { + + private static final Object[][] sSlideEdgeArray = { + {Gravity.START, "START"}, + {Gravity.END, "END"}, + {Gravity.LEFT, "LEFT"}, + {Gravity.TOP, "TOP"}, + {Gravity.RIGHT, "RIGHT"}, + {Gravity.BOTTOM, "BOTTOM"}, + }; + + @Test + public void testSetSide() throws Throwable { + for (int i = 0; i < sSlideEdgeArray.length; i++) { + int slideEdge = (Integer) (sSlideEdgeArray[i][0]); + String edgeName = (String) (sSlideEdgeArray[i][1]); + Slide slide = new Slide(slideEdge); + assertEquals("Edge not set properly in constructor " + edgeName, + slideEdge, slide.getSlideEdge()); + + slide = new Slide(); + slide.setSlideEdge(slideEdge); + assertEquals("Edge not set properly with setter " + edgeName, + slideEdge, slide.getSlideEdge()); + } + } + + @LargeTest + @Test + public void testSlideOut() throws Throwable { + for (int i = 0; i < sSlideEdgeArray.length; i++) { + final int slideEdge = (Integer) (sSlideEdgeArray[i][0]); + final Slide slide = new Slide(slideEdge); + final Transition.TransitionListener listener = + mock(Transition.TransitionListener.class); + slide.addListener(listener); + + rule.runOnUiThread(new Runnable() { + @Override + public void run() { + rule.getActivity().setContentView(R.layout.scene1); + } + }); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + + final View redSquare = rule.getActivity().findViewById(R.id.redSquare); + final View greenSquare = rule.getActivity().findViewById(R.id.greenSquare); + final View hello = rule.getActivity().findViewById(R.id.hello); + final ViewGroup sceneRoot = (ViewGroup) rule.getActivity().findViewById(R.id.holder); + + rule.runOnUiThread(new Runnable() { + @Override + public void run() { + TransitionManager.beginDelayedTransition(sceneRoot, slide); + redSquare.setVisibility(View.INVISIBLE); + greenSquare.setVisibility(View.INVISIBLE); + hello.setVisibility(View.INVISIBLE); + } + }); + verify(listener, timeout(1000)).onTransitionStart(any(Transition.class)); + verify(listener, never()).onTransitionEnd(any(Transition.class)); + assertEquals(View.VISIBLE, redSquare.getVisibility()); + assertEquals(View.VISIBLE, greenSquare.getVisibility()); + assertEquals(View.VISIBLE, hello.getVisibility()); + + float redStartX = redSquare.getTranslationX(); + float redStartY = redSquare.getTranslationY(); + + Thread.sleep(200); + verifyTranslation(slideEdge, redSquare); + verifyTranslation(slideEdge, greenSquare); + verifyTranslation(slideEdge, hello); + + final float redMidX = redSquare.getTranslationX(); + final float redMidY = redSquare.getTranslationY(); + + switch (slideEdge) { + case Gravity.LEFT: + case Gravity.START: + assertTrue( + "isn't sliding out to left. Expecting " + redStartX + " > " + redMidX, + redStartX > redMidX); + break; + case Gravity.RIGHT: + case Gravity.END: + assertTrue( + "isn't sliding out to right. Expecting " + redStartX + " < " + redMidX, + redStartX < redMidX); + break; + case Gravity.TOP: + assertTrue("isn't sliding out to top. Expecting " + redStartY + " > " + redMidY, + redStartY > redSquare.getTranslationY()); + break; + case Gravity.BOTTOM: + assertTrue( + "isn't sliding out to bottom. Expecting " + redStartY + " < " + redMidY, + redStartY < redSquare.getTranslationY()); + break; + } + verify(listener, timeout(1000)).onTransitionEnd(any(Transition.class)); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + + verifyNoTranslation(redSquare); + verifyNoTranslation(greenSquare); + verifyNoTranslation(hello); + assertEquals(View.INVISIBLE, redSquare.getVisibility()); + assertEquals(View.INVISIBLE, greenSquare.getVisibility()); + assertEquals(View.INVISIBLE, hello.getVisibility()); + } + } + + @LargeTest + @Test + public void testSlideIn() throws Throwable { + for (int i = 0; i < sSlideEdgeArray.length; i++) { + final int slideEdge = (Integer) (sSlideEdgeArray[i][0]); + final Slide slide = new Slide(slideEdge); + final Transition.TransitionListener listener = + mock(Transition.TransitionListener.class); + slide.addListener(listener); + + rule.runOnUiThread(new Runnable() { + @Override + public void run() { + rule.getActivity().setContentView(R.layout.scene1); + } + }); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + + final View redSquare = rule.getActivity().findViewById(R.id.redSquare); + final View greenSquare = rule.getActivity().findViewById(R.id.greenSquare); + final View hello = rule.getActivity().findViewById(R.id.hello); + final ViewGroup sceneRoot = (ViewGroup) rule.getActivity().findViewById(R.id.holder); + + rule.runOnUiThread(new Runnable() { + @Override + public void run() { + redSquare.setVisibility(View.INVISIBLE); + greenSquare.setVisibility(View.INVISIBLE); + hello.setVisibility(View.INVISIBLE); + } + }); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + + // now slide in + rule.runOnUiThread(new Runnable() { + @Override + public void run() { + TransitionManager.beginDelayedTransition(sceneRoot, slide); + redSquare.setVisibility(View.VISIBLE); + greenSquare.setVisibility(View.VISIBLE); + hello.setVisibility(View.VISIBLE); + } + }); + verify(listener, timeout(1000)).onTransitionStart(any(Transition.class)); + + verify(listener, never()).onTransitionEnd(any(Transition.class)); + assertEquals(View.VISIBLE, redSquare.getVisibility()); + assertEquals(View.VISIBLE, greenSquare.getVisibility()); + assertEquals(View.VISIBLE, hello.getVisibility()); + + final float redStartX = redSquare.getTranslationX(); + final float redStartY = redSquare.getTranslationY(); + + Thread.sleep(200); + verifyTranslation(slideEdge, redSquare); + verifyTranslation(slideEdge, greenSquare); + verifyTranslation(slideEdge, hello); + final float redMidX = redSquare.getTranslationX(); + final float redMidY = redSquare.getTranslationY(); + + switch (slideEdge) { + case Gravity.LEFT: + case Gravity.START: + assertTrue( + "isn't sliding in from left. Expecting " + redStartX + " < " + redMidX, + redStartX < redMidX); + break; + case Gravity.RIGHT: + case Gravity.END: + assertTrue( + "isn't sliding in from right. Expecting " + redStartX + " > " + redMidX, + redStartX > redMidX); + break; + case Gravity.TOP: + assertTrue( + "isn't sliding in from top. Expecting " + redStartY + " < " + redMidY, + redStartY < redSquare.getTranslationY()); + break; + case Gravity.BOTTOM: + assertTrue("isn't sliding in from bottom. Expecting " + redStartY + " > " + + redMidY, + redStartY > redSquare.getTranslationY()); + break; + } + verify(listener, timeout(1000)).onTransitionEnd(any(Transition.class)); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + + verifyNoTranslation(redSquare); + verifyNoTranslation(greenSquare); + verifyNoTranslation(hello); + assertEquals(View.VISIBLE, redSquare.getVisibility()); + assertEquals(View.VISIBLE, greenSquare.getVisibility()); + assertEquals(View.VISIBLE, hello.getVisibility()); + } + } + + private void verifyTranslation(int slideEdge, View view) { + switch (slideEdge) { + case Gravity.LEFT: + case Gravity.START: + assertTrue(view.getTranslationX() < 0); + assertEquals(0f, view.getTranslationY(), 0.01f); + break; + case Gravity.RIGHT: + case Gravity.END: + assertTrue(view.getTranslationX() > 0); + assertEquals(0f, view.getTranslationY(), 0.01f); + break; + case Gravity.TOP: + assertTrue(view.getTranslationY() < 0); + assertEquals(0f, view.getTranslationX(), 0.01f); + break; + case Gravity.BOTTOM: + assertTrue(view.getTranslationY() > 0); + assertEquals(0f, view.getTranslationX(), 0.01f); + break; + } + } + + private void verifyNoTranslation(View view) { + assertEquals(0f, view.getTranslationX(), 0.01f); + assertEquals(0f, view.getTranslationY(), 0.01f); + } + +} |