1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.chrome.browser.accessibility;
7 import android.content.Context;
8 import android.content.SharedPreferences;
9 import android.preference.PreferenceManager;
10 import android.test.suitebuilder.annotation.SmallTest;
12 import org.chromium.base.ThreadUtils;
13 import org.chromium.base.test.util.Feature;
14 import org.chromium.chrome.shell.ChromeShellTestBase;
15 import org.chromium.content.browser.test.util.UiUtils;
17 import java.util.concurrent.Callable;
20 * Test class for {@link FontSizePrefs}.
22 public class FontSizePrefsTest extends ChromeShellTestBase {
24 private FontSizePrefs mFontSizePrefs;
25 private SharedPreferences.Editor mSharedPreferencesEditor;
28 public void setUp() throws Exception {
30 Context context = getInstrumentation().getTargetContext();
31 startChromeBrowserProcessSync(context);
32 getFontSizePrefs(context);
33 mSharedPreferencesEditor = PreferenceManager.getDefaultSharedPreferences(context).edit();
37 protected void tearDown() throws Exception {
38 mSharedPreferencesEditor.remove(FontSizePrefs.PREF_USER_SET_FORCE_ENABLE_ZOOM).commit();
43 @Feature({"Accessibility"})
44 public void testGetAndSetFontAndForceEnableZoom() throws InterruptedException {
45 // Check default font.
46 assertEquals(1f, getFontScale());
47 // Check that setting the value of font scale factor works.
48 float newTextScale = 1.2f;
49 setFontScale(newTextScale);
50 assertEquals(newTextScale, getFontScale());
52 // Check the default value of force enable zoom.
53 assertFalse(getForceEnableZoom());
54 // Check that setting the value of force enable zoom works.
55 setForceEnableZoom(true);
56 assertTrue(getForceEnableZoom());
60 @Feature({"Accessibility"})
61 public void testGetAndSetUserSetForceEnableZoom() throws InterruptedException {
62 // Check the default value of user set force enable zoom.
63 assertFalse(mFontSizePrefs.getUserSetForceEnableZoom());
64 // Check that setting the value of user set force enable zoom works.
65 setUserSetForceEnableZoom(true);
66 assertTrue(mFontSizePrefs.getUserSetForceEnableZoom());
70 @Feature({"Accessibility"})
71 public void testObserversForceEnableZoom() throws InterruptedException {
72 TestingObserver test1 = new TestingObserver();
73 TestingObserver test2 = new TestingObserver();
74 mFontSizePrefs.addObserver(test1);
75 mFontSizePrefs.addObserver(test2);
77 // Checks that force enable zoom for both observers is correctly changed.
78 setForceEnableZoom(true);
79 UiUtils.settleDownUI(getInstrumentation());
80 assertTrue(test1.getForceEnableZoom());
81 assertTrue(test2.getForceEnableZoom());
83 // Checks that removing observer and setting force enable zoom works.
84 mFontSizePrefs.removeObserver(test1);
85 setForceEnableZoom(false);
86 UiUtils.settleDownUI(getInstrumentation());
87 assertTrue(test1.getForceEnableZoom());
88 assertFalse(test2.getForceEnableZoom());
89 mFontSizePrefs.removeObserver(test2);
93 @Feature({"Accessibility"})
94 public void testObserversFontScale() throws InterruptedException {
95 TestingObserver test1 = new TestingObserver();
96 TestingObserver test2 = new TestingObserver();
97 mFontSizePrefs.addObserver(test1);
98 mFontSizePrefs.addObserver(test2);
100 // Checks that font scale for both observers is correctly changed.
101 float newTextScale = 1.2f;
102 setFontScale(newTextScale);
103 UiUtils.settleDownUI(getInstrumentation());
104 assertEquals(newTextScale, test1.getFontScaleFactor());
105 assertEquals(newTextScale, test2.getFontScaleFactor());
107 // Checks that removing observer and setting font works.
108 float newerTextScale = 1.4f;
109 mFontSizePrefs.removeObserver(test1);
110 setFontScale(newerTextScale);
111 UiUtils.settleDownUI(getInstrumentation());
112 assertEquals(newTextScale, test1.getFontScaleFactor());
113 assertEquals(newerTextScale, test2.getFontScaleFactor());
114 mFontSizePrefs.removeObserver(test2);
118 @Feature({"Accessibility"})
119 public void testObserversUserSetForceEnableZoom() throws InterruptedException {
120 TestingObserver test1 = new TestingObserver();
121 TestingObserver test2 = new TestingObserver();
122 mFontSizePrefs.addObserver(test1);
123 mFontSizePrefs.addObserver(test2);
125 // Checks that force enable zoom for both observers is correctly changed.
126 setUserSetForceEnableZoom(true);
127 UiUtils.settleDownUI(getInstrumentation());
128 assertTrue(test1.getUserSetForceEnableZoom());
129 assertTrue(test2.getUserSetForceEnableZoom());
131 // Checks that removing observer and setting force enable zoom works.
132 mFontSizePrefs.removeObserver(test1);
133 setUserSetForceEnableZoom(false);
134 UiUtils.settleDownUI(getInstrumentation());
135 assertTrue(test1.getUserSetForceEnableZoom());
136 assertFalse(test2.getUserSetForceEnableZoom());
137 mFontSizePrefs.removeObserver(test2);
141 @Feature({"Accessibility"})
142 public void testMultipleAddMultipleDeleteObservers() throws InterruptedException {
143 TestingObserver test = new TestingObserver();
145 // Should successfully add the observer the first time.
146 assertTrue(mFontSizePrefs.addObserver(test));
147 // Observer cannot be added again, should return false.
148 assertFalse(mFontSizePrefs.addObserver(test));
150 // Delete the observer the first time.
151 assertTrue(mFontSizePrefs.removeObserver(test));
152 // Observer cannot be deleted again, should return false.
153 assertFalse(mFontSizePrefs.removeObserver(test));
156 private static class TestingObserver implements FontSizePrefs.Observer {
157 private float mFontSize;
158 private boolean mForceEnableZoom;
159 private boolean mUserSetForceEnableZoom;
161 public TestingObserver() {
163 mForceEnableZoom = false;
164 mUserSetForceEnableZoom = false;
167 public float getFontScaleFactor() {
172 public void onChangeFontSize(float font) {
176 public boolean getForceEnableZoom() {
177 return mForceEnableZoom;
181 public void onChangeForceEnableZoom(boolean enabled) {
182 mForceEnableZoom = enabled;
186 public void onChangeUserSetForceEnableZoom(boolean enabled) {
187 mUserSetForceEnableZoom = enabled;
190 public boolean getUserSetForceEnableZoom() {
191 return mUserSetForceEnableZoom;
195 private void getFontSizePrefs(final Context context) {
196 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
199 mFontSizePrefs = FontSizePrefs.getInstance(context);
204 private void setFontScale(final float fontsize) {
205 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
208 mFontSizePrefs.setFontScaleFactor(fontsize);
213 private float getFontScale() {
214 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Float>() {
216 public Float call() {
217 return mFontSizePrefs.getFontScaleFactor();
222 private void setForceEnableZoom(final boolean enabled) {
223 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
226 mFontSizePrefs.setForceEnableZoom(enabled);
231 private boolean getForceEnableZoom() {
232 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
234 public Boolean call() {
235 return mFontSizePrefs.getForceEnableZoom();
240 private void setUserSetForceEnableZoom(final boolean enabled) {
241 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
244 mFontSizePrefs.setUserSetForceEnableZoom(enabled);