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.RadioButton;
     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 RadioButtonTest {
     47     private Instrumentation mInstrumentation;
     48     private Activity mActivity;
     49     private RadioButton mRadioButton;
     50 
     51     @Rule
     52     public ActivityTestRule<RadioButtonCtsActivity> mActivityRule =
     53             new ActivityTestRule<>(RadioButtonCtsActivity.class);
     54 
     55     @Before
     56     public void setup() {
     57         mInstrumentation = InstrumentationRegistry.getInstrumentation();
     58         mActivity = mActivityRule.getActivity();
     59         mRadioButton = (RadioButton) mActivity.findViewById(R.id.radio_button);
     60     }
     61 
     62     @Test
     63     public void testConstructor() {
     64         new RadioButton(mActivity);
     65         new RadioButton(mActivity, null);
     66         new RadioButton(mActivity, null, android.R.attr.radioButtonStyle);
     67         new RadioButton(mActivity, null, 0,
     68                 android.R.style.Widget_DeviceDefault_CompoundButton_RadioButton);
     69         new RadioButton(mActivity, null, 0,
     70                 android.R.style.Widget_DeviceDefault_Light_CompoundButton_RadioButton);
     71         new RadioButton(mActivity, null, 0,
     72                 android.R.style.Widget_Material_CompoundButton_RadioButton);
     73         new RadioButton(mActivity, null, 0,
     74                 android.R.style.Widget_Material_Light_CompoundButton_RadioButton);
     75     }
     76 
     77     @Test(expected=NullPointerException.class)
     78     public void testConstructorWithNullContext1() {
     79         new RadioButton(null);
     80     }
     81 
     82     @Test(expected=NullPointerException.class)
     83     public void testConstructorWithNullContext2() {
     84         new RadioButton(null, null);
     85     }
     86 
     87     @Test(expected=NullPointerException.class)
     88     public void testConstructorWithNullContext3() {
     89         new RadioButton(null, null, 0);
     90     }
     91 
     92     @UiThreadTest
     93     @Test
     94     public void testText() {
     95         assertTrue(TextUtils.equals(
     96                 mActivity.getString(R.string.hello_world), mRadioButton.getText()));
     97 
     98         mRadioButton.setText("new text");
     99         assertTrue(TextUtils.equals("new text", mRadioButton.getText()));
    100 
    101         mRadioButton.setText(R.string.text_name);
    102         assertTrue(TextUtils.equals(
    103                 mActivity.getString(R.string.text_name), mRadioButton.getText()));
    104     }
    105 
    106     @UiThreadTest
    107     @Test
    108     public void testAccessChecked() {
    109         final RadioButton.OnCheckedChangeListener mockCheckedChangeListener =
    110                 mock(RadioButton.OnCheckedChangeListener.class);
    111         mRadioButton.setOnCheckedChangeListener(mockCheckedChangeListener);
    112         verifyZeroInteractions(mockCheckedChangeListener);
    113 
    114         assertFalse(mRadioButton.isChecked());
    115 
    116         // not checked -> not checked
    117         mRadioButton.setChecked(false);
    118         verifyZeroInteractions(mockCheckedChangeListener);
    119         assertFalse(mRadioButton.isChecked());
    120 
    121         // not checked -> checked
    122         mRadioButton.setChecked(true);
    123         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mRadioButton, true);
    124         assertTrue(mRadioButton.isChecked());
    125 
    126         // checked -> checked
    127         mRadioButton.setChecked(true);
    128         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mRadioButton, true);
    129         assertTrue(mRadioButton.isChecked());
    130 
    131         // checked -> not checked
    132         mRadioButton.setChecked(false);
    133         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mRadioButton, false);
    134         assertFalse(mRadioButton.isChecked());
    135 
    136         verifyNoMoreInteractions(mockCheckedChangeListener);
    137     }
    138 
    139     @UiThreadTest
    140     @Test
    141     public void testToggleViaApi() {
    142         final RadioButton.OnCheckedChangeListener mockCheckedChangeListener =
    143                 mock(RadioButton.OnCheckedChangeListener.class);
    144         mRadioButton.setOnCheckedChangeListener(mockCheckedChangeListener);
    145         verifyZeroInteractions(mockCheckedChangeListener);
    146 
    147         assertFalse(mRadioButton.isChecked());
    148 
    149         // toggle to checked
    150         mRadioButton.toggle();
    151         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mRadioButton, true);
    152         assertTrue(mRadioButton.isChecked());
    153 
    154         // try toggle to not checked - this should leave the radio button in checked state
    155         mRadioButton.toggle();
    156         assertTrue(mRadioButton.isChecked());
    157 
    158         verifyNoMoreInteractions(mockCheckedChangeListener);
    159     }
    160 
    161     @Test
    162     public void testToggleViaEmulatedTap() {
    163         final RadioButton.OnCheckedChangeListener mockCheckedChangeListener =
    164                 mock(RadioButton.OnCheckedChangeListener.class);
    165         mRadioButton.setOnCheckedChangeListener(mockCheckedChangeListener);
    166         verifyZeroInteractions(mockCheckedChangeListener);
    167 
    168         assertFalse(mRadioButton.isChecked());
    169 
    170         // tap to checked
    171         CtsTouchUtils.emulateTapOnViewCenter(mInstrumentation, mRadioButton);
    172         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mRadioButton, true);
    173         assertTrue(mRadioButton.isChecked());
    174 
    175         // tap to not checked - this should leave the radio button in checked state
    176         CtsTouchUtils.emulateTapOnViewCenter(mInstrumentation, mRadioButton);
    177         assertTrue(mRadioButton.isChecked());
    178 
    179         verifyNoMoreInteractions(mockCheckedChangeListener);
    180     }
    181 
    182     @UiThreadTest
    183     @Test
    184     public void testToggleViaPerformClick() {
    185         final RadioButton.OnCheckedChangeListener mockCheckedChangeListener =
    186                 mock(RadioButton.OnCheckedChangeListener.class);
    187         mRadioButton.setOnCheckedChangeListener(mockCheckedChangeListener);
    188         verifyZeroInteractions(mockCheckedChangeListener);
    189 
    190         assertFalse(mRadioButton.isChecked());
    191 
    192         // click to checked
    193         mRadioButton.performClick();
    194         verify(mockCheckedChangeListener, times(1)).onCheckedChanged(mRadioButton, true);
    195         assertTrue(mRadioButton.isChecked());
    196 
    197         // click to not checked - this should leave the radio button in checked state
    198         mRadioButton.performClick();
    199         assertTrue(mRadioButton.isChecked());
    200 
    201         verifyNoMoreInteractions(mockCheckedChangeListener);
    202     }
    203 }
    204