MasterSwitchPreferenceTest.java revision c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924
1ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville/* 2ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Copyright (C) 2017 The Android Open Source Project 3ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * 4ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * you may not use this file except in compliance with the License. 6ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * You may obtain a copy of the License at 7ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * 8ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * http://www.apache.org/licenses/LICENSE-2.0 9ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * 10ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Unless required by applicable law or agreed to in writing, software 11ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * See the License for the specific language governing permissions and 14ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * limitations under the License. 15ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */ 16ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 17ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepackage com.android.settings.widget; 18ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 19ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.content.Context; 20ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.support.v7.preference.Preference; 21ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.support.v7.preference.PreferenceViewHolder; 22ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.support.v7.preference.Preference.OnPreferenceChangeListener; 232cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Savilleimport android.view.LayoutInflater; 24ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.widget.CompoundButton.OnCheckedChangeListener; 25ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport android.widget.Switch; 26ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 276c806ef816f8ae0a1849ba05f3128a04577b32d0Amit Mahajanimport com.android.settings.R; 28ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.settings.SettingsRobolectricTestRunner; 29ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.settings.TestConfig; 30ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 31ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 32ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport org.junit.Before; 33ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport org.junit.Test; 34ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport org.junit.runner.RunWith; 35ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport org.robolectric.annotation.Config; 36ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport org.robolectric.shadows.ShadowApplication; 37ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 38ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport static com.google.common.truth.Truth.assertThat; 39ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport static org.mockito.Matchers.any; 40ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport static org.mockito.Matchers.eq; 41ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport static org.mockito.Mockito.mock; 42ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport static org.mockito.Mockito.spy; 43ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savilleimport static org.mockito.Mockito.verify; 446c806ef816f8ae0a1849ba05f3128a04577b32d0Amit Mahajan 45ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville@RunWith(SettingsRobolectricTestRunner.class) 46ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 47ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Savillepublic class MasterSwitchPreferenceTest { 48ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 49ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private Context mContext; 50ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 51ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville @Before 52ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public void setUp() { 53ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mContext = ShadowApplication.getInstance().getApplicationContext(); 54ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 55ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 56ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville @Test 57ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public void createNewPreference_shouldSetLayout() { 58ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 59ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 60ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville assertThat(preference.getWidgetLayoutResource()).isEqualTo( 61ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville R.layout.preference_widget_master_switch); 62ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 63ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 64ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville @Test 65ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public void setChecked_shouldUpdateButtonCheckedState() { 66ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 67ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext) 68ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville .inflate(R.layout.preference_widget_master_switch, null)); 69ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 70ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville preference.onBindViewHolder(holder); 71ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 72ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville preference.setChecked(true); 73ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville assertThat(toggle.isChecked()).isTrue(); 74ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 75ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville preference.setChecked(false); 76ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville assertThat(toggle.isChecked()).isFalse(); 776c806ef816f8ae0a1849ba05f3128a04577b32d0Amit Mahajan } 78ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 792cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Saville @Test 80ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public void setSwitchEnabled_shouldUpdateButtonEnabledState() { 81ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 82ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final PreferenceViewHolder holder = new PreferenceViewHolder( 83ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 84ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 85ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville preference.onBindViewHolder(holder); 86ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 87ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville preference.setSwitchEnabled(true); 88ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville assertThat(toggle.isEnabled()).isTrue(); 89ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 90ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville preference.setSwitchEnabled(false); 91ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville assertThat(toggle.isEnabled()).isFalse(); 92ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 93ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 94ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville @Test 95ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public void toggleButtonOn_shouldNotifyChecked() { 9657da4aa945252ebed6b505387145f99be8ad5d72Wink Saville final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 9757da4aa945252ebed6b505387145f99be8ad5d72Wink Saville final PreferenceViewHolder holder = new PreferenceViewHolder( 9857da4aa945252ebed6b505387145f99be8ad5d72Wink Saville LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 99ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 100ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); 101e3f497323441d0c9215f6cbad9ce950f054cce72Jack Yu preference.setOnPreferenceChangeListener(listener); 102ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville preference.onBindViewHolder(holder); 103ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 104ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville toggle.setChecked(true); 105ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville verify(listener).onPreferenceChange(preference, true); 106ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 107ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 108ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville @Test 109 public void toggleButtonOff_shouldNotifyUnchecked() { 110 final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 111 final PreferenceViewHolder holder = new PreferenceViewHolder( 112 LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 113 final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 114 final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); 115 preference.setChecked(true); 116 preference.setOnPreferenceChangeListener(listener); 117 preference.onBindViewHolder(holder); 118 119 toggle.setChecked(false); 120 verify(listener).onPreferenceChange(preference, false); 121 } 122 123 @Test 124 public void setDisabledByAdmin_hasEnforcedAdmin_shouldDisableButton() { 125 final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 126 final PreferenceViewHolder holder = new PreferenceViewHolder( 127 LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 128 final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 129 toggle.setEnabled(true); 130 preference.onBindViewHolder(holder); 131 132 preference.setDisabledByAdmin(mock(EnforcedAdmin.class)); 133 assertThat(toggle.isEnabled()).isFalse(); 134 } 135 136 @Test 137 public void setDisabledByAdmin_noEnforcedAdmin_shouldEnaableButton() { 138 final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 139 final PreferenceViewHolder holder = new PreferenceViewHolder( 140 LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 141 final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 142 toggle.setEnabled(false); 143 preference.onBindViewHolder(holder); 144 145 preference.setDisabledByAdmin(null); 146 assertThat(toggle.isEnabled()).isTrue(); 147 } 148} 149