Index: android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/DropDownListTest.java |
diff --git a/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/DropDownListTest.java b/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/DropDownListTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2643721051acf55b7eb85d19d3f104571a5ff8b1 |
--- /dev/null |
+++ b/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/DropDownListTest.java |
@@ -0,0 +1,161 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.webview_ui_test.test; |
+ |
+import static android.support.test.espresso.Espresso.onView; |
+import static android.support.test.espresso.action.ViewActions.click; |
+import static android.support.test.espresso.matcher.RootMatchers.withDecorView; |
+import static android.support.test.espresso.matcher.ViewMatchers.isEnabled; |
+import static android.support.test.espresso.matcher.ViewMatchers.withId; |
+import static android.support.test.espresso.matcher.ViewMatchers.withText; |
+import static android.support.test.espresso.web.assertion.WebViewAssertions.webMatches; |
+import static android.support.test.espresso.web.sugar.Web.onWebView; |
+import static android.support.test.espresso.web.webdriver.DriverAtoms.findElement; |
+ |
+import static org.hamcrest.CoreMatchers.is; |
+import static org.junit.Assert.assertEquals; |
+ |
+import android.graphics.Point; |
+import android.support.test.espresso.web.sugar.Web; |
+import android.support.test.espresso.web.webdriver.Locator; |
+import android.test.suitebuilder.annotation.SmallTest; |
+import android.view.View; |
+import android.webkit.WebView; |
+ |
+import org.junit.Before; |
+import org.junit.Rule; |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+ |
+import org.chromium.base.test.BaseJUnit4ClassRunner; |
+import org.chromium.webview_ui_test.R; |
+import org.chromium.webview_ui_test.WebViewUiTestActivity; |
+import org.chromium.webview_ui_test.test.util.Actions; |
+import org.chromium.webview_ui_test.test.util.Atoms; |
+import org.chromium.webview_ui_test.test.util.UseLayout; |
+import org.chromium.webview_ui_test.test.util.WebViewUiTestRule; |
+ |
+ |
+/** |
+ * Tests for WebView ActionMode. |
+ */ |
+@RunWith(BaseJUnit4ClassRunner.class) |
+public class DropDownListTest { |
+ @Rule |
+ public WebViewUiTestRule mWebViewActivityRule = new WebViewUiTestRule( |
+ WebViewUiTestActivity.class); |
+ |
+ private static final String AFTER_VALUE = "Value2"; |
+ private static final String BEFORE_VALUE = "Value1"; |
+ private static final String HTML_NON_SCALED = "webview_nonscaled.html"; |
+ private static final String HTML_SCALED = "webview_scaled.html"; |
+ private static final String HTML_SCROLL = "webview_scroll.html"; |
+ |
+ @Before |
+ public void setUp() { |
+ mWebViewActivityRule.launchActivity(); |
+ onWebView().forceJavascriptEnabled(); |
+ } |
+ |
+ /** |
+ * Test Drop Down List works in ViewPort Scale Factor = 1 |
+ */ |
+ @Test |
+ @SmallTest |
+ @UseLayout("edittext_webview") |
+ public void testDropDownNonScaledViewPort() { |
+ mWebViewActivityRule.loadFileSync(HTML_NON_SCALED, false); |
+ changeAllSelectValues(); |
+ } |
+ |
+ /** |
+ * Test Drop Down List works in ViewPort Scale Factor > 1 |
+ */ |
+ @Test |
+ @SmallTest |
+ @UseLayout("edittext_webview") |
+ public void testDropDownScaledViewPort() { |
+ mWebViewActivityRule.loadFileSync(HTML_SCALED, false); |
+ changeAllSelectValues(); |
+ } |
+ |
+ /** |
+ * Test Drop Down List works in ViewPort Scale Factor > 1 in wideViewPortMode |
+ */ |
+ @Test |
+ @SmallTest |
+ @UseLayout("edittext_webview") |
+ public void testDropDownScaledViewPortUseWideViewPort() { |
+ onView(withId(R.id.webview)).perform(Actions.setUseWideViewPort()); |
+ mWebViewActivityRule.loadFileSync(HTML_SCALED, false); |
+ WebView webView = (WebView) mWebViewActivityRule.getActivity() |
+ .findViewById(R.id.webview); |
+ int w = webView.getWidth(); |
+ int h = webView.getHeight(); |
+ changeSelectValue("select1"); |
+ onView(withId(R.id.webview)).perform(Actions.scrollBy(w, 0)); |
+ changeSelectValue("select2"); |
+ onView(withId(R.id.webview)).perform(Actions.scrollBy(0, h)); |
+ changeSelectValue("select3"); |
+ onView(withId(R.id.webview)).perform(Actions.scrollBy(-w, 0)); |
+ changeSelectValue("select4"); |
+ } |
+ |
+ /** |
+ * Test that WebView does not scroll when a drop down menu is selected |
+ */ |
+ @Test |
+ @SmallTest |
+ @UseLayout("edittext_webview") |
+ public void testSelectNoScroll() { |
+ mWebViewActivityRule.loadFileSync(HTML_SCROLL, false); |
+ WebView webView = (WebView) mWebViewActivityRule.getActivity() |
+ .findViewById(R.id.webview); |
+ int w = webView.getWidth(); |
+ int h = webView.getHeight(); |
+ onView(withId(R.id.webview)).perform(Actions.scrollBy(w, h)); |
+ Point beforeSelectScroll = getScroll((WebView) mWebViewActivityRule |
+ .getActivity().findViewById(R.id.webview)); |
+ changeSelectValue("select"); |
+ Point afterSelectScroll = getScroll((WebView) mWebViewActivityRule |
+ .getActivity().findViewById(R.id.webview)); |
+ assertEquals("Scroll should not move after clicking select element", |
+ beforeSelectScroll, afterSelectScroll); |
+ } |
+ |
+ /** |
+ * Get the scroll position of the view |
+ */ |
+ private Point getScroll(View v) { |
+ int x, y; |
+ x = v.getScrollX(); |
+ y = v.getScrollY(); |
+ return new Point(x, y); |
+ } |
+ |
+ /** |
+ * Change all select box values |
+ */ |
+ private void changeAllSelectValues() { |
+ changeSelectValue("select1"); |
+ changeSelectValue("select2"); |
+ changeSelectValue("select3"); |
+ changeSelectValue("select4"); |
+ } |
+ |
+ /** |
+ * Change select box value from Value1 to Value2 |
+ */ |
+ private void changeSelectValue(String id) { |
+ Web.WebInteraction<Void> selectElement = |
+ onWebView().withElement(findElement(Locator.ID, id)); |
+ selectElement.check(webMatches(Atoms.currentSelection(), |
+ is(BEFORE_VALUE))); |
+ selectElement.perform(Atoms.webSelect()); |
+ onView(withText(AFTER_VALUE)).inRoot(withDecorView(isEnabled())).perform(click()); |
+ selectElement.check(webMatches(Atoms.currentSelection(), |
+ is(AFTER_VALUE))); |
+ } |
+} |