Skip to content

Commit 4615146

Browse files
authored
830 reduce flakiness of some tests (#846)
1 parent 50e3c8f commit 4615146

File tree

27 files changed

+324
-292
lines changed

27 files changed

+324
-292
lines changed

pillarbox-analytics/src/test/java/ch/srgssr/pillarbox/analytics/SRGAnalyticsSingletonTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import android.content.Context
99
import androidx.test.core.app.ApplicationProvider
1010
import androidx.test.ext.junit.runners.AndroidJUnit4
1111
import com.comscore.Analytics
12+
import io.mockk.clearAllMocks
1213
import io.mockk.mockkStatic
13-
import io.mockk.unmockkAll
1414
import org.junit.runner.RunWith
1515
import org.robolectric.Shadows.shadowOf
1616
import kotlin.test.AfterTest
@@ -37,7 +37,7 @@ class SRGAnalyticsSingletonTest {
3737

3838
@AfterTest
3939
fun tearDown() {
40-
unmockkAll()
40+
clearAllMocks()
4141
}
4242

4343
@Test(expected = IllegalArgumentException::class)

pillarbox-analytics/src/test/java/ch/srgssr/pillarbox/analytics/SRGAnalyticsTest.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import ch.srgssr.pillarbox.analytics.commandersact.CommandersActPageView
1010
import ch.srgssr.pillarbox.analytics.comscore.ComScore
1111
import ch.srgssr.pillarbox.analytics.comscore.ComScorePageView
1212
import io.mockk.Called
13+
import io.mockk.clearAllMocks
1314
import io.mockk.confirmVerified
1415
import io.mockk.mockk
1516
import io.mockk.verify
17+
import kotlin.test.AfterTest
1618
import kotlin.test.BeforeTest
1719
import kotlin.test.Test
1820

@@ -31,6 +33,11 @@ class SRGAnalyticsTest {
3133
)
3234
}
3335

36+
@AfterTest
37+
fun tearDown() {
38+
clearAllMocks()
39+
}
40+
3441
@Test
3542
fun `sendPageView invokes comScore and commandersAct`() {
3643
val commandersActPageView = CommandersActPageView(

pillarbox-analytics/src/test/java/ch/srgssr/pillarbox/analytics/comscore/ComScoreSrgTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
1010
import ch.srgssr.pillarbox.analytics.AnalyticsConfig
1111
import com.comscore.Analytics
1212
import com.comscore.PublisherConfiguration
13+
import io.mockk.clearAllMocks
1314
import io.mockk.confirmVerified
1415
import io.mockk.every
1516
import io.mockk.mockk
1617
import io.mockk.mockkStatic
17-
import io.mockk.unmockkAll
1818
import io.mockk.verify
1919
import org.junit.runner.RunWith
2020
import org.robolectric.Shadows.shadowOf
@@ -44,7 +44,7 @@ class ComScoreSrgTest {
4444

4545
@AfterTest
4646
fun tearDown() {
47-
unmockkAll()
47+
clearAllMocks()
4848
}
4949

5050
@Test(expected = IllegalArgumentException::class)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (c) SRG SSR. All rights reserved.
3+
* License information is available from the LICENSE file.
4+
*/
5+
package ch.srgssr.pillarbox.core.business
6+
7+
import android.content.Context
8+
import androidx.media3.common.C
9+
import androidx.media3.exoplayer.DefaultLoadControl
10+
import androidx.media3.test.utils.FakeClock
11+
import androidx.test.core.app.ApplicationProvider
12+
import ch.srgssr.pillarbox.player.PillarboxDsl
13+
import ch.srgssr.pillarbox.player.PillarboxExoPlayer
14+
import kotlin.coroutines.EmptyCoroutineContext
15+
16+
/**
17+
* Pillarbox ExoPlayer
18+
*
19+
* @param context The [Context], by default [ApplicationProvider.getApplicationContext]
20+
* @param block The block to further configure the [PillarboxExoPlayer].
21+
* @return [PillarboxExoPlayer] configured for tests.
22+
*/
23+
@PillarboxDsl
24+
fun PillarboxExoPlayer(context: Context = ApplicationProvider.getApplicationContext(), block: SRG.Builder.() -> Unit = {}): PillarboxExoPlayer {
25+
return PillarboxExoPlayer(context, SRG) {
26+
loadControl(DefaultLoadControl())
27+
clock(FakeClock(true))
28+
coroutineContext(EmptyCoroutineContext)
29+
disableMonitoring()
30+
block()
31+
}.apply {
32+
// FIXME Investigate why we need to disable the image track in tests
33+
trackSelectionParameters = trackSelectionParameters.buildUpon()
34+
.setTrackTypeDisabled(C.TRACK_TYPE_IMAGE, true)
35+
.build()
36+
}
37+
}

pillarbox-core-business/src/test/java/ch/srgssr/pillarbox/core/business/tracker/SRGEventLoggerTrackerTest.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,31 @@ package ch.srgssr.pillarbox.core.business.tracker
66

77
import androidx.media3.exoplayer.ExoPlayer
88
import androidx.test.ext.junit.runners.AndroidJUnit4
9+
import io.mockk.clearAllMocks
910
import io.mockk.mockk
1011
import io.mockk.verifySequence
1112
import org.junit.runner.RunWith
13+
import kotlin.test.AfterTest
14+
import kotlin.test.BeforeTest
1215
import kotlin.test.Test
1316

1417
@RunWith(AndroidJUnit4::class)
1518
class SRGEventLoggerTrackerTest {
19+
private lateinit var player: ExoPlayer
20+
21+
@BeforeTest
22+
fun setUp() {
23+
player = mockk(relaxed = true)
24+
}
25+
26+
@AfterTest
27+
fun tearDown() {
28+
clearAllMocks()
29+
}
30+
1631
@Test
1732
fun `event logger`() {
18-
val player = mockk<ExoPlayer>(relaxed = true)
1933
val eventLogger = SRGEventLoggerTracker.Factory().create()
20-
2134
eventLogger.start(player, Unit)
2235
eventLogger.stop(player)
2336

pillarbox-core-business/src/test/java/ch/srgssr/pillarbox/core/business/tracker/commandersact/CommandersActTrackerIntegrationTest.kt

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package ch.srgssr.pillarbox.core.business.tracker.commandersact
66

77
import android.content.Context
88
import android.os.Looper
9-
import androidx.media3.common.C
109
import androidx.media3.common.MediaItem
1110
import androidx.media3.common.Player
1211
import androidx.media3.exoplayer.ExoPlayer
@@ -42,7 +41,6 @@ import kotlinx.coroutines.test.advanceTimeBy
4241
import kotlinx.coroutines.test.runTest
4342
import org.junit.runner.RunWith
4443
import org.robolectric.Shadows.shadowOf
45-
import kotlin.coroutines.EmptyCoroutineContext
4644
import kotlin.math.abs
4745
import kotlin.test.AfterTest
4846
import kotlin.test.BeforeTest
@@ -70,29 +68,21 @@ class CommandersActTrackerIntegrationTest {
7068
testDispatcher = UnconfinedTestDispatcher()
7169

7270
val context = ApplicationProvider.getApplicationContext<Context>()
73-
val mediaCompositionWithFallbackService = LocalMediaCompositionWithFallbackService(context)
74-
player = PillarboxExoPlayer(context) {
71+
player = PillarboxExoPlayer {
72+
clock(clock)
7573
srgAssetLoader(context) {
76-
mediaCompositionService(mediaCompositionWithFallbackService)
74+
mediaCompositionService(LocalMediaCompositionWithFallbackService(context))
7775
commanderActTrackerFactory(CommandersActTracker.Factory(commandersAct = commandersAct, coroutineContext = testDispatcher))
7876
comscoreTrackerFactory(mockk(relaxed = true))
7977
}
80-
clock(clock)
81-
// Use other CoroutineContext to avoid infinite loop because Heartbeat is also running in Pillarbox.
82-
coroutineContext(EmptyCoroutineContext)
83-
}.apply {
84-
// FIXME Investigate why we need to disable the image track in tests
85-
trackSelectionParameters = trackSelectionParameters.buildUpon()
86-
.setTrackTypeDisabled(C.TRACK_TYPE_IMAGE, true)
87-
.build()
8878
}
8979
}
9080

9181
@AfterTest
9282
fun tearDown() {
93-
clearAllMocks()
9483
player.release()
9584
shadowOf(Looper.getMainLooper()).idle()
85+
clearAllMocks()
9686
}
9787

9888
@Test

pillarbox-core-business/src/test/java/ch/srgssr/pillarbox/core/business/tracker/comscore/ComScoreTrackerIntegrationTest.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import android.os.Looper
99
import android.view.SurfaceView
1010
import android.view.ViewGroup
1111
import androidx.core.view.updateLayoutParams
12-
import androidx.media3.common.C
1312
import androidx.media3.common.MediaItem
1413
import androidx.media3.common.Player
1514
import androidx.media3.test.utils.FakeClock
@@ -33,7 +32,6 @@ import io.mockk.verify
3332
import io.mockk.verifyOrder
3433
import org.junit.runner.RunWith
3534
import org.robolectric.Shadows.shadowOf
36-
import kotlin.coroutines.EmptyCoroutineContext
3735
import kotlin.test.AfterTest
3836
import kotlin.test.BeforeTest
3937
import kotlin.test.Ignore
@@ -57,28 +55,21 @@ class ComScoreTrackerIntegrationTest {
5755
ComScoreTracker(streamingAnalytics)
5856
}
5957
val context = ApplicationProvider.getApplicationContext<Context>()
60-
val mediaCompositionWithFallbackService = LocalMediaCompositionWithFallbackService(context)
61-
player = PillarboxExoPlayer(context) {
58+
player = PillarboxExoPlayer {
6259
clock(clock)
63-
coroutineContext(EmptyCoroutineContext)
6460
srgAssetLoader(context) {
65-
mediaCompositionService(mediaCompositionWithFallbackService)
61+
mediaCompositionService(LocalMediaCompositionWithFallbackService(context))
6662
comscoreTrackerFactory(comScoreFactory)
6763
commanderActTrackerFactory(mockk(relaxed = true))
6864
}
69-
}.apply {
70-
// FIXME Investigate why we need to disable the image track in tests
71-
trackSelectionParameters = trackSelectionParameters.buildUpon()
72-
.setTrackTypeDisabled(C.TRACK_TYPE_IMAGE, true)
73-
.build()
7465
}
7566
}
7667

7768
@AfterTest
7869
fun tearDown() {
79-
clearAllMocks()
8070
player.release()
8171
shadowOf(Looper.getMainLooper()).idle()
72+
clearAllMocks()
8273
}
8374

8475
@Test

pillarbox-core-business/src/test/java/ch/srgssr/pillarbox/core/business/tracker/comscore/ComScoreTrackerTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
1111
import ch.srgssr.pillarbox.analytics.BuildConfig
1212
import com.comscore.Analytics
1313
import com.comscore.streaming.StreamingAnalytics
14+
import io.mockk.clearAllMocks
1415
import io.mockk.confirmVerified
1516
import io.mockk.every
1617
import io.mockk.mockk
1718
import io.mockk.mockkStatic
18-
import io.mockk.unmockkAll
1919
import io.mockk.verify
2020
import org.junit.runner.RunWith
2121
import kotlin.test.AfterTest
@@ -33,7 +33,7 @@ class ComScoreTrackerTest {
3333

3434
@AfterTest
3535
fun tearDown() {
36-
unmockkAll()
36+
clearAllMocks()
3737
}
3838

3939
@Test

pillarbox-demo-shared/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@ dependencies {
5050
debugImplementation(libs.androidx.compose.ui.tooling)
5151

5252
testImplementation(libs.junit)
53+
testImplementation(libs.kotlin.test)
5354
}

pillarbox-demo-shared/src/test/java/ch/srgssr/pillarbox/demo/shared/ui/integrationLayer/data/ContentTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import ch.srg.dataProvider.integrationlayer.data.remote.Media
99
import ch.srg.dataProvider.integrationlayer.data.remote.MediaType
1010
import ch.srg.dataProvider.integrationlayer.data.remote.Type
1111
import ch.srg.dataProvider.integrationlayer.data.remote.Vendor
12-
import org.junit.Assert.assertEquals
13-
import org.junit.Test
1412
import java.util.Date
1513
import java.util.Locale
14+
import kotlin.test.Test
15+
import kotlin.test.assertEquals
1616
import kotlin.time.Duration.Companion.hours
1717
import kotlin.time.Duration.Companion.minutes
1818
import kotlin.time.Duration.Companion.seconds

0 commit comments

Comments
 (0)