Commit 0f7f9553 authored by Yoland Yan's avatar Yoland Yan Committed by Commit Bot

Merge MultiActivityTestRule implementation to itself

Merge MultiActivityTestCommon into MultiActivityTestRule since there is
no long need for sharing the implementation with other classes

Bug: 711517
Change-Id: I30612a8815763a56fc9764008913e6c36c846df7
Reviewed-on: https://chromium-review.googlesource.com/881833Reviewed-by: default avatarJinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarJohn Budorick <jbudorick@chromium.org>
Commit-Queue: Yoland Yan <yolandyan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#531981}
parent e4a90b47
......@@ -15,8 +15,6 @@ android_library("chrome_java_test_support") {
"javatests/src/org/chromium/chrome/test/ChromeTabbedActivityTestRule.java",
"javatests/src/org/chromium/chrome/test/gcore/MockChromeGoogleApiClient.java",
"javatests/src/org/chromium/chrome/test/invalidation/IntentSavingContext.java",
"javatests/src/org/chromium/chrome/test/MultiActivityTestBase.java",
"javatests/src/org/chromium/chrome/test/MultiActivityTestCommon.java",
"javatests/src/org/chromium/chrome/test/MultiActivityTestRule.java",
"javatests/src/org/chromium/chrome/test/omaha/AttributeFinder.java",
"javatests/src/org/chromium/chrome/test/omaha/MockRequestGenerator.java",
......
// 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.chrome.test;
import android.content.Context;
import android.test.InstrumentationTestCase;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.test.util.browser.tabmodel.document.MockStorageDelegate;
import java.util.concurrent.TimeoutException;
/**
* Base for testing and interacting with multiple Activities (e.g. Document or Webapp Activities).
*/
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public abstract class MultiActivityTestBase extends InstrumentationTestCase
implements MultiActivityTestCommon.MultiActivityTestCommonCallback {
private final MultiActivityTestCommon mTestCommon;
public MultiActivityTestBase() {
mTestCommon = new MultiActivityTestCommon(this);
}
@Override
public void setUp() throws Exception {
super.setUp();
mTestCommon.setUp();
}
@Override
public void tearDown() throws Exception {
super.tearDown();
mTestCommon.tearDown();
}
public Context getContext() {
return mTestCommon.mContext;
}
public MockStorageDelegate getStorageDelegate() {
return mTestCommon.mStorageDelegate;
}
/**
* See {@link #waitForFullLoad(ChromeActivity,String,boolean)}.
*/
protected void waitForFullLoad(final ChromeActivity activity, final String expectedTitle)
throws InterruptedException, TimeoutException {
mTestCommon.waitForFullLoad(activity, expectedTitle);
}
}
// 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.
package org.chromium.chrome.test;
import android.app.Instrumentation;
import android.content.Context;
import android.text.TextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelSelector;
import org.chromium.chrome.test.util.ApplicationTestUtils;
import org.chromium.chrome.test.util.browser.tabmodel.document.MockStorageDelegate;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import java.util.concurrent.TimeoutException;
// TODO(yolandyan): move this class to its test rule once JUnit4 migration is over
final class MultiActivityTestCommon {
private static final String TAG = "MultiActivityTest";
private final MultiActivityTestCommonCallback mCallback;
MockStorageDelegate mStorageDelegate;
Context mContext;
MultiActivityTestCommon(MultiActivityTestCommonCallback callback) {
mCallback = callback;
}
void setUp() throws Exception {
RecordHistogram.setDisabledForTests(true);
mContext = mCallback.getInstrumentation().getTargetContext();
ApplicationTestUtils.setUp(mContext, true);
// Make the DocumentTabModelSelector use a mocked out directory so that test runs don't
// interfere with each other.
mStorageDelegate = new MockStorageDelegate(mContext.getCacheDir());
DocumentTabModelSelector.setStorageDelegateForTests(mStorageDelegate);
}
void tearDown() throws Exception {
mStorageDelegate.ensureDirectoryDestroyed();
ApplicationTestUtils.tearDown(mContext);
RecordHistogram.setDisabledForTests(false);
}
void waitForFullLoad(final ChromeActivity activity, final String expectedTitle)
throws InterruptedException, TimeoutException {
waitForTabCreation(activity);
ApplicationTestUtils.assertWaitForPageScaleFactorMatch(activity, 0.5f);
final Tab tab = activity.getActivityTab();
assert tab != null;
CriteriaHelper.pollUiThread(new Criteria() {
@Override
public boolean isSatisfied() {
if (!tab.isLoadingAndRenderingDone()) return false;
if (!TextUtils.equals(expectedTitle, tab.getTitle())) return false;
return true;
}
});
}
private void waitForTabCreation(ChromeActivity activity)
throws InterruptedException, TimeoutException {
final CallbackHelper newTabCreatorHelper = new CallbackHelper();
activity.getTabModelSelector().addObserver(new EmptyTabModelSelectorObserver() {
@Override
public void onNewTabCreated(Tab tab) {
newTabCreatorHelper.notifyCalled();
}
});
newTabCreatorHelper.waitForCallback(0);
}
public interface MultiActivityTestCommonCallback { Instrumentation getInstrumentation(); }
}
......@@ -4,39 +4,87 @@
package org.chromium.chrome.test;
import android.app.Instrumentation;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.text.TextUtils;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.test.MultiActivityTestCommon.MultiActivityTestCommonCallback;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelSelector;
import org.chromium.chrome.test.util.ApplicationTestUtils;
import org.chromium.chrome.test.util.browser.tabmodel.document.MockStorageDelegate;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
import java.util.concurrent.TimeoutException;
/** Custom TestRule for MultiActivity Tests. */
public class MultiActivityTestRule implements TestRule, MultiActivityTestCommonCallback {
private final MultiActivityTestCommon mTestCommon;
public class MultiActivityTestRule implements TestRule {
private static final String TAG = "MultiActivityTest";
public MultiActivityTestRule() {
mTestCommon = new MultiActivityTestCommon(this);
}
MockStorageDelegate mStorageDelegate;
Context mContext;
public MockStorageDelegate getStorageDelegate() {
return mTestCommon.mStorageDelegate;
return mStorageDelegate;
}
public Context getContext() {
return mTestCommon.mContext;
return mContext;
}
public void waitForFullLoad(final ChromeActivity activity, final String expectedTitle)
throws InterruptedException, TimeoutException {
mTestCommon.waitForFullLoad(activity, expectedTitle);
waitForTabCreation(activity);
ApplicationTestUtils.assertWaitForPageScaleFactorMatch(activity, 0.5f);
final Tab tab = activity.getActivityTab();
assert tab != null;
CriteriaHelper.pollUiThread(new Criteria() {
@Override
public boolean isSatisfied() {
if (!tab.isLoadingAndRenderingDone()) return false;
if (!TextUtils.equals(expectedTitle, tab.getTitle())) return false;
return true;
}
});
}
private void waitForTabCreation(ChromeActivity activity)
throws InterruptedException, TimeoutException {
final CallbackHelper newTabCreatorHelper = new CallbackHelper();
activity.getTabModelSelector().addObserver(new EmptyTabModelSelectorObserver() {
@Override
public void onNewTabCreated(Tab tab) {
newTabCreatorHelper.notifyCalled();
}
});
newTabCreatorHelper.waitForCallback(0);
}
private void ruleSetUp() throws Exception {
RecordHistogram.setDisabledForTests(true);
mContext = InstrumentationRegistry.getTargetContext();
ApplicationTestUtils.setUp(mContext, true);
// Make the DocumentTabModelSelector use a mocked out directory so that test runs don't
// interfere with each other.
mStorageDelegate = new MockStorageDelegate(mContext.getCacheDir());
DocumentTabModelSelector.setStorageDelegateForTests(mStorageDelegate);
}
private void ruleTearDown() throws Exception {
mStorageDelegate.ensureDirectoryDestroyed();
ApplicationTestUtils.tearDown(mContext);
RecordHistogram.setDisabledForTests(false);
}
@Override
......@@ -44,15 +92,10 @@ public class MultiActivityTestRule implements TestRule, MultiActivityTestCommonC
return new Statement() {
@Override
public void evaluate() throws Throwable {
mTestCommon.setUp();
ruleSetUp();
base.evaluate();
mTestCommon.tearDown();
ruleTearDown();
}
};
}
@Override
public Instrumentation getInstrumentation() {
return InstrumentationRegistry.getInstrumentation();
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment