Fix WebView test testGetHitTestResult() to call WebView methods on UI thread
Bug: 4340864
Change-Id: I4de01abc0d242ab030fafc20919a56d479ef67b8
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
index 5a23e3a..f80bcf0 100755
--- a/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebViewTest.java
@@ -1655,62 +1655,79 @@
args = {}
)
public void testGetHitTestResult() throws Throwable {
- String anchor = "<p><a href=\"" + TestHtmlConstants.EXT_WEB_URL1
+ class HitTestResultRunnable implements Runnable {
+ private HitTestResult mHitTestResult;
+ public void run() {
+ mHitTestResult = mWebView.getHitTestResult();
+ }
+ public HitTestResult getHitTestResult() {
+ return mHitTestResult;
+ }
+ }
+
+ final String anchor = "<p><a href=\"" + TestHtmlConstants.EXT_WEB_URL1
+ "\">normal anchor</a></p>";
- String blankAnchor = "<p><a href=\"\">blank anchor</a></p>";
- String form = "<p><form><input type=\"text\" name=\"Test\"><br>"
+ final String blankAnchor = "<p><a href=\"\">blank anchor</a></p>";
+ final String form = "<p><form><input type=\"text\" name=\"Test\"><br>"
+ "<input type=\"submit\" value=\"Submit\"></form></p>";
String phoneNo = "3106984000";
- String tel = "<p><a href=\"tel:" + phoneNo + "\">Phone</a></p>";
+ final String tel = "<p><a href=\"tel:" + phoneNo + "\">Phone</a></p>";
String email = "test@gmail.com";
- String mailto = "<p><a href=\"mailto:" + email + "\">Email</a></p>";
+ final String mailto = "<p><a href=\"mailto:" + email + "\">Email</a></p>";
String location = "shanghai";
- String geo = "<p><a href=\"geo:0,0?q=" + location + "\">Location</a></p>";
- mWebView.loadDataWithBaseURL("fake://home", "<html><body>" + anchor + blankAnchor + form
- + tel + mailto + geo + "</body></html>", "text/html", "UTF-8", null);
- waitForLoadComplete();
+ final String geo = "<p><a href=\"geo:0,0?q=" + location + "\">Location</a></p>";
+
+ runTestOnUiThread(new Runnable() {
+ public void run() {
+ mWebView.loadDataWithBaseURL("fake://home", "<html><body>" + anchor + blankAnchor + form
+ + tel + mailto + geo + "</body></html>", "text/html", "UTF-8", null);
+ waitForLoadComplete();
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+ HitTestResultRunnable runnable = new HitTestResultRunnable();
// anchor
moveFocusDown();
- HitTestResult result = mWebView.getHitTestResult();
- assertEquals(HitTestResult.SRC_ANCHOR_TYPE, result.getType());
- assertEquals(TestHtmlConstants.EXT_WEB_URL1, result.getExtra());
+ runTestOnUiThread(runnable);
+ assertEquals(HitTestResult.SRC_ANCHOR_TYPE, runnable.getHitTestResult().getType());
+ assertEquals(TestHtmlConstants.EXT_WEB_URL1, runnable.getHitTestResult().getExtra());
// blank anchor
moveFocusDown();
- result = mWebView.getHitTestResult();
- assertEquals(HitTestResult.SRC_ANCHOR_TYPE, result.getType());
- assertEquals("fake://home", result.getExtra());
+ runTestOnUiThread(runnable);
+ assertEquals(HitTestResult.SRC_ANCHOR_TYPE, runnable.getHitTestResult().getType());
+ assertEquals("fake://home", runnable.getHitTestResult().getExtra());
// text field
moveFocusDown();
- result = mWebView.getHitTestResult();
- assertEquals(HitTestResult.EDIT_TEXT_TYPE, result.getType());
- assertNull(result.getExtra());
+ runTestOnUiThread(runnable);
+ assertEquals(HitTestResult.EDIT_TEXT_TYPE, runnable.getHitTestResult().getType());
+ assertNull(runnable.getHitTestResult().getExtra());
// submit button
moveFocusDown();
- result = mWebView.getHitTestResult();
- assertEquals(HitTestResult.UNKNOWN_TYPE, result.getType());
- assertNull(result.getExtra());
+ runTestOnUiThread(runnable);
+ assertEquals(HitTestResult.UNKNOWN_TYPE, runnable.getHitTestResult().getType());
+ assertNull(runnable.getHitTestResult().getExtra());
// phone number
moveFocusDown();
- result = mWebView.getHitTestResult();
- assertEquals(HitTestResult.PHONE_TYPE, result.getType());
- assertEquals(phoneNo, result.getExtra());
+ runTestOnUiThread(runnable);
+ assertEquals(HitTestResult.PHONE_TYPE, runnable.getHitTestResult().getType());
+ assertEquals(phoneNo, runnable.getHitTestResult().getExtra());
// email
moveFocusDown();
- result = mWebView.getHitTestResult();
- assertEquals(HitTestResult.EMAIL_TYPE, result.getType());
- assertEquals(email, result.getExtra());
+ runTestOnUiThread(runnable);
+ assertEquals(HitTestResult.EMAIL_TYPE, runnable.getHitTestResult().getType());
+ assertEquals(email, runnable.getHitTestResult().getExtra());
// geo address
moveFocusDown();
- result = mWebView.getHitTestResult();
- assertEquals(HitTestResult.GEO_TYPE, result.getType());
- assertEquals(location, result.getExtra());
+ runTestOnUiThread(runnable);
+ assertEquals(HitTestResult.GEO_TYPE, runnable.getHitTestResult().getType());
+ assertEquals(location, runnable.getHitTestResult().getExtra());
}
@TestTargetNew(