[automerge] [DO NOT MERGE] Refactor tests to use best practices for ActivityScenario 2p: f2b99a92d3
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/libs/+/16742226
Change-Id: Idbb78e20fcb2ea4492b5381f589559ac0ecb25a7
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
index 8257cad..01c66f0 100644
--- a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
@@ -33,6 +33,7 @@
import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.assertThat;
+import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
@@ -40,6 +41,7 @@
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static com.android.car.ui.actions.CarUiRecyclerViewActions.scrollToPosition;
import static com.android.car.ui.actions.LowLevelActions.performDrag;
@@ -56,7 +58,6 @@
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.lessThan;
import static org.hamcrest.Matchers.lessThanOrEqualTo;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
@@ -102,7 +103,6 @@
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.LayoutManager;
import androidx.recyclerview.widget.RecyclerView.LayoutParams;
-import androidx.test.core.app.ActivityScenario;
import androidx.test.espresso.IdlingRegistry;
import androidx.test.espresso.IdlingResource;
import androidx.test.ext.junit.rules.ActivityScenarioRule;
@@ -115,11 +115,11 @@
import com.android.car.ui.utils.CarUxRestrictionsUtil;
import org.junit.After;
-import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.mockito.ArgumentCaptor;
import java.util.ArrayList;
import java.util.HashMap;
@@ -127,14 +127,15 @@
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Unit tests for {@link CarUiRecyclerView}.
*/
-@TargetApi(MIN_TARGET_API)
@RunWith(Parameterized.class)
+@TargetApi(MIN_TARGET_API)
public class CarUiRecyclerViewTest {
-
@Parameterized.Parameters
public static Object[] data() {
// It's important to do no plugin first, so that the plugin will
@@ -146,14 +147,6 @@
public ActivityScenarioRule<TestActivity> mActivityRule =
new ActivityScenarioRule<>(TestActivity.class);
- ActivityScenario<TestActivity> mScenario;
-
- private TestActivity mActivity;
- private Context mTestableContext;
- private Resources mTestableResources;
-
-
- private Context mPluginContext;
private final boolean mIsPluginEnabled;
public CarUiRecyclerViewTest(boolean pluginEnabled) {
@@ -161,21 +154,6 @@
mIsPluginEnabled = pluginEnabled;
}
- @Before
- public void setUp() {
- if (mIsPluginEnabled) {
- mPluginContext = PluginFactorySingleton.getPluginContext();
- }
- mScenario = mActivityRule.getScenario();
- mScenario.onActivity(activity -> {
- mActivity = activity;
- mTestableContext = spy(mActivity);
- mTestableResources = spy(mActivity.getResources());
- });
-
- when(mTestableContext.getResources()).thenReturn(mTestableResources);
- }
-
@After
public void tearDown() {
for (IdlingResource idlingResource : IdlingRegistry.getInstance().getResources()) {
@@ -187,11 +165,19 @@
@Test
public void testIsScrollbarPresent_scrollbarDisabled() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn(false).when(testableResources)
+ .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setAdapter(new TestAdapter(100));
});
@@ -201,21 +187,31 @@
@Test
public void testSmallRecyclerView_scrollbarDisabled() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
- anyInt())).thenReturn(0); // Small size
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+ anyInt())).thenReturn(0); // Small size
+
+ // Disable scrollbar
+ doReturn(false).when(testableResources)
+ .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setAdapter(new TestAdapter(100));
});
@@ -225,21 +221,31 @@
@Test
public void testMediumRecyclerView_scrollbarDisabled() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
- anyInt())).thenReturn(1); // Medium size
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+ anyInt())).thenReturn(1); // Medium size
+
+ // Disable scrollbar
+ doReturn(false).when(testableResources)
+ .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setAdapter(new TestAdapter(100));
});
@@ -249,21 +255,31 @@
@Test
public void testLargeRecyclerView_scrollbarDisabled() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
- anyInt())).thenReturn(2); // Large size
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+ anyInt())).thenReturn(2); // Large size
+
+ // Disable scrollbar
+ doReturn(false).when(testableResources)
+ .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setAdapter(new TestAdapter(100));
});
@@ -273,19 +289,19 @@
@Test
public void testPadding() {
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- int padding = 100;
- carUiRecyclerView.setPadding(padding, padding, padding, padding);
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
+ int padding = 100;
+ carUiRecyclerView.setPadding(padding, padding, padding, padding);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setAdapter(new TestAdapter(100));
- });
- assertEquals(padding, carUiRecyclerView.getPaddingLeft());
- assertEquals(padding, carUiRecyclerView.getPaddingRight());
- assertEquals(padding, carUiRecyclerView.getPaddingTop());
- assertEquals(padding, carUiRecyclerView.getPaddingBottom());
+ assertEquals(padding, carUiRecyclerView.getPaddingLeft());
+ assertEquals(padding, carUiRecyclerView.getPaddingRight());
+ assertEquals(padding, carUiRecyclerView.getPaddingTop());
+ assertEquals(padding, carUiRecyclerView.getPaddingBottom());
+ });
}
@Test
@@ -293,28 +309,35 @@
// Ensure the CarUiRecyclerViewLayout constant matches the styleable attribute enum value
assertEquals(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID, 1);
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
-
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
- .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
- .thenReturn(3);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(4);
- container.post(() -> {
- container.addView(carUiRecyclerView.getView());
- carUiRecyclerView.setAdapter(adapter);
- });
- assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
+ .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
+ .thenReturn(3);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
+ container.post(() -> {
+ container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setAdapter(adapter);
+ });
+
+ assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+ });
// Check that all items in the first row are top-aligned.
onView(withText(adapter.getItemText(0))).check(
@@ -342,26 +365,33 @@
// Ensure the CarUiRecyclerViewLayout constant matches the styleable attribute enum value
assertEquals(CarUiRecyclerView.CarUiRecyclerViewLayout.LINEAR, 0);
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
-
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
- .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.LINEAR);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(4);
- container.post(() -> {
- container.addView(carUiRecyclerView.getView());
- carUiRecyclerView.setAdapter(adapter);
- });
- assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
+ .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.LINEAR);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
+ container.post(() -> {
+ container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setAdapter(adapter);
+ });
+
+ assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
+ });
// Check that item views are laid out linearly.
onView(withText(adapter.getItemText(0))).check(
@@ -374,151 +404,192 @@
@Test
public void testStartAtFirstPosition() {
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(100);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
// Check that the first item is completely displayed.
onView(withText(adapter.getItemText(0))).check(matches(isCompletelyDisplayed()));
- assertEquals(0, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(0, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ });
}
@Test
public void testPositionAfterPadding() {
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(100);
int testPosition = 40;
- container.post(() -> {
- container.addView(carUiRecyclerView.getView());
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
+ ViewGroup container = activity.findViewById(R.id.test_container);
+ container.addView(carUiRecyclerView.getView());
carUiRecyclerView.scrollToPosition(testPosition);
});
// Check that the scrolled to item is completely displayed.
onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
- assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
- int padding = 150;
- container.post(() -> carUiRecyclerView.setPadding(padding, padding, padding, padding));
+ int padding = 150;
+ carUiRecyclerView.setPadding(padding, padding, padding, padding);
+ });
// Check that the scrolled to item is completely displayed.
onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
- assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ });
}
@Test
public void testPositionAfterPaddingRelative() {
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(100);
int testPosition = 40;
- container.post(() -> {
- container.addView(carUiRecyclerView.getView());
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
+ ViewGroup container = activity.findViewById(R.id.test_container);
+ container.addView(carUiRecyclerView.getView());
carUiRecyclerView.scrollToPosition(testPosition);
});
// Check that the scrolled to item is completely displayed.
onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
- assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
- int padding = 150;
- container.post(
- () -> carUiRecyclerView.setPaddingRelative(padding, padding, padding, padding));
+ int padding = 150;
+ carUiRecyclerView.setPaddingRelative(padding, padding, padding, padding);
+ });
// Check that the scrolled to item is completely displayed.
onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
- assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+ });
}
@Test
public void testLayoutManagerSetInXml() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
// Inflate activity where a LayoutManger is set for a CarUiRecyclerView through a
// styleable attribute.
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(
- R.layout.car_ui_recycler_view_layout_manager_xml_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_layout_manager_xml_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(3);
- mActivity.runOnUiThread(() -> {
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
setRotaryScrollEnabled(carUiRecyclerView.getView(), /* isVertical= */ true);
carUiRecyclerView.setAdapter(adapter);
carUiRecyclerView.setVisibility(View.VISIBLE);
+
+ assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
});
// Check that items in are displayed.
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
onView(withText(adapter.getItemText(1))).check(matches(isDisplayed()));
onView(withText(adapter.getItemText(2))).check(matches(isDisplayed()));
-
- assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
}
@Test
public void testSetLayoutManager_shouldUpdateItemDecorations() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
-
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getBoolean(eq(R.styleable.CarUiRecyclerView_enableDivider), anyBoolean()))
- .thenReturn(true);
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
- .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
- .thenReturn(3);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(4);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getBoolean(eq(R.styleable.CarUiRecyclerView_enableDivider),
+ anyBoolean()))
+ .thenReturn(true);
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
+ .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
+ .thenReturn(3);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ carUiRecyclerView.setId(listId);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
- assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
- assertTrue(carUiRecyclerView.getItemDecorationAt(0) instanceof GridDividerItemDecoration);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+ assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
+ assertTrue(
+ carUiRecyclerView.getItemDecorationAt(0) instanceof GridDividerItemDecoration);
- mActivity.runOnUiThread(() ->
- carUiRecyclerView.setLayoutStyle(new CarUiLinearLayoutStyle()));
+ carUiRecyclerView.setLayoutStyle(new CarUiLinearLayoutStyle());
+ });
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
- assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
- assertFalse(carUiRecyclerView.getItemDecorationAt(0)
- instanceof GridDividerItemDecoration);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
+ assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
+ assertFalse(carUiRecyclerView.getItemDecorationAt(0)
+ instanceof GridDividerItemDecoration);
+ });
}
@Test
public void testVisibility_goneAtInflationWithChangeToVisible() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(
- R.layout.car_ui_recycler_view_gone_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_gone_test_activity));
onView(withId(R.id.list)).check(matches(not(isDisplayed())));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(3);
- mActivity.runOnUiThread(() -> {
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
carUiRecyclerView.setAdapter(adapter);
carUiRecyclerView.setVisibility(View.VISIBLE);
});
@@ -531,15 +602,15 @@
@Test
public void testVisibility_invisibleAtInflationWithChangeToVisible() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(
- R.layout.car_ui_recycler_view_invisible_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_invisible_test_activity));
onView(withId(R.id.list)).check(matches(not(isDisplayed())));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(3);
- mActivity.runOnUiThread(() -> {
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
carUiRecyclerView.setAdapter(adapter);
carUiRecyclerView.setVisibility(View.VISIBLE);
});
@@ -552,68 +623,93 @@
@Test
public void testFirstItemAtTop_onInitialLoad() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(25);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ activity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ });
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), 0);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), 0);
+ });
}
@Test
public void testPageUpAndDownMoveSameDistance() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace
+ // methods
+ // until LayoutManager's onLayoutComplete is called. In this case waiting until the
+ // first
+ // item of the list is displayed guarantees that OrientationHelper is initialized
+ // properly.
+ int totalSpace = carUiRecyclerView.getHeight()
+ - carUiRecyclerView.getPaddingTop()
+ - carUiRecyclerView.getPaddingBottom();
+ PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(5, totalSpace);
+ carUiRecyclerView.setAdapter(adapter);
- // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace methods
- // until LayoutManager's onLayoutComplete is called. In this case waiting until the first
- // item of the list is displayed guarantees that OrientationHelper is initialized properly.
- int totalSpace = carUiRecyclerView.getHeight()
- - carUiRecyclerView.getPaddingTop()
- - carUiRecyclerView.getPaddingBottom();
- PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(5, totalSpace);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
- onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
+ onView(withText(PerfectFitTestAdapter.getItemText(0))).check(matches(isDisplayed()));
- assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ // Recalculate total space
+ int totalSpace = carUiRecyclerView.getHeight()
+ - carUiRecyclerView.getPaddingTop()
+ - carUiRecyclerView.getPaddingBottom();
+ assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+ });
// Move down one page so there will be sufficient pages for up and downs.
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- int topPosition = carUiRecyclerView.findFirstVisibleItemPosition();
for (int i = 0; i < 3; i++) {
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
}
- assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), topPosition);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ int topPosition = carUiRecyclerView.findFirstVisibleItemPosition();
+ assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), topPosition);
+ });
}
@Test
public void testContinuousScroll() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(50);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
// Press and hold the down button for 2 seconds to scroll the list to bottom.
@@ -621,49 +717,69 @@
onView(isRoot()).perform(waitForView(withText("Sample item #49"), 3000));
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(release());
- assertEquals(carUiRecyclerView.findLastCompletelyVisibleItemPosition(), 49);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ assertEquals(carUiRecyclerView.findLastCompletelyVisibleItemPosition(), 49);
+ });
}
@Test
public void testAlphaJumpToMiddleForThumbWhenTrackClicked() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(50);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- View trackView = mActivity.requireViewById(getId("car_ui_scrollbar_track"));
+ AtomicInteger trackViewHeight = new AtomicInteger();
+ mActivityRule.getScenario().onActivity(activity -> {
+ View trackView = activity.requireViewById(getId("car_ui_scrollbar_track"));
+ trackViewHeight.set(trackView.getHeight());
+ });
+
// scroll to the middle
onView(withId(getId("car_ui_scrollbar_track"))).perform(
- touchDownAndUp(0f, (trackView.getHeight() / 2f)));
+ touchDownAndUp(0f, (trackViewHeight.get() / 2f)));
onView(withText(adapter.getItemText(25))).check(matches(isDisplayed()));
}
@Test
public void testAlphaJumpToEndAndStartForThumbWhenTrackClicked() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(50);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- View trackView = mActivity.requireViewById(getId("car_ui_scrollbar_track"));
- View thumbView = mActivity.requireViewById(getId("car_ui_scrollbar_thumb"));
+ AtomicInteger trackViewHeight = new AtomicInteger();
+ mActivityRule.getScenario().onActivity(activity -> {
+ View trackView = activity.requireViewById(getId("car_ui_scrollbar_track"));
+ trackViewHeight.set(trackView.getHeight());
+ });
+
// scroll to the end
onView(withId(getId("car_ui_scrollbar_track"))).perform(
- touchDownAndUp(0f, trackView.getHeight() - 1));
+ touchDownAndUp(0f, trackViewHeight.get() - 1));
onView(withText(adapter.getItemText(49))).check(matches(isDisplayed()));
// scroll to the start
@@ -674,45 +790,56 @@
@Test
public void testThumbDragToCenter() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
TestAdapter adapter = new TestAdapter(50);
- mActivity.runOnUiThread(() -> {
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- View trackView = mActivity.requireViewById(getId("car_ui_scrollbar_track"));
- View thumbView = mActivity.requireViewById(getId("car_ui_scrollbar_thumb"));
+ AtomicInteger trackViewHeight = new AtomicInteger();
+ AtomicInteger thumbViewHeight = new AtomicInteger();
+ mActivityRule.getScenario().onActivity(activity -> {
+ View trackView = activity.requireViewById(getId("car_ui_scrollbar_track"));
+ View thumbView = activity.requireViewById(getId("car_ui_scrollbar_thumb"));
+
+ trackViewHeight.set(trackView.getHeight());
+ thumbViewHeight.set(thumbView.getHeight());
+ });
+
// if you drag too far in a single step you'll stop selecting the thumb view. Hence, drag
// 5 units at a time for 200 intervals and stop at the center of the track by limitY.
-
onView(withId(getId("car_ui_scrollbar_track"))).perform(
- performDrag(0f, (thumbView.getHeight() / 2f), 0,
+ performDrag(0f, (thumbViewHeight.get() / 2f), 0,
5, 200, Float.MAX_VALUE,
- trackView.getHeight() / 2f));
+ trackViewHeight.get() / 2f));
onView(withText(adapter.getItemText(25))).check(matches(isDisplayed()));
}
@Test
public void testPageUpButtonDisabledAtTop() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- // 50, because needs to be big enough to make sure content is scrollable.
TestAdapter adapter = new TestAdapter(50);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
// Initially page_up button is disabled.
onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(not(isEnabled())));
@@ -731,15 +858,17 @@
public void testPageUpScrollsWithoutSnap() {
CarUiRecyclerView.OnScrollListener scrollListener =
mock(CarUiRecyclerView.OnScrollListener.class);
+ int listId = View.generateViewId();
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(new TestAdapter(100));
- });
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
// Scroll down a few pages so that you can perform page up operations.
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
@@ -747,22 +876,35 @@
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- // Set a mocked scroll listener on the CarUiRecyclerView
- carUiRecyclerView.addOnScrollListener(scrollListener);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ // Set a mocked scroll listener on the CarUiRecyclerView
+ carUiRecyclerView.addOnScrollListener(scrollListener);
+ });
onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
+ ArgumentCaptor<CarUiRecyclerView> captor = ArgumentCaptor.forClass(CarUiRecyclerView.class);
+
// Verify that scroll operation only settles on the destination once. This means a single
// smooth scroll to the destination. If the scroll includes a secondary snap after an
// initial scroll, this callback will have more than one invocation.
- verify(scrollListener, times(1)).onScrollStateChanged(
- carUiRecyclerView, SCROLL_STATE_SETTLING);
+ verify(scrollListener, times(1)).onScrollStateChanged(captor.capture(),
+ eq(SCROLL_STATE_SETTLING));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(carUiRecyclerView, captor.getValue());
+ });
onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
// Make same verification as above for a second page up operation.
verify(scrollListener, times(2)).onScrollStateChanged(
- carUiRecyclerView, SCROLL_STATE_SETTLING);
+ captor.capture(), eq(SCROLL_STATE_SETTLING));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(carUiRecyclerView, captor.getValue());
+ });
}
@Test
@@ -770,39 +912,45 @@
CarUiRecyclerView.OnScrollListener scrollListener =
mock(CarUiRecyclerView.OnScrollListener.class);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(new TestAdapter(100));
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+
+ // Set a mocked scroll listener on the CarUiRecyclerView
+ carUiRecyclerView.addOnScrollListener(scrollListener);
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
-
- // Set a mocked scroll listener on the CarUiRecyclerView
- carUiRecyclerView.addOnScrollListener(scrollListener);
-
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
// Verify that scroll operation only settles on the destination once. This means a single
// smooth scroll to the destination. If the scroll includes a secondary snap after an
// initial scroll, this callback will have more than one invocation.
+ ArgumentCaptor<CarUiRecyclerView> captor = ArgumentCaptor.forClass(CarUiRecyclerView.class);
verify(scrollListener, times(1)).onScrollStateChanged(
- carUiRecyclerView, SCROLL_STATE_SETTLING);
+ captor.capture(), eq(SCROLL_STATE_SETTLING));
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
// Make same verification as above for a second page down operation.
verify(scrollListener, times(2)).onScrollStateChanged(
- carUiRecyclerView, SCROLL_STATE_SETTLING);
+ captor.capture(), eq(SCROLL_STATE_SETTLING));
}
@Test
public void testPageDownScrollsOverLongItem() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
@@ -814,63 +962,83 @@
heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.TALL);
TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- OrientationHelper orientationHelper =
- OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
- int screenHeight = carUiRecyclerView.getTotalSpace();
-
// Scroll to a position where long item is partially visible.
// Scrolling from top, scrollToPosition() aligns the pos-1 item to bottom.
onView(withId(R.id.list)).perform(scrollToPosition(longItemPosition - 1));
// This is needed to make sure scroll is finished before looking for the long item.
onView(withText(adapter.getItemText(longItemPosition - 1))).check(matches(isDisplayed()));
- // Scroll by half the height of the screen so the long item is partially visible.
- mActivity.runOnUiThread(() -> carUiRecyclerView.scrollBy(0, screenHeight / 2));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+
+ // Scroll by half the height of the screen so the long item is partially visible.
+ carUiRecyclerView.scrollBy(0, screenHeight / 2);
+ });
+
onView(withText(adapter.getItemText(longItemPosition))).check(matches(isDisplayed()));
- // Verify long item is partially shown.
- View longItem = getLongItem(carUiRecyclerView);
- assertThat(
- orientationHelper.getDecoratedStart(longItem),
- is(greaterThan(orientationHelper.getStartAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ // Verify long item is partially shown.
+ View longItem = getLongItem(carUiRecyclerView);
+ assertThat(
+ orientationHelper.getDecoratedStart(longItem),
+ is(greaterThan(carUiRecyclerView.getStartAfterPadding())));
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- // Verify long item is snapped to top.
- assertThat(orientationHelper.getDecoratedStart(longItem),
- is(equalTo(orientationHelper.getStartAfterPadding())));
- assertThat(orientationHelper.getDecoratedEnd(longItem),
- is(greaterThan(orientationHelper.getEndAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ // Verify long item is snapped to top.
+ View longItem = getLongItem(carUiRecyclerView);
+ assertThat(orientationHelper.getDecoratedStart(longItem),
+ is(equalTo(carUiRecyclerView.getStartAfterPadding())));
+ assertThat(orientationHelper.getDecoratedEnd(longItem),
+ is(greaterThan(carUiRecyclerView.getEndAfterPadding())));
+ });
- // Set a limit to avoid test stuck in non-moving state.
- while (orientationHelper.getDecoratedEnd(longItem)
- > orientationHelper.getEndAfterPadding()) {
- onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- }
+ onView(withText(adapter.getItemText(longItemPosition))).check(matches(isDisplayed()));
+ onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- // Verify long item end is aligned to bottom.
- assertThat(orientationHelper.getDecoratedEnd(longItem),
- is(equalTo(orientationHelper.getEndAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ View longItem = getLongItem(carUiRecyclerView);
+ // Verify long item end is aligned to bottom.
+ assertThat(orientationHelper.getDecoratedEnd(longItem),
+ is(equalTo(carUiRecyclerView.getEndAfterPadding())));
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
// Verify that the long item is no longer visible; Should be on the next child
- assertThat(
- orientationHelper.getDecoratedStart(longItem),
- is(lessThan(orientationHelper.getStartAfterPadding())));
+ onView(hasDescendant(withText(adapter.getItemText(longItemPosition)))).check(
+ doesNotExistOrIsNotDisplayed());
}
@Test
public void testPageDownScrollsOverLongItemAtTheEnd() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
@@ -882,22 +1050,20 @@
heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.TALL);
TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
// Setting top padding to any number greater than 0.
// Not having padding will make this test pass all the time.
// Also adding bottom padding to make sure the padding
// after the last content is considered in calculations.
carUiRecyclerView.setPadding(0, 1, 0, 1);
carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- OrientationHelper orientationHelper =
- OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
// 20 is just an arbitrary number to make sure we reach the end of the recyclerview.
for (int i = 0; i < 20; i++) {
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
@@ -905,19 +1071,26 @@
onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(not(isEnabled())));
- View longItem = getLongItem(carUiRecyclerView);
- // Making sure we've reached end of the recyclerview, after
- // adding bottom padding
- assertThat(orientationHelper.getDecoratedEnd(longItem),
- is(equalTo(orientationHelper.getEndAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ View longItem = getLongItem(carUiRecyclerView);
+ // Making sure we've reached end of the recyclerview, after
+ // adding bottom padding
+ assertThat(orientationHelper.getDecoratedEnd(longItem),
+ is(equalTo(carUiRecyclerView.getEndAfterPadding())));
+ });
}
@Test
public void testPageUpScrollsOverLongItem() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
@@ -929,48 +1102,74 @@
heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.TALL);
TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- OrientationHelper orientationHelper =
- OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
// Scroll to a position just below the long item.
onView(withId(R.id.list)).perform(scrollToPosition(longItemPosition + 1));
onView(withText(adapter.getItemText(longItemPosition + 1))).check(matches(isDisplayed()));
- // Verify long item is off-screen.
- View longItem = getLongItem(carUiRecyclerView);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ // Verify long item is off-screen.
+ View longItem = getLongItem(carUiRecyclerView);
+ assertThat(
+ orientationHelper.getDecoratedEnd(longItem),
+ is(lessThanOrEqualTo(carUiRecyclerView.getEndAfterPadding())));
+ });
- assertThat(
- orientationHelper.getDecoratedEnd(longItem),
- is(lessThanOrEqualTo(orientationHelper.getEndAfterPadding())));
+ final AtomicBoolean check = new AtomicBoolean();
+ final AtomicInteger topBeforeClick = new AtomicInteger();
- if (orientationHelper.getStartAfterPadding() - orientationHelper.getDecoratedStart(longItem)
- < orientationHelper.getTotalSpace()) {
- onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
- assertThat(orientationHelper.getDecoratedStart(longItem),
- is(greaterThanOrEqualTo(orientationHelper.getStartAfterPadding())));
- } else {
- int topBeforeClick = orientationHelper.getDecoratedStart(longItem);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ View longItem = getLongItem(carUiRecyclerView);
+ if (carUiRecyclerView.getStartAfterPadding() - orientationHelper.getDecoratedStart(
+ longItem)
+ < carUiRecyclerView.getTotalSpace()) {
+ check.set(true);
+ } else {
+ topBeforeClick.set(orientationHelper.getDecoratedStart(longItem));
+ }
+ });
- onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
+ onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
- // Verify we scrolled 1 screen
- assertThat(orientationHelper.getStartAfterPadding() - topBeforeClick,
- is(equalTo(orientationHelper.getTotalSpace())));
- }
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ View longItem = getLongItem(carUiRecyclerView);
+ if (check.get()) {
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(
+ carUiRecyclerView.getLayoutManager());
+ assertThat(orientationHelper.getDecoratedStart(longItem),
+ is(greaterThanOrEqualTo(carUiRecyclerView.getStartAfterPadding())));
+ } else {
+ // Verify we scrolled 1 screen
+ assertThat(carUiRecyclerView.getStartAfterPadding() - topBeforeClick.get(),
+ is(equalTo(carUiRecyclerView.getTotalSpace())));
+ }
+ });
}
@Test
public void testPageDownScrollsOverVeryLongItem() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
@@ -982,15 +1181,15 @@
heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.EXTRA_TALL);
TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- OrientationHelper orientationHelper =
- OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
// Scroll to a position where long item is partially visible.
// Scrolling from top, scrollToPosition() aligns the pos-1 item to bottom.
@@ -999,38 +1198,60 @@
onView(withText(adapter.getItemText(longItemPosition - 1)))
.check(matches(isDisplayed()));
- // Scroll by half the height of the screen so the long item is partially visible.
- mActivity.runOnUiThread(() -> carUiRecyclerView.scrollBy(0, screenHeight / 2));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ // Scroll by half the height of the screen so the long item is partially visible.
+ carUiRecyclerView.scrollBy(0, screenHeight / 2);
+ });
onView(withText(adapter.getItemText(longItemPosition))).check(matches(isDisplayed()));
- // Verify long item is partially shown.
- View longItem = getLongItem(carUiRecyclerView);
- assertThat(
- orientationHelper.getDecoratedStart(longItem),
- is(greaterThan(orientationHelper.getStartAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ // Verify long item is partially shown.
+ View longItem = getLongItem(carUiRecyclerView);
+ assertThat(
+ orientationHelper.getDecoratedStart(longItem),
+ is(greaterThan(carUiRecyclerView.getStartAfterPadding())));
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- // Verify long item is snapped to top.
- assertThat(orientationHelper.getDecoratedStart(longItem),
- is(equalTo(orientationHelper.getStartAfterPadding())));
- assertThat(orientationHelper.getDecoratedEnd(longItem),
- is(greaterThan(orientationHelper.getEndAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ View longItem = getLongItem(carUiRecyclerView);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ // Verify long item is snapped to top.
+ assertThat(orientationHelper.getDecoratedStart(longItem),
+ is(equalTo(carUiRecyclerView.getStartAfterPadding())));
+ assertThat(orientationHelper.getDecoratedEnd(longItem),
+ is(greaterThan(carUiRecyclerView.getEndAfterPadding())));
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- // Verify long item does not snap to bottom.
- assertThat(orientationHelper.getDecoratedEnd(longItem),
- not(equalTo(orientationHelper.getEndAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ View longItem = getLongItem(carUiRecyclerView);
+ // Verify long item does not snap to bottom.
+ assertThat(orientationHelper.getDecoratedEnd(longItem),
+ not(equalTo(carUiRecyclerView.getEndAfterPadding())));
+ });
}
@Test
public void testPageDownScrollsOverVeryLongItemAtTheEnd() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
@@ -1042,22 +1263,20 @@
heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.EXTRA_TALL);
TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
// Setting top padding to any number greater than 0.
// Not having padding will make this test pass all the time.
// Also adding bottom padding to make sure the padding
// after the last content is considered in calculations.
carUiRecyclerView.setPadding(0, 1, 0, 1);
carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- OrientationHelper orientationHelper =
- OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
// 20 is just an arbitrary number to make sure we reach the end of the recyclerview.
for (int i = 0; i < 20; i++) {
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
@@ -1065,283 +1284,362 @@
onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(not(isEnabled())));
- View longItem = getLongItem(carUiRecyclerView);
- // Making sure we've reached end of the recyclerview, after
- // adding bottom padding
- assertThat(orientationHelper.getDecoratedEnd(longItem),
- is(equalTo(orientationHelper.getEndAfterPadding())));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper =
+ OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+ View longItem = getLongItem(carUiRecyclerView);
+ // Making sure we've reached end of the recyclerview, after
+ // adding bottom padding
+ assertThat(orientationHelper.getDecoratedEnd(longItem),
+ is(equalTo(carUiRecyclerView.getEndAfterPadding())));
+ });
}
@Test
public void testPageDownMaintainsMinimumScrollThumbTrackHeight() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
int itemCount = 2500;
TestAdapter adapter = new TestAdapter(itemCount);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
- mActivity.runOnUiThread(() -> carUiRecyclerView.requestLayout());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ carUiRecyclerView.requestLayout();
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- // Check that thumb track maintains minimum height
- int minThumbViewHeight = (int) mActivity.getResources()
- .getDimension(R.dimen.car_ui_scrollbar_min_thumb_height);
- View thumbView = mActivity.requireViewById(getId("car_ui_scrollbar_thumb"));
- // Conversion from DP to pixel sometimes makes these two value differ by 1
- assertThat(abs(thumbView.getHeight() - minThumbViewHeight), is(lessThanOrEqualTo(1)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ // Check that thumb track maintains minimum height
+ int minThumbViewHeight = (int) activity.getResources()
+ .getDimension(R.dimen.car_ui_scrollbar_min_thumb_height);
+ View thumbView = activity.requireViewById(getId("car_ui_scrollbar_thumb"));
+ // Conversion from DP to pixel sometimes makes these two value differ by 1
+ assertThat(abs(thumbView.getHeight() - minThumbViewHeight), is(lessThanOrEqualTo(1)));
+ });
}
@Test
public void testRecyclerView_canScrollVertically() {
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace
+ // methods until LayoutManager's onLayoutComplete is called. In this case waiting until
+ // the first item of the list is displayed guarantees that OrientationHelper is
+ // initialized properly.
+ int totalSpace = carUiRecyclerView.getHeight()
+ - carUiRecyclerView.getPaddingTop()
+ - carUiRecyclerView.getPaddingBottom();
+ PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(1, totalSpace);
+ carUiRecyclerView.setAdapter(adapter);
- // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace methods
- // until LayoutManager's onLayoutComplete is called. In this case waiting until the first
- // item of the list is displayed guarantees that OrientationHelper is initialized properly.
- int totalSpace = carUiRecyclerView.getHeight()
- - carUiRecyclerView.getPaddingTop()
- - carUiRecyclerView.getPaddingBottom();
- PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(1, totalSpace);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
- onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
+ onView(withText(PerfectFitTestAdapter.getItemText(0))).check(matches(isDisplayed()));
- assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+ int totalSpace = carUiRecyclerView.getHeight()
+ - carUiRecyclerView.getPaddingTop()
+ - carUiRecyclerView.getPaddingBottom();
- // Both scroll up and down are disabled
- assertFalse(carUiRecyclerView.getView().canScrollVertically(1));
- assertFalse(carUiRecyclerView.getView().canScrollVertically(-1));
+ assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+
+ // Both scroll up and down are disabled
+ assertFalse(carUiRecyclerView.getView().canScrollVertically(1));
+ assertFalse(carUiRecyclerView.getView().canScrollVertically(-1));
+ });
}
@Test
public void testSetPaddingToRecyclerViewContainerWithScrollbar() {
- if (isScrollbarEnabledNotAsExpected(true)) return;
-
TestAdapter adapter = new TestAdapter(50);
+ int listId = View.generateViewId();
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- mActivity.runOnUiThread(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
onView(withId(getId("car_ui_scroll_bar"))).check(matches(isDisplayed()));
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
- // available space in recyclerview after applying paddings.
- int screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
- View scrollbar = mActivity.findViewById(getId("car_ui_scroll_bar"));
- assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
+ View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+ assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
- mActivity.runOnUiThread(() -> carUiRecyclerView.setPadding(20, 150, 30, 170));
+ carUiRecyclerView.setPadding(20, 150, 30, 170);
+ });
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
- assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
- // available space in recyclerview after applying paddings.
- screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
+ assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
- assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
- assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+
+ View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+ assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
+ assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+ });
}
@Test
public void testSetPaddingToRecyclerViewContainerWithoutScrollbar() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
TestAdapter adapter = new TestAdapter(5);
+ int listId = View.generateViewId();
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- mActivity.runOnUiThread(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ // Disable scrollbar
+ doReturn(false).when(testableResources)
+ .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
onView(withId(getId("car_ui_scroll_bar"))).check(doesNotExist());
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
- // available space in recyclerview after applying paddings.
- int screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
- mActivity.runOnUiThread(() -> carUiRecyclerView.setPadding(20, 150, 30, 170));
+ carUiRecyclerView.setPadding(20, 150, 30, 170);
+ });
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
- assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
- // available space in recyclerview after applying paddings.
- screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
+ assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+ });
}
@Test
public void testSetPaddingRelativeToRecyclerViewContainerWithScrollbar() {
- if (isScrollbarEnabledNotAsExpected(true)) return;
-
TestAdapter adapter = new TestAdapter(50);
+ int listId = View.generateViewId();
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- mActivity.runOnUiThread(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
onView(withId(getId("car_ui_scroll_bar"))).check(matches(isDisplayed()));
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
- // available space in recyclerview after applying paddings.
- int screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
- View scrollbar = mActivity.findViewById(getId("car_ui_scroll_bar"));
- assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
+ View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+ assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
- mActivity.runOnUiThread(() -> {
carUiRecyclerView.setPaddingRelative(20, 150, 30, 170);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
- assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
- // available space in recyclerview after applying paddings.
- screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
+ assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
- assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
- assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
- assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+ View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+ assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
+ assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
+ assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+ });
}
@Test
public void testSetPaddingRelativeToRecyclerViewContainerWithoutScrollbar() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
TestAdapter adapter = new TestAdapter(5);
+ int listId = View.generateViewId();
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- mActivity.runOnUiThread(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ // Disable scrollbar
+ doReturn(false).when(testableResources)
+ .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
onView(withId(getId("car_ui_scroll_bar"))).check(doesNotExist());
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
- assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
- // available space in recyclerview after applying paddings.
- int screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
+ assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
- mActivity.runOnUiThread(() -> carUiRecyclerView.setPaddingRelative(20, 150, 30, 170));
+ carUiRecyclerView.setPaddingRelative(20, 150, 30, 170);
+ });
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
- assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
- assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
- // available space in recyclerview after applying paddings.
- screenHeight = carUiRecyclerView.getTotalSpace();
- assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
+ assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
+ assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
+ // available space in recyclerview after applying paddings.
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+ });
}
@Test
public void testSetAlphaToRecyclerView() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-
- assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(1.0f)));
-
- carUiRecyclerView.setAlpha(0.5f);
-
- assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(0.5f)));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(1.0f)));
+ carUiRecyclerView.setAlpha(0.5f);
+ assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(0.5f)));
+ });
}
@Test
public void testScrollbarVisibility_tooSmallHeight() {
-
- if (isScrollbarEnabledNotAsExpected(true)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
// Set to anything less than 2 * (minTouchSize + margin)
// minTouchSize = R.dimen.car_ui_touch_target_size
// margin is button up top margin or button down bottom margin
int recyclerviewHeight = 1;
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, recyclerviewHeight);
container.addView(carUiRecyclerView.getView(), lp);
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(new TestAdapter(100));
});
onView(withId(getId("car_ui_scroll_bar"))).check(matches(not(isDisplayed())));
- assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+ });
}
@Test
public void testScrollbarVisibility_justEnoughToShowOnlyButtons() {
- if (isScrollbarEnabledNotAsExpected(true)) return;
+ Context context = getInstrumentation().getTargetContext();
+ int listId = View.generateViewId();
// R.dimen.car_ui_touch_target_size
- float minTouchSize = mTestableResources.getDimension(R.dimen.car_ui_touch_target_size);
+ float minTouchSize = context.getResources().getDimension(R.dimen.car_ui_touch_target_size);
// This value is hardcoded to 15dp in the layout.
- int margin = (int) dpToPixel(mTestableContext, 15)
- + (int) mTestableResources.getDimension(R.dimen.car_ui_scrollbar_separator_margin);
+ int margin = (int) dpToPixel(context, 15)
+ + (int) context.getResources().getDimension(
+ R.dimen.car_ui_scrollbar_separator_margin);
// Set to 2 * (minTouchSize + margin)
int recyclerviewHeight = 2 * (int) (minTouchSize + margin);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, recyclerviewHeight);
container.addView(carUiRecyclerView.getView(), lp);
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(new TestAdapter(100));
});
@@ -1351,22 +1649,27 @@
onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(isDisplayed()));
onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isDisplayed()));
- int screenHeight = carUiRecyclerView.getTotalSpace();
-
- assertEquals(recyclerviewHeight, screenHeight);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ int screenHeight = carUiRecyclerView.getTotalSpace();
+ assertEquals(recyclerviewHeight, screenHeight);
+ });
}
@Test
public void testScrollbarVisibility_enoughToShowEverything() {
- if (isScrollbarEnabledNotAsExpected(true)) return;
+ Context context = getInstrumentation().getTargetContext();
+ int listId = View.generateViewId();
- int minTouchSize = (int) mTestableResources.getDimension(R.dimen.car_ui_touch_target_size);
- int mScrollbarThumbMinHeight = (int) mTestableResources
+ int minTouchSize = (int) context.getResources().getDimension(
+ R.dimen.car_ui_touch_target_size);
+ int mScrollbarThumbMinHeight = (int) context.getResources()
.getDimension(R.dimen.car_ui_scrollbar_min_thumb_height);
// This value is hardcoded to 15dp in the layout.
- int margin = (int) dpToPixel(mTestableContext, 15)
- + (int) mTestableResources.getDimension(R.dimen.car_ui_scrollbar_separator_margin);
- int trackMargin = 2 * (int) mTestableResources
+ int margin = (int) dpToPixel(context, 15)
+ + (int) context.getResources().getDimension(
+ R.dimen.car_ui_scrollbar_separator_margin);
+ int trackMargin = 2 * (int) context.getResources()
.getDimension(R.dimen.car_ui_scrollbar_separator_margin);
// Set to anything greater or equal to
// 2 * minTouchSize + max(minTouchSize, mScrollbarThumbMinHeight) + 2 * margin
@@ -1375,11 +1678,12 @@
+ max(minTouchSize, mScrollbarThumbMinHeight)
+ 2 * margin + trackMargin;
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, recyclerviewHeight);
container.addView(carUiRecyclerView.getView(), lp);
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(new TestAdapter(100));
});
@@ -1389,18 +1693,32 @@
onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(isDisplayed()));
onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isDisplayed()));
- assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+ });
}
@Test
public void testDefaultSize_noScrollbar() {
- if (isScrollbarEnabledNotAsExpected(false)) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
- int listId = View.generateViewId();
TestAdapter adapter = new TestAdapter(50);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ // Disable scrollbar
+ doReturn(false).when(testableResources)
+ .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
@@ -1413,24 +1731,26 @@
@Test
public void testLargeSize_withScrollbar() {
- if (isScrollbarEnabledNotAsExpected(true)) return;
-
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
-
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
- anyInt())).thenReturn(2); // Large size
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- int listId = View.generateViewId();
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+ anyInt())).thenReturn(2); // Large size
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
@@ -1445,24 +1765,27 @@
@Test
public void testMediumSize_withScrollbar() {
- if (isScrollbarEnabledNotAsExpected(true)) return;
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
-
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
- anyInt())).thenReturn(1); // Medium size
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- int listId = View.generateViewId();
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+ anyInt())).thenReturn(1); // Medium size
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
@@ -1476,24 +1799,26 @@
@Test
public void testSmallSize_oneItem() {
- if (isScrollbarEnabledNotAsExpected(true)) return;
-
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
-
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
- anyInt())).thenReturn(0); // Small size
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- int listId = View.generateViewId();
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(1);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+ anyInt())).thenReturn(0); // Small size
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
@@ -1506,24 +1831,26 @@
@Test
public void testSmallSize_multipleItem() {
- doReturn(true).when(mTestableResources).getBoolean(R.bool.car_ui_scrollbar_enable);
-
- TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
- null, R.styleable.CarUiRecyclerView));
-
- doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
- any(),
- eq(R.styleable.CarUiRecyclerView),
- anyInt(),
- anyInt());
- when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
- anyInt())).thenReturn(0); // Small size
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- int listId = View.generateViewId();
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+ null, R.styleable.CarUiRecyclerView));
+
+ doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+ any(),
+ eq(R.styleable.CarUiRecyclerView),
+ anyInt(),
+ anyInt());
+ when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+ anyInt())).thenReturn(0); // Small size
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
@@ -1537,75 +1864,92 @@
@Test
public void testSameSizeItems_estimateNextPositionDiffForScrollDistance() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
int itemCount = 100;
TestAdapter adapter = new TestAdapter(itemCount);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- // TODO:
- LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
- OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ int firstViewHeight = carUiRecyclerView.getRecyclerViewChildAt(0).getHeight();
+ int itemsToScroll = 10;
+ OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+ carUiRecyclerView.getLayoutManager());
+ CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+ // Get an estimate of how many items CarUiSnapHelper says we need to scroll. The scroll
+ // distance is set to 10 * height of the first item. Since all items have the items have
+ // the same height, we're expecting to get exactly 10 back from CarUiSnapHelper.
+ int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+ orientationHelper, itemsToScroll * firstViewHeight);
- int firstViewHeight = layoutManager.getChildAt(0).getHeight();
- int itemsToScroll = 10;
- CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
- // Get an estimate of how many items CarUiSnaphelpwer says we need to scroll. The scroll
- // distance is set to 10 * height of the first item. Since all items have the items have
- // the same height, we're expecting to get exactly 10 back from CarUiSnapHelper.
- int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper,
- itemsToScroll * firstViewHeight);
-
- assertEquals(estimate, itemsToScroll);
+ assertEquals(estimate, itemsToScroll);
+ });
}
@Test
public void testSameSizeItems_estimateNextPositionDiffForScrollDistance_zeroDistance() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
int itemCount = 100;
TestAdapter adapter = new TestAdapter(itemCount);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
- OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+ carUiRecyclerView.getLayoutManager());
+ int firstViewHeight = carUiRecyclerView.getRecyclerViewChildAt(0).getHeight();
+ // the scroll distance has to be less than half of the size of the first view so that
+ // recyclerview doesn't snap to the next view
+ int distantToScroll = (firstViewHeight / 2) - 1;
+ CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+ int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+ orientationHelper, distantToScroll);
- // TODO:
- int firstViewHeight = layoutManager.getChildAt(0).getHeight();
- // the scroll distance has to be less than half of the size of the first view so that
- // recyclerview doesn't snap to the next view
- int distantToScroll = (firstViewHeight / 2) - 1;
- CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
- int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper,
- distantToScroll);
+ assertEquals(estimate, 0);
+ });
- assertEquals(estimate, 0);
}
@Test
public void testSameSizeItems_estimateNextPositionDiffForScrollDistance_zeroHeight() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
@@ -1614,241 +1958,316 @@
heightOverrides.put(0, TestAdapter.ItemHeight.ZERO);
TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withContentDescription("ZERO")).check(matches(isEnabled()));
- LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
- OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+ carUiRecyclerView.getLayoutManager());
+ // 10 is an arbitrary number
+ int distantToScroll = 10;
+ CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+ int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+ orientationHelper, distantToScroll);
- // 10 is an arbitrary number
- int distantToScroll = 10;
- CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
- int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper,
- distantToScroll);
-
- assertEquals(estimate, 0);
+ assertEquals(estimate, 0);
+ });
}
@Test
public void testSameSizeItems_estimateNextPositionDiffForScrollDistance_zeroItems() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
int itemCount = 0;
TestAdapter adapter = new TestAdapter(itemCount);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
- LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
- OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
- CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
- int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper, 50);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+ carUiRecyclerView.getLayoutManager());
+ CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+ int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+ orientationHelper, 50);
- assertEquals(estimate, 50);
+ assertEquals(estimate, 50);
+ });
}
@Test
public void testEmptyList_calculateScrollDistanceClampToScreenSize() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
int itemCount = 0;
TestAdapter adapter = new TestAdapter(itemCount);
onView(withId(R.id.list)).check(matches(isDisplayed()));
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
- LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
+ LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
+ carUiRecyclerView.setOnFlingListener(null);
+ linearSnapHelper.attachToRecyclerView(
+ ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+ // 200 is just an arbitrary number. the intent is to make sure the return value is
+ // smaller
+ // than the layoutmanager height.
+ int[] baseOutDist = linearSnapHelper.calculateScrollDistance(200, -200);
- LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
- carUiRecyclerView.setOnFlingListener(null);
- linearSnapHelper.attachToRecyclerView(
- ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
- // 200 is just an arbitrary number. the intent is to make sure the return value is smaller
- // than the layoutmanager height.
- int[] baseOutDist = linearSnapHelper.calculateScrollDistance(200, -200);
+ CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(activity);
+ carUiRecyclerView.setOnFlingListener(null);
+ carUiSnapHelper.attachToRecyclerView(
+ ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+ int[] outDist = carUiSnapHelper.calculateScrollDistance(200, -200);
- CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(mTestableContext);
- carUiRecyclerView.setOnFlingListener(null);
- carUiSnapHelper.attachToRecyclerView(
- ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
- int[] outDist = carUiSnapHelper.calculateScrollDistance(200, -200);
-
- assertEquals(outDist[0], baseOutDist[0]);
- assertEquals(outDist[1], baseOutDist[1]);
+ assertEquals(outDist[0], baseOutDist[0]);
+ assertEquals(outDist[1], baseOutDist[1]);
+ });
}
@Test
public void testCalculateScrollDistanceClampToScreenSize() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- mActivity.runOnUiThread(
- () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+ mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+ R.layout.car_ui_recycler_view_test_activity));
onView(withId(R.id.list)).check(matches(isDisplayed()));
int itemCount = 100;
TestAdapter adapter = new TestAdapter(itemCount);
- CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
- mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ carUiRecyclerView.setAdapter(adapter);
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+ });
+
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
- OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+ LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
+ OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+ layoutManager);
- LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
- carUiRecyclerView.setOnFlingListener(null);
- linearSnapHelper.attachToRecyclerView(
- ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
- // 8000 is just an arbitrary number. the intent is to make sure the return value is bigger
- // than the layoutmanager height.
- int[] baseOutDist = linearSnapHelper.calculateScrollDistance(8000, -8000);
+ LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
+ carUiRecyclerView.setOnFlingListener(null);
+ linearSnapHelper.attachToRecyclerView(
+ ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+ // 8000 is just an arbitrary number. the intent is to make sure the return value is
+ // bigger
+ // than the layoutmanager height.
+ int[] baseOutDist = linearSnapHelper.calculateScrollDistance(8000, -8000);
- CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(mTestableContext);
- carUiRecyclerView.setOnFlingListener(null);
- carUiSnapHelper.attachToRecyclerView(
- ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
- int[] outDist = carUiSnapHelper.calculateScrollDistance(8000, -8000);
+ CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(activity);
+ carUiRecyclerView.setOnFlingListener(null);
+ carUiSnapHelper.attachToRecyclerView(
+ ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+ int[] outDist = carUiSnapHelper.calculateScrollDistance(8000, -8000);
- int lastChildPosition = carUiSnapHelper.isAtEnd(layoutManager)
- ? 0 : layoutManager.getChildCount() - 1;
- View lastChild = Objects.requireNonNull(layoutManager.getChildAt(lastChildPosition));
- float percentageVisible = CarUiSnapHelper
- .getPercentageVisible(lastChild, orientationHelper);
+ int lastChildPosition = carUiSnapHelper.isAtEnd(carUiRecyclerView.getLayoutManager())
+ ? 0 : carUiRecyclerView.getRecyclerViewChildCount() - 1;
+ View lastChild = Objects.requireNonNull(
+ carUiRecyclerView.getRecyclerViewChildAt(lastChildPosition));
+ float percentageVisible = CarUiSnapHelper
+ .getPercentageVisible(lastChild, orientationHelper);
- int maxDistance = layoutManager.getHeight();
- if (percentageVisible > 0.f) {
- // The max and min distance is the total height of the RecyclerView minus the height of
- // the last child. This ensures that each scroll will never scroll more than a single
- // page on the RecyclerView. That is, the max scroll will make the last child the
- // first child and vice versa when scrolling the opposite way.
- maxDistance -= layoutManager.getDecoratedMeasuredHeight(lastChild);
- }
- int minDistance = -maxDistance;
+ int maxDistance = carUiRecyclerView.getTotalSpace();
+ if (percentageVisible > 0.f) {
+ // The max and min distance is the total height of the RecyclerView minus the
+ // height of
+ // the last child. This ensures that each scroll will never scroll more than a
+ // single
+ // page on the RecyclerView. That is, the max scroll will make the last child the
+ // first child and vice versa when scrolling the opposite way.
+ maxDistance -= carUiRecyclerView.getLayoutManager()
+ .getDecoratedMeasuredHeight(lastChild);
+ }
+ int minDistance = -maxDistance;
- assertEquals(clamp(baseOutDist[0], minDistance, maxDistance), outDist[0]);
- assertEquals(clamp(baseOutDist[1], minDistance, maxDistance), outDist[1]);
+ assertEquals(clamp(baseOutDist[0], minDistance, maxDistance), outDist[0]);
+ assertEquals(clamp(baseOutDist[1], minDistance, maxDistance), outDist[1]);
+ });
}
@Test
public void testContinuousScrollListenerConstructor_negativeInitialDelay() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- if (isScrollbarEnabledNotAsExpected(true)) return;
- doReturn(-1).when(mTestableResources)
- .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn(-1).when(testableResources)
+ .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
- IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
- () -> CarUiRecyclerView.create(mTestableContext));
- assertEquals("negative intervals are not allowed", ex.getMessage());
+ IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
+ () -> CarUiRecyclerView.create(testableContext));
+ assertEquals("negative intervals are not allowed", ex.getMessage());
+ });
}
@Test
public void testContinuousScrollListenerConstructor_negativeRepeatInterval() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- if (isScrollbarEnabledNotAsExpected(true)) return;
- doReturn(-1).when(mTestableResources)
- .getInteger(R.integer.car_ui_scrollbar_longpress_repeat_interval);
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn(-1).when(testableResources)
+ .getInteger(R.integer.car_ui_scrollbar_longpress_repeat_interval);
- IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
- () -> CarUiRecyclerView.create(mTestableContext));
- assertEquals("negative intervals are not allowed", ex.getMessage());
+ IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
+ () -> CarUiRecyclerView.create(testableContext));
+ assertEquals("negative intervals are not allowed", ex.getMessage());
+ });
}
@Test
public void testUnknownClass_createScrollBarFromConfig() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- doReturn("random.class").when(mTestableResources)
- .getString(R.string.car_ui_scrollbar_component);
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn("random.class").when(testableResources)
+ .getString(R.string.car_ui_scrollbar_component);
- RuntimeException ex = assertThrows(RuntimeException.class,
- () -> CarUiRecyclerView.create(mTestableContext));
- assertEquals("Error loading scroll bar component: random.class", ex.getMessage());
+ RuntimeException ex = assertThrows(RuntimeException.class,
+ () -> CarUiRecyclerView.create(testableContext));
+ assertEquals("Error loading scroll bar component: random.class", ex.getMessage());
+ });
}
@Test
public void testWrongType_createScrollBarFromConfig() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- // Basically return any class that exists but doesn't extend ScrollBar
- doReturn(CarUiRecyclerView.class.getName()).when(mTestableResources)
- .getString(R.string.car_ui_scrollbar_component);
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ // Basically return any class that exists but doesn't extend ScrollBar
+ doReturn(CarUiRecyclerView.class.getName()).when(testableResources)
+ .getString(R.string.car_ui_scrollbar_component);
- RuntimeException ex = assertThrows(RuntimeException.class,
- () -> CarUiRecyclerView.create(mTestableContext));
- assertEquals("Error creating scroll bar component: "
- + CarUiRecyclerView.class.getName(), ex.getMessage());
+ RuntimeException ex = assertThrows(RuntimeException.class,
+ () -> CarUiRecyclerView.create(testableContext));
+ assertEquals("Error creating scroll bar component: "
+ + CarUiRecyclerView.class.getName(), ex.getMessage());
+ });
}
@Test
public void testSetLinearLayoutStyle_setsLayoutManager() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- CarUiLayoutStyle layoutStyle = new CarUiLinearLayoutStyle();
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- carUiRecyclerView.setLayoutStyle(layoutStyle);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
+ int listId = View.generateViewId();
+ CarUiLayoutStyle layoutStyle = new CarUiLinearLayoutStyle();
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView =
+ (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+ carUiRecyclerView.setLayoutStyle(layoutStyle);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
- assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
- layoutStyle.getOrientation());
- assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
- .getReverseLayout(), layoutStyle.getReverseLayout());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+ assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
+ assertEquals(
+ ((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+ layoutStyle.getOrientation());
+ assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
+ .getReverseLayout(), layoutStyle.getReverseLayout());
+ });
}
@Test
public void testSetGridLayoutStyle_setsLayoutManager() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- CarUiLayoutStyle layoutStyle = new CarUiGridLayoutStyle();
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- carUiRecyclerView.setLayoutStyle(layoutStyle);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
+ CarUiLayoutStyle layoutStyle = new CarUiGridLayoutStyle();
+ int listId = View.generateViewId();
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView =
+ (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+ carUiRecyclerView.setLayoutStyle(layoutStyle);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
- layoutStyle.getOrientation());
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
- layoutStyle.getReverseLayout());
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
- layoutStyle.getSpanCount());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+ assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
+ assertEquals(
+ ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+ layoutStyle.getOrientation());
+ assertEquals(
+ ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
+ layoutStyle.getReverseLayout());
+ assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
+ layoutStyle.getSpanCount());
+ });
}
@Test
@@ -1861,7 +2280,6 @@
@Test
public void testSetGridLayoutStyle_setsLayoutManagerSpanSizeLookup() {
-
CarUiGridLayoutStyle layoutStyle = new CarUiGridLayoutStyle();
// has to bigger than span sizes for all the rows
layoutStyle.setSpanCount(20);
@@ -1879,80 +2297,105 @@
}
};
layoutStyle.setSpanSizeLookup(spanSizeLookup);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- carUiRecyclerView.setLayoutStyle(layoutStyle);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
+ int listId = View.generateViewId();
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ carUiRecyclerView.setLayoutStyle(layoutStyle);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
- assertEquals(((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
- .getSpanSize(0), spanSizeLookup.getSpanSize(0));
- assertEquals(((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
- .getSpanSize(1), spanSizeLookup.getSpanSize(1));
- assertEquals(((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
- .getSpanSize(2), spanSizeLookup.getSpanSize(2));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+ assertEquals(
+ ((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
+ .getSpanSize(0), spanSizeLookup.getSpanSize(0));
+ assertEquals(
+ ((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
+ .getSpanSize(1), spanSizeLookup.getSpanSize(1));
+ assertEquals(
+ ((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
+ .getSpanSize(2), spanSizeLookup.getSpanSize(2));
+ });
}
@Test
public void testCarUiGridLayoutStyle_LayoutManagerFrom() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- GridLayoutManager layoutManager =
- new GridLayoutManager(mTestableContext, 20, RecyclerView.VERTICAL, true);
- layoutManager.setSpanSizeLookup(new SpanSizeLookup() {
- @Override
- public int getSpanSize(int position) {
- switch (position) {
- case 0:
- return 10;
- case 1:
- return 20;
- default:
- return 15;
- }
- }
- });
- CarUiGridLayoutStyle layoutStyle = CarUiGridLayoutStyle.from(layoutManager);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- carUiRecyclerView.setLayoutStyle(layoutStyle);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
+ int listId = View.generateViewId();
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ GridLayoutManager layoutManager =
+ new GridLayoutManager(activity, 20, RecyclerView.VERTICAL, true);
+ layoutManager.setSpanSizeLookup(new SpanSizeLookup() {
+ @Override
+ public int getSpanSize(int position) {
+ switch (position) {
+ case 0:
+ return 10;
+ case 1:
+ return 20;
+ default:
+ return 15;
+ }
+ }
+ });
+ CarUiGridLayoutStyle layoutStyle = CarUiGridLayoutStyle.from(layoutManager);
+ CarUiRecyclerViewImpl carUiRecyclerView =
+ (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+ carUiRecyclerView.setLayoutStyle(layoutStyle);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
- layoutManager.getOrientation());
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
- layoutManager.getReverseLayout());
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
- layoutManager.getSpanCount());
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
- .getSpanSize(0), layoutManager.getSpanSizeLookup().getSpanSize(0));
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
- .getSpanSize(1), layoutManager.getSpanSizeLookup().getSpanSize(1));
- assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
- .getSpanSize(2), layoutManager.getSpanSizeLookup().getSpanSize(2));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+ assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
+ GridLayoutManager layoutManager =
+ (GridLayoutManager) carUiRecyclerView.getLayoutManager();
+ assertEquals(
+ ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+ layoutManager.getOrientation());
+ assertEquals(
+ ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
+ layoutManager.getReverseLayout());
+ assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
+ layoutManager.getSpanCount());
+ assertEquals(
+ ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
+ .getSpanSize(0), layoutManager.getSpanSizeLookup().getSpanSize(0));
+ assertEquals(
+ ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
+ .getSpanSize(1), layoutManager.getSpanSizeLookup().getSpanSize(1));
+ assertEquals(
+ ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
+ .getSpanSize(2), layoutManager.getSpanSizeLookup().getSpanSize(2));
+ });
}
@Test
public void testCarUiGridLayoutStyle_fromLinearLayout_throwsException() {
- LinearLayoutManager layoutManager = new LinearLayoutManager(mTestableContext);
- AssertionError ex = assertThrows(AssertionError.class,
- () -> CarUiGridLayoutStyle.from(layoutManager));
- assertEquals("GridLayoutManager required.", ex.getMessage());
+ mActivityRule.getScenario().onActivity(activity -> {
+ LinearLayoutManager layoutManager = new LinearLayoutManager(activity);
+ AssertionError ex = assertThrows(AssertionError.class,
+ () -> CarUiGridLayoutStyle.from(layoutManager));
+ assertEquals("GridLayoutManager required.", ex.getMessage());
+ });
}
@Test
@@ -1962,36 +2405,49 @@
@Test
public void testCarUiLinearLayoutStyle_LayoutManagerFrom() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- LinearLayoutManager layoutManager =
- new LinearLayoutManager(mTestableContext, RecyclerView.VERTICAL, true);
- CarUiLinearLayoutStyle layoutStyle = CarUiLinearLayoutStyle.from(layoutManager);
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- carUiRecyclerView.setLayoutStyle(layoutStyle);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(50);
+ int listId = View.generateViewId();
- container.post(() -> {
+ mActivityRule.getScenario().onActivity(activity -> {
+ LinearLayoutManager layoutManager =
+ new LinearLayoutManager(activity, RecyclerView.VERTICAL, true);
+ CarUiLinearLayoutStyle layoutStyle = CarUiLinearLayoutStyle.from(layoutManager);
+ CarUiRecyclerViewImpl carUiRecyclerView =
+ (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+ carUiRecyclerView.setLayoutStyle(layoutStyle);
+ ViewGroup container = activity.findViewById(R.id.test_container);
container.addView(carUiRecyclerView.getView());
+ carUiRecyclerView.setId(listId);
carUiRecyclerView.setAdapter(adapter);
});
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
- assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
- layoutManager.getOrientation());
- assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
- .getReverseLayout(), layoutManager.getReverseLayout());
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+ LinearLayoutManager layoutManager =
+ (LinearLayoutManager) carUiRecyclerView.getLayoutManager();
+ assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
+ assertEquals(
+ ((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+ layoutManager.getOrientation());
+ assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
+ .getReverseLayout(), layoutManager.getReverseLayout());
+ });
}
@Test
public void testCarUiLinearLayoutStyle_fromGridLayout_throwsException() {
- NotLinearLayoutManager layoutManager = new NotLinearLayoutManager(mTestableContext);
- AssertionError ex = assertThrows(AssertionError.class,
- () -> CarUiLinearLayoutStyle.from(layoutManager));
- assertEquals("LinearLayoutManager required.", ex.getMessage());
+ mActivityRule.getScenario().onActivity(activity -> {
+ NotLinearLayoutManager layoutManager = new NotLinearLayoutManager(activity);
+ AssertionError ex = assertThrows(AssertionError.class,
+ () -> CarUiLinearLayoutStyle.from(layoutManager));
+ assertEquals("LinearLayoutManager required.", ex.getMessage());
+ });
}
@Test
@@ -2001,186 +2457,252 @@
@Test
public void testOnContinuousScrollListener_cancelCallback() {
- doReturn(0).when(mTestableResources)
- .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
- View view = mock(View.class);
- OnClickListener clickListener = mock(OnClickListener.class);
- OnContinuousScrollListener listener = new OnContinuousScrollListener(
- mTestableContext, clickListener);
- MotionEvent motionEvent = mock(MotionEvent.class);
- when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_DOWN);
- listener.onTouch(view, motionEvent);
- when(view.isEnabled()).thenReturn(false);
- when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_UP);
- listener.onTouch(view, motionEvent);
- verify(clickListener, times(1)).onClick(view);
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn(0).when(testableResources)
+ .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
+ View view = mock(View.class);
+ OnClickListener clickListener = mock(OnClickListener.class);
+ OnContinuousScrollListener listener = new OnContinuousScrollListener(
+ testableContext, clickListener);
+ MotionEvent motionEvent = mock(MotionEvent.class);
+ when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_DOWN);
+ listener.onTouch(view, motionEvent);
+ when(view.isEnabled()).thenReturn(false);
+ when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_UP);
+ listener.onTouch(view, motionEvent);
+ verify(clickListener, times(1)).onClick(view);
+ });
}
@Test
public void testUxRestriction_withLimitedContent_setsMaxItems() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(mTestableContext);
- CarUxRestrictions restriction = mock(CarUxRestrictions.class);
- when(restriction.getActiveRestrictions()).thenReturn(UX_RESTRICTIONS_LIMIT_CONTENT);
- when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter.WithItemCap adapter = spy(new TestAdapter.WithItemCap(100));
- container.post(() -> {
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(activity);
+ CarUxRestrictions restriction = mock(CarUxRestrictions.class);
+ when(restriction.getActiveRestrictions()).thenReturn(UX_RESTRICTIONS_LIMIT_CONTENT);
+ when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
uxRestriction.setUxRestrictions(restriction);
carUiRecyclerView.setAdapter(adapter);
container.addView(carUiRecyclerView.getView());
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
-
verify(adapter, atLeastOnce()).setMaxItems(10);
}
@Test
public void testUxRestriction_withoutLimitedContent_setsUnlimitedMaxItems() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(mTestableContext);
- CarUxRestrictions restriction = mock(CarUxRestrictions.class);
- when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter.WithItemCap adapter = spy(new TestAdapter.WithItemCap(100));
- container.post(() -> {
- uxRestriction.setUxRestrictions(restriction);
- carUiRecyclerView.setAdapter(adapter);
- container.addView(carUiRecyclerView.getView());
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(activity);
+ CarUxRestrictions restriction = mock(CarUxRestrictions.class);
+ when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+ ViewGroup container = activity.findViewById(R.id.test_container);
+ container.post(() -> {
+ uxRestriction.setUxRestrictions(restriction);
+ carUiRecyclerView.setAdapter(adapter);
+ container.addView(carUiRecyclerView.getView());
+ });
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
-
verify(adapter, atLeastOnce()).setMaxItems(UNLIMITED);
}
@Test
public void testPageUp_returnsWhen_verticalScrollOffsetIsZero() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- if (isScrollbarEnabledNotAsExpected(true)) return;
- doReturn(TestScrollBar.class.getName()).when(mTestableResources)
- .getString(R.string.car_ui_scrollbar_component);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(100);
int listId = View.generateViewId();
- container.post(() -> {
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn(TestScrollBar.class.getName()).when(testableResources)
+ .getString(R.string.car_ui_scrollbar_component);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
carUiRecyclerView.setAdapter(adapter);
carUiRecyclerView.setId(listId);
container.addView(carUiRecyclerView.getView());
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
onView(withId(listId)).check(matches(isDisplayed()));
-
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- // Scroll to a position so page up is enabled.
- container.post(() -> carUiRecyclerView.scrollToPosition(20));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ // Scroll to a position so page up is enabled.
+ carUiRecyclerView.scrollToPosition(20);
+ });
onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isEnabled()));
- View v = mActivity.findViewById(getId("car_ui_scroll_bar"));
- TestScrollBar sb = (TestScrollBar) v.getTag();
- // We set this to simulate a case where layout manager is null
- sb.mReturnZeroVerticalScrollOffset = true;
+ mActivityRule.getScenario().onActivity(activity -> {
+ View v = activity.findViewById(getId("car_ui_scroll_bar"));
+ TestScrollBar sb = (TestScrollBar) v.getTag();
+ // We set this to simulate a case where layout manager is null
+ sb.mReturnZeroVerticalScrollOffset = true;
+ });
onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
- assertFalse(sb.mScrollWasCalled);
+ mActivityRule.getScenario().onActivity(activity -> {
+ View v = activity.findViewById(getId("car_ui_scroll_bar"));
+ TestScrollBar sb = (TestScrollBar) v.getTag();
+ assertFalse(sb.mScrollWasCalled);
+ });
}
@Test
public void testPageUp_returnsWhen_layoutManagerIsNull() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- if (isScrollbarEnabledNotAsExpected(true)) return;
- doReturn(TestScrollBar.class.getName()).when(mTestableResources)
- .getString(R.string.car_ui_scrollbar_component);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(100);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn(TestScrollBar.class.getName()).when(testableResources)
+ .getString(R.string.car_ui_scrollbar_component);
+
+ CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
carUiRecyclerView.setAdapter(adapter);
+ carUiRecyclerView.setId(listId);
container.addView(carUiRecyclerView.getView());
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- // Scroll to a position so page up is enabled.
- container.post(() -> carUiRecyclerView.scrollToPosition(20));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ // Scroll to a position so page up is enabled.
+ carUiRecyclerView.scrollToPosition(20);
+ });
onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isEnabled()));
- View v = mActivity.findViewById(getId("car_ui_scroll_bar"));
- TestScrollBar sb = (TestScrollBar) v.getTag();
- // We set this to simulate a case where layout manager is null
- sb.mReturnMockLayoutManager = true;
+ mActivityRule.getScenario().onActivity(activity -> {
+ View v = activity.findViewById(getId("car_ui_scroll_bar"));
+ TestScrollBar sb = (TestScrollBar) v.getTag();
+ // We set this to simulate a case where layout manager is null
+ sb.mReturnMockLayoutManager = true;
+ });
onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
- assertFalse(sb.mScrollWasCalled);
+ mActivityRule.getScenario().onActivity(activity -> {
+ View v = activity.findViewById(getId("car_ui_scroll_bar"));
+ TestScrollBar sb = (TestScrollBar) v.getTag();
+ assertFalse(sb.mScrollWasCalled);
+ });
}
@Test
public void testPageDown_returnsWhen_layoutManagerIsNullOrEmpty() {
- if (mIsPluginEnabled) return;
+ if (mIsPluginEnabled) {
+ return;
+ }
- if (isScrollbarEnabledNotAsExpected(true)) return;
- doReturn(TestScrollBar.class.getName()).when(mTestableResources)
- .getString(R.string.car_ui_scrollbar_component);
-
- CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
- ViewGroup container = mActivity.findViewById(R.id.test_container);
TestAdapter adapter = new TestAdapter(100);
- container.post(() -> {
+ int listId = View.generateViewId();
+
+ mActivityRule.getScenario().onActivity(activity -> {
+ Context testableContext = spy(activity);
+ Resources testableResources = spy(activity.getResources());
+ when(testableContext.getResources()).thenReturn(testableResources);
+ doReturn(TestScrollBar.class.getName()).when(testableResources)
+ .getString(R.string.car_ui_scrollbar_component);
+
+ CarUiRecyclerViewImpl carUiRecyclerView =
+ (CarUiRecyclerViewImpl) CarUiRecyclerView.create(testableContext);
+ ViewGroup container = activity.findViewById(R.id.test_container);
carUiRecyclerView.setAdapter(adapter);
+ carUiRecyclerView.setId(listId);
container.addView(carUiRecyclerView.getView());
+
+ IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
});
- IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
- // Scroll to a position so page up is enabled.
- container.post(() -> carUiRecyclerView.scrollToPosition(20));
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+ // Scroll to a position so page up is enabled.
+ carUiRecyclerView.scrollToPosition(20);
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(isEnabled()));
- View v = mActivity.findViewById(getId("car_ui_scroll_bar"));
- TestScrollBar sb = (TestScrollBar) v.getTag();
- // We set this to simulate a case where layout manager is empty
- sb.mReturnMockLayoutManager = true;
- sb.mMockLayoutManager = spy(carUiRecyclerView.getLayoutManager());
- when(sb.mMockLayoutManager.getChildCount()).thenReturn(0);
+ mActivityRule.getScenario().onActivity(activity -> {
+ CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+ View v = activity.findViewById(getId("car_ui_scroll_bar"));
+ TestScrollBar sb = (TestScrollBar) v.getTag();
+ // We set this to simulate a case where layout manager is empty
+ sb.mReturnMockLayoutManager = true;
+ sb.mMockLayoutManager = spy(carUiRecyclerView.getLayoutManager());
+ when(sb.mMockLayoutManager.getChildCount()).thenReturn(0);
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- assertFalse(sb.mScrollWasCalled);
+ mActivityRule.getScenario().onActivity(activity -> {
+ View v = activity.findViewById(getId("car_ui_scroll_bar"));
+ TestScrollBar sb = (TestScrollBar) v.getTag();
+ assertFalse(sb.mScrollWasCalled);
- // We set this to simulate a case where layout manager is null
- sb.mReturnMockLayoutManager = true;
- sb.mMockLayoutManager = null;
+ // We set this to simulate a case where layout manager is null
+ sb.mReturnMockLayoutManager = true;
+ sb.mMockLayoutManager = null;
+ });
onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
- assertFalse(sb.mScrollWasCalled);
+ mActivityRule.getScenario().onActivity(activity -> {
+ View v = activity.findViewById(getId("car_ui_scroll_bar"));
+ TestScrollBar sb = (TestScrollBar) v.getTag();
+ assertFalse(sb.mScrollWasCalled);
+ });
}
static class TestScrollBar extends DefaultScrollBar {
-
boolean mReturnMockLayoutManager = false;
LayoutManager mMockLayoutManager = null;
boolean mScrollWasCalled = false;
@@ -2229,12 +2751,10 @@
* @return An item that is taller than the CarUiRecyclerView.
*/
private View getLongItem(CarUiRecyclerView recyclerView) {
- OrientationHelper orientationHelper =
- OrientationHelper.createVerticalHelper(recyclerView.getLayoutManager());
- for (int i = 0; i < recyclerView.getLayoutManager().getChildCount(); i++) {
- View item = recyclerView.getLayoutManager().getChildAt(i);
+ for (int i = 0; i < recyclerView.getRecyclerViewChildCount(); i++) {
+ View item = recyclerView.getRecyclerViewChildAt(i);
- if (item.getHeight() > orientationHelper.getTotalSpace()) {
+ if (item.getHeight() > recyclerView.getTotalSpace()) {
return item;
}
}
@@ -2306,10 +2826,10 @@
case STANDARD:
break;
case TALL:
- holder.itemView.setMinimumHeight(screenHeight);
+ holder.itemView.setMinimumHeight((int) (screenHeight * 1.1));
break;
case EXTRA_TALL:
- holder.itemView.setMinimumHeight(screenHeight * 2);
+ holder.itemView.setMinimumHeight((int) (screenHeight * 2.1));
break;
default:
throw new IllegalStateException("Unexpected value: " + height);
@@ -2324,8 +2844,7 @@
}
static class WithItemCap extends TestAdapter implements CarUiRecyclerView.ItemCap {
-
- private int mMaxitems = -1;
+ private int mMaxItems = -1;
WithItemCap(int itemCount,
Map<Integer, ItemHeight> overrides) {
@@ -2338,18 +2857,17 @@
@Override
public void setMaxItems(int maxItems) {
- mMaxitems = maxItems;
+ mMaxItems = maxItems;
}
@Override
public int getItemCount() {
- return mMaxitems >= 0 ? mMaxitems : mData.size();
+ return mMaxItems >= 0 ? mMaxItems : mData.size();
}
}
}
private static class PerfectFitTestAdapter extends RecyclerView.Adapter<TestViewHolder> {
-
private static final int MIN_HEIGHT = 30;
private final List<String> mData;
private final int mItemHeight;
@@ -2376,7 +2894,7 @@
}
}
- String getItemText(int position) {
+ public static String getItemText(int position) {
return String.format(Locale.US, "Sample item #%d", position);
}
@@ -2400,7 +2918,7 @@
}
private static class TestViewHolder extends RecyclerView.ViewHolder {
- private TextView mTextView;
+ private final TextView mTextView;
TestViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.test_list_item, parent, false));
@@ -2439,8 +2957,8 @@
@Override
public void onScrolled(@NonNull CarUiRecyclerView recyclerView,
- int dx,
- int dy) {
+ int dx,
+ int dy) {
}
});
}
@@ -2462,8 +2980,8 @@
}
private static class NotLinearLayoutManager extends LayoutManager {
-
- NotLinearLayoutManager(Context mTestableContext) {}
+ NotLinearLayoutManager(Context mTestableContext) {
+ }
@Override
public LayoutParams generateDefaultLayoutParams() {
@@ -2471,25 +2989,15 @@
}
}
- private boolean isScrollbarEnabledNotAsExpected(boolean expectedValue) {
- if (mIsPluginEnabled) {
- int id = mPluginContext.getResources()
- .getIdentifier("scrollbar_enable", "bool", mPluginContext.getPackageName());
- return (mPluginContext.getResources().getBoolean(id) != expectedValue);
- } else {
- doReturn(expectedValue).when(mTestableResources)
- .getBoolean(R.bool.car_ui_scrollbar_enable);
- return false;
- }
- }
-
private int getId(String resourceName) {
if (mIsPluginEnabled) {
- return mPluginContext.getResources().getIdentifier(
- resourceName.replace("car_ui_", ""), "id", mPluginContext.getPackageName());
+ Context pluginContext = PluginFactorySingleton.getPluginContext();
+ return pluginContext.getResources().getIdentifier(
+ resourceName.replace("car_ui_", ""), "id", pluginContext.getPackageName());
} else {
- return mActivity.getResources()
- .getIdentifier(resourceName, "id", mActivity.getPackageName());
+ Context context = getInstrumentation().getTargetContext();
+ return context.getResources()
+ .getIdentifier(resourceName, "id", context.getPackageName());
}
}
}