Restore iOS speech after cancelling queued audio
Build and publish frontend / publish (push) Failing after 2s

This commit is contained in:
Ein Anderssono
2026-10-16 06:18:26 +02:00
parent 32e89cca73
commit eceb33052d
4 changed files with 33 additions and 7 deletions
+16 -2
View File
@@ -130,6 +130,20 @@ test('TTS selects Swedish fallback, applies rate, and cancellation invalidates c
assert.equal(h.controller.getState(), 'IDLE');
});
test('a player gesture restores the iOS speech primer after cancelling a queued reply', () => {
const h = makeHarness();
assert.equal(h.controller.activateFromUserGesture(), true);
assert.equal(h.synthesis.spoken[0].text, ' ');
h.controller.speak('Tidigare replik');
h.controller.cancelSpeech();
const countAfterCancel = h.synthesis.spoken.length;
assert.equal(h.controller.activateFromUserGesture(), true);
assert.equal(h.synthesis.spoken.length, countAfterCancel + 1);
assert.equal(h.synthesis.spoken.at(-1).text, ' ');
h.controller.speak('Nytt svar');
assert.equal(h.synthesis.spoken.at(-1).text, 'Nytt svar');
});
test('speech is reported as in progress only after the native onstart event', () => {
const h = makeHarness();
h.controller.speak('Hej.');
@@ -137,8 +151,8 @@ test('speech is reported as in progress only after the native onstart event', ()
assert.match(h.states.at(-1).message, /Startar uppläsningen/);
h.utterances[0].onstart();
assert.equal(h.controller.getState(), 'SPEAKING');
assert.match(h.states.at(-1).message, /Uppläsningen har startat/);
assert.match(h.states.at(-1).message, /iPadens volym/);
assert.match(h.states.at(-1).message, /Webbläsaren har startat talsyntesen/);
assert.match(h.states.at(-1).message, /Läs senaste repliken/);
});
test('iOS user gesture primes speech silently and idle speech is not cancelled before speak', () => {