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 com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.ArgumentMatchers.any; 22 import static org.mockito.ArgumentMatchers.anyInt; 23 import static org.mockito.Mockito.RETURNS_DEEP_STUBS; 24 import static org.mockito.Mockito.doReturn; 25 import static org.mockito.Mockito.mock; 26 import static org.mockito.Mockito.spy; 27 import static org.mockito.Mockito.verify; 28 import static org.mockito.Mockito.when; 29 30 import android.content.Context; 31 import android.os.Bundle; 32 33 import androidx.fragment.app.FragmentManager; 34 import androidx.preference.PreferenceScreen; 35 import androidx.test.core.app.ApplicationProvider; 36 37 import com.android.settings.DialogCreatable; 38 import com.android.settings.R; 39 import com.android.settings.testutils.XmlTestUtils; 40 import com.android.settings.testutils.shadow.ShadowDashboardFragment; 41 42 import org.junit.Before; 43 import org.junit.Test; 44 import org.junit.runner.RunWith; 45 import org.mockito.Answers; 46 import org.robolectric.RobolectricTestRunner; 47 import org.robolectric.annotation.Config; 48 49 import java.util.List; 50 51 /** Tests for {@link MagnificationSettingsFragment} */ 52 @RunWith(RobolectricTestRunner.class) 53 @Config(shadows = ShadowDashboardFragment.class) 54 public class MagnificationSettingsFragmentTest { 55 56 private final Context mContext = ApplicationProvider.getApplicationContext(); 57 private MagnificationSettingsFragment mFragment; 58 private PreferenceScreen mScreen; 59 60 @Before setup()61 public void setup() { 62 mContext.setTheme(R.style.Theme_AppCompat); 63 mFragment = spy(new MagnificationSettingsFragment()); 64 mScreen = new PreferenceScreen(mContext, null); 65 66 doReturn(mContext).when(mFragment).getContext(); 67 doReturn(mScreen).when(mFragment).getPreferenceScreen(); 68 doReturn(mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS)).when( 69 mFragment).getChildFragmentManager(); 70 71 } 72 73 @Test showPreferenceOnTheScreen_setDialogHelper()74 public void showPreferenceOnTheScreen_setDialogHelper() { 75 showPreferenceOnTheScreen(null); 76 77 verify(mFragment).setDialogDelegate(any(MagnificationModePreferenceController.class)); 78 } 79 80 @Test onCreateDialog_setDialogDelegate_invokeDialogDelegate()81 public void onCreateDialog_setDialogDelegate_invokeDialogDelegate() { 82 final DialogCreatable dialogDelegate = mock(DialogCreatable.class, RETURNS_DEEP_STUBS); 83 when(dialogDelegate.getDialogMetricsCategory(anyInt())).thenReturn(1); 84 85 mFragment.setDialogDelegate(dialogDelegate); 86 87 mFragment.onCreateDialog(1); 88 mFragment.getDialogMetricsCategory(1); 89 90 verify(dialogDelegate).onCreateDialog(1); 91 verify(dialogDelegate).getDialogMetricsCategory(1); 92 } 93 94 @Test getNonIndexableKeys_existInXmlLayout()95 public void getNonIndexableKeys_existInXmlLayout() { 96 final List<String> niks = 97 ShortcutsSettingsFragment.SEARCH_INDEX_DATA_PROVIDER 98 .getNonIndexableKeys(mContext); 99 final List<String> keys = 100 XmlTestUtils.getKeysFromPreferenceXml(mContext, 101 R.xml.accessibility_magnification_service_settings); 102 assertThat(keys).containsAtLeastElementsIn(niks); 103 } 104 showPreferenceOnTheScreen(Bundle savedInstanceState)105 private void showPreferenceOnTheScreen(Bundle savedInstanceState) { 106 mFragment.onAttach(mContext); 107 mFragment.onCreate(savedInstanceState); 108 mFragment.onResume(); 109 } 110 } 111