/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.react.views.slider; import android.widget.SeekBar; import com.facebook.react.bridge.CatalystInstance; import com.facebook.react.bridge.JavaOnlyMap; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactTestHelper; import com.facebook.react.uimanager.ReactStylesDiffMap; import com.facebook.react.uimanager.ThemedReactContext; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.modules.junit4.rule.PowerMockRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import static org.fest.assertions.api.Assertions.assertThat; /** * Verify {@link SeekBar} view property being applied properly by {@link ReactSliderManager} */ @RunWith(RobolectricTestRunner.class) @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) public class ReactSliderPropertyTest { @Rule public PowerMockRule rule = new PowerMockRule(); private ThemedReactContext mThemedContext; private ReactSliderManager mManager; @Before public void setup() { ReactApplicationContext mContext = new ReactApplicationContext(RuntimeEnvironment.application); CatalystInstance mCatalystInstanceMock = ReactTestHelper.createMockCatalystInstance(); mContext.initializeWithInstance(mCatalystInstanceMock); mThemedContext = new ThemedReactContext(mContext, mContext); mManager = new ReactSliderManager(); } public ReactStylesDiffMap buildStyles(Object... keysAndValues) { return new ReactStylesDiffMap(JavaOnlyMap.of(keysAndValues)); } @Test public void testValueWithMaxValue() { ReactSlider view = mManager.createViewInstance(mThemedContext); mManager.updateProperties(view, buildStyles("maximumValue", 10.0)); mManager.updateProperties(view, buildStyles("value", 5.5)); assertThat(view.getProgress()).isEqualTo(70); } @Test public void testValueWithMaxValueSetBeforeMinValue() { ReactSlider view = mManager.createViewInstance(mThemedContext); mManager.updateProperties(view, buildStyles("maximumValue", 10.0)); mManager.updateProperties(view, buildStyles("minimumValue", 5.0)); mManager.updateProperties(view, buildStyles("value", 5.5)); assertThat(view.getProgress()).isEqualTo(13); } @Test public void testValueWithMinValueSetBeforeMaxValue() { ReactSlider view = mManager.createViewInstance(mThemedContext); mManager.updateProperties(view, buildStyles("minimumValue", 5.0)); mManager.updateProperties(view, buildStyles("maximumValue", 10.0)); mManager.updateProperties(view, buildStyles("value", 5.5)); assertThat(view.getProgress()).isEqualTo(13); } @Test public void testValueWithMaxValueAndStep() { ReactSlider view = mManager.createViewInstance(mThemedContext); mManager.updateProperties(view, buildStyles("maximumValue", 10.0)); mManager.updateProperties(view, buildStyles("step", 3.0)); mManager.updateProperties(view, buildStyles("value", 5.5)); assertThat(view.getProgress()).isEqualTo(2); } @Test public void testValueWithMaxValueAndMinValueAndStep() { ReactSlider view = mManager.createViewInstance(mThemedContext); mManager.updateProperties(view, buildStyles("maximumValue", 10.0)); mManager.updateProperties(view, buildStyles("minimumValue", 5.0)); mManager.updateProperties(view, buildStyles("step", 3.0)); mManager.updateProperties(view, buildStyles("value", 10.0)); assertThat(view.getProgress()).isEqualTo(2); } }