Chromium Code Reviews| Index: android_webview/tools/PageCycler/src/org/chromium/webview_shell/page_cycler/PageCyclerTest.java |
| diff --git a/android_webview/tools/PageCycler/src/org/chromium/webview_shell/page_cycler/PageCyclerTest.java b/android_webview/tools/PageCycler/src/org/chromium/webview_shell/page_cycler/PageCyclerTest.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bc29b7b7ec770b9d566d15c85ae9e19e0ec51a78 |
| --- /dev/null |
| +++ b/android_webview/tools/PageCycler/src/org/chromium/webview_shell/page_cycler/PageCyclerTest.java |
| @@ -0,0 +1,163 @@ |
| +// Copyright 2015 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_shell.page_cycler; |
| + |
| +import android.test.ActivityInstrumentationTestCase2; |
| +import android.test.suitebuilder.annotation.LargeTest; |
| +import android.webkit.WebSettings; |
| +import android.webkit.WebView; |
| +import android.webkit.WebViewClient; |
| + |
| +import org.chromium.base.test.util.Restriction; |
| +import org.chromium.content.browser.test.util.CallbackHelper; |
| +import org.chromium.webview_shell.PageCyclerTestActivity; |
| + |
| +import java.util.concurrent.TimeUnit; |
| +import java.util.concurrent.TimeoutException; |
| + |
| +/** |
| + * Tests running on bots with internet connection to load popular urls, |
| + * making sure webview doesn't crash |
| + */ |
| +public class PageCyclerTest |
| + extends ActivityInstrumentationTestCase2<PageCyclerTestActivity> { |
| + |
| + private static final long TIMEOUT_IN_SECS = 20; |
| + |
| + private PageCyclerTestActivity mTestActivity; |
| + |
| + public PageCyclerTest() { |
| + super(PageCyclerTestActivity.class); |
| + } |
| + |
| + @Override |
| + protected void setUp() throws Exception { |
| + super.setUp(); |
| + mTestActivity = getActivity(); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitGoogleCom() throws Throwable { |
| + //TODO(yolandyan@): verify the page |
| + visitUrlSync("http://google.com"); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitFacebookCom() throws Throwable { |
| + visitUrlSync("http://facebook.com"); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitWikipediaOrg() throws Throwable { |
| + visitUrlSync("http://wikipedia.org"); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitAmazonCom() throws Throwable { |
| + visitUrlSync("http://amazon.com"); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitYoutubeCom() throws Throwable { |
| + visitUrlSync("http://youtube.com"); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitYahooCom() throws Throwable { |
| + visitUrlSync("http://yahoo.com"); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitEbayCom() throws Throwable { |
| + visitUrlSync("http://ebay.com"); |
| + } |
| + |
| + @LargeTest |
| + @Restriction(Restriction.RESTRICTION_TYPE_INTERNET) |
| + public void testVisitRedditCom() throws Throwable { |
| + visitUrlSync("http://reddit.com"); |
| + } |
| + |
| + private static class PageCyclerWebViewClient extends WebViewClient { |
| + private final CallbackHelper mPageFinishedCallback; |
| + private final CallbackHelper mErrorCallback; |
| + |
| + public PageCyclerWebViewClient() { |
| + super(); |
| + mPageFinishedCallback = new CallbackHelper(); |
| + mErrorCallback = new CallbackHelper(); |
| + } |
| + |
| + public CallbackHelper getPageFinishedCallback() { |
| + return mPageFinishedCallback; |
| + } |
| + |
| + public CallbackHelper getErrorCallback() { |
| + return mErrorCallback; |
| + } |
| + |
| + @Override |
| + public void onPageFinished(WebView view, String url) { |
| + mPageFinishedCallback.notifyCalled(); |
| + } |
| + |
| + // TODO(yolandyan@): create helper class to manage network error |
| + @Override |
| + public void onReceivedError(WebView webview, int code, String description, |
| + String failingUrl) { |
| + mErrorCallback.notifyCalled(); |
| + } |
| + } |
| + |
| + private void visitUrlSync(final String url) throws Throwable { |
| + final PageCyclerWebViewClient pageCyclerWebViewClient = new PageCyclerWebViewClient(); |
| + getInstrumentation().runOnMainSync(new Runnable() { |
| + @Override |
| + public void run() { |
| + final WebView view = mTestActivity.getWebView(); |
| + WebSettings settings = view.getSettings(); |
| + settings.setJavaScriptEnabled(true); |
| + view.setWebViewClient(pageCyclerWebViewClient); |
| + } |
| + }); |
| + CallbackHelper pageFinishedCallback = pageCyclerWebViewClient.getPageFinishedCallback(); |
| + CallbackHelper errorCallback = pageCyclerWebViewClient.getErrorCallback(); |
| + loadUrlSync(url, pageFinishedCallback, errorCallback); |
| + } |
| + |
| + private void loadUrlSync(final String url, final CallbackHelper pageFinishedCallback, |
| + final CallbackHelper errorCallback) throws InterruptedException { |
| + boolean timeout = false; |
| + int pageFinishedCount = pageFinishedCallback.getCallCount(); |
| + int errorCount = errorCallback.getCallCount(); |
| + loadUrlAsync(url); |
| + try { |
| + pageFinishedCallback.waitForCallback(pageFinishedCount, pageFinishedCount + 1, |
| + TIMEOUT_IN_SECS, TimeUnit.SECONDS); |
|
timvolodine
2015/09/28 11:59:17
nit: will this timeout when there is network error
Yoland Yan(Google)
2015/09/28 16:15:02
When there is a network error, I think pageFinishe
|
| + } catch (TimeoutException ex) { |
| + timeout = true; |
| + } |
| + assertEquals(String.format("Network error while accessing %s", url), errorCount, |
| + errorCallback.getCallCount()); |
| + assertFalse(String.format("Timeout error while accessing %s", url), timeout); |
| + } |
| + |
| + private void loadUrlAsync(final String url) { |
| + getInstrumentation().runOnMainSync(new Runnable() { |
| + @Override |
| + public void run() { |
| + WebView view = mTestActivity.getWebView(); |
| + view.loadUrl(url); |
| + } |
| + }); |
| + } |
| +} |