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.assertNotNull; 22 import static org.junit.Assert.assertNull; 23 import static org.junit.Assert.assertSame; 24 import static org.junit.Assert.assertTrue; 25 26 import android.app.Activity; 27 import android.content.Context; 28 import android.graphics.drawable.Drawable; 29 import android.graphics.drawable.StateListDrawable; 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.util.AttributeSet; 35 import android.widget.ToggleButton; 36 37 import org.junit.Before; 38 import org.junit.Rule; 39 import org.junit.Test; 40 import org.junit.runner.RunWith; 41 42 /** 43 * Test {@link ToggleButton}. 44 */ 45 @SmallTest 46 @RunWith(AndroidJUnit4.class) 47 public class ToggleButtonTest { 48 private static final String TEXT_OFF = "text off"; 49 private static final String TEXT_ON = "text on"; 50 51 private Activity mActivity; 52 53 @Rule 54 public ActivityTestRule<ToggleButtonCtsActivity> mActivityRule = 55 new ActivityTestRule<>(ToggleButtonCtsActivity.class); 56 57 @Before 58 public void setup() { 59 mActivity = mActivityRule.getActivity(); 60 } 61 62 @Test 63 public void testConstructor() { 64 new ToggleButton(mActivity); 65 new ToggleButton(mActivity, null); 66 new ToggleButton(mActivity, null, android.R.attr.buttonStyleToggle); 67 new ToggleButton(mActivity, null, 0, android.R.style.Widget_DeviceDefault_Button_Toggle); 68 new ToggleButton(mActivity, null, 0, 69 android.R.style.Widget_DeviceDefault_Light_Button_Toggle); 70 new ToggleButton(mActivity, null, 0, android.R.style.Widget_Material_Button_Toggle); 71 new ToggleButton(mActivity, null, 0, android.R.style.Widget_Material_Light_Button_Toggle); 72 } 73 74 @Test(expected=NullPointerException.class) 75 public void testConstructorWithNullContext1() { 76 new ToggleButton(null); 77 } 78 79 @Test(expected=NullPointerException.class) 80 public void testConstructorWithNullContext2() { 81 new ToggleButton(null, null); 82 } 83 84 @Test(expected=NullPointerException.class) 85 public void testConstructorWithNullContext3() { 86 new ToggleButton(null, null, -1); 87 } 88 89 @Test 90 public void testAttributesFromStyle() { 91 final ToggleButton toggleButton = 92 (ToggleButton) mActivity.findViewById(R.id.toggle_with_style); 93 assertEquals(mActivity.getString(R.string.toggle_text_on), toggleButton.getTextOn()); 94 assertEquals(mActivity.getString(R.string.toggle_text_off), toggleButton.getTextOff()); 95 } 96 97 @Test 98 public void testAttributesFromLayout() { 99 final ToggleButton toggleButton = 100 (ToggleButton) mActivity.findViewById(R.id.toggle_with_defaults); 101 assertEquals(mActivity.getString(R.string.toggle_text_on_alt), toggleButton.getTextOn()); 102 assertEquals(mActivity.getString(R.string.toggle_text_off_alt), toggleButton.getTextOff()); 103 } 104 105 @UiThreadTest 106 @Test 107 public void testAccessTextOff() { 108 final ToggleButton toggleButton = (ToggleButton) mActivity.findViewById(R.id.toggle1); 109 toggleButton.setTextOff("android"); 110 assertEquals("android", toggleButton.getTextOff()); 111 toggleButton.setChecked(false); 112 113 toggleButton.setTextOff(null); 114 assertNull(toggleButton.getTextOff()); 115 116 toggleButton.setTextOff(""); 117 assertEquals("", toggleButton.getTextOff()); 118 } 119 120 @UiThreadTest 121 @Test 122 public void testDrawableStateChanged() { 123 final MockToggleButton toggleButton = 124 (MockToggleButton) mActivity.findViewById(R.id.toggle_custom); 125 126 // drawableStateChanged without any drawable. 127 toggleButton.drawableStateChanged(); 128 129 final StateListDrawable drawable = new StateListDrawable(); 130 drawable.addState(new int[] { android.R.attr.state_pressed }, 131 mActivity.getDrawable(R.drawable.scenery)); 132 drawable.addState(new int[] {}, 133 mActivity.getDrawable(R.drawable.scenery)); 134 135 // drawableStateChanged when CheckMarkDrawable is not null. 136 toggleButton.setButtonDrawable(drawable); 137 drawable.setState(null); 138 assertNull(drawable.getState()); 139 140 toggleButton.drawableStateChanged(); 141 assertNotNull(drawable.getState()); 142 assertEquals(toggleButton.getDrawableState(), drawable.getState()); 143 } 144 145 @UiThreadTest 146 @Test 147 public void testOnFinishInflate() { 148 final MockToggleButton toggleButton = 149 (MockToggleButton) mActivity.findViewById(R.id.toggle_custom); 150 toggleButton.onFinishInflate(); 151 } 152 153 @UiThreadTest 154 @Test 155 public void testSetChecked() { 156 final ToggleButton toggleButton = (ToggleButton) mActivity.findViewById(R.id.toggle1); 157 assertFalse(toggleButton.isChecked()); 158 159 toggleButton.setChecked(true); 160 assertTrue(toggleButton.isChecked()); 161 162 toggleButton.setChecked(false); 163 assertFalse(toggleButton.isChecked()); 164 } 165 166 @UiThreadTest 167 @Test 168 public void testToggleText() { 169 final ToggleButton toggleButton = (ToggleButton) mActivity.findViewById(R.id.toggle1); 170 toggleButton.setText("default text"); 171 toggleButton.setTextOn(TEXT_ON); 172 toggleButton.setTextOff(TEXT_OFF); 173 toggleButton.setChecked(true); 174 assertEquals(TEXT_ON, toggleButton.getText().toString()); 175 toggleButton.setChecked(false); 176 assertFalse(toggleButton.isChecked()); 177 assertEquals(TEXT_OFF, toggleButton.getText().toString()); 178 179 // Set the current displaying text as TEXT_OFF. 180 // Then set checked button, but textOn is null. 181 toggleButton.setTextOff(TEXT_OFF); 182 toggleButton.setChecked(false); 183 toggleButton.setTextOn(null); 184 toggleButton.setChecked(true); 185 assertEquals(TEXT_OFF, toggleButton.getText().toString()); 186 187 // Set the current displaying text as TEXT_ON. Then set unchecked button, 188 // but textOff is null. 189 toggleButton.setTextOn(TEXT_ON); 190 toggleButton.setChecked(true); 191 toggleButton.setTextOff(null); 192 toggleButton.setChecked(false); 193 assertEquals(TEXT_ON, toggleButton.getText().toString()); 194 } 195 196 @UiThreadTest 197 @Test 198 public void testSetBackgroundDrawable() { 199 final ToggleButton toggleButton = (ToggleButton) mActivity.findViewById(R.id.toggle1); 200 final Drawable drawable = mActivity.getDrawable(R.drawable.scenery); 201 202 toggleButton.setBackgroundDrawable(drawable); 203 assertSame(drawable, toggleButton.getBackground()); 204 205 // remove the background 206 toggleButton.setBackgroundDrawable(null); 207 assertNull(toggleButton.getBackground()); 208 } 209 210 @UiThreadTest 211 @Test 212 public void testAccessTextOn() { 213 final ToggleButton toggleButton = (ToggleButton) mActivity.findViewById(R.id.toggle1); 214 toggleButton.setTextOn("cts"); 215 assertEquals("cts", toggleButton.getTextOn()); 216 217 toggleButton.setTextOn(null); 218 assertNull(toggleButton.getTextOn()); 219 220 toggleButton.setTextOn(""); 221 assertEquals("", toggleButton.getTextOn()); 222 } 223 224 /** 225 * MockToggleButton class for testing. 226 */ 227 public static final class MockToggleButton extends ToggleButton { 228 public MockToggleButton(Context context) { 229 super(context); 230 } 231 232 public MockToggleButton(Context context, AttributeSet attrs) { 233 super(context, attrs); 234 } 235 236 @Override 237 protected void drawableStateChanged() { 238 super.drawableStateChanged(); 239 } 240 241 @Override 242 protected void onFinishInflate() { 243 super.onFinishInflate(); 244 } 245 } 246 } 247