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