ExplodeTest.java revision b31c3281d870e9abb673db239234d580dcc4feff
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