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