Commit 15b7efc5 authored by Ted Choc's avatar Ted Choc Committed by Chromium LUCI CQ

Convert bulk of components/browser_ui/widget tests to Batched mode.

(Excludes the render tests)

Performance changes (from try-bot and previous try-bot run)
RadioButtonWithEditTextTest: 10599 -> 1048
PromoCardCoordinatorTest: 8515 -> 60
MoreProgressButtonTest: 43132 -> 166
RadioButtonWithDescriptionLayoutTest: 13768 -> 8566
DualControlLayoutTest: 3934 -> 68
PromoCardImpressionTest: 6691 -> 148
WrappingLayoutTest: 38598 -> 422
ViewHighlighterTest: 2778 -> 11
PromoDialogTest: 11988 -> 234
RoundedIconGeneratorTest: 2806 -> 1792
RadioButtonLayoutTest: 4347 -> 61
RadioButtonWithDescriptionAndAuxButtonTest: 5689 -> 280
ScrimTest: 25664 -> 778

BUG=989569

Change-Id: Ib1bea431ce31ddfa4b2be86bbb1baff1cafb90e2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2595915Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Commit-Queue: Theresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#837789}
parent da19aa2d
......@@ -23,6 +23,7 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.UiThreadTest;
import org.chromium.base.test.util.Batch;
import org.chromium.components.browser_ui.widget.DualControlLayout.DualControlLayoutAlignment;
import org.chromium.components.browser_ui.widget.test.R;
......@@ -30,6 +31,7 @@ import org.chromium.components.browser_ui.widget.test.R;
* Tests for DualControlLayout.
*/
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class DualControlLayoutTest {
private static final int PRIMARY_HEIGHT = 16;
private static final int SECONDARY_HEIGHT = 8;
......
......@@ -17,54 +17,70 @@ import androidx.test.filters.MediumTest;
import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseActivityTestRule;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.Feature;
import org.chromium.components.browser_ui.widget.MoreProgressButton.State;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.ui.test.util.DummyUiActivityTestCase;
import org.chromium.ui.test.util.DisableAnimationsTestRule;
import org.chromium.ui.test.util.DummyUiActivity;
/**
* Tests for {@link MoreProgressButton}.
*/
@RunWith(BaseJUnit4ClassRunner.class)
public class MoreProgressButtonTest extends DummyUiActivityTestCase {
private FrameLayout mContentView;
@Batch(Batch.UNIT_TESTS)
public class MoreProgressButtonTest {
@ClassRule
public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
@ClassRule
public static BaseActivityTestRule<DummyUiActivity> activityTestRule =
new BaseActivityTestRule<>(DummyUiActivity.class);
private static Activity sActivity;
private static FrameLayout sContentView;
private MoreProgressButton mMoreProgressButton;
private TextView mCustomTextView;
private Activity mActivity;
private int mIdTextView;
private int mIdMoreProgressButton;
@Override
public void setUpTest() throws Exception {
super.setUpTest();
mActivity = getActivity();
setUpViews();
@BeforeClass
public static void setupSuite() {
activityTestRule.launchActivity(null);
TestThreadUtils.runOnUiThreadBlocking(() -> {
sActivity = activityTestRule.getActivity();
sContentView = new FrameLayout(sActivity);
sActivity.setContentView(sContentView);
});
}
private void setUpViews() {
@Before
public void setupTest() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
mContentView = new FrameLayout(mActivity);
mActivity.setContentView(mContentView);
sContentView.removeAllViews();
mIdTextView = View.generateViewId();
mIdMoreProgressButton = View.generateViewId();
mMoreProgressButton =
(MoreProgressButton) LayoutInflater.from(mContentView.getContext())
(MoreProgressButton) LayoutInflater.from(sContentView.getContext())
.inflate(R.layout.more_progress_button, null);
mMoreProgressButton.setId(mIdMoreProgressButton);
mContentView.addView(mMoreProgressButton, MATCH_PARENT, WRAP_CONTENT);
sContentView.addView(mMoreProgressButton, MATCH_PARENT, WRAP_CONTENT);
mCustomTextView = new TextView(mActivity);
mCustomTextView = new TextView(sActivity);
mCustomTextView.setText("");
mCustomTextView.setId(mIdTextView);
mContentView.addView(mCustomTextView, MATCH_PARENT, WRAP_CONTENT);
sContentView.addView(mCustomTextView, MATCH_PARENT, WRAP_CONTENT);
});
}
......@@ -79,9 +95,9 @@ public class MoreProgressButtonTest extends DummyUiActivityTestCase {
// Verify the default status for the views are correct
TestThreadUtils.runOnUiThreadBlocking(() -> {
Assert.assertFalse("Button should not be shown after init",
mActivity.findViewById(R.id.action_button).isShown());
sActivity.findViewById(R.id.action_button).isShown());
Assert.assertFalse("Spinner should not be shown after init",
mActivity.findViewById(R.id.progress_spinner).isShown());
sActivity.findViewById(R.id.progress_spinner).isShown());
});
}
......@@ -93,9 +109,9 @@ public class MoreProgressButtonTest extends DummyUiActivityTestCase {
mMoreProgressButton.setState(State.BUTTON);
Assert.assertTrue("Button should be shown with State.BUTTON",
mActivity.findViewById(R.id.action_button).isShown());
sActivity.findViewById(R.id.action_button).isShown());
Assert.assertFalse("Spinner should not be shown with State.BUTTON",
mActivity.findViewById(R.id.progress_spinner).isShown());
sActivity.findViewById(R.id.progress_spinner).isShown());
});
}
......@@ -107,9 +123,9 @@ public class MoreProgressButtonTest extends DummyUiActivityTestCase {
mMoreProgressButton.setState(State.LOADING);
Assert.assertFalse("Button should not be shown with State.LOADING",
mActivity.findViewById(R.id.action_button).isShown());
sActivity.findViewById(R.id.action_button).isShown());
Assert.assertTrue("Spinner should be shown with State.LOADING",
mActivity.findViewById(R.id.progress_spinner).isShown());
sActivity.findViewById(R.id.progress_spinner).isShown());
});
}
......@@ -123,9 +139,9 @@ public class MoreProgressButtonTest extends DummyUiActivityTestCase {
mMoreProgressButton.setState(State.HIDDEN);
Assert.assertFalse("Button should not be shown with State.HIDDEN",
mActivity.findViewById(R.id.action_button).isShown());
sActivity.findViewById(R.id.action_button).isShown());
Assert.assertFalse("Spinner should not be shown with State.HIDDEN",
mActivity.findViewById(R.id.progress_spinner).isShown());
sActivity.findViewById(R.id.progress_spinner).isShown());
});
}
......@@ -134,15 +150,15 @@ public class MoreProgressButtonTest extends DummyUiActivityTestCase {
@Feature({"MoreProgressButton"})
public void testStateAfterBindAction() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
boolean buttonShownBefore = mActivity.findViewById(R.id.action_button).isShown();
boolean spinnerShownBefore = mActivity.findViewById(R.id.progress_spinner).isShown();
boolean buttonShownBefore = sActivity.findViewById(R.id.action_button).isShown();
boolean spinnerShownBefore = sActivity.findViewById(R.id.progress_spinner).isShown();
mMoreProgressButton.setOnClickRunnable(() -> changeTextView(""));
Assert.assertEquals("Button should stays same visibility before/after bind action",
buttonShownBefore, mActivity.findViewById(R.id.action_button).isShown());
buttonShownBefore, sActivity.findViewById(R.id.action_button).isShown());
Assert.assertEquals("spinner should stays same visibility before/after bind action",
spinnerShownBefore, mActivity.findViewById(R.id.progress_spinner).isShown());
spinnerShownBefore, sActivity.findViewById(R.id.progress_spinner).isShown());
});
}
......@@ -154,20 +170,20 @@ public class MoreProgressButtonTest extends DummyUiActivityTestCase {
TestThreadUtils.runOnUiThreadBlocking(() -> {
String textViewStr =
((TextView) mActivity.findViewById(mIdTextView)).getText().toString();
((TextView) sActivity.findViewById(mIdTextView)).getText().toString();
Assert.assertNotEquals(str, textViewStr);
mMoreProgressButton.setOnClickRunnable(() -> changeTextView(str));
mMoreProgressButton.setState(State.BUTTON);
Assert.assertTrue(mActivity.findViewById(R.id.action_button).isClickable());
Assert.assertTrue(sActivity.findViewById(R.id.action_button).isClickable());
mActivity.findViewById(R.id.action_button).performClick();
sActivity.findViewById(R.id.action_button).performClick();
Assert.assertFalse(mActivity.findViewById(R.id.action_button).isShown());
Assert.assertTrue(mActivity.findViewById(R.id.progress_spinner).isShown());
Assert.assertFalse(sActivity.findViewById(R.id.action_button).isShown());
Assert.assertTrue(sActivity.findViewById(R.id.progress_spinner).isShown());
textViewStr = ((TextView) mActivity.findViewById(mIdTextView)).getText().toString();
textViewStr = ((TextView) sActivity.findViewById(mIdTextView)).getText().toString();
Assert.assertEquals(str, textViewStr);
});
}
......
......@@ -18,15 +18,20 @@ import androidx.core.view.ViewCompat;
import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseActivityTestRule;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.components.browser_ui.widget.PromoDialog.DialogParams;
import org.chromium.components.browser_ui.widget.test.R;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.ui.test.util.DummyUiActivityTestCase;
import org.chromium.ui.test.util.DisableAnimationsTestRule;
import org.chromium.ui.test.util.DummyUiActivity;
import java.util.concurrent.Callable;
......@@ -34,7 +39,14 @@ import java.util.concurrent.Callable;
* Tests for the PromoDialog and PromoDialogLayout.
*/
@RunWith(BaseJUnit4ClassRunner.class)
public class PromoDialogTest extends DummyUiActivityTestCase {
@Batch(Batch.UNIT_TESTS)
public class PromoDialogTest {
@ClassRule
public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
@ClassRule
public static BaseActivityTestRule<DummyUiActivity> activityTestRule =
new BaseActivityTestRule<>(DummyUiActivity.class);
/**
* Creates a PromoDialog. Doesn't call {@link PromoDialog#show} because there is no Window to
* attach them to, but it does create them and inflate the layouts.
......@@ -100,6 +112,15 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
}
}
private static Activity sActivity;
@BeforeClass
public static void setupSuite() {
activityTestRule.launchActivity(null);
TestThreadUtils.runOnUiThreadBlocking(
() -> { sActivity = activityTestRule.getActivity(); });
}
@Test
@SmallTest
public void testBasic_Visibility() throws Exception {
......@@ -122,7 +143,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
/** Confirm that PromoDialogs are constructed with all the elements expected. */
private void checkDialogControlVisibility(final DialogParams dialogParams) throws Exception {
PromoDialogWrapper wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
PromoDialogWrapper wrapper = new PromoDialogWrapper(sActivity, dialogParams);
PromoDialogLayout promoDialogLayout = wrapper.dialogLayout;
View illustration = promoDialogLayout.findViewById(R.id.illustration);
......@@ -162,7 +183,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.subheaderCharSequence = subheaderCharSequenceTestValue;
dialogParams.primaryButtonStringResource = R.string.promo_dialog_test_primary_button;
PromoDialogWrapper wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
PromoDialogWrapper wrapper = new PromoDialogWrapper(sActivity, dialogParams);
PromoDialogLayout promoDialogLayout = wrapper.dialogLayout;
TextView subheader = (TextView) promoDialogLayout.findViewById(R.id.subheader);
checkControlVisibility(subheader, true);
......@@ -175,7 +196,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.subheaderStringResource = R.string.promo_dialog_test_subheader;
dialogParams.primaryButtonStringResource = R.string.promo_dialog_test_primary_button;
wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
wrapper = new PromoDialogWrapper(sActivity, dialogParams);
promoDialogLayout = wrapper.dialogLayout;
subheader = promoDialogLayout.findViewById(R.id.subheader);
Assert.assertEquals(subheader.getText(), subheaderCharSequenceTestValue);
......@@ -190,7 +211,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.subheaderIsLink = true;
dialogParams.primaryButtonStringResource = R.string.promo_dialog_test_primary_button;
wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
wrapper = new PromoDialogWrapper(sActivity, dialogParams);
promoDialogLayout = wrapper.dialogLayout;
subheader = promoDialogLayout.findViewById(R.id.subheader);
Assert.assertTrue(subheader.getMovementMethod() instanceof LinkMovementMethod);
......@@ -207,7 +228,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.secondaryButtonStringResource = R.string.promo_dialog_test_secondary_button;
dialogParams.footerStringResource = R.string.promo_dialog_test_footer;
PromoDialogWrapper wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
PromoDialogWrapper wrapper = new PromoDialogWrapper(sActivity, dialogParams);
final PromoDialogLayout promoDialogLayout = wrapper.dialogLayout;
LinearLayout flippableLayout =
(LinearLayout) promoDialogLayout.findViewById(R.id.full_promo_content);
......@@ -237,7 +258,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.primaryButtonStringResource = R.string.promo_dialog_test_primary_button;
dialogParams.secondaryButtonStringResource = R.string.promo_dialog_test_secondary_button;
PromoDialogWrapper wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
PromoDialogWrapper wrapper = new PromoDialogWrapper(sActivity, dialogParams);
final PromoDialogLayout promoDialogLayout = wrapper.dialogLayout;
// Nothing should have been clicked yet.
......@@ -266,7 +287,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.headerStringResource = R.string.promo_dialog_test_header;
dialogParams.primaryButtonStringResource = R.string.promo_dialog_test_primary_button;
PromoDialogWrapper wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
PromoDialogWrapper wrapper = new PromoDialogWrapper(sActivity, dialogParams);
PromoDialogLayout promoDialogLayout = wrapper.dialogLayout;
ViewGroup scrollableLayout =
(ViewGroup) promoDialogLayout.findViewById(R.id.scrollable_promo_content);
......@@ -285,7 +306,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.headerStringResource = R.string.promo_dialog_test_header;
dialogParams.primaryButtonStringResource = R.string.promo_dialog_test_primary_button;
PromoDialogWrapper wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
PromoDialogWrapper wrapper = new PromoDialogWrapper(sActivity, dialogParams);
PromoDialogLayout promoDialogLayout = wrapper.dialogLayout;
ViewGroup scrollableLayout =
(ViewGroup) promoDialogLayout.findViewById(R.id.scrollable_promo_content);
......@@ -304,7 +325,7 @@ public class PromoDialogTest extends DummyUiActivityTestCase {
dialogParams.headerStringResource = R.string.promo_dialog_test_header;
dialogParams.primaryButtonStringResource = R.string.promo_dialog_test_primary_button;
PromoDialogWrapper wrapper = new PromoDialogWrapper(getActivity(), dialogParams);
PromoDialogWrapper wrapper = new PromoDialogWrapper(sActivity, dialogParams);
PromoDialogLayout promoDialogLayout = wrapper.dialogLayout;
// Add a dummy control view to ensure the scrolling container has some content.
......
......@@ -19,6 +19,7 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.UiThreadTest;
import org.chromium.base.test.util.Batch;
import java.util.ArrayList;
import java.util.Arrays;
......@@ -28,6 +29,7 @@ import java.util.List;
* Tests for {@link RadioButtonLayout}.
*/
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class RadioButtonLayoutTest {
private Context mContext;
......
......@@ -4,27 +4,44 @@
package org.chromium.components.browser_ui.widget;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseActivityTestRule;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.components.browser_ui.widget.test.R;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.ui.test.util.DummyUiActivityTestCase;
import org.chromium.ui.test.util.DisableAnimationsTestRule;
import org.chromium.ui.test.util.DummyUiActivity;
/**
* Unit tests for {@link RadioButtonWithDescriptionAndAuxButton}.
*/
@RunWith(BaseJUnit4ClassRunner.class)
public class RadioButtonWithDescriptionAndAuxButtonTest extends DummyUiActivityTestCase {
@Batch(Batch.UNIT_TESTS)
public class RadioButtonWithDescriptionAndAuxButtonTest {
@ClassRule
public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
@ClassRule
public static BaseActivityTestRule<DummyUiActivity> activityTestRule =
new BaseActivityTestRule<>(DummyUiActivity.class);
private class AuxButtonClickedListener
implements RadioButtonWithDescriptionAndAuxButton.OnAuxButtonClickedListener {
private CallbackHelper mCallbackHelper = new CallbackHelper();
......@@ -47,25 +64,30 @@ public class RadioButtonWithDescriptionAndAuxButtonTest extends DummyUiActivityT
}
}
private AuxButtonClickedListener mListener;
private Activity mActivity;
private static Activity sActivity;
private static FrameLayout sContentView;
private AuxButtonClickedListener mListener;
private RadioButtonWithDescriptionAndAuxButton mRadioButton;
@Override
public void setUpTest() throws Exception {
super.setUpTest();
mActivity = getActivity();
mListener = new AuxButtonClickedListener();
setupViewsForTest();
@BeforeClass
public static void setupSuite() {
activityTestRule.launchActivity(null);
TestThreadUtils.runOnUiThreadBlocking(() -> {
sActivity = activityTestRule.getActivity();
sContentView = new FrameLayout(sActivity);
sActivity.setContentView(sContentView);
});
}
private void setupViewsForTest() {
@Before
public void setupTest() {
mListener = new AuxButtonClickedListener();
TestThreadUtils.runOnUiThreadBlocking(() -> {
View layout = LayoutInflater.from(mActivity).inflate(
sContentView.removeAllViews();
View layout = LayoutInflater.from(sActivity).inflate(
R.layout.radio_button_with_description_and_aux_button_test, null, false);
mActivity.setContentView(layout);
sContentView.addView(layout, MATCH_PARENT, WRAP_CONTENT);
mRadioButton = layout.findViewById(R.id.test_radio_button);
Assert.assertNotNull(mRadioButton);
......
......@@ -27,6 +27,7 @@ import org.mockito.Mockito;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.UiThreadTest;
import org.chromium.base.test.util.Batch;
import org.chromium.components.browser_ui.widget.test.R;
import java.util.Arrays;
......@@ -36,6 +37,7 @@ import java.util.List;
* Tests for {@link RadioButtonLayout}.
*/
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class RadioButtonWithDescriptionLayoutTest {
private static final String ZERO_MARGIN_ASSERT_MESSAGE =
"The last item should have a zero margin";
......
......@@ -4,6 +4,9 @@
package org.chromium.components.browser_ui.widget;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import android.app.Activity;
import android.support.test.InstrumentationRegistry;
import android.text.InputType;
......@@ -13,6 +16,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.RadioButton;
import android.widget.TextView;
......@@ -20,23 +24,36 @@ import androidx.test.filters.SmallTest;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseActivityTestRule;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.Criteria;
import org.chromium.base.test.util.CriteriaHelper;
import org.chromium.components.browser_ui.widget.test.R;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.content_public.browser.test.util.TouchCommon;
import org.chromium.ui.KeyboardVisibilityDelegate;
import org.chromium.ui.test.util.DummyUiActivityTestCase;
import org.chromium.ui.test.util.DisableAnimationsTestRule;
import org.chromium.ui.test.util.DummyUiActivity;
/**
* Unit tests for {@link RadioButtonWithEditText}.
*/
@RunWith(BaseJUnit4ClassRunner.class)
public class RadioButtonWithEditTextTest extends DummyUiActivityTestCase {
@Batch(Batch.UNIT_TESTS)
public class RadioButtonWithEditTextTest {
@ClassRule
public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
@ClassRule
public static BaseActivityTestRule<DummyUiActivity> activityTestRule =
new BaseActivityTestRule<>(DummyUiActivity.class);
private class TestListener implements RadioButtonWithEditText.OnTextChangeListener {
private CharSequence mCurrentText;
private int mNumberOfTimesTextChanged;
......@@ -71,34 +88,34 @@ public class RadioButtonWithEditTextTest extends DummyUiActivityTestCase {
}
}
private TestListener mListener;
private Activity mActivity;
private static Activity sActivity;
private static FrameLayout sContentView;
private TestListener mListener;
private RadioButtonWithEditText mRadioButtonWithEditText;
private RadioButton mButton;
private EditText mEditText;
private Button mDummyButton;
@Override
public void beforeActivityLaunch() {
@BeforeClass
public static void setupSuite() {
InstrumentationRegistry.getInstrumentation().setInTouchMode(false);
activityTestRule.launchActivity(null);
TestThreadUtils.runOnUiThreadBlocking(() -> {
sActivity = activityTestRule.getActivity();
sContentView = new FrameLayout(sActivity);
sActivity.setContentView(sContentView);
});
}
@Override
public void setUpTest() throws Exception {
super.setUpTest();
mActivity = getActivity();
@Before
public void setupTest() {
mListener = new TestListener();
setupViewsForTest();
}
private void setupViewsForTest() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
View layout = LayoutInflater.from(mActivity).inflate(
sContentView.removeAllViews();
View layout = LayoutInflater.from(sActivity).inflate(
R.layout.radio_button_with_edit_text_test, null, false);
mActivity.setContentView(layout);
sContentView.addView(layout, MATCH_PARENT, WRAP_CONTENT);
mRadioButtonWithEditText =
(RadioButtonWithEditText) layout.findViewById(R.id.test_radio_button);
......@@ -126,19 +143,19 @@ public class RadioButtonWithEditTextTest extends DummyUiActivityTestCase {
Assert.assertEquals("EditText input type is different than attr setting.", textUriInputType,
mEditText.getInputType());
Assert.assertEquals("EditText input hint is different than attr setting.",
mActivity.getResources().getString(R.string.test_uri), mEditText.getHint());
sActivity.getResources().getString(R.string.test_uri), mEditText.getHint());
TextView description = mActivity.findViewById(R.id.description);
TextView description = sActivity.findViewById(R.id.description);
Assert.assertNotNull("Description should not be null", description);
Assert.assertEquals("Description is different than attr setting.",
mActivity.getResources().getString(R.string.test_string), description.getText());
sActivity.getResources().getString(R.string.test_string), description.getText());
}
@Test
@SmallTest
public void testSetHint() {
final CharSequence hintMsg = "Text hint";
final String resourceString = mActivity.getResources().getString(R.string.test_string);
final String resourceString = sActivity.getResources().getString(R.string.test_string);
TestThreadUtils.runOnUiThreadBlocking(() -> {
mRadioButtonWithEditText.setHint(hintMsg);
Assert.assertEquals("Hint message set from string is different from test setting",
......@@ -276,7 +293,7 @@ public class RadioButtonWithEditTextTest extends DummyUiActivityTestCase {
CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat("Keyboard visibility does not consist with test setting.",
KeyboardVisibilityDelegate.getInstance().isKeyboardShowing(
mActivity, mEditText),
sActivity, mEditText),
Matchers.is(isShowing));
});
}
......
......@@ -11,25 +11,27 @@ import android.support.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.Feature;
/**
* Unit tests for RoundedIconGenerator.
*/
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.PER_CLASS)
public class RoundedIconGeneratorTest {
private Context mContext;
private static Context sContext;
@Before
public void setUp() {
mContext = InstrumentationRegistry.getTargetContext();
@BeforeClass
public static void setUp() {
sContext = InstrumentationRegistry.getTargetContext();
LibraryLoader.getInstance().setLibraryProcessType(LibraryProcessType.PROCESS_BROWSER);
LibraryLoader.getInstance().ensureInitialized();
}
......@@ -82,7 +84,7 @@ public class RoundedIconGeneratorTest {
final int iconTextSizeDp = 12;
int iconColor = Color.GRAY;
RoundedIconGenerator generator = new RoundedIconGenerator(mContext.getResources(),
RoundedIconGenerator generator = new RoundedIconGenerator(sContext.getResources(),
iconSizeDp, iconSizeDp, iconCornerRadiusDp, iconColor, iconTextSizeDp);
Assert.assertTrue(generator.generateIconForText("") != null);
......
......@@ -22,12 +22,14 @@ import org.chromium.base.test.params.ParameterAnnotations.UseRunnerDelegate;
import org.chromium.base.test.params.ParameterProvider;
import org.chromium.base.test.params.ParameterSet;
import org.chromium.base.test.params.ParameterizedRunner;
import org.chromium.base.test.util.Batch;
import java.util.Arrays;
import java.util.List;
/** Tests for the {@link WrappingLayout} class. */
@RunWith(ParameterizedRunner.class)
@Batch(Batch.UNIT_TESTS)
@UseRunnerDelegate(BaseJUnit4RunnerDelegate.class)
public class WrappingLayoutTest {
/**
......
......@@ -19,11 +19,13 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
/**
* Tests the utility methods for highlighting of a view.
*/
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class ViewHighlighterTest {
private Context mContext;
......
......@@ -12,12 +12,14 @@ import android.view.View;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.test.filters.SmallTest;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.components.browser_ui.widget.promo.PromoCardCoordinator.LayoutStyle;
import org.chromium.components.browser_ui.widget.test.R;
......@@ -28,6 +30,7 @@ import org.chromium.ui.modelutil.PropertyModel;
* Basic test for creating, using the promo component with {@link PromoCardCoordinator}.
*/
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class PromoCardCoordinatorTest {
private Context mContext;
private PropertyModel mModel;
......@@ -40,6 +43,11 @@ public class PromoCardCoordinatorTest {
mModel = new PropertyModel.Builder(PromoCardProperties.ALL_KEYS).build();
}
@After
public void tearDown() {
mPromoCardCoordinator.destroy();
}
private void setupCoordinator(@LayoutStyle int layoutStyle) {
mPromoCardCoordinator =
new PromoCardCoordinator(mContext, mModel, "test-feature", layoutStyle);
......
......@@ -11,15 +11,22 @@ import android.widget.FrameLayout;
import androidx.test.filters.SmallTest;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseActivityTestRule;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivityTestCase;
import org.chromium.ui.test.util.DisableAnimationsTestRule;
import org.chromium.ui.test.util.DummyUiActivity;
import java.util.concurrent.TimeoutException;
......@@ -28,14 +35,42 @@ import java.util.concurrent.TimeoutException;
* TODO(wenyufu): Add the test when the primary button is hidden initially.
*/
@RunWith(BaseJUnit4ClassRunner.class)
public class PromoCardImpressionTest extends DummyUiActivityTestCase {
@Batch(Batch.UNIT_TESTS)
public class PromoCardImpressionTest {
@ClassRule
public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
@ClassRule
public static BaseActivityTestRule<DummyUiActivity> activityTestRule =
new BaseActivityTestRule<>(DummyUiActivity.class);
private static Activity sActivity;
private static FrameLayout sContent;
private PropertyModel mModel;
private PromoCardCoordinator mCoordinator;
private FrameLayout mContent;
private final CallbackHelper mPromoSeenCallback = new CallbackHelper();
@BeforeClass
public static void setupSuite() {
activityTestRule.launchActivity(null);
TestThreadUtils.runOnUiThreadBlocking(() -> {
sActivity = activityTestRule.getActivity();
sContent = new FrameLayout(sActivity);
sActivity.setContentView(sContent);
});
}
@Before
public void setupTest() {
TestThreadUtils.runOnUiThreadBlocking(() -> { sContent.removeAllViews(); });
}
@After
public void tearDown() {
mCoordinator.destroy();
}
private void setUpPromoCard(boolean trackPrimary, boolean hidePromo) {
mModel = new PropertyModel.Builder(PromoCardProperties.ALL_KEYS)
.with(PromoCardProperties.IMPRESSION_SEEN_CALLBACK,
......@@ -47,18 +82,12 @@ public class PromoCardImpressionTest extends DummyUiActivityTestCase {
.with(PromoCardProperties.HAS_SECONDARY_BUTTON, false)
.build();
Activity activity = getActivity();
mCoordinator = new PromoCardCoordinator(activity, mModel, "impression-test");
mCoordinator = new PromoCardCoordinator(sActivity, mModel, "impression-test");
View promoView = mCoordinator.getView();
TestThreadUtils.runOnUiThreadBlocking(() -> {
if (hidePromo) promoView.setVisibility(View.INVISIBLE);
// Set the content and add the promo card into the window
mContent = new FrameLayout(activity);
activity.setContentView(mContent);
mContent.addView(promoView,
sContent.addView(promoView,
new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
});
}
......
......@@ -11,6 +11,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.GestureDetector;
......@@ -23,29 +24,44 @@ import androidx.annotation.ColorInt;
import androidx.test.filters.SmallTest;
import org.hamcrest.Matchers;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.Callback;
import org.chromium.base.MathUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.BaseActivityTestRule;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.Criteria;
import org.chromium.base.test.util.CriteriaHelper;
import org.chromium.base.test.util.Feature;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.test.util.DummyUiActivityTestCase;
import org.chromium.ui.test.util.DisableAnimationsTestRule;
import org.chromium.ui.test.util.DummyUiActivity;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
/** This class tests the behavior of the scrim component. */
@RunWith(BaseJUnit4ClassRunner.class)
public class ScrimTest extends DummyUiActivityTestCase {
@Batch(Batch.UNIT_TESTS)
public class ScrimTest {
@ClassRule
public static DisableAnimationsTestRule disableAnimationsRule = new DisableAnimationsTestRule();
@ClassRule
public static BaseActivityTestRule<DummyUiActivity> activityTestRule =
new BaseActivityTestRule<>(DummyUiActivity.class);
private static Activity sActivity;
private static FrameLayout sParent;
private ScrimCoordinator mScrimCoordinator;
private FrameLayout mParent;
private View mAnchorView;
private final CallbackHelper mStatusBarCallbackHelper = new CallbackHelper();
......@@ -72,19 +88,25 @@ public class ScrimTest extends DummyUiActivityTestCase {
private GestureDetector mCustomGestureDetector;
private CallbackHelper mDelegatedEventHelper;
@BeforeClass
public static void setupSuite() {
activityTestRule.launchActivity(null);
TestThreadUtils.runOnUiThreadBlocking(() -> {
sActivity = activityTestRule.getActivity();
sParent = new FrameLayout(sActivity);
sActivity.setContentView(sParent);
});
}
@Before
public void setUp() throws TimeoutException {
ThreadUtils.runOnUiThreadBlocking(() -> {
mParent = new FrameLayout(getActivity());
getActivity().setContentView(mParent);
mParent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
mParent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
public void setupTest() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
sParent.removeAllViews();
mAnchorView = new View(getActivity());
mParent.addView(mAnchorView);
mAnchorView = new View(sActivity);
sParent.addView(mAnchorView);
mScrimCoordinator =
new ScrimCoordinator(getActivity(), mScrimDelegate, mParent, Color.RED);
mScrimCoordinator = new ScrimCoordinator(sActivity, mScrimDelegate, sParent, Color.RED);
mDelegatedEventHelper = new CallbackHelper();
mCustomGestureDetector =
......@@ -98,6 +120,11 @@ public class ScrimTest extends DummyUiActivityTestCase {
});
}
@After
public void tearDownTest() {
TestThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.destroy());
}
@Test
@SmallTest
@Feature({"Scrim"})
......@@ -108,7 +135,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
mScrimCoordinator.getViewForTesting().getAlpha(), MathUtils.EPSILON);
int callCount = mVisibilityChangeCallbackHelper.getCallCount();
ThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.hideScrim(false));
TestThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.hideScrim(false));
mVisibilityChangeCallbackHelper.waitForCallback(callCount, 1);
assertScrimVisibility(false);
}
......@@ -130,7 +157,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
assertScrimColor(Color.GREEN);
ThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.hideScrim(false));
TestThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.hideScrim(false));
CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat("Scrim should be null after being hidden.",
......@@ -145,9 +172,9 @@ public class ScrimTest extends DummyUiActivityTestCase {
showScrim(buildModel(true, false, false, Color.RED), false);
View scrimView = mScrimCoordinator.getViewForTesting();
assertEquals("The parent view of the scrim is incorrect.", mParent, scrimView.getParent());
assertEquals("The parent view of the scrim is incorrect.", sParent, scrimView.getParent());
assertTrue("The scrim should be positioned behind the anchor.",
mParent.indexOfChild(scrimView) < mParent.indexOfChild(mAnchorView));
sParent.indexOfChild(scrimView) < sParent.indexOfChild(mAnchorView));
}
@Test
......@@ -157,9 +184,9 @@ public class ScrimTest extends DummyUiActivityTestCase {
showScrim(buildModel(true, false, true, Color.RED), false);
View scrimView = mScrimCoordinator.getViewForTesting();
assertEquals("The parent view of the scrim is incorrect.", mParent, scrimView.getParent());
assertEquals("The parent view of the scrim is incorrect.", sParent, scrimView.getParent());
assertTrue("The scrim should be positioned in front of the anchor.",
mParent.indexOfChild(scrimView) > mParent.indexOfChild(mAnchorView));
sParent.indexOfChild(scrimView) > sParent.indexOfChild(mAnchorView));
}
@Test
......@@ -170,7 +197,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
int callCount = mScrimClickCallbackHelper.getCallCount();
ScrimView scrimView = mScrimCoordinator.getViewForTesting();
ThreadUtils.runOnUiThreadBlocking(() -> scrimView.callOnClick());
TestThreadUtils.runOnUiThreadBlocking(() -> scrimView.callOnClick());
mScrimClickCallbackHelper.waitForCallback(callCount, 1);
}
......@@ -196,9 +223,10 @@ public class ScrimTest extends DummyUiActivityTestCase {
int gestureCallCount = mDelegatedEventHelper.getCallCount();
int callCount = mScrimClickCallbackHelper.getCallCount();
ScrimView scrimView = mScrimCoordinator.getViewForTesting();
ThreadUtils.runOnUiThreadBlocking(
() -> scrimView.dispatchTouchEvent(
MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0)));
TestThreadUtils.runOnUiThreadBlocking(
()
-> scrimView.dispatchTouchEvent(
MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0)));
mDelegatedEventHelper.waitForCallback(gestureCallCount, 1);
}
......@@ -216,7 +244,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
public void testAnimation_canceled() throws TimeoutException {
showScrim(buildModel(true, false, true, Color.RED), true);
ThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.setAlpha(0.5f));
TestThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.setAlpha(0.5f));
assertFalse("Animations should not be running.", mScrimCoordinator.areAnimationsRunning());
}
......@@ -237,7 +265,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
int callCount = mStatusBarCallbackHelper.getCallCount();
showScrim(buildModel(true, false, true, Color.RED), false);
ThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.setAlpha(0.5f));
TestThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.setAlpha(0.5f));
assertEquals("Scrim alpha should be 0.5f.", 0.5f,
mScrimCoordinator.getViewForTesting().getAlpha(), MathUtils.EPSILON);
......@@ -310,7 +338,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
assertEquals("Scrim should be using a custom background.", customDrawable,
mScrimCoordinator.getViewForTesting().getBackground());
ThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.hideScrim(false));
TestThreadUtils.runOnUiThreadBlocking(() -> mScrimCoordinator.hideScrim(false));
CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat("Scrim should be null after being hidden.",
......@@ -397,7 +425,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
*/
private void showScrim(PropertyModel model, boolean animate) throws TimeoutException {
int callCount = mVisibilityChangeCallbackHelper.getCallCount();
ThreadUtils.runOnUiThreadBlocking(() -> {
TestThreadUtils.runOnUiThreadBlocking(() -> {
mScrimCoordinator.showScrim(model);
// Animations are disabled for these types of tests, so just make sure the animation was
......@@ -425,7 +453,7 @@ public class ScrimTest extends DummyUiActivityTestCase {
* @param visible Whether the scrim should be visible.
*/
private void assertScrimVisibility(final boolean visible) {
ThreadUtils.runOnUiThreadBlocking(() -> {
TestThreadUtils.runOnUiThreadBlocking(() -> {
if (visible) {
assertEquals("The scrim should be visible.", View.VISIBLE,
mScrimCoordinator.getViewForTesting().getVisibility());
......
......@@ -3,9 +3,10 @@
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto">
<org.chromium.components.browser_ui.widget.RadioButtonWithEditText
......@@ -26,4 +27,4 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/test_string" />
</FrameLayout>
</LinearLayout>
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