David Liu

get unit tests back up and running

... ... @@ -11,7 +11,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.1'
classpath 'com.android.tools.build:gradle:7.0.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
... ...
... ... @@ -31,9 +31,13 @@ android {
sourceSets {
main.java.srcDirs += "${protobuf.generatedFilesBaseDir}/main/javalite"
main.proto.srcDirs += "${generated.protoSrc}"
}
testOptions {
unitTests {
includeAndroidResources = true
}
}
compileOptions {
sourceCompatibility java_version
targetCompatibility java_version
... ... @@ -90,6 +94,7 @@ dokkaHtml {
}
dependencies {
protobuf files(generated.protoSrc)
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3'
... ... @@ -106,10 +111,13 @@ dependencies {
implementation 'com.vdurmont:semver4j:3.1.0'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.robolectric:robolectric:4.6'
testImplementation 'org.mockito:mockito-core:3.8.0'
testImplementation "org.mockito.kotlin:mockito-kotlin:3.1.0"
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
testImplementation 'androidx.test:core:1.4.0'
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.3"
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
apply from: rootProject.file('gradle/gradle-mvn-push.gradle')
... ...
package io.livekit.android.room
import android.content.Context
import androidx.test.core.app.ApplicationProvider
import io.livekit.android.room.mock.MockEglBase
import io.livekit.android.room.participant.LocalParticipant
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.TestCoroutineScope
import kotlinx.coroutines.withTimeoutOrNull
import livekit.LivekitModels
import org.junit.Assert
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.junit.MockitoJUnit
import org.robolectric.RobolectricTestRunner
import org.webrtc.EglBase
import org.webrtc.PeerConnectionFactory
@ExperimentalCoroutinesApi
@RunWith(RobolectricTestRunner::class)
class RoomTest {
@get:Rule
var mockitoRule = MockitoJUnit.rule()
lateinit var context: Context
@Mock
lateinit var rtcEngine: RTCEngine
@Mock
lateinit var peerConnectionFactory: PeerConnectionFactory
var eglBase: EglBase = MockEglBase()
val localParticantFactory = object : LocalParticipant.Factory {
override fun create(info: LivekitModels.ParticipantInfo): LocalParticipant {
return LocalParticipant(
info,
rtcEngine,
peerConnectionFactory,
context,
eglBase,
)
}
}
lateinit var room: Room
@Before
fun setup() {
context = ApplicationProvider.getApplicationContext()
room = Room(
context,
rtcEngine,
eglBase,
localParticantFactory
)
}
@Test
fun connectTest() {
val job = TestCoroutineScope().launch {
room.connect(
url = "http://www.example.com",
token = "",
options = null
)
}
room.onIceConnected()
runBlocking {
Assert.assertNotNull(
withTimeoutOrNull(1000) {
job.join()
}
)
}
}
}
\ No newline at end of file
... ...
package io.livekit.android.room.mock
import android.graphics.SurfaceTexture
import android.view.Surface
import org.webrtc.EglBase
class MockEglBase(
private val eglContext: EglBase.Context = EglBase.Context { 0 }
) : EglBase {
override fun createSurface(p0: Surface?) {}
override fun createSurface(p0: SurfaceTexture?) {}
override fun createDummyPbufferSurface() {}
override fun createPbufferSurface(p0: Int, p1: Int) {}
override fun getEglBaseContext(): EglBase.Context = eglContext
override fun hasSurface(): Boolean = false
override fun surfaceWidth(): Int = 0
override fun surfaceHeight(): Int = 0
override fun releaseSurface() {}
override fun release() {}
override fun makeCurrent() {}
override fun detachCurrent() {}
override fun swapBuffers() {}
override fun swapBuffers(p0: Long) {}
}
\ No newline at end of file
... ...