Index: chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/VrShellTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/VrShellTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/VrShellTest.java |
index 453deabe14d3e2af430d3dbcde3465cd28783aa2..6d452d35c5aa568f14bc074244c83c3c6d348cf4 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/VrShellTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/VrShellTest.java |
@@ -4,31 +4,39 @@ |
package org.chromium.chrome.browser.vr_shell; |
+import static org.chromium.chrome.browser.vr_shell.VrTestRule.PAGE_LOAD_TIMEOUT_S; |
import static org.chromium.chrome.browser.vr_shell.VrUtils.POLL_CHECK_INTERVAL_LONG_MS; |
import static org.chromium.chrome.browser.vr_shell.VrUtils.POLL_TIMEOUT_LONG_MS; |
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_DEVICE_DAYDREAM; |
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_DEVICE_NON_DAYDREAM; |
import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_VIEWER_DAYDREAM; |
-import android.content.pm.ActivityInfo; |
+import android.support.test.InstrumentationRegistry; |
import android.support.test.filters.MediumTest; |
import android.support.test.filters.SmallTest; |
import android.view.ViewGroup; |
+import org.junit.Assert; |
+import org.junit.Before; |
+import org.junit.Rule; |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+ |
import org.chromium.base.ThreadUtils; |
import org.chromium.base.test.util.CommandLineFlags; |
-import org.chromium.base.test.util.Feature; |
import org.chromium.base.test.util.Restriction; |
import org.chromium.base.test.util.RetryOnFailure; |
import org.chromium.chrome.R; |
+import org.chromium.chrome.browser.ChromeSwitches; |
import org.chromium.chrome.browser.compositor.CompositorViewHolder; |
import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
-import org.chromium.chrome.test.util.RenderUtils.ViewRenderer; |
+import org.chromium.chrome.test.ChromeActivityTestRule; |
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
+import org.chromium.chrome.test.ChromeTabbedActivityTestRule; |
import org.chromium.content.browser.ContentViewCore; |
import org.chromium.content.browser.test.util.Criteria; |
import org.chromium.content.browser.test.util.CriteriaHelper; |
-import java.io.IOException; |
import java.util.concurrent.Callable; |
import java.util.concurrent.TimeoutException; |
import java.util.concurrent.atomic.AtomicReference; |
@@ -38,27 +46,22 @@ import java.util.concurrent.atomic.AtomicReference; |
* interacting with WebVR in addition to the VR browser, so inherit from |
* VrTestBase for the WebVR test framework. |
*/ |
-@CommandLineFlags.Add("enable-features=VrShell") |
-public class VrShellTest extends VrTestBase { |
- private static final String GOLDEN_DIR = |
- "chrome/test/data/android/render_tests"; |
+@RunWith(ChromeJUnit4ClassRunner.class) |
+ |
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, |
+ ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG, "enable-features=VrShell"}) |
+public class VrShellTest { |
+ @Rule |
+ public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); |
private VrShellDelegate mDelegate; |
- private ViewRenderer mViewRenderer; |
- @Override |
- protected void setUp() throws Exception { |
- super.setUp(); |
+ @Before |
+ public void setUp() throws Exception { |
+ mActivityTestRule.startMainActivityOnBlankPage(); |
mDelegate = VrUtils.getVrShellDelegateInstance(); |
} |
- @Override |
- public void startMainActivity() throws InterruptedException { |
- startMainActivityOnBlankPage(); |
- mViewRenderer = new ViewRenderer(getActivity(), |
- GOLDEN_DIR, this.getClass().getSimpleName()); |
- } |
- |
private void enterExitVrMode(boolean supported) { |
MockVrDaydreamApi mockApi = new MockVrDaydreamApi(); |
if (!supported) { |
@@ -67,61 +70,23 @@ public class VrShellTest extends VrTestBase { |
VrUtils.forceEnterVr(); |
if (supported) { |
VrUtils.waitForVrSupported(POLL_TIMEOUT_LONG_MS); |
- assertTrue(VrShellDelegate.isInVr()); |
- } else { |
- assertFalse(mockApi.getLaunchInVrCalled()); |
- assertFalse(VrShellDelegate.isInVr()); |
- } |
- VrUtils.forceExitVr(mDelegate); |
- assertFalse(VrShellDelegate.isInVr()); |
- } |
- |
- private void enterExitVrModeImage(boolean supported) throws IOException { |
- int prevOrientation = getActivity().getRequestedOrientation(); |
- getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); |
- getInstrumentation().waitForIdleSync(); |
- mViewRenderer.renderAndCompare( |
- getActivity().getWindow().getDecorView().getRootView(), |
- "blank_page"); |
- |
- VrUtils.forceEnterVr(); |
- // Currently, screenshots only show the static UI overlay, not the |
- // actual content. Thus, 1:1 pixel checking is reliable until a |
- // way to take screenshots of VR content is added, in which case |
- // % similarity or some other method will need to be used. We're |
- // assuming that if the UI overlay is visible, then the device has |
- // successfully entered VR mode. |
- if (supported) { |
- VrUtils.waitForVrSupported(POLL_TIMEOUT_LONG_MS); |
- mViewRenderer.renderAndCompare( |
- getActivity().getWindow().getDecorView().getRootView(), |
- "vr_entered"); |
+ Assert.assertTrue(VrShellDelegate.isInVr()); |
} else { |
- // TODO(bsheedy): Find a good way to wait before taking a screenshot |
- // when running on an unsupported device |
- mViewRenderer.renderAndCompare( |
- getActivity().getWindow().getDecorView().getRootView(), |
- "blank_page"); |
+ Assert.assertFalse(mockApi.getLaunchInVrCalled()); |
+ Assert.assertFalse(VrShellDelegate.isInVr()); |
} |
- |
VrUtils.forceExitVr(mDelegate); |
- getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); |
- getInstrumentation().waitForIdleSync(); |
- mViewRenderer.renderAndCompare( |
- getActivity().getWindow().getDecorView().getRootView(), |
- "blank_page"); |
- |
- getActivity().setRequestedOrientation(prevOrientation); |
+ Assert.assertFalse(VrShellDelegate.isInVr()); |
} |
private void enterVrModeNfc(boolean supported) { |
- getInstrumentation().waitForIdleSync(); |
- VrUtils.simNfc(getActivity()); |
+ InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
+ VrUtils.simNfc(mActivityTestRule.getActivity()); |
if (supported) { |
VrUtils.waitForVrSupported(POLL_TIMEOUT_LONG_MS); |
- assertTrue(VrShellDelegate.isInVr()); |
+ Assert.assertTrue(VrShellDelegate.isInVr()); |
} else { |
- assertFalse(VrShellDelegate.isInVr()); |
+ Assert.assertFalse(VrShellDelegate.isInVr()); |
} |
VrUtils.forceExitVr(mDelegate); |
// TODO(bsheedy): Figure out why NFC tests cause the next test to fail |
@@ -134,6 +99,7 @@ public class VrShellTest extends VrTestBase { |
* NFC tag is scanned on a Daydream-ready device. Requires that the phone |
* is unlocked. |
*/ |
+ @Test |
@Restriction({RESTRICTION_TYPE_DEVICE_DAYDREAM, RESTRICTION_TYPE_VIEWER_DAYDREAM}) |
@MediumTest |
public void testSimNfcSupported() { |
@@ -144,6 +110,7 @@ public class VrShellTest extends VrTestBase { |
* Verifies that the browser does not enter VR mode on Non-Daydream-ready |
* devices when the Daydream headset NFC tag is scanned. |
*/ |
+ @Test |
@Restriction(RESTRICTION_TYPE_DEVICE_NON_DAYDREAM) |
@SmallTest |
public void testSimNfcUnsupported() { |
@@ -154,6 +121,7 @@ public class VrShellTest extends VrTestBase { |
* Verifies that browser successfully enters and exits VR mode when told to |
* on Daydream-ready devices. Requires that the phone is unlocked. |
*/ |
+ @Test |
@Restriction(RESTRICTION_TYPE_DEVICE_DAYDREAM) |
@SmallTest |
public void testEnterExitVrModeSupported() { |
@@ -163,48 +131,28 @@ public class VrShellTest extends VrTestBase { |
/** |
* Verifies that browser does not enter VR mode on Non-Daydream-ready devices. |
*/ |
+ @Test |
@Restriction(RESTRICTION_TYPE_DEVICE_NON_DAYDREAM) |
@SmallTest |
public void testEnterExitVrModeUnsupported() { |
enterExitVrMode(false); |
} |
- /** |
- * Verifies that browser successfully enters and exits VR mode when told to |
- * on Daydream-ready devices via a screendiffing check. |
- * Requires that the phone is unlocked. |
- */ |
- @Restriction(RESTRICTION_TYPE_DEVICE_DAYDREAM) |
- @Feature("RenderTest") |
- @MediumTest |
- public void testEnterExitVrModeSupportedImage() throws IOException { |
- enterExitVrModeImage(true); |
- } |
- |
- /** |
- * Verifies that browser does not enter VR mode on Non-Daydream-ready devices |
- * via a screendiffing check. Requires that the phone is unlocked. |
- */ |
- @Restriction(RESTRICTION_TYPE_DEVICE_NON_DAYDREAM) |
- @Feature("RenderTest") |
- @MediumTest |
- public void testEnterExitVrModeUnsupportedImage() throws IOException { |
- enterExitVrModeImage(false); |
- } |
- |
/** |
* Verifies that swiping up/down on the Daydream controller's touchpad scrolls |
* the webpage while in the VR browser. |
*/ |
+ @Test |
@Restriction({RESTRICTION_TYPE_DEVICE_DAYDREAM, RESTRICTION_TYPE_VIEWER_DAYDREAM}) |
@MediumTest |
public void testControllerScrolling() throws InterruptedException { |
// Load page in VR and make sure the controller is pointed at the content quad |
- loadUrl("chrome://credits", PAGE_LOAD_TIMEOUT_S); |
+ mActivityTestRule.loadUrl("chrome://credits", PAGE_LOAD_TIMEOUT_S); |
VrUtils.forceEnterVr(); |
VrUtils.waitForVrSupported(POLL_TIMEOUT_LONG_MS); |
- EmulatedVrController controller = new EmulatedVrController(getActivity()); |
- final ContentViewCore cvc = getActivity().getActivityTab().getActiveContentViewCore(); |
+ EmulatedVrController controller = new EmulatedVrController(mActivityTestRule.getActivity()); |
+ final ContentViewCore cvc = |
+ mActivityTestRule.getActivity().getActivityTab().getActiveContentViewCore(); |
controller.recenterView(); |
// Wait for the page to be scrollable |
@@ -222,13 +170,13 @@ public class VrShellTest extends VrTestBase { |
int scrollSpeed = 60; |
controller.scrollDown(scrollSteps, scrollSpeed); |
int endScrollY = cvc.getNativeScrollYForTest(); |
- assertTrue("Controller was able to scroll down", startScrollY < endScrollY); |
+ Assert.assertTrue("Controller was able to scroll down", startScrollY < endScrollY); |
// Test that scrolling up works |
startScrollY = endScrollY; |
controller.scrollUp(scrollSteps, scrollSpeed); |
endScrollY = cvc.getNativeScrollYForTest(); |
- assertTrue("Controller was able to scroll up", startScrollY > endScrollY); |
+ Assert.assertTrue("Controller was able to scroll up", startScrollY > endScrollY); |
} |
/** |
@@ -237,6 +185,7 @@ public class VrShellTest extends VrTestBase { |
* @throws InterruptedException |
* @throws TimeoutException |
*/ |
+ @Test |
@SmallTest |
@RetryOnFailure |
public void testResizeWithCompositorViewHolderDetached() |
@@ -244,13 +193,15 @@ public class VrShellTest extends VrTestBase { |
final AtomicReference<TabModelSelector> selector = new AtomicReference<>(); |
final AtomicReference<Integer> oldWidth = new AtomicReference<>(); |
final int testWidth = 123; |
- final ContentViewCore cvc = getActivity().getActivityTab().getActiveContentViewCore(); |
+ final ContentViewCore cvc = |
+ mActivityTestRule.getActivity().getActivityTab().getActiveContentViewCore(); |
ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
@Override |
public void run() { |
- CompositorViewHolder compositorViewHolder = (CompositorViewHolder) |
- getActivity().findViewById(R.id.compositor_view_holder); |
+ CompositorViewHolder compositorViewHolder = |
+ (CompositorViewHolder) mActivityTestRule.getActivity().findViewById( |
+ R.id.compositor_view_holder); |
selector.set(compositorViewHolder.detachForVr()); |
oldWidth.set(cvc.getViewportWidthPix()); |
@@ -263,20 +214,22 @@ public class VrShellTest extends VrTestBase { |
CriteriaHelper.pollUiThread(Criteria.equals(testWidth, new Callable<Integer>() { |
@Override |
public Integer call() { |
- return getActivity().findViewById(R.id.compositor_view_holder).getMeasuredWidth(); |
+ return mActivityTestRule.getActivity() |
+ .findViewById(R.id.compositor_view_holder) |
+ .getMeasuredWidth(); |
} |
})); |
- assertEquals("Viewport width should not have changed when resizing a detached " |
- + "CompositorViewHolder", |
- cvc.getViewportWidthPix(), |
- oldWidth.get().intValue()); |
+ Assert.assertEquals("Viewport width should not have changed when resizing a detached " |
+ + "CompositorViewHolder", |
+ cvc.getViewportWidthPix(), oldWidth.get().intValue()); |
ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
@Override |
public void run() { |
- CompositorViewHolder compositorViewHolder = (CompositorViewHolder) getActivity() |
- .findViewById(R.id.compositor_view_holder); |
+ CompositorViewHolder compositorViewHolder = |
+ (CompositorViewHolder) mActivityTestRule.getActivity().findViewById( |
+ R.id.compositor_view_holder); |
compositorViewHolder.onExitVr(selector.get()); |
} |
}); |