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.assertFalse;
     20 import static org.junit.Assert.assertTrue;
     21 import static org.mockito.Mockito.mock;
     22 import static org.mockito.Mockito.times;
     23 import static org.mockito.Mockito.verify;
     24 import static org.mockito.Mockito.verifyNoMoreInteractions;
     25 import static org.mockito.Mockito.verifyZeroInteractions;
     26 
     27 import android.app.Activity;
     28 import android.app.Instrumentation;
     29 import android.support.test.InstrumentationRegistry;
     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.text.TextUtils;
     35 import android.widget.CheckBox;
     36 
     37 import com.android.compatibility.common.util.CtsTouchUtils;
     38 
     39 import org.junit.Before;
     40 import org.junit.Rule;
     41 import org.junit.Test;
     42 import org.junit.runner.RunWith;
     43 
     44 @SmallTest
     45 @RunWith(AndroidJUnit4.class)
     46 public class CheckBoxTest {
     47     private Instrumentation mInstrumentation;
     48     private Activity mActivity;
     49     private CheckBox mCheckBox;
     50 
     51     @Rule
     52     public ActivityTestRule<CheckBoxCtsActivity> mActivityRule =
     53             new ActivityTestRule<>(CheckBoxCtsActivity.class);
     54 
     55     @Before
     56     public void setup() {
     57         mInstrumentation = InstrumentationRegistry.getInstrumentation();
     58         mActivity = mActivityRule.getActivity();
     59         mCheckBox = (CheckBox) mActivity.findViewById(R.id.check_box);
     60     }
     61 
     62     @Test
     63     public void testConstructor() {
     64         new CheckBox(mActivity);
     65         new CheckBox(mActivity, null);
     66         new CheckBox(mActivity, null, android.R.attr.checkboxStyle);
     67         new CheckBox(mActivity, null, 0,
     68                 android.R.style.Widget_DeviceDefault_CompoundButton_CheckBox);
     69         new CheckBox(mActivity, null, 0,
     70                 android.R.style.Widget_DeviceDefault_Light_CompoundButton_CheckBox);
     71         new CheckBox(mActivity, null, 0,
     72                 android.R.style.Widget_Material_CompoundButton_CheckBox);
     73         new CheckBox(mActivity, null, 0,
     74                 android.R.style.Widget_Material_Light_CompoundButton_CheckBox);
     75     }
     76 
     77     @Test(expected=NullPointerException.class)
     78     public void testConstructorWithNullContext1() {
     79         new CheckBox(null);
     80     }
     81 
     82     @Test(expected=NullPointerException.class)
     83     public void testConstructorWithNullContext2() {
     84         new CheckBox(null, null);
     85     }
     86 
     87     @Test(expected=NullPointerException.class)
     88     public void testConstructorWithNullContext3() {
     89         new CheckBox(null, null, -1);
     90     }
     91 
     92     @UiThreadTest
     93     @Test
     94     public void testText() {
     95         assertTrue(TextUtils.equals(
     96                 mActivity.getString(R.string.hello_world), mCheckBox.getText()));
     97 
     98         mCheckBox.setText("new text");
     99         assertTrue(TextUtils.equals("new text", mCheckBox.getText()));
    100 
    101         mCheckBox.setText(R.string.text_name);
    102         assertTrue(TextUtils.equals(mActivity.getString(R.string.text_name), mCheckBox.getText()));
    103     }
    104 
    105     @UiThreadTest
    106     @Test
    107     public void testAccessChecked() {
    108         final CheckBox.OnCheckedChangeListener mockCheckedChangeListener =
    109                 mock(CheckBox.OnCheckedChangeListener.class);
    110         mCheckBox.setOnCheckedChangeListener(mockCheckedChangeListener);
    111         verifyZeroInteractions(mockCheckedChangeListener);
    112 
    113         assertFalse(mCheckBox.isChecked());
    114 
    115         // not checked -> not checked
    116         mCheckBox.setChecked(false);
    117         verifyZeroInteractions(mockCheckedChangeListener);
    118         assertFalse(mCheckBox.isChecked());
    119 
    120         // not checked -> checked
    121         mCheckBox.setChecked(true);
    122         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, true);
    123         assertTrue(mCheckBox.isChecked());
    124 
    125         // checked -> checked
    126         mCheckBox.setChecked(true);
    127         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, true);
    128         assertTrue(mCheckBox.isChecked());
    129 
    130         // checked -> not checked
    131         mCheckBox.setChecked(false);
    132         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, false);
    133         assertFalse(mCheckBox.isChecked());
    134 
    135         verifyNoMoreInteractions(mockCheckedChangeListener);
    136     }
    137 
    138     @UiThreadTest
    139     @Test
    140     public void testToggleViaApi() {
    141         final CheckBox.OnCheckedChangeListener mockCheckedChangeListener =
    142                 mock(CheckBox.OnCheckedChangeListener.class);
    143         mCheckBox.setOnCheckedChangeListener(mockCheckedChangeListener);
    144         verifyZeroInteractions(mockCheckedChangeListener);
    145 
    146         assertFalse(mCheckBox.isChecked());
    147 
    148         // toggle to checked
    149         mCheckBox.toggle();
    150         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, true);
    151         assertTrue(mCheckBox.isChecked());
    152 
    153         // toggle to not checked
    154         mCheckBox.toggle();
    155         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, false);
    156         assertFalse(mCheckBox.isChecked());
    157 
    158         verifyNoMoreInteractions(mockCheckedChangeListener);
    159     }
    160 
    161     @Test
    162     public void testToggleViaEmulatedTap() {
    163         final CheckBox.OnCheckedChangeListener mockCheckedChangeListener =
    164                 mock(CheckBox.OnCheckedChangeListener.class);
    165         mCheckBox.setOnCheckedChangeListener(mockCheckedChangeListener);
    166         verifyZeroInteractions(mockCheckedChangeListener);
    167 
    168         assertFalse(mCheckBox.isChecked());
    169 
    170         // tap to checked
    171         CtsTouchUtils.emulateTapOnViewCenter(mInstrumentation, mCheckBox);
    172         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, true);
    173         assertTrue(mCheckBox.isChecked());
    174 
    175         // tap to not checked
    176         CtsTouchUtils.emulateTapOnViewCenter(mInstrumentation, mCheckBox);
    177         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, false);
    178         assertFalse(mCheckBox.isChecked());
    179 
    180         verifyNoMoreInteractions(mockCheckedChangeListener);
    181     }
    182 
    183     @UiThreadTest
    184     @Test
    185     public void testToggleViaPerformClick() {
    186         final CheckBox.OnCheckedChangeListener mockCheckedChangeListener =
    187                 mock(CheckBox.OnCheckedChangeListener.class);
    188         mCheckBox.setOnCheckedChangeListener(mockCheckedChangeListener);
    189         verifyZeroInteractions(mockCheckedChangeListener);
    190 
    191         assertFalse(mCheckBox.isChecked());
    192 
    193         // click to checked
    194         mCheckBox.performClick();
    195         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, true);
    196         assertTrue(mCheckBox.isChecked());
    197 
    198         // click to not checked
    199         mCheckBox.performClick();
    200         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mCheckBox, false);
    201         assertFalse(mCheckBox.isChecked());
    202 
    203         verifyNoMoreInteractions(mockCheckedChangeListener);
    204     }
    205 }
    206