1ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki/* 2ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * Copyright (C) 2017 The Android Open Source Project 3ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * 4ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 5ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * you may not use this file except in compliance with the License. 6ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * You may obtain a copy of the License at 7ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * 8ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 9ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * 10ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * Unless required by applicable law or agreed to in writing, software 11ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 12ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * See the License for the specific language governing permissions and 14ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki * limitations under the License. 15ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki */ 16ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 17ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakipackage android.support.transition; 18ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 19ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport static org.junit.Assert.assertEquals; 20ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport static org.junit.Assert.assertTrue; 21ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport static org.mockito.Matchers.any; 22ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport static org.mockito.Mockito.mock; 23ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport static org.mockito.Mockito.never; 24ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport static org.mockito.Mockito.timeout; 25ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport static org.mockito.Mockito.verify; 26ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 27ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport android.support.test.InstrumentationRegistry; 28e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikasimport android.support.test.filters.LargeTest; 29ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport android.support.test.filters.MediumTest; 30ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport android.support.transition.test.R; 31ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport android.view.Gravity; 32ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport android.view.View; 33ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport android.view.ViewGroup; 34ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 35ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakiimport org.junit.Test; 36ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 37ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki@MediumTest 38ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Arakipublic class SlideEdgeTest extends BaseTransitionTest { 39ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 40ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki private static final Object[][] sSlideEdgeArray = { 41ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki {Gravity.START, "START"}, 42ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki {Gravity.END, "END"}, 43ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki {Gravity.LEFT, "LEFT"}, 44ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki {Gravity.TOP, "TOP"}, 45ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki {Gravity.RIGHT, "RIGHT"}, 46ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki {Gravity.BOTTOM, "BOTTOM"}, 47ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki }; 48ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 49ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Test 50ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void testSetSide() throws Throwable { 51ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki for (int i = 0; i < sSlideEdgeArray.length; i++) { 52ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki int slideEdge = (Integer) (sSlideEdgeArray[i][0]); 53ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki String edgeName = (String) (sSlideEdgeArray[i][1]); 54ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki Slide slide = new Slide(slideEdge); 55ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals("Edge not set properly in constructor " + edgeName, 56ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki slideEdge, slide.getSlideEdge()); 57ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 58ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki slide = new Slide(); 59ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki slide.setSlideEdge(slideEdge); 60ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals("Edge not set properly with setter " + edgeName, 61ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki slideEdge, slide.getSlideEdge()); 62ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 63ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 64ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 65e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikas @LargeTest 66ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Test 67ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void testSlideOut() throws Throwable { 68ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki for (int i = 0; i < sSlideEdgeArray.length; i++) { 69ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final int slideEdge = (Integer) (sSlideEdgeArray[i][0]); 70ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final Slide slide = new Slide(slideEdge); 71ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final Transition.TransitionListener listener = 72ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki mock(Transition.TransitionListener.class); 73ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki slide.addListener(listener); 74ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 75ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki rule.runOnUiThread(new Runnable() { 76ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Override 77ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void run() { 78ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki rule.getActivity().setContentView(R.layout.scene1); 79ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 80ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki }); 81ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 82ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 83ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final View redSquare = rule.getActivity().findViewById(R.id.redSquare); 84ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final View greenSquare = rule.getActivity().findViewById(R.id.greenSquare); 85ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final View hello = rule.getActivity().findViewById(R.id.hello); 86ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final ViewGroup sceneRoot = (ViewGroup) rule.getActivity().findViewById(R.id.holder); 87ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 88ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki rule.runOnUiThread(new Runnable() { 89ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Override 90ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void run() { 91ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki TransitionManager.beginDelayedTransition(sceneRoot, slide); 92ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redSquare.setVisibility(View.INVISIBLE); 93ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki greenSquare.setVisibility(View.INVISIBLE); 94ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki hello.setVisibility(View.INVISIBLE); 95ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 96ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki }); 97ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verify(listener, timeout(1000)).onTransitionStart(any(Transition.class)); 98ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verify(listener, never()).onTransitionEnd(any(Transition.class)); 99ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, redSquare.getVisibility()); 100ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, greenSquare.getVisibility()); 101ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, hello.getVisibility()); 102ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 103ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki float redStartX = redSquare.getTranslationX(); 104ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki float redStartY = redSquare.getTranslationY(); 105ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 106ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki Thread.sleep(200); 107ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyTranslation(slideEdge, redSquare); 108ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyTranslation(slideEdge, greenSquare); 109ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyTranslation(slideEdge, hello); 110ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 111ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final float redMidX = redSquare.getTranslationX(); 112ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final float redMidY = redSquare.getTranslationY(); 113ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 114ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki switch (slideEdge) { 115ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.LEFT: 116ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.START: 117ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue( 118ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki "isn't sliding out to left. Expecting " + redStartX + " > " + redMidX, 119ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartX > redMidX); 120ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 121ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.RIGHT: 122ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.END: 123ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue( 124ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki "isn't sliding out to right. Expecting " + redStartX + " < " + redMidX, 125ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartX < redMidX); 126ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 127ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.TOP: 128ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue("isn't sliding out to top. Expecting " + redStartY + " > " + redMidY, 129ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartY > redSquare.getTranslationY()); 130ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 131ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.BOTTOM: 132ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue( 133ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki "isn't sliding out to bottom. Expecting " + redStartY + " < " + redMidY, 134ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartY < redSquare.getTranslationY()); 135ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 136ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 137ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verify(listener, timeout(1000)).onTransitionEnd(any(Transition.class)); 138ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 139ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 140ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyNoTranslation(redSquare); 141ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyNoTranslation(greenSquare); 142ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyNoTranslation(hello); 143ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.INVISIBLE, redSquare.getVisibility()); 144ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.INVISIBLE, greenSquare.getVisibility()); 145ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.INVISIBLE, hello.getVisibility()); 146ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 147ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 148ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 149e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikas @LargeTest 150ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Test 151ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void testSlideIn() throws Throwable { 152ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki for (int i = 0; i < sSlideEdgeArray.length; i++) { 153ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final int slideEdge = (Integer) (sSlideEdgeArray[i][0]); 154ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final Slide slide = new Slide(slideEdge); 155ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final Transition.TransitionListener listener = 156ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki mock(Transition.TransitionListener.class); 157ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki slide.addListener(listener); 158ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 159ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki rule.runOnUiThread(new Runnable() { 160ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Override 161ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void run() { 162ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki rule.getActivity().setContentView(R.layout.scene1); 163ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 164ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki }); 165ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 166ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 167ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final View redSquare = rule.getActivity().findViewById(R.id.redSquare); 168ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final View greenSquare = rule.getActivity().findViewById(R.id.greenSquare); 169ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final View hello = rule.getActivity().findViewById(R.id.hello); 170ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final ViewGroup sceneRoot = (ViewGroup) rule.getActivity().findViewById(R.id.holder); 171ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 172ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki rule.runOnUiThread(new Runnable() { 173ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Override 174ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void run() { 175ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redSquare.setVisibility(View.INVISIBLE); 176ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki greenSquare.setVisibility(View.INVISIBLE); 177ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki hello.setVisibility(View.INVISIBLE); 178ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 179ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki }); 180ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 181ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 182ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki // now slide in 183ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki rule.runOnUiThread(new Runnable() { 184ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki @Override 185ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki public void run() { 186ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki TransitionManager.beginDelayedTransition(sceneRoot, slide); 187ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redSquare.setVisibility(View.VISIBLE); 188ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki greenSquare.setVisibility(View.VISIBLE); 189ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki hello.setVisibility(View.VISIBLE); 190ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 191ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki }); 192ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verify(listener, timeout(1000)).onTransitionStart(any(Transition.class)); 193ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 194ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verify(listener, never()).onTransitionEnd(any(Transition.class)); 195ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, redSquare.getVisibility()); 196ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, greenSquare.getVisibility()); 197ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, hello.getVisibility()); 198ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 199ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final float redStartX = redSquare.getTranslationX(); 200ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final float redStartY = redSquare.getTranslationY(); 201ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 202ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki Thread.sleep(200); 203ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyTranslation(slideEdge, redSquare); 204ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyTranslation(slideEdge, greenSquare); 205ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyTranslation(slideEdge, hello); 206ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final float redMidX = redSquare.getTranslationX(); 207ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki final float redMidY = redSquare.getTranslationY(); 208ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 209ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki switch (slideEdge) { 210ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.LEFT: 211ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.START: 212ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue( 213ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki "isn't sliding in from left. Expecting " + redStartX + " < " + redMidX, 214ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartX < redMidX); 215ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 216ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.RIGHT: 217ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.END: 218ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue( 219ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki "isn't sliding in from right. Expecting " + redStartX + " > " + redMidX, 220ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartX > redMidX); 221ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 222ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.TOP: 223ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue( 224ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki "isn't sliding in from top. Expecting " + redStartY + " < " + redMidY, 225ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartY < redSquare.getTranslationY()); 226ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 227ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.BOTTOM: 228ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue("isn't sliding in from bottom. Expecting " + redStartY + " > " 229ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki + redMidY, 230ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki redStartY > redSquare.getTranslationY()); 231ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 232ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 233ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verify(listener, timeout(1000)).onTransitionEnd(any(Transition.class)); 234ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 235ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 236ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyNoTranslation(redSquare); 237ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyNoTranslation(greenSquare); 238ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki verifyNoTranslation(hello); 239ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, redSquare.getVisibility()); 240ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, greenSquare.getVisibility()); 241ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(View.VISIBLE, hello.getVisibility()); 242ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 243ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 244ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 245ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki private void verifyTranslation(int slideEdge, View view) { 246ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki switch (slideEdge) { 247ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.LEFT: 248ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.START: 249ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue(view.getTranslationX() < 0); 250ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(0f, view.getTranslationY(), 0.01f); 251ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 252ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.RIGHT: 253ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.END: 254ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue(view.getTranslationX() > 0); 255ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(0f, view.getTranslationY(), 0.01f); 256ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 257ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.TOP: 258ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue(view.getTranslationY() < 0); 259ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(0f, view.getTranslationX(), 0.01f); 260ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 261ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki case Gravity.BOTTOM: 262ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertTrue(view.getTranslationY() > 0); 263ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(0f, view.getTranslationX(), 0.01f); 264ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki break; 265ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 266ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 267ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 268ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki private void verifyNoTranslation(View view) { 269ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(0f, view.getTranslationX(), 0.01f); 270ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki assertEquals(0f, view.getTranslationY(), 0.01f); 271ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki } 272ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki 273ae4925aede60914bcca5ed47d7ce868ae14313a2Yuichi Araki} 274