OLD | NEW |
(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 } |
OLD | NEW |