blob: 669e7a14528a854d8be183e2c1e0522989e73356 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.widget.cts;
import android.widget.cts.R;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase2;
import android.test.UiThreadTest;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
/**
* Test {@link RatingBar}.
*/
public class RatingBarTest extends ActivityInstrumentationTestCase2<RatingBarCtsActivity> {
private Context mContext;
private RatingBarCtsActivity mActivity;
public RatingBarTest() {
super("android.widget.cts", RatingBarCtsActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mActivity = getActivity();
assertNotNull(mActivity);
mContext = getInstrumentation().getContext();
}
public void testConstructor() {
new RatingBar(mContext, null, android.R.attr.ratingBarStyle);
new RatingBar(mContext, null);
new RatingBar(mContext);
RatingBar ratingBar = (RatingBar) mActivity.findViewById(R.id.ratingbar_constructor);
assertNotNull(ratingBar);
assertFalse(ratingBar.isIndicator());
assertEquals(50, ratingBar.getNumStars());
assertEquals(1.2f, ratingBar.getRating());
assertEquals(0.2f, ratingBar.getStepSize());
}
@UiThreadTest
public void testAccessOnRatingBarChangeListener() {
RatingBar ratingBar = (RatingBar)mActivity.findViewById(R.id.ratingbar_constructor);
MockOnRatingBarChangeListener listener = new MockOnRatingBarChangeListener();
// set OnRatingBarChangeListener
// normal value
ratingBar.setOnRatingBarChangeListener(listener);
assertSame(listener, ratingBar.getOnRatingBarChangeListener());
ratingBar.setRating(2.2f);
assertTrue(listener.hasCalledOnRatingChanged());
// exceptional value
listener.reset();
ratingBar.setOnRatingBarChangeListener(null);
assertNull(ratingBar.getOnRatingBarChangeListener());
ratingBar.setRating(1.2f);
assertFalse(listener.hasCalledOnRatingChanged());
}
public void testAccessIndicator() {
RatingBar ratingBar = new RatingBar(mContext);
ratingBar.setIsIndicator(true);
assertTrue(ratingBar.isIndicator());
ratingBar.setIsIndicator(false);
assertFalse(ratingBar.isIndicator());
}
public void testAccessNumStars() {
MockRatingBar mockRatingBar = new MockRatingBar(mContext);
// set NumStars
// normal value
assertFalse(mockRatingBar.hasCalledRequestLayout());
mockRatingBar.setNumStars(20);
assertTrue(mockRatingBar.hasCalledRequestLayout());
assertEquals(20, mockRatingBar.getNumStars());
// exceptional value
mockRatingBar.reset();
mockRatingBar.setNumStars(-10);
assertFalse(mockRatingBar.hasCalledRequestLayout());
assertEquals(20, mockRatingBar.getNumStars());
mockRatingBar.reset();
mockRatingBar.setNumStars(Integer.MAX_VALUE);
assertTrue(mockRatingBar.hasCalledRequestLayout());
assertEquals(Integer.MAX_VALUE, mockRatingBar.getNumStars());
}
public void testAccessRating() {
RatingBar ratingBar = new RatingBar(mContext);
// set Rating
// normal value
ratingBar.setRating(2.0f);
assertEquals(2.0f, ratingBar.getRating());
// exceptional value
ratingBar.setRating(-2.0f);
assertEquals(0f, ratingBar.getRating());
ratingBar.setRating(Float.MAX_VALUE);
assertEquals((float) ratingBar.getNumStars(), ratingBar.getRating());
}
public void testSetMax() {
RatingBar ratingBar = new RatingBar(mContext);
// normal value
ratingBar.setMax(10);
assertEquals(10, ratingBar.getMax());
ratingBar.setProgress(10);
// exceptional values
ratingBar.setMax(-10);
assertEquals(10, ratingBar.getMax());
assertEquals(10, ratingBar.getProgress());
ratingBar.setMax(Integer.MAX_VALUE);
assertEquals(Integer.MAX_VALUE, ratingBar.getMax());
}
public void testAccessStepSize() {
RatingBar ratingBar = new RatingBar(mContext);
// normal value
ratingBar.setStepSize(1.5f);
float expectedMax = ratingBar.getNumStars() / ratingBar.getStepSize();
float expectedProgress = expectedMax / ratingBar.getMax() * ratingBar.getProgress();
assertEquals((int) expectedMax, ratingBar.getMax());
assertEquals((int) expectedProgress, ratingBar.getProgress());
assertEquals((float) ratingBar.getNumStars() / (int) (ratingBar.getNumStars() / 1.5f),
ratingBar.getStepSize());
int currentMax = ratingBar.getMax();
int currentProgress = ratingBar.getProgress();
float currentStepSize = ratingBar.getStepSize();
// exceptional value
ratingBar.setStepSize(-1.5f);
assertEquals(currentMax, ratingBar.getMax());
assertEquals(currentProgress, ratingBar.getProgress());
assertEquals(currentStepSize, ratingBar.getStepSize());
ratingBar.setStepSize(0f);
assertEquals(currentMax, ratingBar.getMax());
assertEquals(currentProgress, ratingBar.getProgress());
assertEquals(currentStepSize, ratingBar.getStepSize());
ratingBar.setStepSize(ratingBar.getNumStars() + 0.1f);
assertEquals(currentMax, ratingBar.getMax());
assertEquals(currentProgress, ratingBar.getProgress());
assertEquals(currentStepSize, ratingBar.getStepSize());
ratingBar.setStepSize(Float.MAX_VALUE);
assertEquals(currentMax, ratingBar.getMax());
assertEquals(currentProgress, ratingBar.getProgress());
assertEquals(currentStepSize, ratingBar.getStepSize());
}
/**
* The listener interface for receiving OnRatingBarChangeListener events.
* The class that is interested in processing a OnRatingBarChangeListener
* event implements this interface, and the object created with that class
* is registered with a component using the component's
* <code>setOnRatingBarChangeListener<code> method. When
* the OnRatingBarChangeListener event occurs, that object's appropriate
* method is invoked.
*/
private class MockOnRatingBarChangeListener implements OnRatingBarChangeListener {
private boolean mCalledOnRatingChanged = false;
boolean hasCalledOnRatingChanged() {
return mCalledOnRatingChanged;
}
/*
* (non-Javadoc)
* @see android.widget.RadioGroup.OnRatingBarChangeListener#onRatingChanged
* (RatingBar ratingBar, float rating, boolean fromTouch)
*/
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromTouch) {
mCalledOnRatingChanged = true;
}
public void reset() {
mCalledOnRatingChanged = false;
}
}
/*
* Mock class for ProgressBar to test protected methods
*/
private class MockRatingBar extends RatingBar {
public MockRatingBar(Context context) {
super(context);
}
private boolean mCalledOnMeasure = false;
private boolean mCalledRequestLayout = false;
public boolean hasCalledOnMeasure() {
return mCalledOnMeasure;
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mCalledOnMeasure = true;
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public void requestLayout() {
mCalledRequestLayout = true;
super.requestLayout();
}
public boolean hasCalledRequestLayout() {
return mCalledRequestLayout;
}
public void reset() {
mCalledOnMeasure = false;
mCalledRequestLayout = false;
}
}
}