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.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