diff --git a/devtools/client/webconsole/test/mochitest/browser.ini b/devtools/client/webconsole/test/mochitest/browser.ini index d2e132b49288..557c209296f3 100644 --- a/devtools/client/webconsole/test/mochitest/browser.ini +++ b/devtools/client/webconsole/test/mochitest/browser.ini @@ -205,6 +205,7 @@ skip-if = verify [browser_jsterm_autocomplete_return_key.js] [browser_jsterm_autocomplete_width.js] [browser_jsterm_autocomplete-properties-with-non-alphanumeric-names.js] +[browser_jsterm_await_concurrent.js] [browser_jsterm_await_error.js] [browser_jsterm_await_helper_dollar_underscore.js] [browser_jsterm_await_paused.js] diff --git a/devtools/client/webconsole/test/mochitest/browser_jsterm_await.js b/devtools/client/webconsole/test/mochitest/browser_jsterm_await.js index 13dc388d69c6..1ea0d3c1a4ae 100644 --- a/devtools/client/webconsole/test/mochitest/browser_jsterm_await.js +++ b/devtools/client/webconsole/test/mochitest/browser_jsterm_await.js @@ -1,7 +1,7 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ -// Test that top-level await expression work as expected. +// Test that top-level await expressions work as expected. "use strict"; @@ -21,7 +21,6 @@ add_task(async function() { async function performTests() { const hud = await openNewTabAndConsole(TEST_URI); - const {jsterm} = hud; const executeAndWaitForResultMessage = (input, expectedOutput) => executeAndWaitForMessage(hud, input, expectedOutput, ".result"); @@ -34,8 +33,8 @@ async function performTests() { ); // Check that the resulting promise of the async iife is not displayed. - let messages = hud.ui.outputNode.querySelectorAll(".message .message-body"); - let messagesText = Array.from(messages).map(n => n.textContent).join(" - "); + const messages = hud.ui.outputNode.querySelectorAll(".message .message-body"); + const messagesText = Array.from(messages).map(n => n.textContent).join(" - "); is(messagesText, `${simpleAwait} - Array [ "await1" ]`, "The output contains the the expected messages"); @@ -62,31 +61,6 @@ async function performTests() { ); ok(message.node, "`x` was assigned as expected"); - info("Check that concurrent await expression work fine"); - hud.ui.clearOutput(); - const delays = [1000, 500, 2000, 1500]; - const inputs = delays.map(delay => `await new Promise( - r => setTimeout(() => r("await-concurrent-" + ${delay}), ${delay}))`); - - // Let's wait for the message that sould be displayed last. - const onMessage = waitForMessage(hud, "await-concurrent-2000", ".message.result"); - for (const input of inputs) { - jsterm.execute(input); - } - await onMessage; - - messages = hud.ui.outputNode.querySelectorAll(".message .message-body"); - messagesText = Array.from(messages).map(n => n.textContent); - const expectedMessages = [ - ...inputs, - `"await-concurrent-500"`, - `"await-concurrent-1000"`, - `"await-concurrent-1500"`, - `"await-concurrent-2000"`, - ]; - is(JSON.stringify(messagesText, null, 2), JSON.stringify(expectedMessages, null, 2), - "The output contains the the expected messages, in the expected order"); - info("Check that a logged promise is still displayed as a promise"); message = await executeAndWaitForResultMessage( `new Promise(r => setTimeout(() => r(1), 1000))`, diff --git a/devtools/client/webconsole/test/mochitest/browser_jsterm_await_concurrent.js b/devtools/client/webconsole/test/mochitest/browser_jsterm_await_concurrent.js new file mode 100644 index 000000000000..98e56a605464 --- /dev/null +++ b/devtools/client/webconsole/test/mochitest/browser_jsterm_await_concurrent.js @@ -0,0 +1,49 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that multiple concurrent top-level await expressions work as expected. + +"use strict"; + +const TEST_URI = "data:text/html;charset=utf-8,Web Console test top-level await"; + +add_task(async function() { + // Enable await mapping. + await pushPref("devtools.debugger.features.map-await-expression", true); + + // Run test with legacy JsTerm + await pushPref("devtools.webconsole.jsterm.codeMirror", false); + await performTests(); + // And then run it with the CodeMirror-powered one. + await pushPref("devtools.webconsole.jsterm.codeMirror", true); + await performTests(); +}); + +async function performTests() { + const hud = await openNewTabAndConsole(TEST_URI); + const {jsterm} = hud; + + hud.ui.clearOutput(); + const delays = [3000, 500, 9000, 6000]; + const inputs = delays.map(delay => `await new Promise( + r => setTimeout(() => r("await-concurrent-" + ${delay}), ${delay}))`); + + // Let's wait for the message that sould be displayed last. + const onMessage = waitForMessage(hud, "await-concurrent-9000", ".message.result"); + for (const input of inputs) { + jsterm.execute(input); + } + await onMessage; + + const messages = hud.ui.outputNode.querySelectorAll(".message .message-body"); + const messagesText = Array.from(messages).map(n => n.textContent); + const expectedMessages = [ + ...inputs, + `"await-concurrent-500"`, + `"await-concurrent-3000"`, + `"await-concurrent-6000"`, + `"await-concurrent-9000"`, + ]; + is(JSON.stringify(messagesText, null, 2), JSON.stringify(expectedMessages, null, 2), + "The output contains the the expected messages, in the expected order"); +}