• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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.accessibility;
18 
19 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
20 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
21 
22 import static com.google.common.truth.Truth.assertThat;
23 
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.when;
26 
27 import android.app.settings.SettingsEnums;
28 import android.content.Context;
29 import android.content.res.Resources;
30 import android.os.Bundle;
31 
32 import androidx.fragment.app.FragmentActivity;
33 import androidx.preference.PreferenceManager;
34 import androidx.preference.PreferenceScreen;
35 import androidx.test.core.app.ApplicationProvider;
36 
37 import com.android.settings.R;
38 import com.android.settings.testutils.XmlTestUtils;
39 import com.android.settings.testutils.shadow.ShadowFragment;
40 
41 import org.junit.Before;
42 import org.junit.Rule;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
45 import org.mockito.Spy;
46 import org.mockito.junit.MockitoJUnit;
47 import org.mockito.junit.MockitoRule;
48 import org.robolectric.Robolectric;
49 import org.robolectric.RobolectricTestRunner;
50 import org.robolectric.annotation.Config;
51 
52 import java.util.List;
53 
54 /** Tests for {@link AccessibilityButtonFragment}. */
55 @Config(shadows = ShadowFragment.class)
56 @RunWith(RobolectricTestRunner.class)
57 public class AccessibilityButtonFragmentTest {
58 
59     @Rule
60     public MockitoRule mMockitoRule = MockitoJUnit.rule();
61     @Spy
62     private final Context mContext = ApplicationProvider.getApplicationContext();
63     @Spy
64     private Resources mResources = spy(mContext.getResources());
65     private AccessibilityButtonFragment mFragment;
66 
67     @Before
setUp()68     public void setUp() {
69         mFragment = spy(new TestAccessibilityButtonFragment(mContext));
70         when(mContext.getResources()).thenReturn(mResources);
71         when(mFragment.getResources()).thenReturn(mResources);
72         when(mFragment.getActivity()).thenReturn(Robolectric.setupActivity(FragmentActivity.class));
73     }
74 
75     @Test
getMetricsCategory_returnsCorrectCategory()76     public void getMetricsCategory_returnsCorrectCategory() {
77         assertThat(mFragment.getMetricsCategory()).isEqualTo(
78                 SettingsEnums.ACCESSIBILITY_BUTTON_SETTINGS);
79     }
80 
81     @Test
getLogTag_returnsCorrectTag()82     public void getLogTag_returnsCorrectTag() {
83         assertThat(mFragment.getLogTag()).isEqualTo("AccessibilityButtonFragment");
84     }
85 
86     @Test
onCreate_navigationGestureEnabled_setCorrectTitle()87     public void onCreate_navigationGestureEnabled_setCorrectTitle() {
88         when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
89                 .thenReturn(NAV_BAR_MODE_GESTURAL);
90 
91         mFragment.onAttach(mContext);
92         mFragment.onCreate(Bundle.EMPTY);
93 
94         assertThat(mFragment.getActivity().getTitle().toString()).isEqualTo(
95                 mContext.getString(R.string.accessibility_button_gesture_title));
96     }
97 
98     @Test
onCreate_navigationGestureDisabled_setCorrectTitle()99     public void onCreate_navigationGestureDisabled_setCorrectTitle() {
100         when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
101                 .thenReturn(NAV_BAR_MODE_2BUTTON);
102 
103         mFragment.onAttach(mContext);
104         mFragment.onCreate(Bundle.EMPTY);
105 
106         assertThat(mFragment.getActivity().getTitle().toString()).isEqualTo(
107                 mContext.getString(R.string.accessibility_button_title));
108     }
109 
110     @Test
getNonIndexableKeys_existInXmlLayout()111     public void getNonIndexableKeys_existInXmlLayout() {
112         final List<String> niks = AccessibilityButtonFragment.SEARCH_INDEX_DATA_PROVIDER
113                 .getNonIndexableKeys(mContext);
114         final List<String> keys =
115                 XmlTestUtils.getKeysFromPreferenceXml(mContext,
116                         R.xml.accessibility_button_settings);
117 
118         assertThat(keys).containsAtLeastElementsIn(niks);
119     }
120 
121     private static class TestAccessibilityButtonFragment extends AccessibilityButtonFragment {
122 
123         private final Context mContext;
124         private final PreferenceManager mPreferenceManager;
125 
TestAccessibilityButtonFragment(Context context)126         TestAccessibilityButtonFragment(Context context) {
127             super();
128             mContext = context;
129             mPreferenceManager = new PreferenceManager(context);
130             mPreferenceManager.setPreferences(mPreferenceManager.createPreferenceScreen(context));
131         }
132 
133         @Override
getPreferenceScreenResId()134         public int getPreferenceScreenResId() {
135             return R.xml.placeholder_prefs;
136         }
137 
138         @Override
getPreferenceScreen()139         public PreferenceScreen getPreferenceScreen() {
140             return mPreferenceManager.getPreferenceScreen();
141         }
142 
143         @Override
getPreferenceManager()144         public PreferenceManager getPreferenceManager() {
145             return mPreferenceManager;
146         }
147 
148         @Override
getContext()149         public Context getContext() {
150             return mContext;
151         }
152     }
153 }
154