From 14d40b0faf3f6e0313eed4bcd0d1cb11f4b6ed05 Mon Sep 17 00:00:00 2001 From: tonihei Date: Tue, 9 Apr 2019 10:46:17 +0100 Subject: [PATCH] Fix test which is relying on wrong Robolectric behavior. Robolectric calls messages posted to the main thread immediately inline. This will change in the upcoming release and will break tests implicitly relying on that behavior. Update ConcatenatingMediaSourceTest to actually wait for the posted message. PiperOrigin-RevId: 242631531 --- .../source/ConcatenatingMediaSourceTest.java | 114 +++++++++++++----- 1 file changed, 81 insertions(+), 33 deletions(-) diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java index 685801abdf..2c4ca7c334 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/ConcatenatingMediaSourceTest.java @@ -18,7 +18,6 @@ package com.google.android.exoplayer2.source; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; import android.os.ConditionVariable; import android.os.Handler; @@ -417,60 +416,101 @@ public final class ConcatenatingMediaSourceTest { @Test public void testCustomCallbackBeforePreparationAddSingle() { - Runnable runnable = mock(Runnable.class); + ConditionVariable runnableInvoked = new ConditionVariable(); - mediaSource.addMediaSource(createFakeMediaSource(), new Handler(), runnable); - verify(runnable).run(); + DummyMainThread dummyMainThread = new DummyMainThread(); + dummyMainThread.runOnMainThread( + () -> + mediaSource.addMediaSource( + createFakeMediaSource(), new Handler(), runnableInvoked::open)); + runnableInvoked.block(MediaSourceTestRunner.TIMEOUT_MS); + dummyMainThread.release(); + + assertThat(runnableInvoked.block(0)).isTrue(); } @Test public void testCustomCallbackBeforePreparationAddMultiple() { - Runnable runnable = mock(Runnable.class); + ConditionVariable runnableInvoked = new ConditionVariable(); - mediaSource.addMediaSources( - Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), - new Handler(), - runnable); - verify(runnable).run(); + DummyMainThread dummyMainThread = new DummyMainThread(); + dummyMainThread.runOnMainThread( + () -> + mediaSource.addMediaSources( + Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), + new Handler(), + runnableInvoked::open)); + runnableInvoked.block(MediaSourceTestRunner.TIMEOUT_MS); + dummyMainThread.release(); + + assertThat(runnableInvoked.block(0)).isTrue(); } @Test public void testCustomCallbackBeforePreparationAddSingleWithIndex() { - Runnable runnable = mock(Runnable.class); + ConditionVariable runnableInvoked = new ConditionVariable(); - mediaSource.addMediaSource(/* index */ 0, createFakeMediaSource(), new Handler(), runnable); - verify(runnable).run(); + DummyMainThread dummyMainThread = new DummyMainThread(); + dummyMainThread.runOnMainThread( + () -> + mediaSource.addMediaSource( + /* index */ 0, createFakeMediaSource(), new Handler(), runnableInvoked::open)); + runnableInvoked.block(MediaSourceTestRunner.TIMEOUT_MS); + dummyMainThread.release(); + + assertThat(runnableInvoked.block(0)).isTrue(); } @Test public void testCustomCallbackBeforePreparationAddMultipleWithIndex() { - Runnable runnable = mock(Runnable.class); + ConditionVariable runnableInvoked = new ConditionVariable(); - mediaSource.addMediaSources( - /* index */ 0, - Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), - new Handler(), - runnable); - verify(runnable).run(); + DummyMainThread dummyMainThread = new DummyMainThread(); + dummyMainThread.runOnMainThread( + () -> + mediaSource.addMediaSources( + /* index */ 0, + Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()}), + new Handler(), + runnableInvoked::open)); + runnableInvoked.block(MediaSourceTestRunner.TIMEOUT_MS); + dummyMainThread.release(); + + assertThat(runnableInvoked.block(0)).isTrue(); } @Test public void testCustomCallbackBeforePreparationRemove() { - Runnable runnable = mock(Runnable.class); + ConditionVariable runnableInvoked = new ConditionVariable(); - mediaSource.addMediaSource(createFakeMediaSource()); - mediaSource.removeMediaSource(/* index */ 0, new Handler(), runnable); - verify(runnable).run(); + DummyMainThread dummyMainThread = new DummyMainThread(); + dummyMainThread.runOnMainThread( + () -> { + mediaSource.addMediaSource(createFakeMediaSource()); + mediaSource.removeMediaSource(/* index */ 0, new Handler(), runnableInvoked::open); + }); + runnableInvoked.block(MediaSourceTestRunner.TIMEOUT_MS); + dummyMainThread.release(); + + assertThat(runnableInvoked.block(0)).isTrue(); } @Test public void testCustomCallbackBeforePreparationMove() { - Runnable runnable = mock(Runnable.class); + ConditionVariable runnableInvoked = new ConditionVariable(); - mediaSource.addMediaSources( - Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()})); - mediaSource.moveMediaSource(/* fromIndex */ 1, /* toIndex */ 0, new Handler(), runnable); - verify(runnable).run(); + DummyMainThread dummyMainThread = new DummyMainThread(); + dummyMainThread.runOnMainThread( + () -> { + mediaSource.addMediaSources( + Arrays.asList(new MediaSource[] {createFakeMediaSource(), createFakeMediaSource()})); + mediaSource.moveMediaSource( + /* fromIndex */ 1, /* toIndex */ 0, new Handler(), runnableInvoked::open); + }); + runnableInvoked.block(MediaSourceTestRunner.TIMEOUT_MS); + dummyMainThread.release(); + + assertThat(runnableInvoked.block(0)).isTrue(); } @Test @@ -997,11 +1037,19 @@ public final class ConcatenatingMediaSourceTest { @Test public void testCustomCallbackBeforePreparationSetShuffleOrder() throws Exception { - Runnable runnable = mock(Runnable.class); - mediaSource.setShuffleOrder( - new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 0), new Handler(), runnable); + ConditionVariable runnableInvoked = new ConditionVariable(); - verify(runnable).run(); + DummyMainThread dummyMainThread = new DummyMainThread(); + dummyMainThread.runOnMainThread( + () -> + mediaSource.setShuffleOrder( + new ShuffleOrder.UnshuffledShuffleOrder(/* length= */ 0), + new Handler(), + runnableInvoked::open)); + runnableInvoked.block(MediaSourceTestRunner.TIMEOUT_MS); + dummyMainThread.release(); + + assertThat(runnableInvoked.block(0)).isTrue(); } @Test