• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 com.google.common.truth.Truth.assertThat;
20 
21 import static org.mockito.ArgumentMatchers.anyBoolean;
22 import static org.mockito.ArgumentMatchers.anyInt;
23 import static org.mockito.ArgumentMatchers.eq;
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.verify;
26 
27 import android.content.Context;
28 import android.content.res.Configuration;
29 import android.view.LayoutInflater;
30 import android.view.View;
31 import android.widget.FrameLayout;
32 import android.widget.LinearLayout;
33 
34 import androidx.preference.PreferenceViewHolder;
35 import androidx.test.core.app.ApplicationProvider;
36 import androidx.viewpager.widget.ViewPager;
37 
38 import com.android.settings.R;
39 import com.android.settings.display.PreviewPagerAdapter;
40 
41 import org.junit.Assume;
42 import org.junit.Before;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
45 import org.robolectric.RobolectricTestRunner;
46 
47 /**
48  * Tests for {@link TextReadingPreferenceFragment}.
49  */
50 @RunWith(RobolectricTestRunner.class)
51 public class TextReadingPreviewPreferenceTest {
52     private TextReadingPreviewPreference mTextReadingPreviewPreference;
53     private PreferenceViewHolder mHolder;
54     private ViewPager mViewPager;
55     private PreviewPagerAdapter mPreviewPagerAdapter;
56     private int mPreviewSampleCount;
57 
58     @Before
setUp()59     public void setUp() {
60         final Context context = ApplicationProvider.getApplicationContext();
61         final int[] previewSamples = TextReadingPreviewController.getPreviewSampleLayouts(context);
62         mPreviewSampleCount = previewSamples.length;
63         final Configuration[] configurations = createConfigurations(mPreviewSampleCount);
64         mTextReadingPreviewPreference = new TextReadingPreviewPreference(context);
65         mPreviewPagerAdapter =
66                 spy(new PreviewPagerAdapter(context, /* isLayoutRtl= */ false,
67                         previewSamples, configurations));
68         final LayoutInflater inflater = LayoutInflater.from(context);
69         final View view =
70                 inflater.inflate(mTextReadingPreviewPreference.getLayoutResource(),
71                         new LinearLayout(context), false);
72         mHolder = PreferenceViewHolder.createInstanceForTests(view);
73         mViewPager = view.findViewById(R.id.preview_pager);
74     }
75 
76     @Test
setPreviewerAdapter_success()77     public void setPreviewerAdapter_success() {
78         mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
79         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
80 
81         assertThat(mViewPager.getAdapter()).isEqualTo(mPreviewPagerAdapter);
82     }
83 
84     @Test
setPreviewAdapterWithNull_resetCurrentItem()85     public void setPreviewAdapterWithNull_resetCurrentItem() {
86         final int currentItem = mPreviewSampleCount - 1;
87         mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
88         mTextReadingPreviewPreference.setCurrentItem(currentItem);
89         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
90 
91         mTextReadingPreviewPreference.setPreviewAdapter(null);
92         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
93 
94         assertThat(mTextReadingPreviewPreference.getCurrentItem()).isEqualTo(0);
95     }
96 
97     @Test
setCurrentItem_success()98     public void setCurrentItem_success() {
99         final int currentItem = mPreviewSampleCount - 1;
100         mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
101         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
102 
103         mTextReadingPreviewPreference.setCurrentItem(currentItem);
104         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
105 
106         assertThat(mViewPager.getCurrentItem()).isEqualTo(currentItem);
107     }
108 
109     @Test(expected = NullPointerException.class)
setCurrentItemBeforeSetPreviewAdapter_throwNPE()110     public void setCurrentItemBeforeSetPreviewAdapter_throwNPE() {
111         final int currentItem = mPreviewSampleCount + 2;
112 
113         mTextReadingPreviewPreference.setCurrentItem(currentItem);
114     }
115 
116     @Test(expected = NullPointerException.class)
updatePagerWithoutPreviewAdapter_throwNPE()117     public void updatePagerWithoutPreviewAdapter_throwNPE() {
118         final int index = mPreviewSampleCount - 1;
119 
120         mTextReadingPreviewPreference.notifyPreviewPagerChanged(index);
121     }
122 
123     @Test
notifyPreviewPager_setPreviewLayer()124     public void notifyPreviewPager_setPreviewLayer() {
125         // The preview pager cannot switch page if there is only one preview layout, so skip the
126         // test if so
127         Assume.assumeTrue(mPreviewSampleCount > 1);
128 
129         final int index = mPreviewSampleCount - 1;
130         mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
131         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
132 
133         mTextReadingPreviewPreference.notifyPreviewPagerChanged(index);
134 
135         verify(mPreviewPagerAdapter).setPreviewLayer(eq(index), anyInt(), anyInt(), anyBoolean());
136     }
137 
138     @Test
afterPagerChange_updateCurrentItem()139     public void afterPagerChange_updateCurrentItem() {
140         final int currentItem = mPreviewSampleCount - 1;
141         mTextReadingPreviewPreference.setPreviewAdapter(mPreviewPagerAdapter);
142         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
143 
144         mViewPager.setCurrentItem(currentItem);
145 
146         assertThat(mTextReadingPreviewPreference.getCurrentItem()).isEqualTo(currentItem);
147     }
148 
149     @Test
adjustPaddings_setMinPaddingsLessThanXMLValue_paddingsNotIncreased()150     public void adjustPaddings_setMinPaddingsLessThanXMLValue_paddingsNotIncreased() {
151         // get the default xml padding value
152         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
153         final FrameLayout previewLayout = (FrameLayout) mHolder.itemView;
154         final LinearLayout backgroundView = previewLayout.findViewById(R.id.preview_background);
155 
156         final int currentLayoutPaddingStart = previewLayout.getPaddingStart();
157         final int currentBackgroundPaddingStart = backgroundView.getPaddingStart();
158         mTextReadingPreviewPreference.setLayoutMinHorizontalPadding(
159                 currentLayoutPaddingStart - 10);
160         mTextReadingPreviewPreference.setBackgroundMinHorizontalPadding(
161                 currentBackgroundPaddingStart - 10);
162         mTextReadingPreviewPreference.adjustPaddings(previewLayout, backgroundView);
163 
164         assertThat(previewLayout.getPaddingStart()).isEqualTo(currentLayoutPaddingStart);
165         assertThat(backgroundView.getPaddingStart()).isEqualTo(currentBackgroundPaddingStart);
166     }
167 
168     @Test
adjustPaddings_setMinPaddingsLargerThanXMLValue_paddingsIncreased()169     public void adjustPaddings_setMinPaddingsLargerThanXMLValue_paddingsIncreased() {
170         // get the default xml padding value
171         mTextReadingPreviewPreference.onBindViewHolder(mHolder);
172         final FrameLayout previewLayout = (FrameLayout) mHolder.itemView;
173         final LinearLayout backgroundView = previewLayout.findViewById(R.id.preview_background);
174 
175         final int currentLayoutPaddingStart = previewLayout.getPaddingStart();
176         final int currentBackgroundPaddingStart = backgroundView.getPaddingStart();
177         mTextReadingPreviewPreference.setLayoutMinHorizontalPadding(
178                 currentLayoutPaddingStart + 10);
179         mTextReadingPreviewPreference.setBackgroundMinHorizontalPadding(
180                 currentBackgroundPaddingStart + 10);
181         mTextReadingPreviewPreference.adjustPaddings(previewLayout, backgroundView);
182 
183         assertThat(previewLayout.getPaddingStart()).isEqualTo(currentLayoutPaddingStart + 10);
184         assertThat(backgroundView.getPaddingStart()).isEqualTo(currentBackgroundPaddingStart + 10);
185     }
186 
createConfigurations(int count)187     private static Configuration[] createConfigurations(int count) {
188         final Configuration[] configurations = new Configuration[count];
189         for (int i = 0; i < count; i++) {
190             configurations[i] = new Configuration();
191         }
192 
193         return configurations;
194     }
195 }
196