| Index: android_webview/javatests/src/org/chromium/android_webview/test/AwTestCommon.java
|
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwTestCommon.java
|
| similarity index 57%
|
| copy from android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java
|
| copy to android_webview/javatests/src/org/chromium/android_webview/test/AwTestCommon.java
|
| index f67a27263ea1230c3ae0952687fae0ef1db43199..46eaa8e921cba3b60f73c27a95d71d96c308a36c 100644
|
| --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java
|
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwTestCommon.java
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| +// Copyright 2017 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.
|
|
|
| @@ -8,28 +8,23 @@ import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
|
|
|
| import android.app.Instrumentation;
|
| import android.content.Context;
|
| -import android.os.Build;
|
| import android.util.AndroidRuntimeException;
|
| -import android.util.Log;
|
| -import android.view.ViewGroup;
|
| +
|
| +import org.junit.Assert;
|
|
|
| import org.chromium.android_webview.AwBrowserContext;
|
| import org.chromium.android_webview.AwBrowserProcess;
|
| import org.chromium.android_webview.AwContents;
|
| -import org.chromium.android_webview.AwContents.DependencyFactory;
|
| -import org.chromium.android_webview.AwContents.InternalAccessDelegate;
|
| -import org.chromium.android_webview.AwContents.NativeDrawGLFunctorFactory;
|
| import org.chromium.android_webview.AwContentsClient;
|
| import org.chromium.android_webview.AwSettings;
|
| -import org.chromium.android_webview.AwSwitches;
|
| +import org.chromium.android_webview.test.AwTestBase.PopupInfo;
|
| +import org.chromium.android_webview.test.AwTestBase.TestDependencyFactory;
|
| import org.chromium.android_webview.test.util.GraphicsTestUtils;
|
| import org.chromium.android_webview.test.util.JSUtils;
|
| +import org.chromium.base.Log;
|
| import org.chromium.base.ThreadUtils;
|
| -import org.chromium.base.test.BaseActivityInstrumentationTestCase;
|
| import org.chromium.base.test.util.CallbackHelper;
|
| import org.chromium.base.test.util.InMemorySharedPreferences;
|
| -import org.chromium.base.test.util.MinAndroidSdkLevel;
|
| -import org.chromium.base.test.util.parameter.CommandLineParameter;
|
| import org.chromium.content.browser.test.util.Criteria;
|
| import org.chromium.content.browser.test.util.CriteriaHelper;
|
| import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
|
| @@ -37,8 +32,6 @@ import org.chromium.content_public.browser.LoadUrlParams;
|
| import org.chromium.net.test.util.TestWebServer;
|
|
|
| import java.lang.annotation.Annotation;
|
| -import java.lang.reflect.AnnotatedElement;
|
| -import java.lang.reflect.Method;
|
| import java.util.Map;
|
| import java.util.concurrent.Callable;
|
| import java.util.concurrent.FutureTask;
|
| @@ -46,51 +39,43 @@ import java.util.concurrent.TimeUnit;
|
| import java.util.regex.Matcher;
|
| import java.util.regex.Pattern;
|
|
|
| -/**
|
| - * A base class for android_webview tests. WebView only runs on KitKat and later,
|
| - * so make sure no one attempts to run the tests on earlier OS releases.
|
| - *
|
| - * By default, all tests run both in single-process mode, and with sandboxed renderer.
|
| - * If a test doesn't yet work with sandboxed renderer, an entire class, or an individual test
|
| - * method can be marked for single-process testing only by adding the following annotation:
|
| - *
|
| - * @SkipCommandLineParameterization
|
| - */
|
| -@MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT)
|
| -@CommandLineParameter({"", AwSwitches.WEBVIEW_SANDBOXED_RENDERER})
|
| -public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunnerActivity> {
|
| +// TODO(yolandyan): move this class to its test rule once JUnit4 migration is over
|
| +final class AwTestCommon {
|
| public static final long WAIT_TIMEOUT_MS = scaleTimeout(15000);
|
| +
|
| public static final int CHECK_INTERVAL = 100;
|
| - private static final String TAG = "AwTestBase";
|
| +
|
| + private static final String TAG = "AwTestCommon";
|
| +
|
| private static final Pattern MAYBE_QUOTED_STRING = Pattern.compile("^(\"?)(.*)\\1$");
|
|
|
| // The browser context needs to be a process-wide singleton.
|
| private AwBrowserContext mBrowserContext;
|
|
|
| - public AwTestBase() {
|
| - super(AwTestRunnerActivity.class);
|
| + private final AwTestCommonCallback mCallback;
|
| +
|
| + AwTestCommon(AwTestCommonCallback callback) {
|
| + mCallback = callback;
|
| }
|
|
|
| - @Override
|
| - protected void setUp() throws Exception {
|
| + void setUp() throws Exception {
|
| if (needsAwBrowserContextCreated()) {
|
| createAwBrowserContext();
|
| }
|
| -
|
| - super.setUp();
|
| if (needsBrowserProcessStarted()) {
|
| startBrowserProcess();
|
| }
|
| }
|
|
|
| - protected void createAwBrowserContext() {
|
| + void createAwBrowserContext() {
|
| if (mBrowserContext != null) {
|
| throw new AndroidRuntimeException("There should only be one browser context.");
|
| }
|
| - getActivity(); // The Activity must be launched in order to load native code
|
| + mCallback.getActivity(); // The Activity must be launched in order to load native code
|
| final InMemorySharedPreferences prefs = new InMemorySharedPreferences();
|
| - final Context appContext = getInstrumentation().getTargetContext().getApplicationContext();
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + final Context appContext =
|
| + mCallback.getInstrumentation().getTargetContext().getApplicationContext();
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| mBrowserContext = createAwBrowserContextOnUiThread(prefs, appContext);
|
| @@ -98,15 +83,15 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - protected AwBrowserContext createAwBrowserContextOnUiThread(
|
| + AwBrowserContext createAwBrowserContextOnUiThread(
|
| InMemorySharedPreferences prefs, Context appContext) {
|
| return new AwBrowserContext(prefs, appContext);
|
| }
|
|
|
| - protected void startBrowserProcess() throws Exception {
|
| + void startBrowserProcess() throws Exception {
|
| // The Activity must be launched in order for proper webview statics to be setup.
|
| - getActivity();
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getActivity();
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| AwBrowserProcess.start();
|
| @@ -114,40 +99,22 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Override this to return false if the test doesn't want to create an AwBrowserContext
|
| - * automatically.
|
| - */
|
| - protected boolean needsAwBrowserContextCreated() {
|
| + boolean needsAwBrowserContextCreated() {
|
| return true;
|
| }
|
|
|
| - /**
|
| - * Override this to return false if the test doesn't want the browser startup sequence to
|
| - * be run automatically.
|
| - * @return Whether the instrumentation test requires the browser process to already be started.
|
| - */
|
| - protected boolean needsBrowserProcessStarted() {
|
| + boolean needsBrowserProcessStarted() {
|
| return true;
|
| }
|
|
|
| - /**
|
| - * Runs a {@link Callable} on the main thread, blocking until it is
|
| - * complete, and returns the result. Calls
|
| - * {@link Instrumentation#waitForIdleSync()} first to help avoid certain
|
| - * race conditions.
|
| - *
|
| - * @param <R> Type of result to return
|
| - */
|
| - public <R> R runTestOnUiThreadAndGetResult(Callable<R> callable)
|
| - throws Exception {
|
| + public <R> R runTestOnUiThreadAndGetResult(Callable<R> callable) throws Exception {
|
| FutureTask<R> task = new FutureTask<R>(callable);
|
| - getInstrumentation().runOnMainSync(task);
|
| + mCallback.getInstrumentation().runOnMainSync(task);
|
| return task.get();
|
| }
|
|
|
| public void enableJavaScriptOnUiThread(final AwContents awContents) {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.getSettings().setJavaScriptEnabled(true);
|
| @@ -155,9 +122,9 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - public void setNetworkAvailableOnUiThread(final AwContents awContents,
|
| - final boolean networkUp) {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + public void setNetworkAvailableOnUiThread(
|
| + final AwContents awContents, final boolean networkUp) {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.setNetworkAvailable(networkUp);
|
| @@ -165,50 +132,38 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Loads url on the UI thread and blocks until onPageFinished is called.
|
| - */
|
| - public void loadUrlSync(final AwContents awContents,
|
| - CallbackHelper onPageFinishedHelper,
|
| + public void loadUrlSync(final AwContents awContents, CallbackHelper onPageFinishedHelper,
|
| final String url) throws Exception {
|
| loadUrlSync(awContents, onPageFinishedHelper, url, null);
|
| }
|
|
|
| - public void loadUrlSync(final AwContents awContents,
|
| - CallbackHelper onPageFinishedHelper,
|
| - final String url,
|
| - final Map<String, String> extraHeaders) throws Exception {
|
| + public void loadUrlSync(final AwContents awContents, CallbackHelper onPageFinishedHelper,
|
| + final String url, final Map<String, String> extraHeaders) throws Exception {
|
| int currentCallCount = onPageFinishedHelper.getCallCount();
|
| loadUrlAsync(awContents, url, extraHeaders);
|
| - onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| public void loadUrlSyncAndExpectError(final AwContents awContents,
|
| - CallbackHelper onPageFinishedHelper,
|
| - CallbackHelper onReceivedErrorHelper,
|
| + CallbackHelper onPageFinishedHelper, CallbackHelper onReceivedErrorHelper,
|
| final String url) throws Exception {
|
| int onErrorCallCount = onReceivedErrorHelper.getCallCount();
|
| int onFinishedCallCount = onPageFinishedHelper.getCallCount();
|
| loadUrlAsync(awContents, url);
|
| - onReceivedErrorHelper.waitForCallback(onErrorCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| - onPageFinishedHelper.waitForCallback(onFinishedCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onReceivedErrorHelper.waitForCallback(
|
| + onErrorCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + onFinishedCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| - /**
|
| - * Loads url on the UI thread but does not block.
|
| - */
|
| - public void loadUrlAsync(final AwContents awContents,
|
| - final String url) throws Exception {
|
| + public void loadUrlAsync(final AwContents awContents, final String url) throws Exception {
|
| loadUrlAsync(awContents, url, null);
|
| }
|
|
|
| - public void loadUrlAsync(final AwContents awContents,
|
| - final String url,
|
| - final Map<String, String> extraHeaders) {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + public void loadUrlAsync(
|
| + final AwContents awContents, final String url, final Map<String, String> extraHeaders) {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.loadUrl(url, extraHeaders);
|
| @@ -216,23 +171,16 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Posts url on the UI thread and blocks until onPageFinished is called.
|
| - */
|
| - public void postUrlSync(final AwContents awContents,
|
| - CallbackHelper onPageFinishedHelper, final String url,
|
| - byte[] postData) throws Exception {
|
| + public void postUrlSync(final AwContents awContents, CallbackHelper onPageFinishedHelper,
|
| + final String url, byte[] postData) throws Exception {
|
| int currentCallCount = onPageFinishedHelper.getCallCount();
|
| postUrlAsync(awContents, url, postData);
|
| - onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| - /**
|
| - * Loads url on the UI thread but does not block.
|
| - */
|
| - public void postUrlAsync(final AwContents awContents,
|
| - final String url, byte[] postData) throws Exception {
|
| + public void postUrlAsync(final AwContents awContents, final String url, byte[] postData)
|
| + throws Exception {
|
| class PostUrl implements Runnable {
|
| byte[] mPostData;
|
| public PostUrl(byte[] postData) {
|
| @@ -243,46 +191,36 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| awContents.postUrl(url, mPostData);
|
| }
|
| }
|
| - getInstrumentation().runOnMainSync(new PostUrl(postData));
|
| + mCallback.getInstrumentation().runOnMainSync(new PostUrl(postData));
|
| }
|
|
|
| - /**
|
| - * Loads data on the UI thread and blocks until onPageFinished is called.
|
| - */
|
| - public void loadDataSync(final AwContents awContents,
|
| - CallbackHelper onPageFinishedHelper,
|
| - final String data, final String mimeType,
|
| - final boolean isBase64Encoded) throws Exception {
|
| + public void loadDataSync(final AwContents awContents, CallbackHelper onPageFinishedHelper,
|
| + final String data, final String mimeType, final boolean isBase64Encoded)
|
| + throws Exception {
|
| int currentCallCount = onPageFinishedHelper.getCallCount();
|
| loadDataAsync(awContents, data, mimeType, isBase64Encoded);
|
| - onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| public void loadDataSyncWithCharset(final AwContents awContents,
|
| - CallbackHelper onPageFinishedHelper,
|
| - final String data, final String mimeType,
|
| - final boolean isBase64Encoded, final String charset)
|
| - throws Exception {
|
| + CallbackHelper onPageFinishedHelper, final String data, final String mimeType,
|
| + final boolean isBase64Encoded, final String charset) throws Exception {
|
| int currentCallCount = onPageFinishedHelper.getCallCount();
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.loadUrl(LoadUrlParams.createLoadDataParams(
|
| data, mimeType, isBase64Encoded, charset));
|
| }
|
| });
|
| - onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| - /**
|
| - * Loads data on the UI thread but does not block.
|
| - */
|
| - public void loadDataAsync(final AwContents awContents, final String data,
|
| - final String mimeType, final boolean isBase64Encoded)
|
| - throws Exception {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + public void loadDataAsync(final AwContents awContents, final String data, final String mimeType,
|
| + final boolean isBase64Encoded) throws Exception {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.loadData(data, mimeType, isBase64Encoded ? "base64" : null);
|
| @@ -292,18 +230,18 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
|
|
| public void loadDataWithBaseUrlSync(final AwContents awContents,
|
| CallbackHelper onPageFinishedHelper, final String data, final String mimeType,
|
| - final boolean isBase64Encoded, final String baseUrl,
|
| - final String historyUrl) throws Throwable {
|
| + final boolean isBase64Encoded, final String baseUrl, final String historyUrl)
|
| + throws Throwable {
|
| int currentCallCount = onPageFinishedHelper.getCallCount();
|
| loadDataWithBaseUrlAsync(awContents, data, mimeType, isBase64Encoded, baseUrl, historyUrl);
|
| - onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| - public void loadDataWithBaseUrlAsync(final AwContents awContents,
|
| - final String data, final String mimeType, final boolean isBase64Encoded,
|
| - final String baseUrl, final String historyUrl) throws Throwable {
|
| - runTestOnUiThread(new Runnable() {
|
| + public void loadDataWithBaseUrlAsync(final AwContents awContents, final String data,
|
| + final String mimeType, final boolean isBase64Encoded, final String baseUrl,
|
| + final String historyUrl) throws Throwable {
|
| + mCallback.runOnUiThread(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.loadDataWithBaseURL(
|
| @@ -312,27 +250,21 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Reloads the current page synchronously.
|
| - */
|
| - public void reloadSync(final AwContents awContents,
|
| - CallbackHelper onPageFinishedHelper) throws Exception {
|
| + public void reloadSync(final AwContents awContents, CallbackHelper onPageFinishedHelper)
|
| + throws Exception {
|
| int currentCallCount = onPageFinishedHelper.getCallCount();
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.getNavigationController().reload(true);
|
| }
|
| });
|
| - onPageFinishedHelper.waitForCallback(currentCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| - /**
|
| - * Stops loading on the UI thread.
|
| - */
|
| public void stopLoading(final AwContents awContents) {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.stopLoading();
|
| @@ -343,15 +275,15 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| public void waitForVisualStateCallback(final AwContents awContents) throws Exception {
|
| final CallbackHelper ch = new CallbackHelper();
|
| final int chCount = ch.getCallCount();
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| final long requestId = 666;
|
| - awContents.insertVisualStateCallback(requestId,
|
| - new AwContents.VisualStateCallback() {
|
| + awContents.insertVisualStateCallback(
|
| + requestId, new AwContents.VisualStateCallback() {
|
| @Override
|
| public void onComplete(long id) {
|
| - assertEquals(requestId, id);
|
| + Assert.assertEquals(requestId, id);
|
| ch.notifyCalled();
|
| }
|
| });
|
| @@ -362,7 +294,7 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
|
|
| public void insertVisualStateCallbackOnUIThread(final AwContents awContents,
|
| final long requestId, final AwContents.VisualStateCallback callback) {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.insertVisualStateCallback(requestId, callback);
|
| @@ -370,9 +302,6 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - // Waits for the pixel at the center of AwContents to color up into expectedColor.
|
| - // Note that this is a stricter condition that waiting for a visual state callback,
|
| - // as visual state callback only indicates that *something* has appeared in WebView.
|
| public void waitForPixelColorAtCenterOfView(final AwContents awContents,
|
| final AwTestContainerView testContainerView, final int expectedColor) throws Exception {
|
| pollUiThread(new Callable<Boolean>() {
|
| @@ -384,60 +313,11 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Checks the current test has |clazz| annotation. Note this swallows NoSuchMethodException
|
| - * and returns false in that case.
|
| - */
|
| - private boolean testMethodHasAnnotation(Class<? extends Annotation> clazz) {
|
| - String testName = getName();
|
| - Method method = null;
|
| - try {
|
| - method = getClass().getMethod(testName);
|
| - } catch (NoSuchMethodException e) {
|
| - Log.w(TAG, "Test method name not found.", e);
|
| - return false;
|
| - }
|
| -
|
| - // Cast to AnnotatedElement to work around a compilation failure.
|
| - // Method.isAnnotationPresent() was removed in Java 8 (which is used by the Android N SDK),
|
| - // so compilation with Java 7 fails. See crbug.com/608792.
|
| - return ((AnnotatedElement) method).isAnnotationPresent(clazz);
|
| - }
|
| -
|
| - /**
|
| - * Factory class used in creation of test AwContents instances.
|
| - *
|
| - * Test cases can provide subclass instances to the createAwTest* methods in order to create an
|
| - * AwContents instance with injected test dependencies.
|
| - */
|
| - public static class TestDependencyFactory extends AwContents.DependencyFactory {
|
| - public AwTestContainerView createAwTestContainerView(AwTestRunnerActivity activity,
|
| - boolean allowHardwareAcceleration) {
|
| - return new AwTestContainerView(activity, allowHardwareAcceleration);
|
| - }
|
| - public AwSettings createAwSettings(Context context, boolean supportsLegacyQuirks) {
|
| - return new AwSettings(context, false /* isAccessFromFileURLsGrantedByDefault */,
|
| - supportsLegacyQuirks, false /* allowEmptyDocumentPersistence */,
|
| - true /* allowGeolocationOnInsecureOrigins */,
|
| - false /* doNotUpdateSelectionOnMutatingSelectionRange */);
|
| - }
|
| -
|
| - public AwContents createAwContents(AwBrowserContext browserContext, ViewGroup containerView,
|
| - Context context, InternalAccessDelegate internalAccessAdapter,
|
| - NativeDrawGLFunctorFactory nativeDrawGLFunctorFactory,
|
| - AwContentsClient contentsClient, AwSettings settings,
|
| - DependencyFactory dependencyFactory) {
|
| - return new AwContents(browserContext, containerView, context, internalAccessAdapter,
|
| - nativeDrawGLFunctorFactory, contentsClient, settings, dependencyFactory);
|
| - }
|
| - }
|
| -
|
| - protected TestDependencyFactory createTestDependencyFactory() {
|
| + TestDependencyFactory createTestDependencyFactory() {
|
| return new TestDependencyFactory();
|
| }
|
|
|
| - public AwTestContainerView createAwTestContainerView(
|
| - final AwContentsClient awContentsClient) {
|
| + public AwTestContainerView createAwTestContainerView(final AwContentsClient awContentsClient) {
|
| return createAwTestContainerView(awContentsClient, false, null);
|
| }
|
|
|
| @@ -445,7 +325,7 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| boolean supportsLegacyQuirks, final TestDependencyFactory testDependencyFactory) {
|
| AwTestContainerView testContainerView = createDetachedAwTestContainerView(
|
| awContentsClient, supportsLegacyQuirks, testDependencyFactory);
|
| - getActivity().addView(testContainerView);
|
| + mCallback.getActivity().addView(testContainerView);
|
| testContainerView.requestFocus();
|
| return testContainerView;
|
| }
|
| @@ -468,10 +348,10 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| boolean allowHardwareAcceleration = isHardwareAcceleratedTest();
|
| final AwTestContainerView testContainerView =
|
| testDependencyFactory.createAwTestContainerView(
|
| - getActivity(), allowHardwareAcceleration);
|
| + mCallback.getActivity(), allowHardwareAcceleration);
|
|
|
| - AwSettings awSettings =
|
| - testDependencyFactory.createAwSettings(getActivity(), supportsLegacyQuirks);
|
| + AwSettings awSettings = testDependencyFactory.createAwSettings(
|
| + mCallback.getActivity(), supportsLegacyQuirks);
|
| AwContents awContents = testDependencyFactory.createAwContents(mBrowserContext,
|
| testContainerView, testContainerView.getContext(),
|
| testContainerView.getInternalAccessDelegate(),
|
| @@ -481,12 +361,12 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| return testContainerView;
|
| }
|
|
|
| - protected boolean isHardwareAcceleratedTest() {
|
| - return !testMethodHasAnnotation(DisableHardwareAccelerationForTest.class);
|
| + boolean isHardwareAcceleratedTest() {
|
| + return !mCallback.testMethodHasAnnotation(DisableHardwareAccelerationForTest.class);
|
| }
|
|
|
| - public AwTestContainerView createAwTestContainerViewOnMainSync(
|
| - final AwContentsClient client) throws Exception {
|
| + public AwTestContainerView createAwTestContainerViewOnMainSync(final AwContentsClient client)
|
| + throws Exception {
|
| return createAwTestContainerViewOnMainSync(client, false, null);
|
| }
|
|
|
| @@ -508,7 +388,7 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
|
|
| public void destroyAwContentsOnMainSync(final AwContents awContents) {
|
| if (awContents == null) return;
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.destroy();
|
| @@ -525,8 +405,7 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - public AwSettings getAwSettingsOnUiThread(
|
| - final AwContents awContents) throws Exception {
|
| + public AwSettings getAwSettingsOnUiThread(final AwContents awContents) throws Exception {
|
| return runTestOnUiThreadAndGetResult(new Callable<AwSettings>() {
|
| @Override
|
| public AwSettings call() throws Exception {
|
| @@ -535,43 +414,30 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Verify double quotes in both sides of the raw string. Strip the double quotes and
|
| - * returns rest of the string.
|
| - */
|
| - protected String maybeStripDoubleQuotes(String raw) {
|
| - assertNotNull(raw);
|
| + String maybeStripDoubleQuotes(String raw) {
|
| + Assert.assertNotNull(raw);
|
| Matcher m = MAYBE_QUOTED_STRING.matcher(raw);
|
| - assertTrue(m.matches());
|
| + Assert.assertTrue(m.matches());
|
| return m.group(2);
|
| }
|
|
|
| - /**
|
| - * Executes the given snippet of JavaScript code within the given ContentView. Returns the
|
| - * result of its execution in JSON format.
|
| - */
|
| public String executeJavaScriptAndWaitForResult(final AwContents awContents,
|
| TestAwContentsClient viewClient, final String code) throws Exception {
|
| - return JSUtils.executeJavaScriptAndWaitForResult(this, awContents,
|
| - viewClient.getOnEvaluateJavaScriptResultHelper(),
|
| - code);
|
| + return JSUtils.executeJavaScriptAndWaitForResult(mCallback.getInstrumentation(), awContents,
|
| + viewClient.getOnEvaluateJavaScriptResultHelper(), code);
|
| }
|
|
|
| /**
|
| * Executes JavaScript code within the given ContentView to get the text content in
|
| * document body. Returns the result string without double quotes.
|
| */
|
| - protected String getJavaScriptResultBodyTextContent(
|
| + String getJavaScriptResultBodyTextContent(
|
| final AwContents awContents, final TestAwContentsClient viewClient) throws Exception {
|
| String raw = executeJavaScriptAndWaitForResult(
|
| awContents, viewClient, "document.body.textContent");
|
| return maybeStripDoubleQuotes(raw);
|
| }
|
|
|
| - /**
|
| - * Wrapper around CriteriaHelper.pollInstrumentationThread. This uses AwTestBase-specifc
|
| - * timeouts and treats timeouts and exceptions as test failures automatically.
|
| - */
|
| public static void pollInstrumentationThread(final Callable<Boolean> callable)
|
| throws Exception {
|
| CriteriaHelper.pollInstrumentationThread(new Criteria() {
|
| @@ -587,9 +453,6 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| }, WAIT_TIMEOUT_MS, CHECK_INTERVAL);
|
| }
|
|
|
| - /**
|
| - * Wrapper around {@link AwTestBase#poll()} but runs the callable on the UI thread.
|
| - */
|
| public void pollUiThread(final Callable<Boolean> callable) throws Exception {
|
| pollInstrumentationThread(new Callable<Boolean>() {
|
| @Override
|
| @@ -599,14 +462,9 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Clears the resource cache. Note that the cache is per-application, so this will clear the
|
| - * cache for all WebViews used.
|
| - */
|
| - public void clearCacheOnUiThread(
|
| - final AwContents awContents,
|
| - final boolean includeDiskFiles) throws Exception {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + public void clearCacheOnUiThread(final AwContents awContents, final boolean includeDiskFiles)
|
| + throws Exception {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.clearCache(includeDiskFiles);
|
| @@ -614,9 +472,6 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Returns pure page scale.
|
| - */
|
| public float getScaleOnUiThread(final AwContents awContents) throws Exception {
|
| return runTestOnUiThreadAndGetResult(new Callable<Float>() {
|
| @Override
|
| @@ -626,9 +481,6 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Returns page scale multiplied by the screen density.
|
| - */
|
| public float getPixelScaleOnUiThread(final AwContents awContents) throws Exception {
|
| return runTestOnUiThreadAndGetResult(new Callable<Float>() {
|
| @Override
|
| @@ -638,9 +490,6 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Returns whether a user can zoom the page in.
|
| - */
|
| public boolean canZoomInOnUiThread(final AwContents awContents) throws Exception {
|
| return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
|
| @Override
|
| @@ -650,9 +499,6 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Returns whether a user can zoom the page out.
|
| - */
|
| public boolean canZoomOutOnUiThread(final AwContents awContents) throws Exception {
|
| return runTestOnUiThreadAndGetResult(new Callable<Boolean>() {
|
| @Override
|
| @@ -663,7 +509,7 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| }
|
|
|
| public void killRenderProcessOnUiThreadAsync(final AwContents awContents) throws Exception {
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| awContents.killRenderProcess();
|
| @@ -671,15 +517,12 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| });
|
| }
|
|
|
| - /**
|
| - * Loads the main html then triggers the popup window.
|
| - */
|
| public void triggerPopup(final AwContents parentAwContents,
|
| TestAwContentsClient parentAwContentsClient, TestWebServer testWebServer,
|
| String mainHtml, String popupHtml, String popupPath, String triggerScript)
|
| throws Exception {
|
| enableJavaScriptOnUiThread(parentAwContents);
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| parentAwContents.getSettings().setSupportMultipleWindows(true);
|
| @@ -705,24 +548,6 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| }
|
|
|
| - /**
|
| - * POD object for holding references to helper objects of a popup window.
|
| - */
|
| - public static class PopupInfo {
|
| - public final TestAwContentsClient popupContentsClient;
|
| - public final AwTestContainerView popupContainerView;
|
| - public final AwContents popupContents;
|
| - public PopupInfo(TestAwContentsClient popupContentsClient,
|
| - AwTestContainerView popupContainerView, AwContents popupContents) {
|
| - this.popupContentsClient = popupContentsClient;
|
| - this.popupContainerView = popupContainerView;
|
| - this.popupContents = popupContents;
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Supplies the popup window with AwContents then waits for the popup window to finish loading.
|
| - */
|
| public PopupInfo connectPendingPopup(final AwContents parentAwContents) throws Exception {
|
| TestAwContentsClient popupContentsClient;
|
| AwTestContainerView popupContainerView;
|
| @@ -732,7 +557,7 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| popupContents = popupContainerView.getAwContents();
|
| enableJavaScriptOnUiThread(popupContents);
|
|
|
| - getInstrumentation().runOnMainSync(new Runnable() {
|
| + mCallback.getInstrumentation().runOnMainSync(new Runnable() {
|
| @Override
|
| public void run() {
|
| parentAwContents.supplyContentsForPopup(popupContents);
|
| @@ -745,11 +570,18 @@ public class AwTestBase extends BaseActivityInstrumentationTestCase<AwTestRunner
|
| popupContentsClient.getOnReceivedTitleHelper();
|
| int titleCallCount = onReceivedTitleHelper.getCallCount();
|
|
|
| - onPageFinishedHelper.waitForCallback(finishCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| - onReceivedTitleHelper.waitForCallback(titleCallCount, 1, WAIT_TIMEOUT_MS,
|
| - TimeUnit.MILLISECONDS);
|
| + onPageFinishedHelper.waitForCallback(
|
| + finishCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
| + onReceivedTitleHelper.waitForCallback(
|
| + titleCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
|
|
| return new PopupInfo(popupContentsClient, popupContainerView, popupContents);
|
| }
|
| +
|
| + public interface AwTestCommonCallback {
|
| + Instrumentation getInstrumentation();
|
| + AwTestRunnerActivity getActivity();
|
| + void runOnUiThread(Runnable runnable) throws Throwable;
|
| + boolean testMethodHasAnnotation(Class<? extends Annotation> clazz);
|
| + }
|
| }
|
|
|