Test Android radio talk lifecycle and translate speaker status
This commit is contained in:
1 parent
e95fc090df
commit
2c407540a0
3 files changed
+58
No files matched your search
@@ -48,6 +48,9 @@
|
||||
<string name="radio_member_mute">Не слушать этого участника в рации</string>
|
||||
<string name="radio_member_listen">Слушать этого участника в рации</string>
|
||||
<string name="radio_member_mute_failed">Не удалось изменить настройку прослушивания рации</string>
|
||||
<string name="radio_member_silent">Рация: молчит</string>
|
||||
<string name="radio_member_speaking">Рация: говорит</string>
|
||||
<string name="radio_member_muted">Рация: заглушён</string>
|
||||
<string name="radio_notification">"Рация: PTT / автоматическая передача по голосу"</string>
|
||||
<string name="overlay_stopped">"Плавающая кнопка остановлена"</string>
|
||||
<string name="ongoing_call">"Текущий звонок"</string>
|
||||
|
||||
@@ -48,6 +48,9 @@
|
||||
<string name="radio_member_mute">Mute this member in radio</string>
|
||||
<string name="radio_member_listen">Listen to this member in radio</string>
|
||||
<string name="radio_member_mute_failed">Cannot change radio listening setting</string>
|
||||
<string name="radio_member_silent">Radio: silent</string>
|
||||
<string name="radio_member_speaking">Radio: speaking</string>
|
||||
<string name="radio_member_muted">Radio: muted</string>
|
||||
<string name="radio_notification">"Radio: PTT / automatic voice transmission"</string>
|
||||
<string name="overlay_stopped">"Floating button stopped"</string>
|
||||
<string name="ongoing_call">"Ongoing call"</string>
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.utun.chat.data
|
||||
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Test
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.ByteOrder
|
||||
|
||||
class RadioTalkStateTest {
|
||||
private fun event(group: Long = 7, node: Long = 42, on: Boolean = true): RadioTalkEvent {
|
||||
val bytes = ByteBuffer.allocate(19).order(ByteOrder.LITTLE_ENDIAN)
|
||||
.putLong(group).putLong(node).putShort(65535.toShort()).put(if (on) 1.toByte() else 0.toByte()).array()
|
||||
return requireNotNull(parseRadioTalkEvent(bytes))
|
||||
}
|
||||
|
||||
@Test fun stopRemovesOnlyItsSourceAndMuteDoesNotSuppressSpeech() {
|
||||
var state = RadioTalkState(7).onTalk(event()).onTalk(event(node = 43))
|
||||
assertEquals(setOf(42L, 43L), state.speakers)
|
||||
val muted = ChatMember(42, "Alice", radioMuted = true)
|
||||
assertTrue(muted.radioMuted && muted.nodeId in state.speakers)
|
||||
assertSame(state, state.onTalk(event()))
|
||||
state = state.onTalk(event(on = false))
|
||||
assertEquals(setOf(43L), state.speakers)
|
||||
assertSame(state, state.onTalk(event(on = false)))
|
||||
assertTrue(state.onTalk(event(node = 43, on = false)).speakers.isEmpty())
|
||||
}
|
||||
|
||||
@Test fun activeGroupOwnsSpeakersIndependentlyOfDisplayedMemberSnapshots() {
|
||||
val group = 0xfedcba9876543210uL.toLong()
|
||||
val state = RadioTalkState(group).onTalk(event(group))
|
||||
assertEquals(setOf(42L), state.speakers)
|
||||
assertSame(state, state.onTalk(event(group = 8)))
|
||||
assertSame(state, state.onTalk(event(group = 8, on = false)))
|
||||
val refreshed = ChatMember(42, "Updated", radioActive = false, radioMuted = true)
|
||||
assertTrue(refreshed.nodeId in state.speakers)
|
||||
val switched = RadioTalkState(8)
|
||||
assertSame(switched, switched.onTalk(event(group)))
|
||||
val stopped = RadioTalkState()
|
||||
assertSame(stopped, stopped.onTalk(event(group)))
|
||||
assertTrue(RadioTalkState(group).speakers.isEmpty())
|
||||
}
|
||||
|
||||
@Test fun malformedEventsCannotChangeTheSpeakerState() {
|
||||
assertNull(parseRadioTalkEvent(null)); assertNull(parseRadioTalkEvent(ByteArray(18)))
|
||||
assertNull(parseRadioTalkEvent(ByteArray(20))); assertNull(parseRadioTalkEvent(ByteArray(19)))
|
||||
val bytes = ByteBuffer.allocate(19).order(ByteOrder.LITTLE_ENDIAN).putLong(7).putLong(42).putShort(1).put(2).array()
|
||||
assertNull(parseRadioTalkEvent(bytes))
|
||||
bytes[18] = 1
|
||||
assertEquals(1, requireNotNull(parseRadioTalkEvent(bytes)).stream)
|
||||
assertEquals(65535, event().stream)
|
||||
assertNull(parseRadioTalkEvent(ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).putLong(0, 0).array()))
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user