1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.anim; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.test.suitebuilder.annotation.SmallTest; 20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.util.Log; 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.animation.Interpolator; 22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport junit.framework.TestCase; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin@SmallTest 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class AnimationTest extends TestCase { 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "AnimationTest"; 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void testFloatAnimation() { 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin FloatAnimation a = new FloatAnimation(0f, 1f, 10); // value 0 to 1.0, duration 10 31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.start(); // start animation 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.isActive()); // should be active now 33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(0); // set start time = 0 34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.get() == 0); // start value should be 0 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(1); // calculate value for time 1 36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertFloatEq(a.get(), 0.1f); 37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(5); // calculate value for time 5 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.get() == 0.5);// 39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(9); // calculate value for time 9 40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertFloatEq(a.get(), 0.9f); 41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(10); // calculate value for time 10 42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(!a.isActive()); // should be inactive now 43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.get() == 1.0);// 44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.start(); // restart 45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.isActive()); // should be active now 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(5); // set start time = 5 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.get() == 0); // start value should be 0 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(5+9); // calculate for time 5+9 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertFloatEq(a.get(), 0.9f); 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static class MyInterpolator implements Interpolator { 53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public float getInterpolation(float input) { 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return 4f * (input - 0.5f); // maps [0,1] to [-2,2] 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void testInterpolator() { 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin FloatAnimation a = new FloatAnimation(0f, 1f, 10); // value 0 to 1.0, duration 10 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.setInterpolator(new MyInterpolator()); 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.start(); // start animation 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(0); // set start time = 0 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.get() == -2); // start value should be -2 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(1); // calculate value for time 1 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertFloatEq(a.get(), -1.6f); 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(5); // calculate value for time 5 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.get() == 0); // 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(9); // calculate value for time 9 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertFloatEq(a.get(), 1.6f); 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin a.calculate(10); // calculate value for time 10 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin assertTrue(a.get() == 2); // 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static void assertFloatEq(float expected, float actual) { 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (Math.abs(actual - expected) > 1e-6) { 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin Log.v(TAG, "expected: " + expected + ", actual: " + actual); 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin fail(); 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 81