Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: content/public/android/javatests/src/org/chromium/content/browser/ScreenOrientationProviderTest.java

Issue 196193002: Implement ScreenOrientationProvider for Chrome Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 package org.chromium.content.browser;
6
7 import android.test.suitebuilder.annotation.MediumTest;
8 import android.test.suitebuilder.annotation.SmallTest;
9
10 import org.chromium.base.test.util.Feature;
11 import org.chromium.base.test.util.UrlUtils;
12 import org.chromium.content.browser.test.util.CriteriaHelper;
13 import org.chromium.content.browser.test.util.MockOrientationObserver;
14 import org.chromium.content.browser.test.util.OrientationChangeObserverCriteria;
15 import org.chromium.content.common.ScreenOrientationValues;
16 import org.chromium.content_shell_apk.ContentShellActivity;
17 import org.chromium.content_shell_apk.ContentShellTestBase;
18
19 /**
20 * Tests for ScreenOrientationListener and its implementations.
21 */
22 public class ScreenOrientationProviderTest extends ContentShellTestBase {
23
24 // For some reasons build bots are not able to lock to 180 degrees. This
25 // boolean is here to make the false negative go away in that situation.
26 private static final boolean ALLOW_0_FOR_180 = true;
27
28 private static final String DEFAULT_URL =
29 UrlUtils.encodeHtmlDataUri("<html><body>foo</body></html>");
30
31 private MockOrientationObserver mObserver;
32 private final ScreenOrientationProvider mProvider = ScreenOrientationProvide r.create();
33
34 private boolean checkOrientationForLock(int orientations) {
35 switch (orientations) {
36 case ScreenOrientationValues.PORTRAIT_PRIMARY:
37 return mObserver.mOrientation == 0;
38 case ScreenOrientationValues.PORTRAIT_SECONDARY:
39 return mObserver.mOrientation == 180 ||
40 (ALLOW_0_FOR_180 && mObserver.mOrientation == 0);
41 case ScreenOrientationValues.LANDSCAPE_PRIMARY:
42 return mObserver.mOrientation == 90;
43 case ScreenOrientationValues.LANDSCAPE_SECONDARY:
44 return mObserver.mOrientation == -90;
45 case ScreenOrientationValues.PORTRAIT_PRIMARY |
46 ScreenOrientationValues.PORTRAIT_SECONDARY:
47 return mObserver.mOrientation == 0 || mObserver.mOrientation == 180;
48 case ScreenOrientationValues.LANDSCAPE_PRIMARY |
49 ScreenOrientationValues.LANDSCAPE_SECONDARY:
50 return mObserver.mOrientation == 90 || mObserver.mOrientation == -90;
51 case ScreenOrientationValues.PORTRAIT_PRIMARY |
52 ScreenOrientationValues.PORTRAIT_SECONDARY |
53 ScreenOrientationValues.LANDSCAPE_PRIMARY |
54 ScreenOrientationValues.LANDSCAPE_SECONDARY:
55 // The orientation should not change but might and the value cou ld be anything.
56 return true;
57 default:
58 return mObserver.mHasChanged == false;
59 }
60 }
61
62 /**
63 * Locks the screen orientation to |orientations| using ScreenOrientationPro vider.
64 */
65 private void lockOrientation(int orientations) {
66 mProvider.lockOrientation((byte)orientations);
67 }
68
69 /**
70 * Call |lockOrientation| and wait for an orientation change.
71 */
72 private boolean lockOrientationAndWait(int orientations)
73 throws InterruptedException {
74 OrientationChangeObserverCriteria criteria =
75 new OrientationChangeObserverCriteria(mObserver);
76
77 lockOrientation(orientations);
78
79 return CriteriaHelper.pollForCriteria(criteria);
80 }
81
82 /**
83 * Unlock the screen orientation using |ScreenOrientationProvider|.
84 */
85 private void unlockOrientation() {
86 mProvider.unlockOrientation();
87 }
88
89 @Override
90 public void setUp() throws Exception {
91 super.setUp();
92
93 ContentShellActivity activity = launchContentShellWithUrl(DEFAULT_URL);
94 waitForActiveShellToBeDoneLoading();
95
96 mObserver = new MockOrientationObserver();
97 ScreenOrientationListener.getInstance().addObserver(
98 mObserver, getInstrumentation().getTargetContext());
99 }
100
101 @Override
102 public void tearDown() throws Exception {
103 unlockOrientation();
104
105 mObserver = null;
106 super.tearDown();
107 }
108
109 @SmallTest
110 @Feature({"ScreenOrientation"})
111 public void testBasicValues() throws Exception {
112 lockOrientationAndWait(ScreenOrientationValues.PORTRAIT_PRIMARY);
113 assertTrue(checkOrientationForLock(ScreenOrientationValues.PORTRAIT_PRIM ARY));
114
115 lockOrientationAndWait(ScreenOrientationValues.LANDSCAPE_PRIMARY);
116 assertTrue(checkOrientationForLock(ScreenOrientationValues.LANDSCAPE_PRI MARY));
117
118 lockOrientationAndWait(ScreenOrientationValues.PORTRAIT_SECONDARY);
119 assertTrue(checkOrientationForLock(ScreenOrientationValues.PORTRAIT_SECO NDARY));
120
121 lockOrientationAndWait(ScreenOrientationValues.LANDSCAPE_SECONDARY);
122 assertTrue(checkOrientationForLock(ScreenOrientationValues.LANDSCAPE_SEC ONDARY));
123 }
124
125 @MediumTest
126 @Feature({"ScreenOrientation"})
127 public void testPortrait() throws Exception {
128 lockOrientationAndWait(ScreenOrientationValues.PORTRAIT_PRIMARY);
129 assertTrue(checkOrientationForLock(ScreenOrientationValues.PORTRAIT_PRIM ARY));
130
131 lockOrientationAndWait(ScreenOrientationValues.PORTRAIT_PRIMARY |
132 ScreenOrientationValues.PORTRAIT_SECONDARY);
133 assertTrue(checkOrientationForLock(ScreenOrientationValues.PORTRAIT_PRIM ARY |
134 ScreenOrientationValues.PORTRAIT_SECONDARY));
135
136 lockOrientationAndWait(ScreenOrientationValues.PORTRAIT_SECONDARY);
137 assertTrue(checkOrientationForLock(ScreenOrientationValues.PORTRAIT_SECO NDARY));
138
139 lockOrientationAndWait(ScreenOrientationValues.PORTRAIT_PRIMARY |
140 ScreenOrientationValues.PORTRAIT_SECONDARY);
141 assertTrue(checkOrientationForLock(ScreenOrientationValues.PORTRAIT_PRIM ARY |
142 ScreenOrientationValues.PORTRAIT_SECONDARY));
143 }
144
145 @MediumTest
146 @Feature({"ScreenOrientation"})
147 public void testLandscape() throws Exception {
148 lockOrientationAndWait(ScreenOrientationValues.LANDSCAPE_PRIMARY);
149 assertTrue(checkOrientationForLock(ScreenOrientationValues.LANDSCAPE_PRI MARY));
150
151 lockOrientationAndWait(ScreenOrientationValues.LANDSCAPE_PRIMARY |
152 ScreenOrientationValues.LANDSCAPE_SECONDARY);
153 assertTrue(checkOrientationForLock(ScreenOrientationValues.LANDSCAPE_PRI MARY |
154 ScreenOrientationValues.LANDSCAPE_SECONDARY));
155
156 lockOrientationAndWait(ScreenOrientationValues.LANDSCAPE_SECONDARY);
157 assertTrue(checkOrientationForLock(ScreenOrientationValues.LANDSCAPE_SEC ONDARY));
158
159 lockOrientationAndWait(ScreenOrientationValues.LANDSCAPE_PRIMARY |
160 ScreenOrientationValues.LANDSCAPE_SECONDARY);
161 assertTrue(checkOrientationForLock(ScreenOrientationValues.LANDSCAPE_PRI MARY |
162 ScreenOrientationValues.LANDSCAPE_SECONDARY));
163 }
164
165 // There is no point in testing the case where we try to lock to
166 // PORTRAIT_PRIMARY | PORTRAIT_SECONDARY | LANDSCAPE_PRIMARY | LANDSCAPE_SEC ONDARY
167 // because with the device being likely flat during the test, locking to tha t
168 // will be a no-op.
169
170 // We can't test unlock because the device is likely flat during the test
171 // and in that situation unlocking is a no-op.
172 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698