MasterSwitchPreferenceTest.java revision c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924
11432cb852972daedd6c2fde78abb769b722fc47dDoris Ling/* 21432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * Copyright (C) 2017 The Android Open Source Project 31432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * 41432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 51432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * you may not use this file except in compliance with the License. 61432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * You may obtain a copy of the License at 71432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * 81432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * http://www.apache.org/licenses/LICENSE-2.0 91432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * 101432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * Unless required by applicable law or agreed to in writing, software 111432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * distributed under the License is distributed on an "AS IS" BASIS, 121432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * See the License for the specific language governing permissions and 141432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * limitations under the License. 151432cb852972daedd6c2fde78abb769b722fc47dDoris Ling */ 161432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 171432cb852972daedd6c2fde78abb769b722fc47dDoris Lingpackage com.android.settings.widget; 181432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 191432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.content.Context; 201432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.support.v7.preference.Preference; 211432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.support.v7.preference.PreferenceViewHolder; 221432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.support.v7.preference.Preference.OnPreferenceChangeListener; 231432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.view.LayoutInflater; 241432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.widget.CompoundButton.OnCheckedChangeListener; 251432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.widget.Switch; 261432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 271432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport com.android.settings.R; 281432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport com.android.settings.SettingsRobolectricTestRunner; 291432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport com.android.settings.TestConfig; 30c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 311432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 321432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.junit.Before; 331432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.junit.Test; 341432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.junit.runner.RunWith; 351432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.robolectric.annotation.Config; 361432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.robolectric.shadows.ShadowApplication; 371432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 381432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static com.google.common.truth.Truth.assertThat; 391432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Matchers.any; 401432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Matchers.eq; 411432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Mockito.mock; 421432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Mockito.spy; 431432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Mockito.verify; 441432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 451432cb852972daedd6c2fde78abb769b722fc47dDoris Ling@RunWith(SettingsRobolectricTestRunner.class) 461432cb852972daedd6c2fde78abb769b722fc47dDoris Ling@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 471432cb852972daedd6c2fde78abb769b722fc47dDoris Lingpublic class MasterSwitchPreferenceTest { 481432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 491432cb852972daedd6c2fde78abb769b722fc47dDoris Ling private Context mContext; 501432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 511432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Before 521432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void setUp() { 531432cb852972daedd6c2fde78abb769b722fc47dDoris Ling mContext = ShadowApplication.getInstance().getApplicationContext(); 541432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 551432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 561432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 571432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void createNewPreference_shouldSetLayout() { 581432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 591432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 601432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(preference.getWidgetLayoutResource()).isEqualTo( 611432cb852972daedd6c2fde78abb769b722fc47dDoris Ling R.layout.preference_widget_master_switch); 621432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 631432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 641432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 651432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void setChecked_shouldUpdateButtonCheckedState() { 661432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 671432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext) 681432cb852972daedd6c2fde78abb769b722fc47dDoris Ling .inflate(R.layout.preference_widget_master_switch, null)); 691432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 701432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 711432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 721432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setChecked(true); 731432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isChecked()).isTrue(); 741432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 751432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setChecked(false); 761432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isChecked()).isFalse(); 771432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 781432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 791432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 801432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void setSwitchEnabled_shouldUpdateButtonEnabledState() { 811432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 821432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 831432cb852972daedd6c2fde78abb769b722fc47dDoris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 841432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 851432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 861432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 871432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setSwitchEnabled(true); 881432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isEnabled()).isTrue(); 891432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 901432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setSwitchEnabled(false); 911432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isEnabled()).isFalse(); 921432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 931432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 941432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 951432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void toggleButtonOn_shouldNotifyChecked() { 961432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 971432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 981432cb852972daedd6c2fde78abb769b722fc47dDoris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 991432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 1001432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); 1011432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setOnPreferenceChangeListener(listener); 1021432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 1031432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 1041432cb852972daedd6c2fde78abb769b722fc47dDoris Ling toggle.setChecked(true); 1051432cb852972daedd6c2fde78abb769b722fc47dDoris Ling verify(listener).onPreferenceChange(preference, true); 1061432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 1071432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 1081432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 1091432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void toggleButtonOff_shouldNotifyUnchecked() { 1101432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 1111432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 1121432cb852972daedd6c2fde78abb769b722fc47dDoris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 1131432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 1141432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); 1151432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setChecked(true); 1161432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setOnPreferenceChangeListener(listener); 1171432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 1181432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 1191432cb852972daedd6c2fde78abb769b722fc47dDoris Ling toggle.setChecked(false); 1201432cb852972daedd6c2fde78abb769b722fc47dDoris Ling verify(listener).onPreferenceChange(preference, false); 1211432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 122c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 123c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Test 124c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public void setDisabledByAdmin_hasEnforcedAdmin_shouldDisableButton() { 125c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 126c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 127c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 128c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 129c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling toggle.setEnabled(true); 130c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.onBindViewHolder(holder); 131c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 132c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.setDisabledByAdmin(mock(EnforcedAdmin.class)); 133c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling assertThat(toggle.isEnabled()).isFalse(); 134c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 135c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 136c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Test 137c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public void setDisabledByAdmin_noEnforcedAdmin_shouldEnaableButton() { 138c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 139c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 140c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 141c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 142c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling toggle.setEnabled(false); 143c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.onBindViewHolder(holder); 144c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 145c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.setDisabledByAdmin(null); 146c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling assertThat(toggle.isEnabled()).isTrue(); 147c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 1481432cb852972daedd6c2fde78abb769b722fc47dDoris Ling} 149