| Index: chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
|
| index 87c4dc534a127f31464efea236d5ccdb8235caa7..40355bf733f2a6db7c7e5183a34972145d92d05a 100644
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/WebVrTest.java
|
| @@ -15,10 +15,18 @@ import android.support.test.filters.MediumTest;
|
| import android.support.test.filters.SmallTest;
|
| import android.widget.TextView;
|
|
|
| +import org.junit.Assert;
|
| +import org.junit.Rule;
|
| +import org.junit.Test;
|
| +import org.junit.runner.RunWith;
|
| +
|
| import org.chromium.base.test.util.CommandLineFlags;
|
| import org.chromium.base.test.util.DisableIf;
|
| import org.chromium.base.test.util.Restriction;
|
| import org.chromium.chrome.R;
|
| +import org.chromium.chrome.browser.ChromeSwitches;
|
| +import org.chromium.chrome.test.ChromeActivityTestRule;
|
| +import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
|
|
|
| import java.util.concurrent.CountDownLatch;
|
| import java.util.concurrent.TimeUnit;
|
| @@ -26,48 +34,56 @@ import java.util.concurrent.TimeUnit;
|
| /**
|
| * End-to-end tests for WebVR using the WebVR test framework from VrTestBase.
|
| */
|
| -@CommandLineFlags.Add("enable-webvr")
|
| +@RunWith(ChromeJUnit4ClassRunner.class)
|
| +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
|
| + ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG, "enable-webvr"})
|
| @Restriction(RESTRICTION_TYPE_WEBVR_SUPPORTED)
|
| -public class WebVrTest extends VrTestBase {
|
| - private static final String TAG = "WebVrTest";
|
| +public class WebVrTest {
|
| + @Rule
|
| + public VrTestRule mVrTestRule = new VrTestRule();
|
|
|
| /**
|
| * Tests that a successful requestPresent call actually enters VR
|
| */
|
| + @Test
|
| @SmallTest
|
| public void testRequestPresentEntersVr() throws InterruptedException {
|
| String testName = "test_requestPresent_enters_vr";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - assertTrue("VRDisplay found", vrDisplayFound(mWebContents));
|
| - enterVrTapAndWait(mWebContents);
|
| - assertTrue("VrShellDelegate is in VR", VrShellDelegate.isInVr());
|
| - endTest(mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + Assert.assertTrue(
|
| + "VRDisplay found", mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + mVrTestRule.enterVrTapAndWait(mVrTestRule.getWebContents());
|
| + Assert.assertTrue("VrShellDelegate is in VR", VrShellDelegate.isInVr());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
|
|
| /**
|
| * Tests that scanning the Daydream View NFC tag on supported devices fires the
|
| * vrdisplayactivate event.
|
| */
|
| + @Test
|
| @SmallTest
|
| @Restriction(RESTRICTION_TYPE_VIEWER_DAYDREAM)
|
| public void testNfcFiresVrdisplayactivate() throws InterruptedException {
|
| String testName = "test_nfc_fires_vrdisplayactivate";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - simNfcScanAndWait(mWebContents);
|
| - endTest(mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + mVrTestRule.simNfcScanAndWait(mVrTestRule.getWebContents());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
|
|
| /**
|
| * Tests that screen touches are not registered when the viewer is a Daydream View.
|
| */
|
| + @Test
|
| @LargeTest
|
| @Restriction(RESTRICTION_TYPE_VIEWER_DAYDREAM)
|
| public void testScreenTapsNotRegisteredOnDaydream() throws InterruptedException {
|
| String testName = "test_screen_taps_not_registered_on_daydream";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - assertTrue("VRDisplay found", vrDisplayFound(mWebContents));
|
| - executeStepAndWait("stepVerifyNoInitialTaps()", mWebContents);
|
| - enterVrTapAndWait(mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + Assert.assertTrue(
|
| + "VRDisplay found", mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + mVrTestRule.executeStepAndWait("stepVerifyNoInitialTaps()", mVrTestRule.getWebContents());
|
| + mVrTestRule.enterVrTapAndWait(mVrTestRule.getWebContents());
|
| // Wait on VrShellImpl to say that its parent consumed the touch event
|
| // Set to 2 because there's an ACTION_DOWN followed by ACTION_UP
|
| final CountDownLatch touchRegisteredLatch = new CountDownLatch(2);
|
| @@ -76,41 +92,45 @@ public class WebVrTest extends VrTestBase {
|
| @Override
|
| public void onDispatchTouchEvent(
|
| boolean parentConsumed, boolean cardboardTriggered) {
|
| - if (!parentConsumed) fail("Parent did not consume event");
|
| - if (cardboardTriggered) fail("Cardboard event triggered");
|
| + if (!parentConsumed) Assert.fail("Parent did not consume event");
|
| + if (cardboardTriggered) Assert.fail("Cardboard event triggered");
|
| touchRegisteredLatch.countDown();
|
| }
|
| });
|
| - enterVrTap();
|
| - assertTrue("VrShellImpl dispatched touches",
|
| + mVrTestRule.enterVrTap();
|
| + Assert.assertTrue("VrShellImpl dispatched touches",
|
| touchRegisteredLatch.await(POLL_TIMEOUT_SHORT_MS, TimeUnit.MILLISECONDS));
|
| - executeStepAndWait("stepVerifyNoAdditionalTaps()", mWebContents);
|
| - endTest(mWebContents);
|
| + mVrTestRule.executeStepAndWait(
|
| + "stepVerifyNoAdditionalTaps()", mVrTestRule.getWebContents());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
|
|
| /**
|
| * Tests that Daydream controller clicks are registered as screen taps when the viewer is a
|
| * Daydream View.
|
| */
|
| + @Test
|
| @LargeTest
|
| @Restriction(RESTRICTION_TYPE_VIEWER_DAYDREAM)
|
| public void testControllerClicksRegisteredAsTapsOnDaydream() throws InterruptedException {
|
| - EmulatedVrController controller = new EmulatedVrController(getActivity());
|
| + EmulatedVrController controller = new EmulatedVrController(mVrTestRule.getActivity());
|
| String testName = "test_screen_taps_registered";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - assertTrue("VRDisplay found", vrDisplayFound(mWebContents));
|
| - executeStepAndWait("stepVerifyNoInitialTaps()", mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + Assert.assertTrue(
|
| + "VRDisplay found", mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + mVrTestRule.executeStepAndWait("stepVerifyNoInitialTaps()", mVrTestRule.getWebContents());
|
| // Tap and wait to enter VR
|
| - enterVrTapAndWait(mWebContents);
|
| + mVrTestRule.enterVrTapAndWait(mVrTestRule.getWebContents());
|
| // Send a controller click and wait for JavaScript to receive it
|
| controller.pressReleaseTouchpadButton();
|
| - waitOnJavaScriptStep(mWebContents);
|
| - endTest(mWebContents);
|
| + mVrTestRule.waitOnJavaScriptStep(mVrTestRule.getWebContents());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
|
|
| /**
|
| * Tests that screen touches are still registered when the viewer is Cardboard.
|
| */
|
| + @Test
|
| @MediumTest
|
| @Restriction(RESTRICTION_TYPE_VIEWER_NON_DAYDREAM)
|
| @DisableIf.Build(message = "Flaky on L crbug.com/713781",
|
| @@ -118,30 +138,35 @@ public class WebVrTest extends VrTestBase {
|
| sdk_is_less_than = Build.VERSION_CODES.M)
|
| public void testScreenTapsRegisteredOnCardboard() throws InterruptedException {
|
| String testName = "test_screen_taps_registered";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - assertTrue("VRDisplay found", vrDisplayFound(mWebContents));
|
| - executeStepAndWait("stepVerifyNoInitialTaps()", mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + Assert.assertTrue(
|
| + "VRDisplay found", mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + mVrTestRule.executeStepAndWait("stepVerifyNoInitialTaps()", mVrTestRule.getWebContents());
|
| // Tap and wait to enter VR
|
| - enterVrTapAndWait(mWebContents);
|
| + mVrTestRule.enterVrTapAndWait(mVrTestRule.getWebContents());
|
| // Tap and wait for JavaScript to receive it
|
| - enterVrTapAndWait(mWebContents);
|
| - endTest(mWebContents);
|
| + mVrTestRule.enterVrTapAndWait(mVrTestRule.getWebContents());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
|
|
| /**
|
| * Tests that non-focused tabs cannot get pose information.
|
| */
|
| + @Test
|
| @SmallTest
|
| public void testPoseDataUnfocusedTab() throws InterruptedException {
|
| String testName = "test_pose_data_unfocused_tab";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - assertTrue("VRDisplay found", vrDisplayFound(mWebContents));
|
| - executeStepAndWait("stepCheckFrameDataWhileFocusedTab()", mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + Assert.assertTrue(
|
| + "VRDisplay found", mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + mVrTestRule.executeStepAndWait(
|
| + "stepCheckFrameDataWhileFocusedTab()", mVrTestRule.getWebContents());
|
|
|
| - loadUrlInNewTab("about:blank");
|
| + mVrTestRule.loadUrlInNewTab("about:blank");
|
|
|
| - executeStepAndWait("stepCheckFrameDataWhileNonFocusedTab()", mWebContents);
|
| - endTest(mWebContents);
|
| + mVrTestRule.executeStepAndWait(
|
| + "stepCheckFrameDataWhileNonFocusedTab()", mVrTestRule.getWebContents());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
|
|
| /**
|
| @@ -155,54 +180,60 @@ public class WebVrTest extends VrTestBase {
|
| mockChecker.setMockReturnValue(checkerReturnValue);
|
| VrUtils.getVrShellDelegateInstance().overrideVrCoreVersionCheckerForTesting(mockChecker);
|
| String testName = "generic_webvr_page";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| String displayFound = "VRDisplay Found";
|
| String barPresent = "InfoBar present";
|
| if (checkerReturnValue == VrCoreVersionChecker.VR_READY) {
|
| - assertTrue(displayFound, vrDisplayFound(mWebContents));
|
| - assertFalse(barPresent,
|
| + Assert.assertTrue(
|
| + displayFound, mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + Assert.assertFalse(barPresent,
|
| VrUtils.isUpdateInstallInfoBarPresent(
|
| - getActivity().getWindow().getDecorView()));
|
| + mVrTestRule.getActivity().getWindow().getDecorView()));
|
| } else if (checkerReturnValue == VrCoreVersionChecker.VR_OUT_OF_DATE
|
| || checkerReturnValue == VrCoreVersionChecker.VR_NOT_AVAILABLE) {
|
| // Out of date and missing cases are the same, but with different text
|
| String expectedMessage, expectedButton;
|
| if (checkerReturnValue == VrCoreVersionChecker.VR_OUT_OF_DATE) {
|
| - expectedMessage =
|
| - getActivity().getString(R.string.vr_services_check_infobar_update_text);
|
| - expectedButton =
|
| - getActivity().getString(R.string.vr_services_check_infobar_update_button);
|
| + expectedMessage = mVrTestRule.getActivity().getString(
|
| + R.string.vr_services_check_infobar_update_text);
|
| + expectedButton = mVrTestRule.getActivity().getString(
|
| + R.string.vr_services_check_infobar_update_button);
|
| } else {
|
| - expectedMessage =
|
| - getActivity().getString(R.string.vr_services_check_infobar_install_text);
|
| - expectedButton =
|
| - getActivity().getString(R.string.vr_services_check_infobar_install_button);
|
| + expectedMessage = mVrTestRule.getActivity().getString(
|
| + R.string.vr_services_check_infobar_install_text);
|
| + expectedButton = mVrTestRule.getActivity().getString(
|
| + R.string.vr_services_check_infobar_install_button);
|
| }
|
| - assertFalse(displayFound, vrDisplayFound(mWebContents));
|
| - assertTrue(barPresent,
|
| + Assert.assertFalse(
|
| + displayFound, mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + Assert.assertTrue(barPresent,
|
| VrUtils.isUpdateInstallInfoBarPresent(
|
| - getActivity().getWindow().getDecorView()));
|
| - TextView tempView = (TextView) getActivity().getWindow().getDecorView().findViewById(
|
| - R.id.infobar_message);
|
| - assertEquals(expectedMessage, tempView.getText().toString());
|
| - tempView = (TextView) getActivity().getWindow().getDecorView().findViewById(
|
| + mVrTestRule.getActivity().getWindow().getDecorView()));
|
| + TextView tempView =
|
| + (TextView) mVrTestRule.getActivity().getWindow().getDecorView().findViewById(
|
| + R.id.infobar_message);
|
| + Assert.assertEquals(expectedMessage, tempView.getText().toString());
|
| + tempView = (TextView) mVrTestRule.getActivity().getWindow().getDecorView().findViewById(
|
| R.id.button_primary);
|
| - assertEquals(expectedButton, tempView.getText().toString());
|
| + Assert.assertEquals(expectedButton, tempView.getText().toString());
|
| } else if (checkerReturnValue == VrCoreVersionChecker.VR_NOT_SUPPORTED) {
|
| - assertFalse(displayFound, vrDisplayFound(mWebContents));
|
| - assertFalse(barPresent,
|
| + Assert.assertFalse(
|
| + displayFound, mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + Assert.assertFalse(barPresent,
|
| VrUtils.isUpdateInstallInfoBarPresent(
|
| - getActivity().getWindow().getDecorView()));
|
| + mVrTestRule.getActivity().getWindow().getDecorView()));
|
| } else {
|
| - fail("Invalid VrCoreVersionChecker value: " + String.valueOf(checkerReturnValue));
|
| + Assert.fail(
|
| + "Invalid VrCoreVersionChecker value: " + String.valueOf(checkerReturnValue));
|
| }
|
| - assertEquals(checkerReturnValue, mockChecker.getLastReturnValue());
|
| + Assert.assertEquals(checkerReturnValue, mockChecker.getLastReturnValue());
|
| }
|
|
|
| /**
|
| * Tests that the upgrade/install VR Services InfoBar is not present when VR Services is
|
| * installed and up to date.
|
| */
|
| + @Test
|
| @MediumTest
|
| public void testInfoBarNotPresentWhenVrServicesCurrent() throws InterruptedException {
|
| infoBarTestHelper(VrCoreVersionChecker.VR_READY);
|
| @@ -211,6 +242,7 @@ public class WebVrTest extends VrTestBase {
|
| /**
|
| * Tests that the upgrade VR Services InfoBar is present when VR Services is outdated.
|
| */
|
| + @Test
|
| @MediumTest
|
| public void testInfoBarPresentWhenVrServicesOutdated() throws InterruptedException {
|
| infoBarTestHelper(VrCoreVersionChecker.VR_OUT_OF_DATE);
|
| @@ -219,6 +251,7 @@ public class WebVrTest extends VrTestBase {
|
| /**
|
| * Tests that the install VR Services InfoBar is present when VR Services is missing.
|
| */
|
| + @Test
|
| @MediumTest
|
| public void testInfoBarPresentWhenVrServicesMissing() throws InterruptedException {
|
| infoBarTestHelper(VrCoreVersionChecker.VR_NOT_AVAILABLE);
|
| @@ -228,6 +261,7 @@ public class WebVrTest extends VrTestBase {
|
| * Tests that the install VR Services InfoBar is not present when VR is not supported on the
|
| * device.
|
| */
|
| + @Test
|
| @MediumTest
|
| public void testInfoBarNotPresentWhenVrServicesNotSupported() throws InterruptedException {
|
| infoBarTestHelper(VrCoreVersionChecker.VR_NOT_SUPPORTED);
|
| @@ -237,27 +271,31 @@ public class WebVrTest extends VrTestBase {
|
| * Tests that the reported WebVR capabilities match expectations on the devices the WebVR tests
|
| * are run on continuously.
|
| */
|
| + @Test
|
| @MediumTest
|
| public void testDeviceCapabilitiesMatchExpectations() throws InterruptedException {
|
| String testName = "test_device_capabilities_match_expectations";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - assertTrue("VRDisplayFound", vrDisplayFound(mWebContents));
|
| - executeStepAndWait("stepCheckDeviceCapabilities('" + Build.DEVICE + "')", mWebContents);
|
| - endTest(mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + Assert.assertTrue(
|
| + "VRDisplayFound", mVrTestRule.vrDisplayFound(mVrTestRule.getWebContents()));
|
| + mVrTestRule.executeStepAndWait("stepCheckDeviceCapabilities('" + Build.DEVICE + "')",
|
| + mVrTestRule.getWebContents());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
|
|
| /**
|
| * Tests that focus is locked to the presenting display for purposes of VR input.
|
| */
|
| + @Test
|
| @MediumTest
|
| @DisableIf.Build(message = "Flaky on L crbug.com/713781",
|
| sdk_is_greater_than = Build.VERSION_CODES.KITKAT,
|
| sdk_is_less_than = Build.VERSION_CODES.M)
|
| public void testPresentationLocksFocus() throws InterruptedException {
|
| String testName = "test_presentation_locks_focus";
|
| - loadUrl(getHtmlTestFile(testName), PAGE_LOAD_TIMEOUT_S);
|
| - enterVrTapAndWait(mWebContents);
|
| - waitOnJavaScriptStep(mWebContents);
|
| - endTest(mWebContents);
|
| + mVrTestRule.loadUrl(VrTestRule.getHtmlTestFile(testName), VrTestRule.PAGE_LOAD_TIMEOUT_S);
|
| + mVrTestRule.enterVrTapAndWait(mVrTestRule.getWebContents());
|
| + mVrTestRule.waitOnJavaScriptStep(mVrTestRule.getWebContents());
|
| + mVrTestRule.endTest(mVrTestRule.getWebContents());
|
| }
|
| }
|
|
|