Skip to content

Commit b3dd8dd

Browse files
committed
Add PlayLog test 16
1 parent 6c7a861 commit b3dd8dd

File tree

3 files changed

+74
-4
lines changed

3 files changed

+74
-4
lines changed

player/src/androidTest/kotlin/com/tidal/sdk/player/playlog/Extensions.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ package com.tidal.sdk.player.playlog
22

33
import assertk.Assert
44
import assertk.assertions.isCloseTo
5+
import kotlin.math.absoluteValue
56

67
internal fun Assert<Double>.isAssetPositionEqualTo(targetPosition: Double) =
78
isCloseTo(targetPosition, 0.5)
9+
10+
internal fun Double.isAssetPositionEqualTo(targetPosition: Double) =
11+
(this - targetPosition).absoluteValue < 0.5

player/src/androidTest/kotlin/com/tidal/sdk/player/playlog/SingleMediaProductPlayLogTest.kt

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,76 @@ internal class SingleMediaProductPlayLogTest {
825825
eq(emptyMap()),
826826
)
827827
}
828+
829+
@Suppress("CyclomaticComplexMethod", "LongMethod")
830+
@Test
831+
fun seekBeyondBoundsWithRepeatOne() = runTest {
832+
val gson = Gson()
833+
834+
player.playbackEngine.load(mediaProduct)
835+
player.playbackEngine.setRepeatOne(true)
836+
player.playbackEngine.play()
837+
withContext(Dispatchers.Default.limitedParallelism(1)) {
838+
delay(2.seconds)
839+
while (player.playbackEngine.assetPosition < 2) {
840+
delay(10.milliseconds)
841+
}
842+
player.playbackEngine.seek(10_000F)
843+
delay(1.seconds)
844+
while (player.playbackEngine.assetPosition < 1) {
845+
delay(10.milliseconds)
846+
}
847+
player.playbackEngine.reset()
848+
}
849+
850+
eventReporterCoroutineScope.advanceUntilIdle()
851+
verify(eventSender).sendEvent(
852+
eq("playback_session"),
853+
eq(ConsentCategory.NECESSARY),
854+
argThat {
855+
with(gson.fromJson(this, JsonObject::class.java)["payload"].asJsonObject) {
856+
get("startAssetPosition").asDouble.isAssetPositionEqualTo(0.0) &&
857+
get("endAssetPosition").asDouble
858+
.isAssetPositionEqualTo(MEDIA_PRODUCT_DURATION_SECONDS) &&
859+
get("actualProductId")?.asString.contentEquals(mediaProduct.productId) &&
860+
get("sourceType")?.asString.contentEquals(mediaProduct.sourceType) &&
861+
get("sourceId")?.asString.contentEquals(mediaProduct.sourceId) &&
862+
get("actions").asJsonArray.run {
863+
val stopAction =
864+
gson.fromJson(this[0], PlaybackSession.Payload.Action::class.java)
865+
val startAction =
866+
gson.fromJson(this[1], PlaybackSession.Payload.Action::class.java)
867+
val perfectResumeTimestamp = stopAction.timestamp
868+
stopAction.actionType ==
869+
PlaybackSession.Payload.Action.Type.PLAYBACK_STOP &&
870+
stopAction.assetPositionSeconds.isAssetPositionEqualTo(2.0) &&
871+
startAction.actionType ==
872+
PlaybackSession.Payload.Action.Type.PLAYBACK_START &&
873+
startAction.assetPositionSeconds
874+
.isAssetPositionEqualTo(MEDIA_PRODUCT_DURATION_SECONDS) &&
875+
startAction.timestamp in
876+
(perfectResumeTimestamp - 500)..(perfectResumeTimestamp + 500)
877+
}
878+
}
879+
},
880+
eq(emptyMap()),
881+
)
882+
verify(eventSender).sendEvent(
883+
eq("playback_session"),
884+
eq(ConsentCategory.NECESSARY),
885+
argThat {
886+
with(gson.fromJson(this, JsonObject::class.java)["payload"].asJsonObject) {
887+
get("startAssetPosition").asDouble.isAssetPositionEqualTo(0.0) &&
888+
get("endAssetPosition").asDouble.isAssetPositionEqualTo(1.0) &&
889+
get("actualProductId")?.asString.contentEquals(mediaProduct.productId) &&
890+
get("sourceType")?.asString.contentEquals(mediaProduct.sourceType) &&
891+
get("sourceId")?.asString.contentEquals(mediaProduct.sourceId) &&
892+
get("actions").asJsonArray.isEmpty
893+
}
894+
},
895+
eq(emptyMap()),
896+
)
897+
}
828898
}
829899

830900
private const val MEDIA_PRODUCT_DURATION_SECONDS = 5.055

player/src/androidTest/kotlin/com/tidal/sdk/player/playlog/TwoMediaProductsPlayLogTest.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import com.tidal.sdk.player.events.playlogtest.PlayLogTestDefaultEventReporterCo
2020
import com.tidal.sdk.player.events.reflectionComponentFactoryF
2121
import com.tidal.sdk.player.playbackengine.model.Event
2222
import com.tidal.sdk.player.setBodyFromFile
23-
import kotlin.math.absoluteValue
2423
import kotlin.time.Duration.Companion.milliseconds
2524
import kotlin.time.Duration.Companion.minutes
2625
import kotlin.time.Duration.Companion.seconds
@@ -299,7 +298,4 @@ internal class TwoMediaProductsPlayLogTest {
299298
eq(emptyMap()),
300299
)
301300
}
302-
303-
private fun Double.isAssetPositionEqualTo(targetPosition: Double) =
304-
(this - targetPosition).absoluteValue < 0.5
305301
}

0 commit comments

Comments
 (0)