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