chromium/third_party/blink/web_tests/fast/speechsynthesis/speech-synthesis-speak-multiple.html

<!DOCTYPE HTML>
<html>
<head>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<script>
    description("This tests that multiple speak utterances are handled in sequence.");

    if (window.internals)
        internals.enableMockSpeechSynthesizer(window);

    if (window.testRunner)
        testRunner.waitUntilDone();

    window.jsTestIsAsync = true;

    var count = 3;
    var i = 0;

    // Start a very short speaking job that will finish quickly.
    var u = new SpeechSynthesisUtterance(" ");
    u.onstart = function(event) {
        shouldBeTrue("event.elapsedTime >= 0");
        shouldBeTrue("event.elapsedTime < 1000");
        shouldBeTrue("speechSynthesis.speaking");
    };
    u.onend = function(event) {
        shouldBeGreaterThanOrEqual("count", "i");
        shouldBeTrue("event.elapsedTime > 0");
        shouldBeTrue("event.elapsedTime < 10000");
        shouldBeTrue("speechSynthesis.speaking");
        if (++i == count) {
            speechSynthesis.cancel();
            // Add a new utterance just after the cancel() to signal test completion.
            speechSynthesis.speak(finishingUtterance);
        }
    };

    var finishingUtterance = new SpeechSynthesisUtterance(" ");
    finishingUtterance.onend = finishJSTest;

    shouldBeFalse("speechSynthesis.speaking");
    // Issue more utterances than where we break off.
    for (var j = 0; j < count + 2; ++j)
        speechSynthesis.speak(u);
</script>
</body>
</html>