Loading core/tests/coretests/src/android/animation/ValueAnimatorTests.java +112 −91 Original line number Diff line number Diff line Loading @@ -15,20 +15,35 @@ */ package android.animation; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemClock; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.SmallTest; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.MediumTest; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.view.Choreographer; import android.view.animation.LinearInterpolator; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; import static android.test.MoreAsserts.assertNotEqual; public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAnimatorActivity> { @RunWith(AndroidJUnit4.class) @MediumTest public class ValueAnimatorTests { private static final long WAIT_TIME_OUT = 5000; private ValueAnimator a1; private ValueAnimator a2; Loading @@ -45,25 +60,22 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn private final static long DEFAULT_FRAME_INTERVAL = 5; //ms private final static long COMMIT_DELAY = 3; //ms public ValueAnimatorTests() { super(BasicAnimatorActivity.class); } private ActivityTestRule<BasicAnimatorActivity> mActivityRule = new ActivityTestRule<>(BasicAnimatorActivity.class); @Override @Before public void setUp() throws Exception { super.setUp(); a1 = ValueAnimator.ofFloat(A1_START_VALUE, A1_END_VALUE).setDuration(300); a2 = ValueAnimator.ofInt(A2_START_VALUE, A2_END_VALUE).setDuration(500); } @Override @After public void tearDown() throws Exception { a1 = null; a2 = null; super.tearDown(); } @SmallTest @Test public void testStartDelay() throws Throwable { final ValueAnimator a = ValueAnimator.ofFloat(5f, 20f); assertEquals(a.getStartDelay(), 0); Loading @@ -75,7 +87,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a.addUpdateListener(listener); final long[] startTime = new long[1]; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Test the time between isRunning() and isStarted() Loading @@ -89,7 +101,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(listener.wasRunning); Loading @@ -98,7 +110,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a.isStarted()); Loading @@ -106,7 +118,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testListenerCallbacks() throws Throwable { final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); Loading @@ -121,7 +133,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(l2.cancelCalled); assertFalse(l2.endCalled); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -133,7 +145,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); wait += POLL_INTERVAL; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.cancelCalled); Loading @@ -144,7 +156,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); while (wait < a2.getStartDelay()) { runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Make sure a2's start listener isn't called during start delay. Loading @@ -159,7 +171,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long delay = Math.max(a1.getTotalDuration(), a2.getTotalDuration()) + TOLERANCE; Thread.sleep(delay); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // a1 is canceled. Loading @@ -175,7 +187,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testIsStarted() throws Throwable { assertFalse(a1.isStarted()); assertFalse(a2.isStarted()); Loading @@ -185,7 +197,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.setStartDelay(startDelay); final long[] startTime = new long[1]; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -199,7 +211,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn while (delayMs < startDelay) { Thread.sleep(POLL_INTERVAL); delayMs += POLL_INTERVAL; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { if (SystemClock.uptimeMillis() - startTime[0] < startDelay) { Loading @@ -210,7 +222,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } Thread.sleep(startDelay); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a1.isRunning()); Loading @@ -220,7 +232,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long delay = Math.max(a1.getTotalDuration(), a2.getTotalDuration()) * 2; Thread.sleep(delay); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -231,9 +243,9 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testPause() throws Throwable { runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isPaused()); Loading @@ -250,7 +262,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a1.isRunning()); Loading @@ -263,7 +275,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a2.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // By this time, a2 should have finished, and a1 is still paused Loading @@ -278,7 +290,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a1.isRunning()); Loading @@ -288,7 +300,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // a1 should finish by now. Loading @@ -300,7 +312,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testPauseListener() throws Throwable { MyPauseListener l1 = new MyPauseListener(); MyPauseListener l2 = new MyPauseListener(); Loading @@ -312,7 +324,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(l2.pauseCalled); assertFalse(l2.resumeCalled); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -328,7 +340,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // Only a1's pause listener should be called. assertTrue(l1.pauseCalled); assertFalse(l1.resumeCalled); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.resume(); Loading @@ -343,7 +355,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(l2.resumeCalled); } @SmallTest @Test public void testResume() throws Throwable { final MyUpdateListener l1 = new MyUpdateListener(); final long totalDuration = a1.getTotalDuration(); Loading @@ -355,7 +367,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn final long[] lastUpdate = new long[1]; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -364,7 +376,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(totalDuration / 2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.firstRunningFrameTime > 0); Loading @@ -376,7 +388,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(totalDuration); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // There should be no update after pause() Loading @@ -387,7 +399,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn do { Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.lastUpdateTime > lastUpdate[0]); Loading @@ -402,7 +414,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertTrue(Math.abs(entireSpan - frameDelta) < TOLERANCE); } @SmallTest @Test public void testEnd() throws Throwable { final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); Loading @@ -421,7 +433,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.cancelCalled); Loading @@ -433,7 +445,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.end(); Loading @@ -441,7 +453,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Calling cancel from onAnimationEnd will be ignored. Loading @@ -459,7 +471,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testEndValue() throws Throwable { final MyListener l1 = new MyListener(); a1.addListener(l1); Loading @@ -467,7 +479,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn final MyListener l2 = new MyListener(); a2.addListener(l2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -476,7 +488,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Animation has started but not finished, check animated values against end values Loading @@ -492,7 +504,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.cancelCalled); Loading @@ -508,7 +520,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testUpdateListener() throws InterruptedException { final MyFrameCallbackProvider provider = new MyFrameCallbackProvider(); Loading @@ -530,13 +542,13 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long currentTime = SystemClock.uptimeMillis(); long frameDelay = provider.getFrameDelay(); if (lastUpdateTime > 0) { // Error tolerance here is one frame. assertTrue((currentTime - lastUpdateTime) < frameDelay * 2); // Error tolerance here is 3 frame. assertTrue((currentTime - lastUpdateTime) < frameDelay * 4); } else { // First frame: assertTrue(listener.startCalled); assertTrue(listener.startTime > 0); assertTrue(currentTime - listener.startTime < frameDelay * 2); assertTrue(currentTime - listener.startTime < frameDelay * 4); } super.onAnimationUpdate(animation); } Loading @@ -556,6 +568,9 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertTrue(a1.isStarted()); Thread.sleep(a1.getTotalDuration() + TOLERANCE); // Finished by now. if (provider.mAssertionError != null) { throw provider.mAssertionError; } assertFalse(a1.isStarted()); assertTrue(listener.endTime > 0); Loading @@ -565,7 +580,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testConcurrentModification() throws Throwable { // Attempt to modify list of animations as the list is being iterated final ValueAnimator a0 = ValueAnimator.ofInt(100, 200).setDuration(500); Loading @@ -585,7 +600,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }; a2.addListener(listener); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a0.start(); Loading @@ -595,7 +610,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a4.start(); } }); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a0.isStarted()); Loading @@ -606,7 +621,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // End the animator that should be in the middle of the list. Loading @@ -622,7 +637,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(a4.isStarted()); } @SmallTest @Test public void testSeek() throws Throwable { final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); Loading @@ -643,7 +658,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.setInterpolator(interpolator); a2.setInterpolator(interpolator); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -664,7 +679,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); // Start animation and seek during the animation. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -681,7 +696,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); final float halfwayFraction = 0.5f; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -706,7 +721,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); // Check that seeking during running doesn't change animation's internal state runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -725,7 +740,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long wait = Math.max(a1.getTotalDuration(), a2.getTotalDuration()); Thread.sleep(wait); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Verify that the animators have finished. Loading @@ -742,7 +757,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // Re-start animator a1 after it ends normally, and check that seek value from last run // does not affect the new run. updateListener1.reset(); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -750,7 +765,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(updateListener1.wasRunning); Loading @@ -762,14 +777,14 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testSeekWhileRunning() throws Throwable { // Seek one animator to the beginning and the other one to the end when they are running. final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); a1.addListener(l1); a2.addListener(l2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -781,7 +796,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.endCalled); Loading @@ -794,7 +809,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Check that a2 has finished due to the seeking, but a1 hasn't finished. Loading @@ -805,7 +820,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // By now a1 should finish also. Loading @@ -815,7 +830,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testEndBeforeStart() throws Throwable { // This test calls two animators that are not yet started. One animator has completed a // previous run but hasn't started since then, the other one has never run. When end() is Loading @@ -827,7 +842,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // First start a1's first run. final MyListener normalEndingListener = new MyListener(); a1.addListener(normalEndingListener); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -841,7 +856,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(a1.getTotalDuration() + POLL_INTERVAL); // a1 should have finished by now. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Call end() on both a1 and a2 without calling start() Loading Loading @@ -874,7 +889,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testZeroDuration() throws Throwable { // Run two animators with zero duration, with one running forward and the other one // backward. Check that the animations start and finish with the correct end fractions. Loading @@ -893,7 +908,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.addListener(l1); a2.addListener(l2); a3.addListener(l3); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -912,7 +927,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Check that the animators have started and finished with the right values. Loading @@ -932,7 +947,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testZeroScale() throws Throwable { // Test whether animations would end properly when the scale is forced to be zero float scale = ValueAnimator.getDurationScale(); Loading @@ -945,7 +960,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.addListener(l1); a2.addListener(l2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -963,7 +978,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -979,7 +994,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn ValueAnimator.setDurationScale(scale); } @SmallTest @Test public void testReverse() throws Throwable { // Prolong animators duration so that we can do multiple checks during their run final ValueAnimator a3 = ValueAnimator.ofInt(0, 100); Loading @@ -995,7 +1010,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // Reverse three animators, seek one to the beginning and another to the end, and force // to end the third one during reversing. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -1010,7 +1025,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -1029,7 +1044,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); // By now, a2 should have finished due to the seeking. It wouldn't have finished otherwise. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Check that both animations have started, and a2 has finished. Loading @@ -1040,7 +1055,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Verify that a1 has finished as well. Loading Loading @@ -1128,6 +1143,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn private final static int MSG_FRAME = 0; private long mFrameDelay = DEFAULT_FRAME_INTERVAL; private ArrayList<Choreographer.FrameCallback> mFrameCallbacks = new ArrayList<>(); volatile AssertionError mAssertionError = null; final LooperThread mThread = new LooperThread(); Loading Loading @@ -1173,6 +1189,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { try { // Handle message here. switch (msg.what) { case MSG_FRAME: Loading @@ -1183,6 +1200,10 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn default: break; } } catch (AssertionError e) { mAssertionError = e; Looper.myLooper().quit(); } } }; Looper.loop(); Loading Loading
core/tests/coretests/src/android/animation/ValueAnimatorTests.java +112 −91 Original line number Diff line number Diff line Loading @@ -15,20 +15,35 @@ */ package android.animation; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemClock; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.SmallTest; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.MediumTest; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.view.Choreographer; import android.view.animation.LinearInterpolator; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.util.ArrayList; import static android.test.MoreAsserts.assertNotEqual; public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAnimatorActivity> { @RunWith(AndroidJUnit4.class) @MediumTest public class ValueAnimatorTests { private static final long WAIT_TIME_OUT = 5000; private ValueAnimator a1; private ValueAnimator a2; Loading @@ -45,25 +60,22 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn private final static long DEFAULT_FRAME_INTERVAL = 5; //ms private final static long COMMIT_DELAY = 3; //ms public ValueAnimatorTests() { super(BasicAnimatorActivity.class); } private ActivityTestRule<BasicAnimatorActivity> mActivityRule = new ActivityTestRule<>(BasicAnimatorActivity.class); @Override @Before public void setUp() throws Exception { super.setUp(); a1 = ValueAnimator.ofFloat(A1_START_VALUE, A1_END_VALUE).setDuration(300); a2 = ValueAnimator.ofInt(A2_START_VALUE, A2_END_VALUE).setDuration(500); } @Override @After public void tearDown() throws Exception { a1 = null; a2 = null; super.tearDown(); } @SmallTest @Test public void testStartDelay() throws Throwable { final ValueAnimator a = ValueAnimator.ofFloat(5f, 20f); assertEquals(a.getStartDelay(), 0); Loading @@ -75,7 +87,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a.addUpdateListener(listener); final long[] startTime = new long[1]; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Test the time between isRunning() and isStarted() Loading @@ -89,7 +101,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(listener.wasRunning); Loading @@ -98,7 +110,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a.isStarted()); Loading @@ -106,7 +118,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testListenerCallbacks() throws Throwable { final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); Loading @@ -121,7 +133,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(l2.cancelCalled); assertFalse(l2.endCalled); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -133,7 +145,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); wait += POLL_INTERVAL; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.cancelCalled); Loading @@ -144,7 +156,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); while (wait < a2.getStartDelay()) { runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Make sure a2's start listener isn't called during start delay. Loading @@ -159,7 +171,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long delay = Math.max(a1.getTotalDuration(), a2.getTotalDuration()) + TOLERANCE; Thread.sleep(delay); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // a1 is canceled. Loading @@ -175,7 +187,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testIsStarted() throws Throwable { assertFalse(a1.isStarted()); assertFalse(a2.isStarted()); Loading @@ -185,7 +197,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.setStartDelay(startDelay); final long[] startTime = new long[1]; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -199,7 +211,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn while (delayMs < startDelay) { Thread.sleep(POLL_INTERVAL); delayMs += POLL_INTERVAL; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { if (SystemClock.uptimeMillis() - startTime[0] < startDelay) { Loading @@ -210,7 +222,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } Thread.sleep(startDelay); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a1.isRunning()); Loading @@ -220,7 +232,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long delay = Math.max(a1.getTotalDuration(), a2.getTotalDuration()) * 2; Thread.sleep(delay); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -231,9 +243,9 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testPause() throws Throwable { runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isPaused()); Loading @@ -250,7 +262,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a1.isRunning()); Loading @@ -263,7 +275,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a2.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // By this time, a2 should have finished, and a1 is still paused Loading @@ -278,7 +290,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a1.isRunning()); Loading @@ -288,7 +300,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // a1 should finish by now. Loading @@ -300,7 +312,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testPauseListener() throws Throwable { MyPauseListener l1 = new MyPauseListener(); MyPauseListener l2 = new MyPauseListener(); Loading @@ -312,7 +324,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(l2.pauseCalled); assertFalse(l2.resumeCalled); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -328,7 +340,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // Only a1's pause listener should be called. assertTrue(l1.pauseCalled); assertFalse(l1.resumeCalled); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.resume(); Loading @@ -343,7 +355,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(l2.resumeCalled); } @SmallTest @Test public void testResume() throws Throwable { final MyUpdateListener l1 = new MyUpdateListener(); final long totalDuration = a1.getTotalDuration(); Loading @@ -355,7 +367,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn final long[] lastUpdate = new long[1]; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -364,7 +376,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(totalDuration / 2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.firstRunningFrameTime > 0); Loading @@ -376,7 +388,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(totalDuration); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // There should be no update after pause() Loading @@ -387,7 +399,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn do { Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.lastUpdateTime > lastUpdate[0]); Loading @@ -402,7 +414,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertTrue(Math.abs(entireSpan - frameDelta) < TOLERANCE); } @SmallTest @Test public void testEnd() throws Throwable { final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); Loading @@ -421,7 +433,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.cancelCalled); Loading @@ -433,7 +445,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.end(); Loading @@ -441,7 +453,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Calling cancel from onAnimationEnd will be ignored. Loading @@ -459,7 +471,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testEndValue() throws Throwable { final MyListener l1 = new MyListener(); a1.addListener(l1); Loading @@ -467,7 +479,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn final MyListener l2 = new MyListener(); a2.addListener(l2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -476,7 +488,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Animation has started but not finished, check animated values against end values Loading @@ -492,7 +504,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.cancelCalled); Loading @@ -508,7 +520,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testUpdateListener() throws InterruptedException { final MyFrameCallbackProvider provider = new MyFrameCallbackProvider(); Loading @@ -530,13 +542,13 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long currentTime = SystemClock.uptimeMillis(); long frameDelay = provider.getFrameDelay(); if (lastUpdateTime > 0) { // Error tolerance here is one frame. assertTrue((currentTime - lastUpdateTime) < frameDelay * 2); // Error tolerance here is 3 frame. assertTrue((currentTime - lastUpdateTime) < frameDelay * 4); } else { // First frame: assertTrue(listener.startCalled); assertTrue(listener.startTime > 0); assertTrue(currentTime - listener.startTime < frameDelay * 2); assertTrue(currentTime - listener.startTime < frameDelay * 4); } super.onAnimationUpdate(animation); } Loading @@ -556,6 +568,9 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertTrue(a1.isStarted()); Thread.sleep(a1.getTotalDuration() + TOLERANCE); // Finished by now. if (provider.mAssertionError != null) { throw provider.mAssertionError; } assertFalse(a1.isStarted()); assertTrue(listener.endTime > 0); Loading @@ -565,7 +580,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testConcurrentModification() throws Throwable { // Attempt to modify list of animations as the list is being iterated final ValueAnimator a0 = ValueAnimator.ofInt(100, 200).setDuration(500); Loading @@ -585,7 +600,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }; a2.addListener(listener); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a0.start(); Loading @@ -595,7 +610,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a4.start(); } }); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(a0.isStarted()); Loading @@ -606,7 +621,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // End the animator that should be in the middle of the list. Loading @@ -622,7 +637,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn assertFalse(a4.isStarted()); } @SmallTest @Test public void testSeek() throws Throwable { final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); Loading @@ -643,7 +658,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.setInterpolator(interpolator); a2.setInterpolator(interpolator); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -664,7 +679,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); // Start animation and seek during the animation. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -681,7 +696,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); final float halfwayFraction = 0.5f; runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -706,7 +721,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); // Check that seeking during running doesn't change animation's internal state runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -725,7 +740,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn long wait = Math.max(a1.getTotalDuration(), a2.getTotalDuration()); Thread.sleep(wait); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Verify that the animators have finished. Loading @@ -742,7 +757,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // Re-start animator a1 after it ends normally, and check that seek value from last run // does not affect the new run. updateListener1.reset(); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { a1.start(); Loading @@ -750,7 +765,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(updateListener1.wasRunning); Loading @@ -762,14 +777,14 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } @SmallTest @Test public void testSeekWhileRunning() throws Throwable { // Seek one animator to the beginning and the other one to the end when they are running. final MyListener l1 = new MyListener(); final MyListener l2 = new MyListener(); a1.addListener(l1); a2.addListener(l2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -781,7 +796,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.endCalled); Loading @@ -794,7 +809,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Check that a2 has finished due to the seeking, but a1 hasn't finished. Loading @@ -805,7 +820,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // By now a1 should finish also. Loading @@ -815,7 +830,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testEndBeforeStart() throws Throwable { // This test calls two animators that are not yet started. One animator has completed a // previous run but hasn't started since then, the other one has never run. When end() is Loading @@ -827,7 +842,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // First start a1's first run. final MyListener normalEndingListener = new MyListener(); a1.addListener(normalEndingListener); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(a1.isStarted()); Loading @@ -841,7 +856,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(a1.getTotalDuration() + POLL_INTERVAL); // a1 should have finished by now. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Call end() on both a1 and a2 without calling start() Loading Loading @@ -874,7 +889,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testZeroDuration() throws Throwable { // Run two animators with zero duration, with one running forward and the other one // backward. Check that the animations start and finish with the correct end fractions. Loading @@ -893,7 +908,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.addListener(l1); a2.addListener(l2); a3.addListener(l3); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -912,7 +927,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Check that the animators have started and finished with the right values. Loading @@ -932,7 +947,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); } @SmallTest @Test public void testZeroScale() throws Throwable { // Test whether animations would end properly when the scale is forced to be zero float scale = ValueAnimator.getDurationScale(); Loading @@ -945,7 +960,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn a1.addListener(l1); a2.addListener(l2); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -963,7 +978,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -979,7 +994,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn ValueAnimator.setDurationScale(scale); } @SmallTest @Test public void testReverse() throws Throwable { // Prolong animators duration so that we can do multiple checks during their run final ValueAnimator a3 = ValueAnimator.ofInt(0, 100); Loading @@ -995,7 +1010,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn // Reverse three animators, seek one to the beginning and another to the end, and force // to end the third one during reversing. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertFalse(l1.startCalled); Loading @@ -1010,7 +1025,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn } }); Thread.sleep(POLL_INTERVAL); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { assertTrue(l1.startCalled); Loading @@ -1029,7 +1044,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Thread.sleep(POLL_INTERVAL); // By now, a2 should have finished due to the seeking. It wouldn't have finished otherwise. runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Check that both animations have started, and a2 has finished. Loading @@ -1040,7 +1055,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn }); Thread.sleep(a1.getTotalDuration()); runTestOnUiThread(new Runnable() { mActivityRule.runOnUiThread(new Runnable() { @Override public void run() { // Verify that a1 has finished as well. Loading Loading @@ -1128,6 +1143,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn private final static int MSG_FRAME = 0; private long mFrameDelay = DEFAULT_FRAME_INTERVAL; private ArrayList<Choreographer.FrameCallback> mFrameCallbacks = new ArrayList<>(); volatile AssertionError mAssertionError = null; final LooperThread mThread = new LooperThread(); Loading Loading @@ -1173,6 +1189,7 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { try { // Handle message here. switch (msg.what) { case MSG_FRAME: Loading @@ -1183,6 +1200,10 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn default: break; } } catch (AssertionError e) { mAssertionError = e; Looper.myLooper().quit(); } } }; Looper.loop(); Loading