






















@@ -13,6 +13,7 @@ import kotlinx.coroutines.Job
1313import kotlinx.coroutines.SupervisorJob
1414import kotlinx.coroutines.launch
1515import kotlinx.coroutines.test.advanceUntilIdle
16+import kotlinx.coroutines.test.currentTime
1617import kotlinx.coroutines.test.runTest
1718import org.junit.Assert.assertEquals
1819import org.junit.Assert.assertFalse
@@ -227,10 +228,24 @@ class TalkModeManagerTest {
227228 assertTrue(shouldAppendRealtimeCapturedFrame(manager, 4_800))
228229 }
229230231+ @Test
232+ @OptIn(ExperimentalCoroutinesApi::class)
233+fun chatFinalWaitWithoutSubscribeUsesShortTimeout() =
234+ runTest {
235+val manager = createManager(scope = this, supportsChatSubscribe = false)
236+237+ setPrivateField(manager, "pendingRunId", "run-missing-final")
238+ setPrivateField(manager, "pendingFinal", CompletableDeferred<Boolean>())
239+240+ assertFalse(manager.waitForChatFinal("run-missing-final"))
241+ assertEquals(6_000, currentTime)
242+ }
243+230244private fun createManager(
231245talkSpeakClient: TalkSpeechSynthesizing = TalkSpeakClient(),
232246talkAudioPlayer: TalkAudioPlaying? = null,
233247scope: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Default),
248+supportsChatSubscribe: Boolean = false,
234249isConnected: () -> Boolean = { true },
235250onStoppedByRelay: () -> Unit = {},
236251 ): TalkModeManager {
@@ -249,7 +264,7 @@ class TalkModeManagerTest {
249264 context = app,
250265 scope = scope,
251266 session = session,
252- supportsChatSubscribe = false,
267+ supportsChatSubscribe = supportsChatSubscribe,
253268 isConnected = isConnected,
254269 onStoppedByRelay = onStoppedByRelay,
255270 talkSpeakClient = talkSpeakClient,
@@ -258,12 +273,10 @@ class TalkModeManagerTest {
258273 }
259274260275 @Suppress("UNCHECKED_CAST")
261-private fun playbackGeneration(manager: TalkModeManager) =
262- readPrivateField(manager, "playbackGeneration") as AtomicLong
276+private fun playbackGeneration(manager: TalkModeManager) = readPrivateField(manager, "playbackGeneration") as AtomicLong
263277264278 @Suppress("UNCHECKED_CAST")
265-private fun realtimeToolRuns(manager: TalkModeManager) =
266- readPrivateField(manager, "realtimeToolRuns") as MutableMap<String, RealtimeToolRun>
279+private fun realtimeToolRuns(manager: TalkModeManager) = readPrivateField(manager, "realtimeToolRuns") as MutableMap<String, RealtimeToolRun>
267280268281private fun setPrivateField(
269282target: Any,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。