diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_webconsole_output_trimmed.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_webconsole_output_trimmed.js | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_output_trimmed.js b/devtools/client/webconsole/test/browser/browser_webconsole_output_trimmed.js new file mode 100644 index 0000000000..177e7c69af --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_webconsole_output_trimmed.js @@ -0,0 +1,109 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Tests that we trim start and end whitespace in user input +// in the messages list + +"use strict"; + +const TEST_URI = `http://example.com/browser/devtools/client/webconsole/test/browser/test-console.html`; + +const TEST_ITEMS = [ + { + name: "Commands without whitespace are not affected by trimming", + command: "Math.PI==='3.14159'", + expected: "Math.PI==='3.14159'", + }, + { + name: "Trims whitespace before and after a command (single line case)", + command: "\t\t (window.o_O || {}) [' O_o '] ", + expected: "(window.o_O || {}) [' O_o ']", + }, + { + name: + "When trimming a whitespace before and after a command, " + + "it keeps indentation for each contentful line", + command: " \n \n 1,\n 2,\n 3\n \n ", + expected: " 1,\n 2,\n 3", + }, + { + name: + "When trimming a whitespace before and after a command, " + + "it keeps trailing whitespace for all lines except the last", + command: + "\n" + + " let numbers = [1,\n" + + " 2, \n" + + " 3];\n" + + " \n" + + " \n" + + " function addNumber() { \n" + + " numbers.push(numbers.length + 1);\n" + + " } \n" + + " ", + expected: + " let numbers = [1,\n" + + " 2, \n" + + " 3];\n" + + " \n" + + " \n" + + " function addNumber() { \n" + + " numbers.push(numbers.length + 1);\n" + + " }", + }, +]; + +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + + // Check that expected output and actual trimmed output match + for (const { name, command, expected } of TEST_ITEMS) { + await clearOutput(hud); + await executeAndWaitForResultMessage(hud, command, ""); + + const result = await getActualDisplayedInput(hud); + + if (result === expected) { + ok(true, name); + } else { + ok(false, formatError(name, result, expected)); + } + } +}); + +/** + * Get the text content of the latest command logged in the console + * @param {WebConsole} hud: The webconsole + * @return {string|null} + */ +async function getActualDisplayedInput(hud) { + const message = Array.from( + hud.ui.outputNode.querySelectorAll(".message.command") + ).pop(); + + if (message) { + // Open the message if its collapsed + const toggleArrow = message.querySelector(".collapse-button"); + if (toggleArrow) { + toggleArrow.click(); + await waitFor(() => message.classList.contains("open") === true); + } + + return message.querySelector("syntax-highlighted").textContent; + } + + return null; +} + +/** + * Format a "Got vs Expected" error message on multiple lines, + * making whitespace more visible in console output. + */ +function formatError(name, result, expected) { + const quote = str => + typeof str === "string" + ? "> " + str.replace(/ /g, "\u{B7}").replace(/\n/g, "\n> ") + : str; + + return `${name}\nGot:\n${quote(result)}\nExpected:\n${quote(expected)}\n`; +} |