1e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu/*
2e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * Copyright (C) 2016 The Android Open Source Project
3e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu *
4e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * Licensed under the Apache License, Version 2.0 (the "License");
5e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * you may not use this file except in compliance with the License.
6e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * You may obtain a copy of the License at
7e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu *
8e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu *      http://www.apache.org/licenses/LICENSE-2.0
9e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu *
10e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * Unless required by applicable law or agreed to in writing, software
11e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * distributed under the License is distributed on an "AS IS" BASIS,
12e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * See the License for the specific language governing permissions and
14e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu * limitations under the License.
15e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu */
16e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gupackage android.support.v17.leanback.widget;
17e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
18e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport static org.junit.Assert.assertEquals;
19e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport static org.junit.Assert.assertSame;
20e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
21e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport android.support.test.filters.SmallTest;
22e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport android.support.test.runner.AndroidJUnit4;
23e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
24e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport org.junit.Before;
25e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport org.junit.Test;
26e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Guimport org.junit.runner.RunWith;
27e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
28e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu@RunWith(AndroidJUnit4.class)
29e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu@SmallTest
30e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gupublic class ParallaxIntTest {
31e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
32bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu    Parallax<Parallax.IntProperty> mSource;
33e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    int mScreenMax;
34e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
35e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    static void assertFloatEquals(float expected, float actual) {
36e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        org.junit.Assert.assertEquals((double) expected, (double) actual, 0.0001d);
37e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
38e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
39e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Before
40e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void setUp() throws Exception {
41bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mSource = new Parallax<Parallax.IntProperty>() {
42e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
43e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas            @Override
44bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu            public float getMaxValue() {
45e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu                return mScreenMax;
46e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu            }
47e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
48e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu            @Override
49e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu            public IntProperty createProperty(String name, int index) {
50e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu                return new IntProperty(name, index);
51e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu            }
52e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        };
53e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
54e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
55e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Test
56e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void testVariable() {
57e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mScreenMax = 1080;
58e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var1 = mSource.addProperty("var1");
59bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 54);
60bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        assertEquals((int) 54, var1.getValue(mSource));
61e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertEquals(var1.getName(), "var1");
62e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        var1.set(mSource, (int) 2000);
63e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertEquals((int) 2000, var1.get(mSource).intValue());
64e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
65e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
66e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Test
67e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void testFixedKeyValue() {
68e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mScreenMax = 1080;
69e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var1 = mSource.addProperty("var1");
70e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
71bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        Parallax.IntPropertyMarkerValue keyValue = (Parallax.IntPropertyMarkerValue)
72bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu                var1.atAbsolute(1000);
73e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertSame(keyValue.getProperty(), var1);
74e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertEquals((int) 1000, keyValue.getMarkerValue(mSource));
75e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
76e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
77e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Test
78e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void testFractionOfKeyValue() {
79e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mScreenMax = 1080;
80e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var1 = mSource.addProperty("var1");
81e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
82bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        Parallax.IntPropertyMarkerValue keyValue = (Parallax.IntPropertyMarkerValue)
83bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu                var1.at(0, 0.5f);
84e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertSame(keyValue.getProperty(), var1);
85e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertEquals((int) 540, keyValue.getMarkerValue(mSource));
86e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
87e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
88e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Test
89e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void testFixedKeyValueWithFraction() {
90e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mScreenMax = 1080;
91e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var1 = mSource.addProperty("var1");
92e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
93bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        Parallax.IntPropertyMarkerValue keyValue = (Parallax.IntPropertyMarkerValue)
94bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu                var1.at(-100, 0.5f);
95e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertSame(keyValue.getProperty(), var1);
96e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertEquals((int) 440, keyValue.getMarkerValue(mSource));
97e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
98bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        Parallax.IntPropertyMarkerValue keyValue2 = (Parallax.IntPropertyMarkerValue)
99bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu                var1.at(100, 0.5f);
100e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertSame(keyValue2.getProperty(), var1);
101e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        assertEquals((int) 640, keyValue2.getMarkerValue(mSource));
102e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
103e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
104e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Test(expected = IllegalStateException.class)
105e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void testVerifyIntPropertys_wrongOrder() {
106e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var1 = mSource.addProperty("var1");
107e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var2 = mSource.addProperty("var2");
108e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
109bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, (int) 500);
110bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, (int) 499);
111e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
112bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mSource.verifyIntProperties();
113e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
114e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
115e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Test(expected = IllegalStateException.class)
116e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void testVerifyIntPropertysWrong_combination() {
117e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var1 = mSource.addProperty("var1");
118e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var2 = mSource.addProperty("var2");
119e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
120bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE);
121bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, Parallax.IntProperty.UNKNOWN_AFTER);
122e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
123bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mSource.verifyIntProperties();
124e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
125e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
126e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Test
127e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    public void testVerifyIntPropertys_success() {
128e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var1 = mSource.addProperty("var1");
129e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.IntProperty var2 = mSource.addProperty("var2");
130e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
131bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, (int) 499);
132bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, (int) 500);
133e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
134bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mSource.verifyIntProperties();
135e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
136bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE);
137bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, (int) 500);
138e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
139bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mSource.verifyIntProperties();
140e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
141bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, (int) 499);
142bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, Parallax.IntProperty.UNKNOWN_AFTER);
143e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu
144bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mSource.verifyIntProperties();
145e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    }
146e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu}
147