OSDN Git Service

Make all TogglePreferenceController slice-able.
[android-x86/packages-apps-Settings.git] / tests / robotests / src / com / android / settings / core / TogglePreferenceControllerTest.java
1 /*
2  * Copyright (C) 2017 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 package com.android.settings.core;
17
18 import static com.google.common.truth.Truth.assertThat;
19
20 import android.content.Context;
21
22 import androidx.preference.SwitchPreference;
23
24 import com.android.settings.slices.SliceData;
25
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.robolectric.RobolectricTestRunner;
30 import org.robolectric.RuntimeEnvironment;
31
32 @RunWith(RobolectricTestRunner.class)
33 public class TogglePreferenceControllerTest {
34
35     private FakeToggle mToggleController;
36
37     private Context mContext;
38     private SwitchPreference mPreference;
39
40     @Before
41     public void setUp() {
42         mContext = RuntimeEnvironment.application;
43         mPreference = new SwitchPreference(mContext);
44         mToggleController = new FakeToggle(mContext, "key");
45     }
46
47     @Test
48     public void testSetsPreferenceValue_setsChecked() {
49         mToggleController.setChecked(true);
50         mPreference.setChecked(false);
51
52         mToggleController.updateState(mPreference);
53
54         assertThat(mPreference.isChecked()).isTrue();
55     }
56
57     @Test
58     public void testSetsPreferenceValue_setsNotChecked() {
59         mToggleController.setChecked(false);
60         mPreference.setChecked(true);
61
62         mToggleController.updateState(mPreference);
63
64         assertThat(mPreference.isChecked()).isFalse();
65     }
66
67     @Test
68     public void testUpdatesPreferenceOnChange_turnsOn() {
69         boolean newValue = true;
70         mToggleController.setChecked(!newValue);
71
72         mToggleController.onPreferenceChange(mPreference, newValue);
73
74         assertThat(mToggleController.isChecked()).isEqualTo(newValue);
75     }
76
77     @Test
78     public void testUpdatesPreferenceOnChange_turnsOff() {
79         boolean newValue = false;
80         mToggleController.setChecked(!newValue);
81
82         mToggleController.onPreferenceChange(mPreference, newValue);
83
84         assertThat(mToggleController.isChecked()).isEqualTo(newValue);
85     }
86
87     @Test
88     public void testSliceType_returnsSliceType() {
89         assertThat(mToggleController.getSliceType()).isEqualTo(
90                 SliceData.SliceType.SWITCH);
91     }
92
93     @Test
94     public void isSliceable_returnTrue() {
95         assertThat(mToggleController.isSliceable()).isTrue();
96     }
97
98     @Test
99     public void isPublicSlice_returnFalse() {
100         assertThat(mToggleController.isPublicSlice()).isFalse();
101     }
102
103     private static class FakeToggle extends TogglePreferenceController {
104
105         private boolean checkedFlag;
106
107         private FakeToggle(Context context, String preferenceKey) {
108             super(context, preferenceKey);
109         }
110
111         @Override
112         public boolean isChecked() {
113             return checkedFlag;
114         }
115
116         @Override
117         public boolean setChecked(boolean isChecked) {
118             checkedFlag = isChecked;
119             return true;
120         }
121
122         @Override
123         public int getAvailabilityStatus() {
124             return AVAILABLE;
125         }
126     }
127 }