1cc671dd3caac1d0cbf3f6999ab063c9ff1f297b2Dake Gu// CHECKSTYLE:OFF Generated code
2770847c0c8424175f0619026615b11fef50ca269Dake Gu/* This file is auto-generated from ParallaxIntEffectTest.java.  DO NOT MODIFY. */
3770847c0c8424175f0619026615b11fef50ca269Dake Gu
4770847c0c8424175f0619026615b11fef50ca269Dake Gu/*
5770847c0c8424175f0619026615b11fef50ca269Dake Gu * Copyright (C) 2016 The Android Open Source Project
6770847c0c8424175f0619026615b11fef50ca269Dake Gu *
7770847c0c8424175f0619026615b11fef50ca269Dake Gu * Licensed under the Apache License, Version 2.0 (the "License");
8770847c0c8424175f0619026615b11fef50ca269Dake Gu * you may not use this file except in compliance with the License.
9770847c0c8424175f0619026615b11fef50ca269Dake Gu * You may obtain a copy of the License at
10770847c0c8424175f0619026615b11fef50ca269Dake Gu *
11770847c0c8424175f0619026615b11fef50ca269Dake Gu *      http://www.apache.org/licenses/LICENSE-2.0
12770847c0c8424175f0619026615b11fef50ca269Dake Gu *
13770847c0c8424175f0619026615b11fef50ca269Dake Gu * Unless required by applicable law or agreed to in writing, software
14770847c0c8424175f0619026615b11fef50ca269Dake Gu * distributed under the License is distributed on an "AS IS" BASIS,
15770847c0c8424175f0619026615b11fef50ca269Dake Gu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16770847c0c8424175f0619026615b11fef50ca269Dake Gu * See the License for the specific language governing permissions and
17770847c0c8424175f0619026615b11fef50ca269Dake Gu * limitations under the License.
18770847c0c8424175f0619026615b11fef50ca269Dake Gu */
19770847c0c8424175f0619026615b11fef50ca269Dake Gu
20770847c0c8424175f0619026615b11fef50ca269Dake Gupackage android.support.v17.leanback.widget;
21770847c0c8424175f0619026615b11fef50ca269Dake Gu
22bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Guimport static junit.framework.Assert.assertEquals;
23bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
24754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.mockito.Mockito.times;
25754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.mockito.Mockito.verify;
26754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
27754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest;
28754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.runner.AndroidJUnit4;
29bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Guimport android.util.Property;
30770847c0c8424175f0619026615b11fef50ca269Dake Gu
31770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.junit.Before;
32770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.junit.Test;
33770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.junit.runner.RunWith;
34770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.mockito.Mock;
35770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.mockito.Mockito;
36770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.mockito.MockitoAnnotations;
37770847c0c8424175f0619026615b11fef50ca269Dake Gu
38770847c0c8424175f0619026615b11fef50ca269Dake Gu@RunWith(AndroidJUnit4.class)
39770847c0c8424175f0619026615b11fef50ca269Dake Gu@SmallTest
40770847c0c8424175f0619026615b11fef50ca269Dake Gupublic class ParallaxFloatEffectTest {
41770847c0c8424175f0619026615b11fef50ca269Dake Gu
42bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu    Parallax<Parallax.FloatProperty> mSource;
43e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    int mScreenMax;
44e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    ParallaxEffect.FloatEffect mEffect;
45e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu    @Mock ParallaxTarget mTarget;
46770847c0c8424175f0619026615b11fef50ca269Dake Gu
47bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu    static void assertFloatEquals(float expected, float actual) {
48bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        org.junit.Assert.assertEquals((double) expected, (double) actual, 0.0001d);
49bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu    }
50bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
51770847c0c8424175f0619026615b11fef50ca269Dake Gu    @Before
52770847c0c8424175f0619026615b11fef50ca269Dake Gu    public void setUp() throws Exception {
53770847c0c8424175f0619026615b11fef50ca269Dake Gu        MockitoAnnotations.initMocks(this);
54bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mSource = new Parallax<Parallax.FloatProperty>() {
55770847c0c8424175f0619026615b11fef50ca269Dake Gu
56e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas            @Override
57e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu            public float getMaxValue() {
58e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu                return mScreenMax;
59770847c0c8424175f0619026615b11fef50ca269Dake Gu            }
603778c4eaa62895085d33965ee391c8b21783cffaDake Gu
613778c4eaa62895085d33965ee391c8b21783cffaDake Gu            @Override
623778c4eaa62895085d33965ee391c8b21783cffaDake Gu            public FloatProperty createProperty(String name, int index) {
633778c4eaa62895085d33965ee391c8b21783cffaDake Gu                return new FloatProperty(name, index);
643778c4eaa62895085d33965ee391c8b21783cffaDake Gu            }
65770847c0c8424175f0619026615b11fef50ca269Dake Gu        };
66e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect = new ParallaxEffect.FloatEffect();
67770847c0c8424175f0619026615b11fef50ca269Dake Gu    }
68770847c0c8424175f0619026615b11fef50ca269Dake Gu
69770847c0c8424175f0619026615b11fef50ca269Dake Gu    @Test
70770847c0c8424175f0619026615b11fef50ca269Dake Gu    public void testOneVariable() {
71e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mScreenMax = 1080;
72e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.FloatProperty var1 = mSource.addProperty("var1");
73770847c0c8424175f0619026615b11fef50ca269Dake Gu
74e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.setPropertyRanges(var1.atAbsolute(540), var1.atAbsolute(0));
75e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.target(mTarget);
76770847c0c8424175f0619026615b11fef50ca269Dake Gu
77770847c0c8424175f0619026615b11fef50ca269Dake Gu        // start
78bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 540);
79e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
80e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0f);
81e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
82770847c0c8424175f0619026615b11fef50ca269Dake Gu
8346ae6eb27de10f019258fe197c794cf2234abe5dsusnata        // 25% complete
84bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 405);
85e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
86e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0.25f);
87e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
8846ae6eb27de10f019258fe197c794cf2234abe5dsusnata
89770847c0c8424175f0619026615b11fef50ca269Dake Gu        // middle
90bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 270);
91e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
92e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(.5f);
93e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
94770847c0c8424175f0619026615b11fef50ca269Dake Gu
9546ae6eb27de10f019258fe197c794cf2234abe5dsusnata        // 75% complete
96bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 135);
97e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
98e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0.75f);
99e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
10046ae6eb27de10f019258fe197c794cf2234abe5dsusnata
101770847c0c8424175f0619026615b11fef50ca269Dake Gu        // end
102bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 0);
103e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
104e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
105e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
106770847c0c8424175f0619026615b11fef50ca269Dake Gu
107770847c0c8424175f0619026615b11fef50ca269Dake Gu        // after end
108bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, -1000);
109e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
110e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
111e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
112770847c0c8424175f0619026615b11fef50ca269Dake Gu
113770847c0c8424175f0619026615b11fef50ca269Dake Gu        // before start
114bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 1000);
115e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
116e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0f);
117e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
118770847c0c8424175f0619026615b11fef50ca269Dake Gu
119770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_before
120bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_BEFORE);
121e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
122e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
123e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
124770847c0c8424175f0619026615b11fef50ca269Dake Gu
125770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_after
126bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_AFTER);
127e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
128e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0f);
129e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
130770847c0c8424175f0619026615b11fef50ca269Dake Gu    }
131770847c0c8424175f0619026615b11fef50ca269Dake Gu
132770847c0c8424175f0619026615b11fef50ca269Dake Gu    @Test(expected=IllegalStateException.class)
133770847c0c8424175f0619026615b11fef50ca269Dake Gu    public void testVerifyKeyValueOfSameVariableInDesendantOrder() {
134e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mScreenMax = 1080;
135e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.FloatProperty var1 = mSource.addProperty("var1");
136770847c0c8424175f0619026615b11fef50ca269Dake Gu
137e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.setPropertyRanges(var1.atAbsolute(540), var1.atAbsolute(550));
138e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.target(mTarget);
139bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 0);
140e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
141770847c0c8424175f0619026615b11fef50ca269Dake Gu    }
142770847c0c8424175f0619026615b11fef50ca269Dake Gu
143770847c0c8424175f0619026615b11fef50ca269Dake Gu    @Test
144770847c0c8424175f0619026615b11fef50ca269Dake Gu    public void testTwoVariable() {
145e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mScreenMax = 1080;
146e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.FloatProperty var1 = mSource.addProperty("var1");
147e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Parallax.FloatProperty var2 = mSource.addProperty("var2");
1483778c4eaa62895085d33965ee391c8b21783cffaDake Gu
149e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.setPropertyRanges(var1.atAbsolute(540), var2.atAbsolute(540));
150e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.target(mTarget);
151770847c0c8424175f0619026615b11fef50ca269Dake Gu
152770847c0c8424175f0619026615b11fef50ca269Dake Gu        // start
153bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 540);
154bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 840);
155e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
156e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0f);
157e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
158770847c0c8424175f0619026615b11fef50ca269Dake Gu
159770847c0c8424175f0619026615b11fef50ca269Dake Gu        // middle
160bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 390);
161bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 690);
162e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
163e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(.5f);
164e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
165770847c0c8424175f0619026615b11fef50ca269Dake Gu
166770847c0c8424175f0619026615b11fef50ca269Dake Gu        // end
167bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 240);
168bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 540);
169e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
170e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
171e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
172770847c0c8424175f0619026615b11fef50ca269Dake Gu
173770847c0c8424175f0619026615b11fef50ca269Dake Gu        // after end
174bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 200);
175bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 500);
176e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
177e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
178e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
179770847c0c8424175f0619026615b11fef50ca269Dake Gu
180770847c0c8424175f0619026615b11fef50ca269Dake Gu        // before start
181bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 1000);
182bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 1300);
183e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
184e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0f);
185e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
186770847c0c8424175f0619026615b11fef50ca269Dake Gu
187770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_before
188bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_BEFORE);
189bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, Parallax.FloatProperty.UNKNOWN_BEFORE);
190e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
191e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
192e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
193770847c0c8424175f0619026615b11fef50ca269Dake Gu
194770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_before
195bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_BEFORE);
196bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, -1000);
197e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
198e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
199e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
200770847c0c8424175f0619026615b11fef50ca269Dake Gu
201770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_after
202bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_AFTER);
203bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, Parallax.FloatProperty.UNKNOWN_AFTER);
204e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
205e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0f);
206e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
207770847c0c8424175f0619026615b11fef50ca269Dake Gu
208770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_after
209bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 1000);
210bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, Parallax.FloatProperty.UNKNOWN_AFTER);
211e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
212e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0f);
213e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
214770847c0c8424175f0619026615b11fef50ca269Dake Gu
215770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_before and less
216bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_BEFORE);
217bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 500);
218e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
219e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
220e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
221770847c0c8424175f0619026615b11fef50ca269Dake Gu
222770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_before and hit second
223bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_BEFORE);
224bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 540);
225e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
226e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(1f);
227e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
228770847c0c8424175f0619026615b11fef50ca269Dake Gu
229770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_before with estimation
230bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, Parallax.FloatProperty.UNKNOWN_BEFORE);
231bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, 1080);
232e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
233e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0.5f);
234e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
235770847c0c8424175f0619026615b11fef50ca269Dake Gu
236770847c0c8424175f0619026615b11fef50ca269Dake Gu        // unknown_after with estimation
237bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 0);
238bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var2.setValue(mSource, Parallax.FloatProperty.UNKNOWN_AFTER);
239e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        mEffect.performMapping(mSource);
240e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        verify(mTarget, times(1)).update(0.5f);
241e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu        Mockito.reset(mTarget);
242770847c0c8424175f0619026615b11fef50ca269Dake Gu    }
243770847c0c8424175f0619026615b11fef50ca269Dake Gu
244bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu    @Test
245bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu    public void testDirectMapping() {
246bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mScreenMax = 1080;
247bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        Parallax.FloatProperty var1 = mSource.addProperty("var1");
248bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
249bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mEffect.setPropertyRanges(var1.atAbsolute((float) 540.45), var1.atAbsolute((float) 0.22));
250bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        Object object = new Object();
251bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        final float[] properValue = new float[1];
252bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        Property<Object, Float> property = new Property<Object, Float>(Float.class, "attr") {
253bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu            @Override
254bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu            public void set(Object object, Float value) {
255bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu                properValue[0] = value;
256bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu            }
257bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
258bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu            @Override
259bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu            public Float get(Object o) {
260bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu                return properValue[0];
261bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu            }
262bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        };
263bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mTarget = new ParallaxTarget.DirectPropertyTarget<>(object, property);
264bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mEffect.target(mTarget);
265bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
266bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, (float) 540.45);
267bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mEffect.performMapping(mSource);
268bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        assertFloatEquals((float) 540.45, properValue[0]);
269bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
270bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, (float) 405.85);
271bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mEffect.performMapping(mSource);
272bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        assertFloatEquals((float) 405.85, properValue[0]);
273bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
274bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, 2000);
275bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mEffect.performMapping(mSource);
276bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        assertFloatEquals((float) 540.45, properValue[0]);
277bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
278bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, (float) 0.22);
279bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mEffect.performMapping(mSource);
280bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        assertFloatEquals((float) 0.22, properValue[0]);
281bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu
282bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        var1.setValue(mSource, (float) 0.12);
283bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        mEffect.performMapping(mSource);
284bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu        assertFloatEquals((float) 0.22, properValue[0]);
285bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu    }
286770847c0c8424175f0619026615b11fef50ca269Dake Gu}
287