blob: 211b3e3df5f3a112ea84691a4e11e6793ce28c88 [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 org.xmlpull.v1.XmlPullParser;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.test.AndroidTestCase;
import android.util.AttributeSet;
import android.util.Xml;
import android.widget.ToggleButton;
import com.android.cts.stub.R;
import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.ToBeFixed;
/**
* Test {@link ToggleButton}.
*/
@TestTargetClass(ToggleButton.class)
public class ToggleButtonTest extends AndroidTestCase {
private static final String TEXT_OFF = "text off";
private static final String TEXT_ON = "text on";
ToggleButton mToggleButton;
Context mContext;
AttributeSet mAttrSet;
@Override
protected void setUp() throws Exception {
super.setUp();
mContext = getContext();
XmlPullParser parser = mContext.getResources().getXml(R.layout.togglebutton_layout);
mAttrSet = Xml.asAttributeSet(parser);
mToggleButton = new ToggleButton(mContext, mAttrSet);
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test constructors",
method = "ToggleButton",
args = {android.content.Context.class, android.util.AttributeSet.class, int.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test constructors",
method = "ToggleButton",
args = {android.content.Context.class, android.util.AttributeSet.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test constructors",
method = "ToggleButton",
args = {android.content.Context.class}
)
})
@ToBeFixed(bug = "1371108",
explanation = "There should not be a NullPointerException thrown out.")
public void testConstructor() {
new ToggleButton(mContext, mAttrSet, 0);
new ToggleButton(mContext, mAttrSet);
new ToggleButton(mContext);
try {
new ToggleButton(null, null, -1);
fail("There should be a NullPointerException thrown out.");
} catch (NullPointerException e) {
// expected, test success.
}
try {
new ToggleButton(null, null);
fail("There should be a NullPointerException thrown out.");
} catch (NullPointerException e) {
// expected, test success.
}
try {
new ToggleButton(null);
fail("There should be a NullPointerException thrown out.");
} catch (NullPointerException e) {
// expected, test success.
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test setTextOff and getTextOff",
method = "setTextOff",
args = {java.lang.CharSequence.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test setTextOff and getTextOff",
method = "getTextOff",
args = {}
)
})
public void testAccessTextOff() {
mToggleButton.setTextOff("android");
assertEquals("android", mToggleButton.getTextOff());
mToggleButton.setChecked(false);
mToggleButton.setTextOff(null);
assertNull(mToggleButton.getTextOff());
mToggleButton.setTextOff("");
assertEquals("", mToggleButton.getTextOff());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test drawableStateChanged",
method = "drawableStateChanged",
args = {}
)
public void testDrawableStateChanged() {
MockToggleButton toggleButton = new MockToggleButton(mContext);
// drawableStateChanged without any drawable.
toggleButton.drawableStateChanged();
// drawableStateChanged when CheckMarkDrawable is not null.
Resources resources = mContext.getResources();
Drawable drawable = resources.getDrawable(R.drawable.scenery);
toggleButton.setButtonDrawable(drawable);
drawable.setState(null);
assertNull(drawable.getState());
toggleButton.drawableStateChanged();
assertNotNull(drawable.getState());
assertEquals(toggleButton.getDrawableState(), drawable.getState());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test onFinishInflate",
method = "onFinishInflate",
args = {}
)
@ToBeFixed(bug = "1400085", explanation = "This method will effect the UI. "
+ "The best way to test this is looking at the actual view.")
public void testOnFinishInflate() {
MockToggleButton toggleButton = new MockToggleButton(mContext);
toggleButton.onFinishInflate();
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test setChecked",
method = "setChecked",
args = {boolean.class}
)
public void testSetChecked() {
assertFalse(mToggleButton.isChecked());
mToggleButton.setChecked(true);
assertTrue(mToggleButton.isChecked());
mToggleButton.setChecked(false);
assertFalse(mToggleButton.isChecked());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Check the text of button when change button status",
method = "setChecked",
args = {boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Check the text of button when change button status",
method = "setTextOff",
args = {java.lang.CharSequence.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Check the text of button when change button status",
method = "setTextOn",
args = {java.lang.CharSequence.class}
)
})
public void testToggleText() {
mToggleButton.setText("default text");
mToggleButton.setTextOn(TEXT_ON);
mToggleButton.setTextOff(TEXT_OFF);
mToggleButton.setChecked(true);
assertEquals(TEXT_ON, mToggleButton.getText().toString());
mToggleButton.setChecked(false);
assertFalse(mToggleButton.isChecked());
assertEquals(TEXT_OFF, mToggleButton.getText().toString());
// Set the current displaying text as TEXT_OFF.
// Then set checked button, but textOn is null.
mToggleButton.setTextOff(TEXT_OFF);
mToggleButton.setChecked(false);
mToggleButton.setTextOn(null);
mToggleButton.setChecked(true);
assertEquals(TEXT_OFF, mToggleButton.getText().toString());
// Set the current displaying text as TEXT_ON. Then set unchecked button,
// but textOff is null.
mToggleButton.setTextOn(TEXT_ON);
mToggleButton.setChecked(true);
mToggleButton.setTextOff(null);
mToggleButton.setChecked(false);
assertEquals(TEXT_ON, mToggleButton.getText().toString());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test setBackgroundDrawable",
method = "setBackgroundDrawable",
args = {android.graphics.drawable.Drawable.class}
)
public void testSetBackgroundDrawable() {
Drawable drawable = mContext.getResources().getDrawable(R.drawable.scenery);
mToggleButton.setBackgroundDrawable(drawable);
assertSame(drawable, mToggleButton.getBackground());
// remove the background
mToggleButton.setBackgroundDrawable(null);
assertNull(mToggleButton.getBackground());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test setTextOn and getTextOn",
method = "setTextOn",
args = {java.lang.CharSequence.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "test setTextOn and getTextOn",
method = "getTextOn",
args = {}
)
})
public void testAccessTextOn() {
mToggleButton.setTextOn("cts");
assertEquals("cts", mToggleButton.getTextOn());
mToggleButton.setTextOn(null);
assertNull(mToggleButton.getTextOn());
mToggleButton.setTextOn("");
assertEquals("", mToggleButton.getTextOn());
}
/**
* MockToggleButton class for testing.
*/
private static final class MockToggleButton extends ToggleButton {
public MockToggleButton(Context context) {
super(context);
}
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
}
}
}