Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.widget.cts;
     18 
     19 import static org.junit.Assert.assertEquals;
     20 import static org.junit.Assert.assertFalse;
     21 import static org.junit.Assert.assertNull;
     22 import static org.junit.Assert.assertSame;
     23 import static org.junit.Assert.assertTrue;
     24 import static org.mockito.Mockito.mock;
     25 import static org.mockito.Mockito.times;
     26 import static org.mockito.Mockito.verify;
     27 import static org.mockito.Mockito.verifyNoMoreInteractions;
     28 import static org.mockito.Mockito.verifyZeroInteractions;
     29 
     30 import android.support.test.annotation.UiThreadTest;
     31 import android.support.test.filters.SmallTest;
     32 import android.support.test.rule.ActivityTestRule;
     33 import android.support.test.runner.AndroidJUnit4;
     34 import android.widget.RatingBar;
     35 
     36 import org.junit.Before;
     37 import org.junit.Rule;
     38 import org.junit.Test;
     39 import org.junit.runner.RunWith;
     40 
     41 /**
     42  * Test {@link RatingBar}.
     43  */
     44 @SmallTest
     45 @RunWith(AndroidJUnit4.class)
     46 public class RatingBarTest {
     47     private RatingBarCtsActivity mActivity;
     48     private RatingBar mRatingBar;
     49 
     50     @Rule
     51     public ActivityTestRule<RatingBarCtsActivity> mActivityRule =
     52             new ActivityTestRule<>(RatingBarCtsActivity.class);
     53 
     54     @Before
     55     public void setup() {
     56         mActivity = mActivityRule.getActivity();
     57         mRatingBar = (RatingBar) mActivity.findViewById(R.id.ratingbar_constructor);
     58     }
     59 
     60     @Test
     61     public void testConstructor() {
     62         new RatingBar(mActivity);
     63         new RatingBar(mActivity, null);
     64         new RatingBar(mActivity, null, android.R.attr.ratingBarStyle);
     65         new RatingBar(mActivity, null, 0, android.R.style.Widget_DeviceDefault_RatingBar);
     66         new RatingBar(mActivity, null, 0, android.R.style.Widget_DeviceDefault_RatingBar_Indicator);
     67         new RatingBar(mActivity, null, 0, android.R.style.Widget_DeviceDefault_RatingBar_Small);
     68         new RatingBar(mActivity, null, 0, android.R.style.Widget_Material_RatingBar);
     69         new RatingBar(mActivity, null, 0, android.R.style.Widget_Material_RatingBar_Indicator);
     70         new RatingBar(mActivity, null, 0, android.R.style.Widget_Material_RatingBar_Small);
     71         new RatingBar(mActivity, null, 0, android.R.style.Widget_Material_Light_RatingBar);
     72         new RatingBar(mActivity, null, 0, android.R.style.Widget_Material_Light_RatingBar_Indicator);
     73         new RatingBar(mActivity, null, 0, android.R.style.Widget_Material_Light_RatingBar_Small);
     74     }
     75 
     76     @Test
     77     public void testAttributesFromLayout() {
     78         assertFalse(mRatingBar.isIndicator());
     79         assertEquals(50, mRatingBar.getNumStars());
     80         assertEquals(1.2f, mRatingBar.getRating(), 0.0f);
     81         assertEquals(0.2f, mRatingBar.getStepSize(), 0.0f);
     82     }
     83 
     84     @UiThreadTest
     85     @Test
     86     public void testAccessOnRatingBarChangeListener() {
     87         final RatingBar.OnRatingBarChangeListener listener =
     88                 mock(RatingBar.OnRatingBarChangeListener.class);
     89         mRatingBar.setOnRatingBarChangeListener(listener);
     90         assertSame(listener, mRatingBar.getOnRatingBarChangeListener());
     91         verifyZeroInteractions(listener);
     92 
     93         // normal value
     94         mRatingBar.setRating(2.2f);
     95         verify(listener, times(1)).onRatingChanged(mRatingBar, 2.2f, false);
     96 
     97         // exceptional value
     98         mRatingBar.setOnRatingBarChangeListener(null);
     99         assertNull(mRatingBar.getOnRatingBarChangeListener());
    100         mRatingBar.setRating(1.2f);
    101         verifyNoMoreInteractions(listener);
    102     }
    103 
    104     @UiThreadTest
    105     @Test
    106     public void testAccessIndicator() {
    107         mRatingBar.setIsIndicator(true);
    108         assertTrue(mRatingBar.isIndicator());
    109 
    110         mRatingBar.setIsIndicator(false);
    111         assertFalse(mRatingBar.isIndicator());
    112     }
    113 
    114     @UiThreadTest
    115     @Test
    116     public void testAccessNumStars() {
    117         // normal value
    118         mRatingBar.setNumStars(20);
    119         assertEquals(20, mRatingBar.getNumStars());
    120 
    121         // invalid value - the currently set one stays
    122         mRatingBar.setNumStars(-10);
    123         assertEquals(20, mRatingBar.getNumStars());
    124 
    125         mRatingBar.setNumStars(Integer.MAX_VALUE);
    126         assertEquals(Integer.MAX_VALUE, mRatingBar.getNumStars());
    127     }
    128 
    129     @UiThreadTest
    130     @Test
    131     public void testAccessRating() {
    132         // normal value
    133         mRatingBar.setRating(2.0f);
    134         assertEquals(2.0f, mRatingBar.getRating(), 0.0f);
    135 
    136         // exceptional value
    137         mRatingBar.setRating(-2.0f);
    138         assertEquals(0f, mRatingBar.getRating(), 0.0f);
    139 
    140         mRatingBar.setRating(Float.MAX_VALUE);
    141         assertEquals((float) mRatingBar.getNumStars(), mRatingBar.getRating(), 0.0f);
    142     }
    143 
    144     @UiThreadTest
    145     @Test
    146     public void testSetMax() {
    147         // normal value
    148         mRatingBar.setMax(10);
    149         assertEquals(10, mRatingBar.getMax());
    150 
    151         mRatingBar.setProgress(10);
    152 
    153         // exceptional values
    154         mRatingBar.setMax(-10);
    155         assertEquals(10, mRatingBar.getMax());
    156         assertEquals(10, mRatingBar.getProgress());
    157 
    158         mRatingBar.setMax(Integer.MAX_VALUE);
    159         assertEquals(Integer.MAX_VALUE, mRatingBar.getMax());
    160     }
    161 
    162     @UiThreadTest
    163     @Test
    164     public void testAccessStepSize() {
    165         // normal value
    166         mRatingBar.setStepSize(1.5f);
    167         final float expectedMax = mRatingBar.getNumStars() / mRatingBar.getStepSize();
    168         final float expectedProgress = expectedMax / mRatingBar.getMax() * mRatingBar.getProgress();
    169         assertEquals((int) expectedMax, mRatingBar.getMax());
    170         assertEquals((int) expectedProgress, mRatingBar.getProgress());
    171         assertEquals((float) mRatingBar.getNumStars() / (int) (mRatingBar.getNumStars() / 1.5f),
    172                 mRatingBar.getStepSize(), 0.0f);
    173 
    174         final int currentMax = mRatingBar.getMax();
    175         final int currentProgress = mRatingBar.getProgress();
    176         final float currentStepSize = mRatingBar.getStepSize();
    177         // exceptional value
    178         mRatingBar.setStepSize(-1.5f);
    179         assertEquals(currentMax, mRatingBar.getMax());
    180         assertEquals(currentProgress, mRatingBar.getProgress());
    181         assertEquals(currentStepSize, mRatingBar.getStepSize(), 0.0f);
    182 
    183         mRatingBar.setStepSize(0f);
    184         assertEquals(currentMax, mRatingBar.getMax());
    185         assertEquals(currentProgress, mRatingBar.getProgress());
    186         assertEquals(currentStepSize, mRatingBar.getStepSize(), 0.0f);
    187 
    188         mRatingBar.setStepSize(mRatingBar.getNumStars() + 0.1f);
    189         assertEquals(currentMax, mRatingBar.getMax());
    190         assertEquals(currentProgress, mRatingBar.getProgress());
    191         assertEquals(currentStepSize, mRatingBar.getStepSize(), 0.0f);
    192 
    193         mRatingBar.setStepSize(Float.MAX_VALUE);
    194         assertEquals(currentMax, mRatingBar.getMax());
    195         assertEquals(currentProgress, mRatingBar.getProgress());
    196         assertEquals(currentStepSize, mRatingBar.getStepSize(), 0.0f);
    197     }
    198 }
    199