Switches BasicStreamTest to use a clock-backed main thread runner.
PiperOrigin-RevId: 242147734
Change-Id: I0d76c3d143273b423be746074b45a8acf6507c19
diff --git a/src/test/java/com/google/android/libraries/feed/basicstream/BasicStreamTest.java b/src/test/java/com/google/android/libraries/feed/basicstream/BasicStreamTest.java
index 119cd57..c9b1e73 100644
--- a/src/test/java/com/google/android/libraries/feed/basicstream/BasicStreamTest.java
+++ b/src/test/java/com/google/android/libraries/feed/basicstream/BasicStreamTest.java
@@ -17,6 +17,7 @@
import static com.google.android.libraries.feed.api.stream.Stream.POSITION_NOT_KNOWN;
import static com.google.android.libraries.feed.basicstream.BasicStream.KEY_STREAM_STATE;
import static com.google.android.libraries.feed.basicstream.BasicStream.MINIMUM_SPINNER_SHOW_TIME;
+import static com.google.android.libraries.feed.basicstream.BasicStream.MINIMUM_TIME_BEFORE_SHOWING_SPINNER;
import static com.google.android.libraries.feed.common.testing.RunnableSubject.assertThatRunnable;
import static com.google.common.truth.Truth.assertThat;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -62,7 +63,7 @@
import com.google.android.libraries.feed.basicstream.internal.scroll.ScrollRestorer;
import com.google.android.libraries.feed.basicstream.internal.viewloggingupdater.ViewLoggingUpdater;
import com.google.android.libraries.feed.common.concurrent.MainThreadRunner;
-import com.google.android.libraries.feed.common.concurrent.testing.FakeMainThreadRunner;
+import com.google.android.libraries.feed.common.concurrent.testing.ClockBackedFakeMainThreadRunner;
import com.google.android.libraries.feed.common.functional.Consumer;
import com.google.android.libraries.feed.common.time.Clock;
import com.google.android.libraries.feed.common.time.testing.FakeClock;
@@ -160,7 +161,7 @@
private Context context;
private FakeClock clock;
private BasicStreamForTest basicStream;
- private FakeMainThreadRunner mainThreadRunner;
+ private ClockBackedFakeMainThreadRunner mainThreadRunner;
private List<Header> headers;
@Before
@@ -194,7 +195,7 @@
context = Robolectric.buildActivity(Activity.class).get();
clock = new FakeClock();
- mainThreadRunner = FakeMainThreadRunner.queueAllTasks();
+ mainThreadRunner = ClockBackedFakeMainThreadRunner.create(clock);
layoutManager = new LinearLayoutManagerWithFakePositioning(context);
basicStream = createBasicStream(layoutManager);
@@ -323,12 +324,16 @@
@Test
public void testOnSessionStart_logsOnOpenedWithNoImmediateContent() {
- clock = clock.set(10);
basicStream.onShow();
reset(streamDriver);
when(streamDriver.hasContent()).thenReturn(false);
- clock = clock.set(11 + LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS);
+ // Advance so that the spinner starts showing
+ clock.advance(MINIMUM_TIME_BEFORE_SHOWING_SPINNER);
+
+ // Advance so that is has taken long enough that onOpenedWithNoImmediateContent is logged.
+ clock.advance(LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS);
+
basicStream.onSessionStart();
verify(basicLoggingApi).onOpenedWithNoImmediateContent();
@@ -597,18 +602,14 @@
@Test
public void testRestore_showsZeroStateIfNoSessionToRestore() {
- basicStream.onShow();
- mainThreadRunner.runAllTasks();
-
- basicStream.onHide();
- basicStream.onDestroy();
-
- reset(streamDriver);
basicStream = createBasicStream(new LinearLayoutManagerWithFakePositioning(context));
basicStream.onCreate(Bundle.EMPTY);
basicStream.onShow();
- mainThreadRunner.runAllTasks();
+
+ verify(streamDriver, never()).showSpinner();
+
+ clock.advance(MINIMUM_TIME_BEFORE_SHOWING_SPINNER);
verify(streamDriver).showSpinner();
}
@@ -974,28 +975,36 @@
@Test
public void testOnSessionStart_showsContentImmediately_ifSpinnerTimeElapsed() {
- clock.set(10);
basicStream.onShow();
- mainThreadRunner.runAllTasks();
reset(adapter);
- clock.set(10 + MINIMUM_SPINNER_SHOW_TIME);
+
+ // Advance so the spinner is shown.
+ clock.advance(MINIMUM_TIME_BEFORE_SHOWING_SPINNER);
+
+ // Advance so that it has shown long enough
+ clock.advance(MINIMUM_SPINNER_SHOW_TIME);
basicStream.onSessionStart();
+
+ // The adapter should be immediately set in onSesssionStart
verify(adapter).setDriver(streamDriver);
}
@Test
public void testOnSessionStart_showsContentWithDelay_ifSpinnerTimeNotElapsed() {
- clock.set(10);
-
basicStream.onShow();
- mainThreadRunner.runAllTasks();
+
+ // Advance so the spinner is shown.
+ clock.advance(MINIMUM_TIME_BEFORE_SHOWING_SPINNER);
+
reset(adapter);
basicStream.onSessionStart();
verify(adapter, never()).setDriver(any(StreamDriver.class));
- mainThreadRunner.runAllTasks();
+ // Advance so that it has shown long enough.
+ clock.advance(MINIMUM_SPINNER_SHOW_TIME);
+
verify(adapter).setDriver(streamDriver);
}
@@ -1004,13 +1013,18 @@
clock.set(10);
basicStream.onShow();
- mainThreadRunner.runAllTasks();
+
reset(adapter);
+ // Advance so the spinner is shown.
+ clock.advance(MINIMUM_TIME_BEFORE_SHOWING_SPINNER);
+
basicStream.onSessionStart();
basicStream.onSessionFinished(UiContext.getDefaultInstance());
- mainThreadRunner.runAllTasks();
+ // Advance so that it has shown long enough.
+ clock.advance(MINIMUM_SPINNER_SHOW_TIME);
+
verify(adapter, never()).setDriver(streamDriver);
}
@@ -1029,7 +1043,9 @@
verify(streamDriver, never()).showZeroState(/* zeroStateShowReason= */ anyInt());
verify(streamDriver, never()).showSpinner();
- mainThreadRunner.runAllTasks();
+
+ // Advance so the spinner is shown.
+ clock.advance(MINIMUM_TIME_BEFORE_SHOWING_SPINNER);
verify(streamDriver).showSpinner();
}