Move DisableAnimationsTestRule to test/ui and add base DummyUiActivityTestCase for DummyUiActivity
Bug: 728297
Change-Id: I5945bb2abaef870e10f60f82b0ff41dab116cd00
Reviewed-on: https://chromium-review.googlesource.com/c/1415771
Commit-Queue: Yun Liu <yliuyliu@google.com>
Reviewed-by: David Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#623833}
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni
index 690fbc39..4ca7824 100644
--- a/chrome/android/java_sources.gni
+++ b/chrome/android/java_sources.gni
@@ -1987,7 +1987,6 @@
"javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java",
"javatests/src/org/chromium/chrome/browser/dom_distiller/DistilledPagePrefsTest.java",
"javatests/src/org/chromium/chrome/browser/download/ChromeDownloadDelegateTest.java",
- "javatests/src/org/chromium/chrome/browser/download/DisableAnimationsRule.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceManagerTest.java",
"javatests/src/org/chromium/chrome/browser/download/DownloadForegroundServiceTest.java",
@@ -2360,7 +2359,9 @@
"javatests/src/org/chromium/chrome/browser/widget/bottomsheet/TestBottomSheetContent.java",
"javatests/src/org/chromium/chrome/browser/widget/findinpage/FindTest.java",
"javatests/src/org/chromium/chrome/test/crash/IntentionalCrashTest.java",
+ "javatests/src/org/chromium/chrome/test/ui/DisableAnimationsTestRule.java",
"javatests/src/org/chromium/chrome/test/ui/DummyUiActivity.java",
+ "javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java",
"javatests/src/org/chromium/chrome/test/util/ChromeSigninUtilsTest.java",
]
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java
index b2911bbd..fb4f910 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java
@@ -62,6 +62,7 @@
import org.chromium.chrome.browser.widget.ListMenuButton.Item;
import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.ui.DisableAnimationsTestRule;
import org.chromium.chrome.test.util.browser.Features.DisableFeatures;
import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
import org.chromium.components.offline_items_collection.OfflineItem;
@@ -80,7 +81,7 @@
public class DownloadActivityTest {
// Disable animations to reduce flakiness.
@ClassRule
- public static DisableAnimationsRule disableAnimationsRule = new DisableAnimationsRule();
+ public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
@Rule
public ActivityTestRule<DownloadActivity> mActivityTestRule =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java
index 29c9d50..3e342e9 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/home/DownloadActivityV2Test.java
@@ -10,17 +10,12 @@
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import android.support.test.filters.MediumTest;
-import android.support.test.rule.ActivityTestRule;
-import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
+import org.mockito.MockitoAnnotations;
import org.chromium.base.ThreadUtils;
import org.chromium.base.metrics.RecordHistogram;
@@ -28,7 +23,6 @@
import org.chromium.base.test.util.Restriction;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.UrlConstants;
-import org.chromium.chrome.browser.download.DisableAnimationsRule;
import org.chromium.chrome.browser.download.home.list.UiUtils;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory;
import org.chromium.chrome.browser.download.ui.StubbedProvider;
@@ -37,6 +31,7 @@
import org.chromium.chrome.browser.snackbar.SnackbarManager;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ui.DummyUiActivity;
+import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
import org.chromium.components.feature_engagement.Tracker;
import org.chromium.components.offline_items_collection.OfflineItem;
import org.chromium.ui.test.util.UiRestriction;
@@ -44,21 +39,10 @@
import java.util.HashMap;
import java.util.Map;
-/** Tests the DownloadActivity and the DownloadManagerUi. */
+/** Tests the DownloadActivity home V2. */
@RunWith(ChromeJUnit4ClassRunner.class)
@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE)
-public class DownloadActivityV2Test {
- // Disable animations to reduce flakiness.
- @ClassRule
- public static DisableAnimationsRule disableAnimationsRule = new DisableAnimationsRule();
-
- @Rule
- public ActivityTestRule<DummyUiActivity> mActivityTestRule =
- new ActivityTestRule<>(DummyUiActivity.class);
-
- @Rule
- public MockitoRule mMockitoRule = MockitoJUnit.rule();
-
+public class DownloadActivityV2Test extends DummyUiActivityTestCase {
@Mock
private Profile mProfile;
@Mock
@@ -66,7 +50,6 @@
@Mock
private SnackbarManager mSnackbarManager;
- private DummyUiActivity mActivity;
private DownloadManagerCoordinator mDownloadCoordinator;
@BeforeClass
@@ -77,8 +60,10 @@
DummyUiActivity.setTestTheme(org.chromium.chrome.R.style.FullscreenWhiteActivityTheme);
}
- @Before
- public void setUp() throws Exception {
+ @Override
+ public void setUpTest() throws Exception {
+ super.setUpTest();
+ MockitoAnnotations.initMocks(this);
// TODO(yliuyliu): Write a new StubbedOfflineContentProvider for new Download UI testing.
StubbedProvider stubbedProvider = new StubbedProvider();
OfflineContentAggregatorFactory.setOfflineContentProviderForTests(
@@ -102,8 +87,6 @@
features.put(ChromeFeatureList.DOWNLOAD_HOME_V2, true);
features.put(ChromeFeatureList.OFFLINE_PAGES_PREFETCHING, true);
ChromeFeatureList.setTestFeatures(features);
-
- mActivity = mActivityTestRule.getActivity();
}
private void setUpUi() {
@@ -113,9 +96,9 @@
.setUseNewDownloadPath(true)
.setUseNewDownloadPathThumbnails(true)
.build();
- mDownloadCoordinator =
- new DownloadManagerCoordinatorImpl(mProfile, mActivity, config, mSnackbarManager);
- mActivity.setContentView(mDownloadCoordinator.getView());
+ mDownloadCoordinator = new DownloadManagerCoordinatorImpl(
+ mProfile, getActivity(), config, mSnackbarManager);
+ getActivity().setContentView(mDownloadCoordinator.getView());
mDownloadCoordinator.updateForUrl(UrlConstants.DOWNLOADS_URL);
}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DisableAnimationsRule.java b/chrome/android/javatests/src/org/chromium/chrome/test/ui/DisableAnimationsTestRule.java
similarity index 92%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/download/DisableAnimationsRule.java
rename to chrome/android/javatests/src/org/chromium/chrome/test/ui/DisableAnimationsTestRule.java
index 433c1b9..e6dcb30c 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DisableAnimationsRule.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/test/ui/DisableAnimationsTestRule.java
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-package org.chromium.chrome.browser.download;
+package org.chromium.chrome.test.ui;
import android.os.IBinder;
@@ -18,21 +18,21 @@
/**
* {@link TestRule} to disable animations for UI testing.
*/
-public class DisableAnimationsRule implements TestRule {
+public class DisableAnimationsTestRule implements TestRule {
private Method mSetAnimationScalesMethod;
private Method mGetAnimationScalesMethod;
private Object mWindowManagerObject;
private static final float DISABLED_SCALE_FACTOR = 0.0f;
private static final float DEFAULT_SCALE_FACTOR = 1.0f;
- private static final String TAG = "disable_animations";
+ private static final String TAG = "DisableAnimations";
/**
* Invoke setAnimationScalesMethod to turn off system animations, such as Window animation
* scale, Transition animation scale, Animator duration scale, which can improve stability
* and reduce flakiness for UI testing.
*/
- public DisableAnimationsRule() {
+ public DisableAnimationsTestRule() {
try {
Class<?> windowManagerStubClazz = Class.forName("android.view.IWindowManager$Stub");
Method asInterface =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java b/chrome/android/javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java
new file mode 100644
index 0000000..350a36f
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/test/ui/DummyUiActivityTestCase.java
@@ -0,0 +1,69 @@
+// Copyright 2018 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.ui;
+
+import android.support.test.rule.ActivityTestRule;
+
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+/**
+ * Test case to instrument DummyUiActivity for UI testing scenarios.
+ * Recommend to use setUpTest() and tearDownTest() to setup and tear down instead of @Before and
+ * @After.
+ */
+public class DummyUiActivityTestCase {
+ private DummyUiActivity mActivity;
+
+ private ActivityTestRule<DummyUiActivity> mActivityTestRule =
+ new ActivityTestRule<>(DummyUiActivity.class);
+
+ // Disable animations to reduce flakiness.
+ @ClassRule
+ public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
+
+ @Rule
+ public TestRule ruleChain = RuleChain.outerRule(mActivityTestRule).around(new TestDriverRule());
+
+ /**
+ * TestRule to setup and tear down for each test.
+ */
+ public final class TestDriverRule implements TestRule {
+ @Override
+ public Statement apply(final Statement base, Description description) {
+ return new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ setUpTest();
+ try {
+ base.evaluate();
+ } finally {
+ tearDownTest();
+ }
+ }
+ };
+ }
+ }
+
+ // Override this to setup before test.
+ public void setUpTest() throws Exception {
+ mActivity = mActivityTestRule.getActivity();
+ }
+
+ // Override this to tear down after test.
+ public void tearDownTest() throws Exception {}
+
+ public DummyUiActivity getActivity() {
+ return mActivity;
+ }
+
+ public ActivityTestRule<DummyUiActivity> getActivityTestRule() {
+ return mActivityTestRule;
+ }
+}