1770847c0c8424175f0619026615b11fef50ca269Dake Gu/* 2770847c0c8424175f0619026615b11fef50ca269Dake Gu * Copyright (C) 2016 The Android Open Source Project 3770847c0c8424175f0619026615b11fef50ca269Dake Gu * 4770847c0c8424175f0619026615b11fef50ca269Dake Gu * Licensed under the Apache License, Version 2.0 (the "License"); 5770847c0c8424175f0619026615b11fef50ca269Dake Gu * you may not use this file except in compliance with the License. 6770847c0c8424175f0619026615b11fef50ca269Dake Gu * You may obtain a copy of the License at 7770847c0c8424175f0619026615b11fef50ca269Dake Gu * 8770847c0c8424175f0619026615b11fef50ca269Dake Gu * http://www.apache.org/licenses/LICENSE-2.0 9770847c0c8424175f0619026615b11fef50ca269Dake Gu * 10770847c0c8424175f0619026615b11fef50ca269Dake Gu * Unless required by applicable law or agreed to in writing, software 11770847c0c8424175f0619026615b11fef50ca269Dake Gu * distributed under the License is distributed on an "AS IS" BASIS, 12770847c0c8424175f0619026615b11fef50ca269Dake Gu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13770847c0c8424175f0619026615b11fef50ca269Dake Gu * See the License for the specific language governing permissions and 14770847c0c8424175f0619026615b11fef50ca269Dake Gu * limitations under the License. 15770847c0c8424175f0619026615b11fef50ca269Dake Gu */ 16770847c0c8424175f0619026615b11fef50ca269Dake Gu 17770847c0c8424175f0619026615b11fef50ca269Dake Gupackage android.support.v17.leanback.widget; 18770847c0c8424175f0619026615b11fef50ca269Dake Gu 19bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Guimport static junit.framework.Assert.assertEquals; 20bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 21754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.mockito.Mockito.times; 22754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport static org.mockito.Mockito.verify; 23754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas 24754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest; 25754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.runner.AndroidJUnit4; 26bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Guimport android.util.Property; 27770847c0c8424175f0619026615b11fef50ca269Dake Gu 28770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.junit.Before; 29770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.junit.Test; 30770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.junit.runner.RunWith; 31770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.mockito.Mock; 32770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.mockito.Mockito; 33770847c0c8424175f0619026615b11fef50ca269Dake Guimport org.mockito.MockitoAnnotations; 34770847c0c8424175f0619026615b11fef50ca269Dake Gu 35770847c0c8424175f0619026615b11fef50ca269Dake Gu@RunWith(AndroidJUnit4.class) 36770847c0c8424175f0619026615b11fef50ca269Dake Gu@SmallTest 37770847c0c8424175f0619026615b11fef50ca269Dake Gupublic class ParallaxIntEffectTest { 38770847c0c8424175f0619026615b11fef50ca269Dake Gu 39bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu Parallax<Parallax.IntProperty> mSource; 40e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu int mScreenMax; 41e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu ParallaxEffect.IntEffect mEffect; 42e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu @Mock ParallaxTarget mTarget; 43770847c0c8424175f0619026615b11fef50ca269Dake Gu 44bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu static void assertFloatEquals(float expected, float actual) { 45bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu org.junit.Assert.assertEquals((double) expected, (double) actual, 0.0001d); 46bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu } 47bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 48770847c0c8424175f0619026615b11fef50ca269Dake Gu @Before 49770847c0c8424175f0619026615b11fef50ca269Dake Gu public void setUp() throws Exception { 50770847c0c8424175f0619026615b11fef50ca269Dake Gu MockitoAnnotations.initMocks(this); 51bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mSource = new Parallax<Parallax.IntProperty>() { 52770847c0c8424175f0619026615b11fef50ca269Dake Gu 53e2104f4b5c8e3ad63570306a25e61502dfe4c418Aurimas Liutikas @Override 54bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu public float getMaxValue() { 55e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu return mScreenMax; 56770847c0c8424175f0619026615b11fef50ca269Dake Gu } 573778c4eaa62895085d33965ee391c8b21783cffaDake Gu 583778c4eaa62895085d33965ee391c8b21783cffaDake Gu @Override 593778c4eaa62895085d33965ee391c8b21783cffaDake Gu public IntProperty createProperty(String name, int index) { 603778c4eaa62895085d33965ee391c8b21783cffaDake Gu return new IntProperty(name, index); 613778c4eaa62895085d33965ee391c8b21783cffaDake Gu } 62770847c0c8424175f0619026615b11fef50ca269Dake Gu }; 63e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect = new ParallaxEffect.IntEffect(); 64770847c0c8424175f0619026615b11fef50ca269Dake Gu } 65770847c0c8424175f0619026615b11fef50ca269Dake Gu 66770847c0c8424175f0619026615b11fef50ca269Dake Gu @Test 67770847c0c8424175f0619026615b11fef50ca269Dake Gu public void testOneVariable() { 68e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mScreenMax = 1080; 69e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Parallax.IntProperty var1 = mSource.addProperty("var1"); 70770847c0c8424175f0619026615b11fef50ca269Dake Gu 71e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.setPropertyRanges(var1.atAbsolute(540), var1.atAbsolute(0)); 72e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.target(mTarget); 73770847c0c8424175f0619026615b11fef50ca269Dake Gu 74770847c0c8424175f0619026615b11fef50ca269Dake Gu // start 75bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 540); 76e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 77e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0f); 78e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 79770847c0c8424175f0619026615b11fef50ca269Dake Gu 8046ae6eb27de10f019258fe197c794cf2234abe5dsusnata // 25% complete 81bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 405); 82e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 83e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0.25f); 84e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 8546ae6eb27de10f019258fe197c794cf2234abe5dsusnata 86770847c0c8424175f0619026615b11fef50ca269Dake Gu // middle 87bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 270); 88e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 89e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(.5f); 90e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 91770847c0c8424175f0619026615b11fef50ca269Dake Gu 9246ae6eb27de10f019258fe197c794cf2234abe5dsusnata // 75% complete 93bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 135); 94e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 95e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0.75f); 96e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 9746ae6eb27de10f019258fe197c794cf2234abe5dsusnata 98770847c0c8424175f0619026615b11fef50ca269Dake Gu // end 99bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 0); 100e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 101e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 102e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 103770847c0c8424175f0619026615b11fef50ca269Dake Gu 104770847c0c8424175f0619026615b11fef50ca269Dake Gu // after end 105bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, -1000); 106e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 107e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 108e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 109770847c0c8424175f0619026615b11fef50ca269Dake Gu 110770847c0c8424175f0619026615b11fef50ca269Dake Gu // before start 111bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 1000); 112e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 113e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0f); 114e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 115770847c0c8424175f0619026615b11fef50ca269Dake Gu 116770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_before 117bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE); 118e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 119e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 120e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 121770847c0c8424175f0619026615b11fef50ca269Dake Gu 122770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_after 123bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_AFTER); 124e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 125e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0f); 126e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 127770847c0c8424175f0619026615b11fef50ca269Dake Gu } 128770847c0c8424175f0619026615b11fef50ca269Dake Gu 129770847c0c8424175f0619026615b11fef50ca269Dake Gu @Test(expected=IllegalStateException.class) 130770847c0c8424175f0619026615b11fef50ca269Dake Gu public void testVerifyKeyValueOfSameVariableInDesendantOrder() { 131e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mScreenMax = 1080; 132e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Parallax.IntProperty var1 = mSource.addProperty("var1"); 133770847c0c8424175f0619026615b11fef50ca269Dake Gu 134e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.setPropertyRanges(var1.atAbsolute(540), var1.atAbsolute(550)); 135e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.target(mTarget); 136bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 0); 137e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 138770847c0c8424175f0619026615b11fef50ca269Dake Gu } 139770847c0c8424175f0619026615b11fef50ca269Dake Gu 140770847c0c8424175f0619026615b11fef50ca269Dake Gu @Test 141770847c0c8424175f0619026615b11fef50ca269Dake Gu public void testTwoVariable() { 142e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mScreenMax = 1080; 143e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Parallax.IntProperty var1 = mSource.addProperty("var1"); 144e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Parallax.IntProperty var2 = mSource.addProperty("var2"); 1453778c4eaa62895085d33965ee391c8b21783cffaDake Gu 146e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.setPropertyRanges(var1.atAbsolute(540), var2.atAbsolute(540)); 147e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.target(mTarget); 148770847c0c8424175f0619026615b11fef50ca269Dake Gu 149770847c0c8424175f0619026615b11fef50ca269Dake Gu // start 150bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 540); 151bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 840); 152e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 153e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0f); 154e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 155770847c0c8424175f0619026615b11fef50ca269Dake Gu 156770847c0c8424175f0619026615b11fef50ca269Dake Gu // middle 157bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 390); 158bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 690); 159e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 160e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(.5f); 161e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 162770847c0c8424175f0619026615b11fef50ca269Dake Gu 163770847c0c8424175f0619026615b11fef50ca269Dake Gu // end 164bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 240); 165bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 540); 166e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 167e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 168e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 169770847c0c8424175f0619026615b11fef50ca269Dake Gu 170770847c0c8424175f0619026615b11fef50ca269Dake Gu // after end 171bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 200); 172bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 500); 173e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 174e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 175e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 176770847c0c8424175f0619026615b11fef50ca269Dake Gu 177770847c0c8424175f0619026615b11fef50ca269Dake Gu // before start 178bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 1000); 179bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 1300); 180e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 181e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0f); 182e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 183770847c0c8424175f0619026615b11fef50ca269Dake Gu 184770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_before 185bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE); 186bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE); 187e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 188e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 189e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 190770847c0c8424175f0619026615b11fef50ca269Dake Gu 191770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_before 192bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE); 193bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, -1000); 194e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 195e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 196e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 197770847c0c8424175f0619026615b11fef50ca269Dake Gu 198770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_after 199bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_AFTER); 200bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, Parallax.IntProperty.UNKNOWN_AFTER); 201e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 202e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0f); 203e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 204770847c0c8424175f0619026615b11fef50ca269Dake Gu 205770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_after 206bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 1000); 207bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, Parallax.IntProperty.UNKNOWN_AFTER); 208e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 209e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0f); 210e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 211770847c0c8424175f0619026615b11fef50ca269Dake Gu 212770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_before and less 213bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE); 214bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 500); 215e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 216e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 217e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 218770847c0c8424175f0619026615b11fef50ca269Dake Gu 219770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_before and hit second 220bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE); 221bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 540); 222e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 223e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(1f); 224e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 225770847c0c8424175f0619026615b11fef50ca269Dake Gu 226770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_before with estimation 227bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, Parallax.IntProperty.UNKNOWN_BEFORE); 228bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, 1080); 229e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 230e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0.5f); 231e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 232770847c0c8424175f0619026615b11fef50ca269Dake Gu 233770847c0c8424175f0619026615b11fef50ca269Dake Gu // unknown_after with estimation 234bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 0); 235bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var2.setValue(mSource, Parallax.IntProperty.UNKNOWN_AFTER); 236e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu mEffect.performMapping(mSource); 237e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu verify(mTarget, times(1)).update(0.5f); 238e1cde4d4ac42a6e9e16aad2b4df970c7c7d0771cDake Gu Mockito.reset(mTarget); 239770847c0c8424175f0619026615b11fef50ca269Dake Gu } 240770847c0c8424175f0619026615b11fef50ca269Dake Gu 241bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu @Test 242bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu public void testDirectMapping() { 243bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mScreenMax = 1080; 244bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu Parallax.IntProperty var1 = mSource.addProperty("var1"); 245bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 246bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mEffect.setPropertyRanges(var1.atAbsolute((int) 540.45), var1.atAbsolute((int) 0.22)); 247bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu Object object = new Object(); 248bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu final int[] properValue = new int[1]; 249bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu Property<Object, Integer> property = new Property<Object, Integer>(Integer.class, "attr") { 250bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu @Override 251bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu public void set(Object object, Integer value) { 252bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu properValue[0] = value; 253bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu } 254bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 255bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu @Override 256bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu public Integer get(Object o) { 257bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu return properValue[0]; 258bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu } 259bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu }; 260bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mTarget = new ParallaxTarget.DirectPropertyTarget<>(object, property); 261bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mEffect.target(mTarget); 262bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 263bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, (int) 540.45); 264bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mEffect.performMapping(mSource); 265bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu assertEquals((int) 540.45, properValue[0]); 266bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 267bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, (int) 405.85); 268bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mEffect.performMapping(mSource); 269bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu assertEquals((int) 405.85, properValue[0]); 270bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 271bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, 2000); 272bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mEffect.performMapping(mSource); 273bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu assertEquals((int) 540.45, properValue[0]); 274bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 275bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, (int) 0.22); 276bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mEffect.performMapping(mSource); 277bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu assertEquals((int) 0.22, properValue[0]); 278bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu 279bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu var1.setValue(mSource, (int) 0.12); 280bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu mEffect.performMapping(mSource); 281bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu assertEquals((int) 0.22, properValue[0]); 282bf4318c67254bc11307796601b9fb4a8bbfe67b2Dake Gu } 283770847c0c8424175f0619026615b11fef50ca269Dake Gu} 284