1 /* 2 * Copyright (C) 2022 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 org.mockito.ArgumentMatchers.any; 20 import static org.mockito.Mockito.spy; 21 import static org.mockito.Mockito.verify; 22 import static org.mockito.Mockito.when; 23 24 import android.content.Context; 25 26 import androidx.preference.PreferenceScreen; 27 import androidx.test.core.app.ApplicationProvider; 28 29 import com.android.settings.display.PreviewPagerAdapter; 30 import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor; 31 import com.android.settings.widget.LabeledSeekBarPreference; 32 33 import org.junit.Before; 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 import org.mockito.Mock; 37 import org.mockito.MockitoAnnotations; 38 import org.robolectric.RobolectricTestRunner; 39 import org.robolectric.annotation.Config; 40 import org.robolectric.shadows.ShadowChoreographer; 41 42 import java.util.ArrayList; 43 import java.util.List; 44 45 /** 46 * Tests for {@link TextReadingPreviewController}. 47 */ 48 @RunWith(RobolectricTestRunner.class) 49 @Config(shadows = {ShadowChoreographer.class, ShadowInteractionJankMonitor.class}) 50 public class TextReadingPreviewControllerTest { 51 private static final String PREVIEW_KEY = "preview"; 52 private static final String FONT_SIZE_KEY = "font_size"; 53 private static final String DISPLAY_SIZE_KEY = "display_size"; 54 private final Context mContext = ApplicationProvider.getApplicationContext(); 55 private TextReadingPreviewController mPreviewController; 56 private TextReadingPreviewPreference mPreviewPreference; 57 private LabeledSeekBarPreference mFontSizePreference; 58 private LabeledSeekBarPreference mDisplaySizePreference; 59 60 @Mock 61 private DisplaySizeData mDisplaySizeData; 62 63 @Mock 64 private PreferenceScreen mPreferenceScreen; 65 66 @Before setUp()67 public void setUp() { 68 MockitoAnnotations.initMocks(this); 69 70 final FontSizeData fontSizeData = new FontSizeData(mContext); 71 final List<Integer> displayData = createFakeDisplayData(); 72 when(mDisplaySizeData.getValues()).thenReturn(displayData); 73 mPreviewPreference = spy(new TextReadingPreviewPreference(mContext, /* attr= */ null)); 74 mPreviewController = new TextReadingPreviewController(mContext, PREVIEW_KEY, fontSizeData, 75 mDisplaySizeData); 76 mFontSizePreference = new LabeledSeekBarPreference(mContext, /* attr= */ null); 77 mDisplaySizePreference = new LabeledSeekBarPreference(mContext, /* attr= */ null); 78 } 79 80 @Test initPreviewerAdapter_verifyAction()81 public void initPreviewerAdapter_verifyAction() { 82 when(mPreferenceScreen.findPreference(PREVIEW_KEY)).thenReturn(mPreviewPreference); 83 when(mPreferenceScreen.findPreference(FONT_SIZE_KEY)).thenReturn(mFontSizePreference); 84 when(mPreferenceScreen.findPreference(DISPLAY_SIZE_KEY)).thenReturn(mDisplaySizePreference); 85 86 mPreviewController.displayPreference(mPreferenceScreen); 87 88 verify(mPreviewPreference).setPreviewAdapter(any(PreviewPagerAdapter.class)); 89 } 90 91 @Test(expected = NullPointerException.class) initPreviewerAdapterWithoutDisplaySizePreference_throwNPE()92 public void initPreviewerAdapterWithoutDisplaySizePreference_throwNPE() { 93 when(mPreferenceScreen.findPreference(PREVIEW_KEY)).thenReturn(mPreviewPreference); 94 when(mPreferenceScreen.findPreference(DISPLAY_SIZE_KEY)).thenReturn(mDisplaySizePreference); 95 96 mPreviewController.displayPreference(mPreferenceScreen); 97 98 verify(mPreviewPreference).setPreviewAdapter(any(PreviewPagerAdapter.class)); 99 } 100 101 @Test(expected = NullPointerException.class) initPreviewerAdapterWithoutFontSizePreference_throwNPE()102 public void initPreviewerAdapterWithoutFontSizePreference_throwNPE() { 103 when(mPreferenceScreen.findPreference(PREVIEW_KEY)).thenReturn(mPreviewPreference); 104 when(mPreferenceScreen.findPreference(FONT_SIZE_KEY)).thenReturn(mFontSizePreference); 105 106 mPreviewController.displayPreference(mPreferenceScreen); 107 108 verify(mPreviewPreference).setPreviewAdapter(any(PreviewPagerAdapter.class)); 109 } 110 createFakeDisplayData()111 private List<Integer> createFakeDisplayData() { 112 final List<Integer> list = new ArrayList<>(); 113 list.add(1); 114 list.add(2); 115 list.add(3); 116 list.add(4); 117 118 return list; 119 } 120 } 121