committed by
Geoffrey Métais
4 changed files with 174 additions and 1 deletions
@ -0,0 +1,32 @@ |
|||
package org.videolan.vlc.util |
|||
|
|||
|
|||
import org.junit.runners.model.FrameworkMethod |
|||
import org.junit.runners.model.InitializationError |
|||
import org.robolectric.RobolectricTestRunner |
|||
import org.robolectric.annotation.Config |
|||
import org.robolectric.internal.SandboxTestRunner |
|||
import org.robolectric.internal.bytecode.Sandbox |
|||
import java.lang.reflect.Method |
|||
|
|||
class RoboLiteTestRunner(cls: Class<*>) : RobolectricTestRunner(cls) { |
|||
|
|||
override fun beforeTest(sandbox: Sandbox?, method: FrameworkMethod?, bootstrappedMethod: Method?) { |
|||
} |
|||
|
|||
override fun afterTest(method: FrameworkMethod?, bootstrappedMethod: Method?) { |
|||
} |
|||
|
|||
override fun getHelperTestRunner(bootstrappedTestClass: Class<*>?): SandboxTestRunner.HelperTestRunner { |
|||
try { |
|||
return SandboxTestRunner.HelperTestRunner(bootstrappedTestClass) |
|||
} catch (initializationError: InitializationError) { |
|||
throw RuntimeException(initializationError) |
|||
} |
|||
} |
|||
|
|||
override fun buildGlobalConfig(): Config { |
|||
return Config.Builder().setManifest(Config.NONE).build() |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,130 @@ |
|||
package org.videolan.vlc.viewmodels |
|||
|
|||
import android.content.Context |
|||
import android.net.Uri |
|||
import android.text.TextUtils |
|||
import androidx.arch.core.executor.testing.InstantTaskExecutorRule |
|||
import androidx.test.core.app.ApplicationProvider |
|||
import com.jraska.livedata.test |
|||
import junit.framework.TestCase.assertEquals |
|||
import kotlinx.coroutines.Dispatchers |
|||
import kotlinx.coroutines.ExperimentalCoroutinesApi |
|||
import kotlinx.coroutines.test.setMain |
|||
import org.junit.Before |
|||
import org.junit.Rule |
|||
import org.junit.Test |
|||
import org.junit.runner.RunWith |
|||
import org.mockito.Mock |
|||
import org.mockito.Mockito.* |
|||
import org.powermock.api.mockito.PowerMockito |
|||
import org.powermock.core.classloader.annotations.PowerMockIgnore |
|||
import org.powermock.core.classloader.annotations.PrepareForTest |
|||
import org.powermock.modules.junit4.PowerMockRunner |
|||
import org.powermock.modules.junit4.PowerMockRunnerDelegate |
|||
import org.robolectric.RobolectricTestRunner |
|||
import org.videolan.libvlc.LibVLC |
|||
import org.videolan.medialibrary.Medialibrary |
|||
import org.videolan.medialibrary.media.MediaWrapper |
|||
import org.videolan.vlc.util.RoboLiteTestRunner |
|||
import org.videolan.vlc.util.TestUtil |
|||
import org.videolan.vlc.util.mock |
|||
import java.io.File |
|||
import org.mockito.junit.MockitoJUnit |
|||
import org.mockito.junit.MockitoRule |
|||
import org.powermock.modules.junit4.rule.PowerMockRule |
|||
import org.robolectric.annotation.Config |
|||
|
|||
|
|||
//@RunWith(RoboLiteTestRunner::class) |
|||
@RunWith(PowerMockRunner::class) |
|||
//@PowerMockRunnerDelegate(RobolectricTestRunner::class) |
|||
//@Config(sdk=[21]) |
|||
@PrepareForTest(value = [Medialibrary::class, LibVLC::class, System::class, Uri::class, TextUtils::class]) |
|||
@PowerMockIgnore(value = ["javax.management.*", "org.apache.http.conn.ssl.*", "com.amazonaws.http.conn.ssl.*", "javax.net.ssl.*", "androidx.*"]) |
|||
class StreamsModelTest { |
|||
|
|||
private val mockedLibrary: Medialibrary = PowerMockito.spy(Medialibrary()) |
|||
|
|||
private val context: Context = mock() |
|||
|
|||
private lateinit var streamsModel: StreamsModel |
|||
|
|||
// @Rule |
|||
// @JvmField |
|||
// val powerMockRule = PowerMockRule() |
|||
|
|||
@Rule |
|||
@JvmField |
|||
//To prevent Method getMainLooper in android.os.Looper not mocked error when setting value for MutableLiveData |
|||
val instantExecutorRule = InstantTaskExecutorRule() |
|||
|
|||
@ExperimentalCoroutinesApi |
|||
@Before |
|||
fun setUp() { |
|||
`when`(context.getExternalFilesDir(any())).thenReturn(File("./")) |
|||
`when`(context.getDir(any(), anyInt())).thenReturn(File("./")) |
|||
|
|||
PowerMockito.mockStatic(Medialibrary::class.java) |
|||
PowerMockito.mockStatic(System::class.java) |
|||
PowerMockito.mockStatic(Uri::class.java) |
|||
PowerMockito.mockStatic(TextUtils::class.java) |
|||
|
|||
PowerMockito.suppress(PowerMockito.method(System::class.java, "loadLibrary", String::class.java)) |
|||
PowerMockito.`when`(Medialibrary.getInstance()).thenReturn(mockedLibrary) |
|||
|
|||
Dispatchers.setMain(Dispatchers.Unconfined) |
|||
streamsModel = StreamsModel(context) |
|||
} |
|||
|
|||
@Test |
|||
fun failedInitialization_GetEmptyCollection() { |
|||
PowerMockito.doReturn(Medialibrary.ML_INIT_FAILED).`when`(mockedLibrary, "nativeInit", any(), any()) |
|||
|
|||
mockedLibrary.init(context) |
|||
|
|||
val testResult: MutableList<MediaWrapper> = mutableListOf() |
|||
streamsModel.refresh() |
|||
streamsModel.dataset |
|||
.test() |
|||
.awaitValue() |
|||
.assertHasValue() |
|||
.assertValue(testResult) |
|||
} |
|||
|
|||
@Test |
|||
fun addTwoMediaHistory_GetTwoPlayedMediaStreams() { |
|||
// Setup |
|||
val mockedUri1: Uri = mock() |
|||
val mockedUri2: Uri = mock() |
|||
|
|||
val fakeMediaStrings = TestUtil.createNetworkUris(2) |
|||
|
|||
`when`(Uri.parse(eq(fakeMediaStrings[0]))).thenReturn(mockedUri1) |
|||
`when`(mockedUri1.lastPathSegment).thenReturn(fakeMediaStrings[0]) |
|||
`when`(mockedUri1.toString()).thenReturn(fakeMediaStrings[0]) |
|||
`when`(Uri.parse(eq(fakeMediaStrings[1]))).thenReturn(mockedUri2) |
|||
`when`(mockedUri2.lastPathSegment).thenReturn(fakeMediaStrings[1]) |
|||
`when`(mockedUri2.toString()).thenReturn(fakeMediaStrings[1]) |
|||
|
|||
val fakeMedias = fakeMediaStrings.map { s -> MediaWrapper(Uri.parse(s)) } |
|||
val result = fakeMedias.toTypedArray() |
|||
|
|||
PowerMockito.doReturn(Medialibrary.ML_INIT_SUCCESS).`when`(mockedLibrary, "nativeInit", any(), any()) |
|||
PowerMockito.doReturn(result).`when`(mockedLibrary, "nativeLastStreamsPlayed") |
|||
|
|||
// Execution |
|||
mockedLibrary.init(context) |
|||
streamsModel.refresh() |
|||
|
|||
// Assertions |
|||
val getResult = streamsModel.dataset |
|||
.test() |
|||
.awaitValue() |
|||
.assertHasValue() |
|||
.value() |
|||
|
|||
assertEquals(2, getResult.size) |
|||
assertEquals(result[0], getResult[0]) |
|||
assertEquals(result[1], getResult[1]) |
|||
} |
|||
} |
|||
Loading…
Reference in new issue