1d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang/*
2d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * Copyright (C) 2017 The Android Open Source Project
3d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang *
4d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * Licensed under the Apache License, Version 2.0 (the "License");
5d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * you may not use this file except in compliance with the License.
6d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * You may obtain a copy of the License at
7d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang *
8d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang *      http://www.apache.org/licenses/LICENSE-2.0
9d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang *
10d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * Unless required by applicable law or agreed to in writing, software
11d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * distributed under the License is distributed on an "AS IS" BASIS,
12d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * See the License for the specific language governing permissions and
14d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang * limitations under the License.
15d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang */
16d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
17d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangpackage com.android.settings.development;
18d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
19d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport static com.google.common.truth.Truth.assertThat;
20d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport static org.mockito.Mockito.verify;
21d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport static org.mockito.Mockito.when;
22d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
23d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport android.content.Context;
24d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport android.provider.Settings;
25d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport android.support.v14.preference.SwitchPreference;
26d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport android.support.v7.preference.PreferenceScreen;
27d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
28d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport com.android.settings.testutils.SettingsRobolectricTestRunner;
29d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
30d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport org.junit.Before;
31d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport org.junit.Test;
32d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport org.junit.runner.RunWith;
33d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport org.mockito.Mock;
34d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport org.mockito.MockitoAnnotations;
35d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangimport org.robolectric.RuntimeEnvironment;
36d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
37d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang@RunWith(SettingsRobolectricTestRunner.class)
38d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuangpublic class WifiDisplayCertificationPreferenceControllerTest {
39d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
40d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Mock
41d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    private SwitchPreference mPreference;
42d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Mock
43d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    private PreferenceScreen mPreferenceScreen;
44d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
45d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    private Context mContext;
46d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    private WifiDisplayCertificationPreferenceController mController;
47d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
48d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Before
49d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    public void setup() {
50d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        MockitoAnnotations.initMocks(this);
51d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mContext = RuntimeEnvironment.application;
52d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mController = new WifiDisplayCertificationPreferenceController(mContext);
53d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
54d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                mPreference);
55d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mController.displayPreference(mPreferenceScreen);
56d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    }
57d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
58d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Test
59d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    public void onPreferenceChanged_turnOnWifiDisplayCertification() {
60d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mController.onPreferenceChange(mPreference, true /* new value */);
61d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
62d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        final int mode = Settings.System.getInt(mContext.getContentResolver(),
63d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, -1 /* default */);
64d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
65d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        assertThat(mode).isEqualTo(WifiDisplayCertificationPreferenceController.SETTING_VALUE_ON);
66d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    }
67d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
68d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Test
69d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    public void onPreferenceChanged_turnOffWifiDisplayCertification() {
70d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mController.onPreferenceChange(mPreference, false /* new value */);
71d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
72d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        final int mode = Settings.System.getInt(mContext.getContentResolver(),
73d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, -1 /* default */);
74d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
75d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        assertThat(mode).isEqualTo(WifiDisplayCertificationPreferenceController.SETTING_VALUE_OFF);
76d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    }
77d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
78d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Test
79d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    public void updateState_preferenceShouldBeChecked() {
80d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        Settings.System.putInt(mContext.getContentResolver(),
81d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON,
82d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                WifiDisplayCertificationPreferenceController.SETTING_VALUE_ON);
83d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mController.updateState(mPreference);
84d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
85d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        verify(mPreference).setChecked(true);
86d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    }
87d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
88d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Test
89d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    public void updateState_preferenceShouldNotBeChecked() {
90d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        Settings.System.putInt(mContext.getContentResolver(),
91d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON,
92d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                WifiDisplayCertificationPreferenceController.SETTING_VALUE_OFF);
93d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mController.updateState(mPreference);
94d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
95d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        verify(mPreference).setChecked(false);
96d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    }
97d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
98d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    @Test
99d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    public void onDeveloperOptionsDisabled_shouldDisablePreference() {
100d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        mController.onDeveloperOptionsDisabled();
101d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        final int mode = Settings.System.getInt(mContext.getContentResolver(),
102d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, -1 /* default */);
103d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang
104d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        assertThat(mode).isEqualTo(WifiDisplayCertificationPreferenceController.SETTING_VALUE_OFF);
105d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        verify(mPreference).setEnabled(false);
106d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang        verify(mPreference).setChecked(false);
107d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang    }
108d61c360385d5f95c39f1f8474bb0e3cb559a5554jeffreyhuang}
109