• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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 com.android.settings.gestures;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static junit.framework.Assert.assertEquals;
22 
23 import static org.mockito.Matchers.anyString;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.reset;
26 import static org.mockito.Mockito.verify;
27 import static org.mockito.Mockito.when;
28 
29 import android.content.Context;
30 import android.os.Bundle;
31 import android.support.v7.preference.Preference;
32 import android.support.v7.preference.PreferenceScreen;
33 import android.support.v7.preference.TwoStatePreference;
34 
35 import com.android.settings.testutils.SettingsRobolectricTestRunner;
36 import com.android.settings.widget.VideoPreference;
37 
38 import org.junit.Before;
39 import org.junit.Test;
40 import org.junit.runner.RunWith;
41 import org.mockito.Answers;
42 import org.mockito.Mock;
43 import org.mockito.MockitoAnnotations;
44 import org.robolectric.RuntimeEnvironment;
45 
46 @RunWith(SettingsRobolectricTestRunner.class)
47 public class GesturePreferenceControllerTest {
48 
49     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
50     private Context mContext;
51     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
52     private PreferenceScreen mScreen;
53     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
54 
55     private TestPrefController mController;
56     private Preference mPreference;
57 
58     @Before
setUp()59     public void setUp() {
60         MockitoAnnotations.initMocks(this);
61         mController = new TestPrefController(mContext, "testKey");
62         mPreference = new Preference(RuntimeEnvironment.application);
63         mPreference.setKey(mController.getPreferenceKey());
64         when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
65     }
66 
67     @Test
display_configIsTrue_shouldDisplay()68     public void display_configIsTrue_shouldDisplay() {
69         mController.mIsPrefAvailable = true;
70         when(mScreen.findPreference(anyString())).thenReturn(mock(VideoPreference.class));
71 
72         mController.displayPreference(mScreen);
73 
74         assertThat(mPreference.isVisible()).isTrue();
75     }
76 
77     @Test
display_configIsFalse_shouldNotDisplay()78     public void display_configIsFalse_shouldNotDisplay() {
79         mController.mIsPrefAvailable = false;
80 
81         mController.displayPreference(mScreen);
82 
83         assertThat(mPreference.isVisible()).isFalse();
84     }
85 
86     @Test
onResume_shouldStartVideoPreferenceWithVideoPauseState()87     public void onResume_shouldStartVideoPreferenceWithVideoPauseState() {
88         final VideoPreference videoPreference = mock(VideoPreference.class);
89         when(mScreen.findPreference(mController.getVideoPrefKey())).thenReturn(videoPreference);
90         mController.mIsPrefAvailable = true;
91 
92         mController.displayPreference(mScreen);
93         final Bundle savedState = new Bundle();
94 
95         mController.onCreate(null);
96         mController.onResume();
97         verify(videoPreference).onViewVisible(false);
98 
99         reset(videoPreference);
100         savedState.putBoolean(GesturePreferenceController.KEY_VIDEO_PAUSED, true);
101         mController.onCreate(savedState);
102         mController.onResume();
103         verify(videoPreference).onViewVisible(true);
104 
105         reset(videoPreference);
106         savedState.putBoolean(GesturePreferenceController.KEY_VIDEO_PAUSED, false);
107         mController.onCreate(savedState);
108         mController.onResume();
109         verify(videoPreference).onViewVisible(false);
110     }
111 
112     @Test
onPause_shouldStopVideoPreference()113     public void onPause_shouldStopVideoPreference() {
114         final VideoPreference videoPreference = mock(VideoPreference.class);
115         when(mScreen.findPreference(mController.getVideoPrefKey())).thenReturn(videoPreference);
116         mController.mIsPrefAvailable = true;
117 
118         mController.displayPreference(mScreen);
119         mController.onPause();
120 
121         verify(videoPreference).onViewInvisible();
122     }
123 
124     @Test
onPause_shouldUpdateVideoPauseState()125     public void onPause_shouldUpdateVideoPauseState() {
126         final VideoPreference videoPreference = mock(VideoPreference.class);
127         when(mScreen.findPreference(mController.getVideoPrefKey())).thenReturn(videoPreference);
128         mController.mIsPrefAvailable = true;
129         mController.displayPreference(mScreen);
130 
131         when(videoPreference.isVideoPaused()).thenReturn(true);
132         mController.onPause();
133         assertThat(mController.mVideoPaused).isTrue();
134 
135         when(videoPreference.isVideoPaused()).thenReturn(false);
136         mController.onPause();
137         assertThat(mController.mVideoPaused).isFalse();
138     }
139 
140     @Test
onSaveInstanceState_shouldSaveVideoPauseState()141     public void onSaveInstanceState_shouldSaveVideoPauseState() {
142         final Bundle outState = mock(Bundle.class);
143 
144         mController.mVideoPaused = true;
145         mController.onSaveInstanceState(outState);
146         verify(outState).putBoolean(GesturePreferenceController.KEY_VIDEO_PAUSED, true);
147 
148         mController.mVideoPaused = false;
149         mController.onSaveInstanceState(outState);
150         verify(outState).putBoolean(GesturePreferenceController.KEY_VIDEO_PAUSED, false);
151     }
152 
153     @Test
updateState_preferenceSetCheckedWhenSettingIsOn()154     public void updateState_preferenceSetCheckedWhenSettingIsOn() {
155         // Mock a TwoStatePreference
156         final TwoStatePreference preference = mock(TwoStatePreference.class);
157         // Set the setting to be enabled.
158         mController.mIsPrefEnabled = true;
159         // Run through updateState
160         mController.updateState(preference);
161 
162         // Verify pref is checked (as setting is enabled).
163         verify(preference).setChecked(true);
164     }
165 
166     @Test
updateState_preferenceSetUncheckedWhenSettingIsOff()167     public void updateState_preferenceSetUncheckedWhenSettingIsOff() {
168         // Mock a TwoStatePreference
169         final TwoStatePreference preference = mock(TwoStatePreference.class);
170         // Set the setting to be disabled.
171         mController.mIsPrefEnabled = false;
172 
173         // Run through updateState
174         mController.updateState(preference);
175 
176         // Verify pref is unchecked (as setting is disabled).
177         verify(preference).setChecked(false);
178     }
179 
180     @Test
updateState_notTwoStatePreference_setSummary()181     public void updateState_notTwoStatePreference_setSummary() {
182         // Mock a regular preference
183         final Preference preference = mock(Preference.class);
184         // Set the setting to be disabled.
185         mController.mIsPrefEnabled = false;
186 
187         // Run through updateState
188         mController.updateState(preference);
189 
190         // Verify summary is set to off (as setting is disabled).
191         assertThat(preference.getSummary()).isEqualTo(
192                 mContext.getString(com.android.settings.R.string.gesture_setting_off));
193     }
194 
195     private class TestPrefController extends GesturePreferenceController {
196 
197         boolean mIsPrefAvailable;
198         boolean mIsPrefEnabled;
199 
TestPrefController(Context context, String key)200         private TestPrefController(Context context,
201                 String key) {
202             super(context, key);
203         }
204 
205         @Override
getAvailabilityStatus()206         public int getAvailabilityStatus() {
207             return mIsPrefAvailable ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
208         }
209 
210         @Override
getVideoPrefKey()211         protected String getVideoPrefKey() {
212             return "videoKey";
213         }
214 
215         @Override
isChecked()216         public boolean isChecked() {
217             return mIsPrefEnabled;
218         }
219 
220         @Override
setChecked(boolean isChecked)221         public boolean setChecked(boolean isChecked) {
222             return false;
223         }
224     }
225 }
226