forked from mirrors/gecko-dev
109 lines
3.1 KiB
JavaScript
109 lines
3.1 KiB
JavaScript
/* 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`;
|
|
}
|