Skip to content

Commit

Permalink
NewPlayerImpl tests: tested addToPlaylist, movePlaylistItem, removePl…
Browse files Browse the repository at this point in the history
…aylistItem, selectChapter and release functions
  • Loading branch information
nicholasala committed Dec 8, 2024
1 parent ab39f5d commit 99eac56
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import android.content.pm.ServiceInfo
import android.os.Looper
import android.text.TextUtils
import android.util.Log
import androidx.media3.common.MediaItem
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.session.MediaController
import androidx.media3.session.SessionToken
Expand All @@ -22,18 +23,20 @@ import io.mockk.mockkStatic
import io.mockk.verify
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.resetMain
import kotlinx.coroutines.test.setMain
import net.newpipe.newplayer.repository.DelayTestRepository
import net.newpipe.newplayer.repository.MockMediaRepository
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Ignore
import org.junit.Test

@OptIn(ExperimentalCoroutinesApi::class)
class NewPlayerImpltest {
val mockExoPlayer = mockk<ExoPlayer>(relaxed = true)
val mockMediaController = mockk<MediaController>(relaxed = true)
val mockApp = mockk<Application>(relaxed = true)
val playerActivityClass = Activity::class.java
val repository = DelayTestRepository(MockMediaRepository(), 100)
Expand All @@ -53,7 +56,6 @@ class NewPlayerImpltest {
mockkConstructor(MediaController.Builder::class)

val mockLooper = mockk<Looper>(relaxed = true)
val mockMediaController = mockk<MediaController>(relaxed = true)
val mockPackageManager = mockk<PackageManager>(relaxed = true)
val mockResolveInfo = mockk<ResolveInfo>(relaxed = true)
val mockServiceInfo = mockk<ServiceInfo>(relaxed = true)
Expand All @@ -78,7 +80,7 @@ class NewPlayerImpltest {
@JvmStatic
@BeforeClass
fun init() {
Dispatchers.setMain(StandardTestDispatcher())
Dispatchers.setMain(UnconfinedTestDispatcher())
}

@JvmStatic
Expand Down Expand Up @@ -165,5 +167,74 @@ class NewPlayerImpltest {
verify (exactly = 1) { mockExoPlayer.pause() }
}


@Test
fun addToPlaylist_prepareExoPlayerIfNotPrepared() {
player.addToPlaylist("item")
verify (exactly = 1) { mockExoPlayer.prepare() }
}

@Test
fun addToPlaylist_notPrepareExoPlayerIfAlreadyPrepared() {
player.prepare()
clearMocks(mockExoPlayer)
player.addToPlaylist("item")
verify (exactly = 0) { mockExoPlayer.prepare() }
}

@Ignore("Find a way to test code inside launchJobAndCollectError")
@Test
fun addToPlaylist_addMediaSource() {
player.addToPlaylist("item")
// try {
// Dispatchers.Main.job.join()
// } catch (e : Exception) { }
// coVerify (exactly = 2) { mockExoPlayer.addMediaSource(any()) }
}

@Test
fun movePlaylistItem() {
player.prepare()
player.movePlaylistItem(0, 1)
verify (exactly = 1){ mockExoPlayer.moveMediaItem(0, 1) }
}

@Test
fun removePlaylistItem_removeItem() {
player.prepare()
val mediaItem = MediaItem.Builder().setMediaId("123").build()
every { mockExoPlayer.mediaItemCount } returns 1
every { mockExoPlayer.getMediaItemAt(any()) } returns mediaItem
player.removePlaylistItem(123)
verify (exactly = 1) { mockExoPlayer.removeMediaItem(0) }
}

@Test
fun removePlaylistItem_notRemoveItem() {
player.prepare()
val mediaItem = MediaItem.Builder().setMediaId("123").build()
every { mockExoPlayer.mediaItemCount } returns 1
every { mockExoPlayer.getMediaItemAt(any()) } returns mediaItem
player.removePlaylistItem(124)
verify (exactly = 0) { mockExoPlayer.removeMediaItem(0) }
}

@Ignore("Mock currentChapters.value and test the selection of a chapter")
@Test
fun selectChapter() {
player.selectChapter(0)
}

@Test(expected = IndexOutOfBoundsException::class)
fun selectChapter_throwsException() {
player.selectChapter(3)
}

@Test
fun release() {
player.prepare()
player.release()
verify (exactly = 1) { mockMediaController.release() }
verify (exactly = 1) { mockExoPlayer.release() }
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import org.junit.Test
import org.junit.Assert.*
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Ignore

@OptIn(ExperimentalCoroutinesApi::class)
class CachingRepositoryTest {
Expand Down Expand Up @@ -157,33 +158,33 @@ class CachingRepositoryTest {
assertNotNull(repository.getHttpDataSourceFactory("item"))
}

// TODO
// @Test
// fun flush_flushTheCaches() = runTest {
// repository.getMetaInfo("item")
// repository.getStreams("item")
// repository.getSubtitles("item")
// repository.getPreviewThumbnail("item", 1000)
// repository.getPreviewThumbnailsInfo("item")
// repository.getChapters("item")
// repository.getTimestampLink("item", 0)
//
// repository.flush()
//
// repository.getMetaInfo("item")
// repository.getStreams("item")
// repository.getSubtitles("item")
// repository.getPreviewThumbnail("item", 1000)
// repository.getPreviewThumbnailsInfo("item")
// repository.getChapters("item")
// repository.getTimestampLink("item", 0)
//
// coVerify (exactly = 2) { mockMediaRepository.getMetaInfo("item") }
// coVerify (exactly = 2) { mockMediaRepository.getStreams("item") }
// coVerify (exactly = 2) { mockMediaRepository.getSubtitles("item") }
// coVerify (exactly = 2) { mockMediaRepository.getPreviewThumbnail("item", 1000) }
// coVerify (exactly = 2) { mockMediaRepository.getPreviewThumbnailsInfo("item") }
// coVerify (exactly = 2) { mockMediaRepository.getChapters("item") }
// coVerify (exactly = 2) { mockMediaRepository.getTimestampLink("item", 0) }
// }
@Ignore("Test flush if the job is cancelled using cacheRepoScope and the test is interrupted")
@Test
fun flush_flushTheCaches() = runTest {
repository.getMetaInfo("item")
repository.getStreams("item")
repository.getSubtitles("item")
repository.getPreviewThumbnail("item", 1000)
repository.getPreviewThumbnailsInfo("item")
repository.getChapters("item")
repository.getTimestampLink("item", 0)

repository.flush()

repository.getMetaInfo("item")
repository.getStreams("item")
repository.getSubtitles("item")
repository.getPreviewThumbnail("item", 1000)
repository.getPreviewThumbnailsInfo("item")
repository.getChapters("item")
repository.getTimestampLink("item", 0)

coVerify (exactly = 2) { mockMediaRepository.getMetaInfo("item") }
coVerify (exactly = 2) { mockMediaRepository.getStreams("item") }
coVerify (exactly = 2) { mockMediaRepository.getSubtitles("item") }
coVerify (exactly = 2) { mockMediaRepository.getPreviewThumbnail("item", 1000) }
coVerify (exactly = 2) { mockMediaRepository.getPreviewThumbnailsInfo("item") }
coVerify (exactly = 2) { mockMediaRepository.getChapters("item") }
coVerify (exactly = 2) { mockMediaRepository.getTimestampLink("item", 0) }
}
}

0 comments on commit 99eac56

Please sign in to comment.