David Liu

some more participant related tests

... ... @@ -5,8 +5,6 @@ apply plugin: 'kotlinx-serialization'
apply plugin: 'com.google.protobuf'
apply plugin: 'org.jetbrains.dokka'
import java.net.URL
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
... ... @@ -71,7 +69,7 @@ dokkaHtml {
// URL showing where the source code can be accessed through the web browser
remoteUrl.set(new URL(
"https://github.com/livekit/client-sdk-android/tree/master/livekit-android-sdk/src/main/java"))
"https://github.com/livekit/client-sdk-android/tree/master/livekit-android-sdk/src/main/java"))
// Suffix which is used to append the line number to the URL. Use #L for GitHub
remoteLineSuffix.set("#L")
}
... ... @@ -105,7 +103,9 @@ dependencies {
implementation 'com.github.ajalt:timberkt:1.5.1'
implementation 'com.vdurmont:semver4j:3.1.0'
testImplementation 'junit:junit:4.12'
testImplementation 'junit:junit:4.13.2'
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'
}
... ...
... ... @@ -16,8 +16,8 @@ import org.webrtc.VideoTrack
class RemoteParticipant(
val rtcClient: RTCClient,
sid: String,
name: String? = null,
) : Participant(sid, name) {
identity: String? = null,
) : Participant(sid, identity) {
/**
* @suppress
*/
... ...
... ... @@ -3,9 +3,11 @@ package io.livekit.android.room.track
import io.livekit.android.room.participant.LocalParticipant
import livekit.LivekitModels
class LocalTrackPublication(info: LivekitModels.TrackInfo,
track: Track? = null,
participant: LocalParticipant? = null) : TrackPublication(info, track, participant) {
class LocalTrackPublication(
info: LivekitModels.TrackInfo,
track: Track? = null,
participant: LocalParticipant
) : TrackPublication(info, track, participant) {
/**
* Mute or unmute the current track. Muting the track would stop audio or video from being
... ... @@ -22,7 +24,7 @@ class LocalTrackPublication(info: LivekitModels.TrackInfo,
this.muted = muted
// send updates to server
val participant = this.participant.get() as? LocalParticipant ?: return
val participant = this.participant as? LocalParticipant ?: return
participant.engine.updateMuteStatus(sid, muted)
... ...
... ... @@ -4,9 +4,11 @@ import io.livekit.android.room.participant.RemoteParticipant
import livekit.LivekitModels
import livekit.LivekitRtc
class RemoteTrackPublication(info: LivekitModels.TrackInfo,
track: Track? = null, participant:
RemoteParticipant? = null): TrackPublication(info, track, participant) {
class RemoteTrackPublication(
info: LivekitModels.TrackInfo,
track: Track? = null,
participant: RemoteParticipant
) : TrackPublication(info, track, participant) {
private var unsubscribed: Boolean = false
private var disabled: Boolean = false
... ... @@ -25,7 +27,7 @@ class RemoteTrackPublication(info: LivekitModels.TrackInfo,
return
}
field = v
val participant = this.participant.get() as? RemoteParticipant ?: return
val participant = this.participant as? RemoteParticipant ?: return
if (v) {
participant.listener?.onTrackMuted(this, participant)
participant.internalListener?.onTrackMuted(this, participant)
... ... @@ -40,7 +42,7 @@ class RemoteTrackPublication(info: LivekitModels.TrackInfo,
*/
fun setSubscribed(subscribed: Boolean) {
unsubscribed = !subscribed
val participant = this.participant.get() as? RemoteParticipant ?: return
val participant = this.participant as? RemoteParticipant ?: return
participant.rtcClient.sendUpdateSubscription(sid, !unsubscribed, videoQuality)
}
... ... @@ -68,7 +70,7 @@ class RemoteTrackPublication(info: LivekitModels.TrackInfo,
}
private fun sendUpdateTrackSettings() {
val participant = this.participant.get() as? RemoteParticipant ?: return
val participant = this.participant as? RemoteParticipant ?: return
participant.rtcClient.sendUpdateTrackSettings(sid, disabled, videoQuality)
}
... ...
... ... @@ -2,9 +2,12 @@ package io.livekit.android.room.track
import io.livekit.android.room.participant.Participant
import livekit.LivekitModels
import java.lang.ref.WeakReference
open class TrackPublication(info: LivekitModels.TrackInfo, track: Track?, participant: Participant?) {
open class TrackPublication(
info: LivekitModels.TrackInfo,
track: Track?,
participant: Participant
) {
var track: Track? = track
internal set
var name: String
... ... @@ -20,14 +23,14 @@ open class TrackPublication(info: LivekitModels.TrackInfo, track: Track?, partic
return track != null
}
var participant: WeakReference<Participant>;
var participant: Participant
init {
sid = info.sid
name = info.name
kind = info.type
muted = info.muted
this.participant = WeakReference(participant)
this.participant = participant
}
fun updateFromInfo(info: LivekitModels.TrackInfo) {
... ...
package io.livekit.android.room.participant
import io.livekit.android.room.track.TrackPublication
import livekit.LivekitModels
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
... ... @@ -23,6 +24,7 @@ class ParticipantTest {
assertEquals(INFO.sid, participant.sid)
assertEquals(INFO.identity, participant.identity)
assertEquals(INFO.metadata, participant.metadata)
assertEquals(INFO, participant.participantInfo)
}
@Test
... ... @@ -59,11 +61,29 @@ class ParticipantTest {
}
@Test
fun addTrackPublication() {
val audioPublication = TrackPublication(TRACK_INFO, null, participant)
participant.addTrackPublication(audioPublication)
assertEquals(1, participant.tracks.values.size)
assertEquals(audioPublication, participant.tracks.values.first())
assertEquals(1, participant.audioTracks.values.size)
assertEquals(audioPublication, participant.audioTracks.values.first())
}
companion object {
val INFO = LivekitModels.ParticipantInfo.newBuilder()
.setSid("sid")
.setIdentity("identity")
.setMetadata("metadata")
.build()
val TRACK_INFO = LivekitModels.TrackInfo.newBuilder()
.setSid("sid")
.setName("name")
.setType(LivekitModels.TrackType.AUDIO)
.setMuted(false)
.build()
}
}
\ No newline at end of file
... ...
package io.livekit.android.room.participant
import io.livekit.android.room.RTCClient
import livekit.LivekitModels
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.Test
import org.junit.Assert.*
import org.mockito.Mockito
class RemoteParticipantTest {
lateinit var participant: RemoteParticipant
@Before
fun setup() {
val rtcClient = Mockito.mock(RTCClient::class.java)
participant = RemoteParticipant(rtcClient, "sid")
}
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
fun updateFromInfoAddsTrack() {
val newTrackInfo = LivekitModels.ParticipantInfo.newBuilder(INFO)
.addTracks(TRACK_INFO)
.build()
participant.updateFromInfo(newTrackInfo)
assertEquals(1, participant.tracks.values.size)
assertNotNull(participant.getTrackPublication(TRACK_INFO.sid))
}
companion object {
val INFO = LivekitModels.ParticipantInfo.newBuilder()
.setSid("sid")
.setIdentity("identity")
.setMetadata("metadata")
.build()
val TRACK_INFO = LivekitModels.TrackInfo.newBuilder()
.setSid("sid")
.setName("name")
.setType(LivekitModels.TrackType.AUDIO)
.setMuted(false)
.build()
}
}
... ...