ExplodeTest.java revision ac5fe7c617c66850fff75a9fce9979c6e5674b0f
1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package androidx.transition;
18
19import static org.hamcrest.CoreMatchers.is;
20import static org.hamcrest.Matchers.greaterThan;
21import static org.hamcrest.Matchers.lessThan;
22import static org.junit.Assert.assertEquals;
23import static org.junit.Assert.assertThat;
24import static org.mockito.Matchers.any;
25import static org.mockito.Mockito.never;
26import static org.mockito.Mockito.verify;
27
28import android.os.SystemClock;
29import android.support.test.InstrumentationRegistry;
30import android.support.test.filters.MediumTest;
31import androidx.transition.test.R;
32import android.view.View;
33
34import org.junit.Test;
35
36@MediumTest
37public class ExplodeTest extends BaseTransitionTest {
38
39    @Override
40    Transition createTransition() {
41        return new Explode();
42    }
43
44    @Test
45    public void testExplode() throws Throwable {
46        enterScene(R.layout.scene10);
47        final View redSquare = rule.getActivity().findViewById(R.id.redSquare);
48        final View greenSquare = rule.getActivity().findViewById(R.id.greenSquare);
49        final View blueSquare = rule.getActivity().findViewById(R.id.blueSquare);
50        final View yellowSquare = rule.getActivity().findViewById(R.id.yellowSquare);
51
52        rule.runOnUiThread(new Runnable() {
53            @Override
54            public void run() {
55                TransitionManager.beginDelayedTransition(mRoot, mTransition);
56                redSquare.setVisibility(View.INVISIBLE);
57                greenSquare.setVisibility(View.INVISIBLE);
58                blueSquare.setVisibility(View.INVISIBLE);
59                yellowSquare.setVisibility(View.INVISIBLE);
60            }
61        });
62        waitForStart();
63        verify(mListener, never()).onTransitionEnd(any(Transition.class));
64        assertEquals(View.VISIBLE, redSquare.getVisibility());
65        assertEquals(View.VISIBLE, greenSquare.getVisibility());
66        assertEquals(View.VISIBLE, blueSquare.getVisibility());
67        assertEquals(View.VISIBLE, yellowSquare.getVisibility());
68        float redStartX = redSquare.getTranslationX();
69        float redStartY = redSquare.getTranslationY();
70
71        SystemClock.sleep(100);
72        verifyTranslation(redSquare, true, true);
73        verifyTranslation(greenSquare, false, true);
74        verifyTranslation(blueSquare, false, false);
75        verifyTranslation(yellowSquare, true, false);
76        assertThat(redStartX, is(greaterThan(redSquare.getTranslationX()))); // moving left
77        assertThat(redStartY, is(greaterThan(redSquare.getTranslationY()))); // moving up
78        waitForEnd();
79
80        verifyNoTranslation(redSquare);
81        verifyNoTranslation(greenSquare);
82        verifyNoTranslation(blueSquare);
83        verifyNoTranslation(yellowSquare);
84        assertEquals(View.INVISIBLE, redSquare.getVisibility());
85        assertEquals(View.INVISIBLE, greenSquare.getVisibility());
86        assertEquals(View.INVISIBLE, blueSquare.getVisibility());
87        assertEquals(View.INVISIBLE, yellowSquare.getVisibility());
88    }
89
90    @Test
91    public void testImplode() throws Throwable {
92        enterScene(R.layout.scene10);
93        final View redSquare = rule.getActivity().findViewById(R.id.redSquare);
94        final View greenSquare = rule.getActivity().findViewById(R.id.greenSquare);
95        final View blueSquare = rule.getActivity().findViewById(R.id.blueSquare);
96        final View yellowSquare = rule.getActivity().findViewById(R.id.yellowSquare);
97
98        rule.runOnUiThread(new Runnable() {
99            @Override
100            public void run() {
101                redSquare.setVisibility(View.INVISIBLE);
102                greenSquare.setVisibility(View.INVISIBLE);
103                blueSquare.setVisibility(View.INVISIBLE);
104                yellowSquare.setVisibility(View.INVISIBLE);
105            }
106        });
107        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
108
109        rule.runOnUiThread(new Runnable() {
110            @Override
111            public void run() {
112                TransitionManager.beginDelayedTransition(mRoot, mTransition);
113                redSquare.setVisibility(View.VISIBLE);
114                greenSquare.setVisibility(View.VISIBLE);
115                blueSquare.setVisibility(View.VISIBLE);
116                yellowSquare.setVisibility(View.VISIBLE);
117            }
118        });
119        waitForStart();
120
121        assertEquals(View.VISIBLE, redSquare.getVisibility());
122        assertEquals(View.VISIBLE, greenSquare.getVisibility());
123        assertEquals(View.VISIBLE, blueSquare.getVisibility());
124        assertEquals(View.VISIBLE, yellowSquare.getVisibility());
125        float redStartX = redSquare.getTranslationX();
126        float redStartY = redSquare.getTranslationY();
127
128        SystemClock.sleep(100);
129        verifyTranslation(redSquare, true, true);
130        verifyTranslation(greenSquare, false, true);
131        verifyTranslation(blueSquare, false, false);
132        verifyTranslation(yellowSquare, true, false);
133        assertThat(redStartX, is(lessThan(redSquare.getTranslationX()))); // moving right
134        assertThat(redStartY, is(lessThan(redSquare.getTranslationY()))); // moving down
135        waitForEnd();
136
137        verifyNoTranslation(redSquare);
138        verifyNoTranslation(greenSquare);
139        verifyNoTranslation(blueSquare);
140        verifyNoTranslation(yellowSquare);
141        assertEquals(View.VISIBLE, redSquare.getVisibility());
142        assertEquals(View.VISIBLE, greenSquare.getVisibility());
143        assertEquals(View.VISIBLE, blueSquare.getVisibility());
144        assertEquals(View.VISIBLE, yellowSquare.getVisibility());
145    }
146
147    private void verifyTranslation(View view, boolean goLeft, boolean goUp) {
148        float translationX = view.getTranslationX();
149        float translationY = view.getTranslationY();
150
151        if (goLeft) {
152            assertThat(translationX, is(lessThan(0.f)));
153        } else {
154            assertThat(translationX, is(greaterThan(0.f)));
155        }
156
157        if (goUp) {
158            assertThat(translationY, is(lessThan(0.f)));
159        } else {
160            assertThat(translationY, is(greaterThan(0.f)));
161        }
162    }
163
164    private void verifyNoTranslation(View view) {
165        assertEquals(0f, view.getTranslationX(), 0.0f);
166        assertEquals(0f, view.getTranslationY(), 0.0f);
167    }
168
169}
170