OSDN Git Service

Restart loader in onResume
[android-x86/packages-apps-Settings.git] / tests / robotests / src / com / android / settings / core / DynamicAvailabilityPreferenceControllerTest.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
17 package com.android.settings.core;
18
19 import android.content.Context;
20 import android.support.v7.preference.Preference;
21 import android.support.v7.preference.PreferenceScreen;
22
23 import com.android.settings.SettingsRobolectricTestRunner;
24 import com.android.settings.TestConfig;
25 import com.android.settings.core.lifecycle.Lifecycle;
26
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.junit.runner.RunWith;
30 import org.mockito.Mock;
31 import org.mockito.MockitoAnnotations;
32 import org.robolectric.annotation.Config;
33
34 import static com.google.common.truth.Truth.assertThat;
35 import static org.mockito.Mockito.never;
36 import static org.mockito.Mockito.reset;
37 import static org.mockito.Mockito.verify;
38 import static org.mockito.Mockito.when;
39
40 /**
41  * Tests for {@link DynamicAvailabilityPreferenceController}.
42  */
43 @RunWith(SettingsRobolectricTestRunner.class)
44 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
45 public final class DynamicAvailabilityPreferenceControllerTest {
46
47     private final String PREFERENCE_KEY = "preference_key";
48
49     private @Mock Context mContext;
50     private @Mock Preference mPreference;
51     private @Mock PreferenceScreen mScreen;
52     private @Mock Lifecycle mLifecycle;
53
54     private boolean mIsAvailable;
55     private Preference mUpdatedPreference = null;
56
57     @Before
58     public void setUp() {
59         MockitoAnnotations.initMocks(this);
60         when(mPreference.getKey()).thenReturn(PREFERENCE_KEY);
61         when(mScreen.findPreference(PREFERENCE_KEY)).thenReturn(mPreference);
62         when(mScreen.getPreferenceCount()).thenReturn(1);
63         when(mScreen.getPreference(0)).thenReturn(mPreference);
64     }
65
66     @Test
67     public void testAvailableToUnavailable() {
68         mIsAvailable = true;
69
70         final DynamicAvailabilityPreferenceController controller
71                 = new DynamicAvailabilityPreferenceControllerTestable(mLifecycle);
72         verify(mLifecycle).addObserver(controller);
73
74         controller.displayPreference(mScreen);
75         verify(mScreen, never()).removePreference(mPreference);
76         verify(mScreen, never()).addPreference(mPreference);
77         assertThat(mUpdatedPreference).isNull();
78
79         controller.onResume();
80         verify(mScreen, never()).removePreference(mPreference);
81         verify(mScreen, never()).addPreference(mPreference);
82         assertThat(mUpdatedPreference).isEqualTo(mPreference);
83
84         mUpdatedPreference = null;
85         mIsAvailable = false;
86         controller.onResume();
87         verify(mScreen).removePreference(mPreference);
88         verify(mScreen, never()).addPreference(mPreference);
89         assertThat(mUpdatedPreference).isNull();
90     }
91
92     @Test
93     public void testUnavailableToAvailable() {
94         mIsAvailable = false;
95
96         final DynamicAvailabilityPreferenceController controller
97                 = new DynamicAvailabilityPreferenceControllerTestable(mLifecycle);
98         verify(mLifecycle).addObserver(controller);
99
100         controller.displayPreference(mScreen);
101         verify(mScreen).removePreference(mPreference);
102         verify(mScreen, never()).addPreference(mPreference);
103         assertThat(mUpdatedPreference).isNull();
104
105         reset(mScreen);
106         controller.onResume();
107         verify(mScreen, never()).removePreference(mPreference);
108         verify(mScreen, never()).addPreference(mPreference);
109         assertThat(mUpdatedPreference).isNull();
110
111         mIsAvailable = true;
112         controller.onResume();
113         verify(mScreen, never()).removePreference(mPreference);
114         verify(mScreen).addPreference(mPreference);
115         assertThat(mUpdatedPreference).isEqualTo(mPreference);
116     }
117
118
119     private class DynamicAvailabilityPreferenceControllerTestable
120             extends DynamicAvailabilityPreferenceController {
121         public DynamicAvailabilityPreferenceControllerTestable(Lifecycle lifecycle) {
122             super(DynamicAvailabilityPreferenceControllerTest.this.mContext, lifecycle);
123         }
124
125         @Override
126         public boolean isAvailable() {
127             return mIsAvailable;
128         }
129
130         @Override
131         public void updateState(Preference preference) {
132             mUpdatedPreference = preference;
133         }
134
135         @Override
136         public String getPreferenceKey() {
137             return PREFERENCE_KEY;
138         }
139     }
140 }