Commit 87186eaa authored by Wenyu Fu's avatar Wenyu Fu Committed by Commit Bot

Add SettingsActivityTestRule

We have several different places to launch SettingsActivity. Adding this
SettingsActivityTestRule to provide a uniformed entry to launch
SettingsActivity.

This is the first CL in the series. This CL adds the
SettingsActivityTestRule, and change the call for SettingsActivityTest.
Other calls to launch SettingsActivity will be migrated in follow-up
CLs.

Bug: 1066660
Change-Id: I363034e543f9aabbb742d98f3e4b9aa0f0578acc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2135021
Commit-Queue: Wenyu Fu <wenyufu@chromium.org>
Reviewed-by: default avatarNatalie Chouinard <chouinard@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756750}
parent 54a29975
......@@ -432,6 +432,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/services/GoogleServicesManagerIntegrationTest.java",
"javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTest.java",
"javatests/src/org/chromium/chrome/browser/settings/SettingsActivityTestRule.java",
"javatests/src/org/chromium/chrome/browser/settings/language/LanguageSettingsTest.java",
"javatests/src/org/chromium/chrome/browser/shape_detection/ShapeDetectionTest.java",
"javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java",
......
......@@ -14,10 +14,10 @@ import android.app.Activity;
import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -50,6 +50,10 @@ public class SettingsActivityTest {
return (SettingsActivity) activity;
}
@Rule
public SettingsActivityTestRule<MainSettings> mSettingsActivityTestRule =
new SettingsActivityTestRule<>(MainSettings.class);
@Test
@SmallTest
@Policies.Add({ @Policies.Item(key = "PasswordManagerEnabled", string = "false") })
......@@ -65,8 +69,7 @@ public class SettingsActivityTest {
}
});
SettingsActivityTest.startSettingsActivity(
InstrumentationRegistry.getInstrumentation(), MainSettings.class.getName());
mSettingsActivityTestRule.startSettingsActivity();
onView(withText(R.string.password_settings_title)).perform(click());
onView(withText(R.string.password_settings_save_passwords)).check(matches(isDisplayed()));
......
// Copyright 2020 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.browser.settings;
import android.content.Context;
import android.content.Intent;
import android.support.test.InstrumentationRegistry;
import android.support.test.rule.ActivityTestRule;
import androidx.fragment.app.Fragment;
import org.junit.Assert;
/**
* Activity test rule that launch {@link SettingsActivity} in tests.
*
* Noting that the activity is not starting after the test rule created. The user have to call
* {@link #startSettingsActivity()} explicitly to launch the settings activity.
*
* @param <T> Fragment that will be attached to the SettingsActivity.
*/
public class SettingsActivityTestRule<T extends Fragment>
extends ActivityTestRule<SettingsActivity> {
private final Class<T> mFragmentClass;
/**
* Create the settings activity test rule with an specific fragment class.
* @param fragmentClass Fragment that will be attached after the activity starts.
*/
public SettingsActivityTestRule(Class<T> fragmentClass) {
this(fragmentClass, false);
}
/**
* Create the settings activity test rule with an specific fragment class.
* @param fragmentClass Fragment that will be attached after the activity starts.
* @param initialTouchMode Whether in touch mode after the activity starts.
*/
public SettingsActivityTestRule(Class<T> fragmentClass, boolean initialTouchMode) {
super(SettingsActivity.class, initialTouchMode, false);
mFragmentClass = fragmentClass;
}
/**
* Launches the settings activity with the specified fragment.
* @return The activity that just started.
*/
public SettingsActivity startSettingsActivity() {
Context context = InstrumentationRegistry.getTargetContext();
Intent intent = SettingsLauncher.getInstance().createIntentForSettingsPage(
context, mFragmentClass.getName());
SettingsActivity activity = super.launchActivity(intent);
Assert.assertNotNull(activity);
return activity;
}
/**
* @return The fragment attached to the SettingsActivity.
*/
public T getFragment() {
Assert.assertNotNull("#getFragment is called before activity launch.", getActivity());
Fragment fragment = getActivity().getMainFragment();
Assert.assertNotNull(fragment);
return (T) fragment;
}
}
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