diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_jsterm_multiline.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_jsterm_multiline.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_jsterm_multiline.js b/devtools/client/webconsole/test/browser/browser_jsterm_multiline.js new file mode 100644 index 0000000000..cfd103f5e5 --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_jsterm_multiline.js @@ -0,0 +1,65 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// Tests that the console waits for more input instead of evaluating +// when valid, but incomplete, statements are present upon pressing enter +// -or- when the user ends a line with shift + enter. + +"use strict"; + +const TEST_URI = + "http://example.com/browser/devtools/client/webconsole/test/browser/test-console.html"; + +const SHOULD_ENTER_MULTILINE = [ + { input: "function foo() {" }, + { input: "var a = 1," }, + { input: "var a = 1;", shiftKey: true }, + { input: "function foo() { }", shiftKey: true }, + { input: "function" }, + { input: "(x) =>" }, + { input: "let b = {" }, + { input: "let a = [" }, + { input: "{" }, + { input: "{ bob: 3343," }, + { input: "function x(y=" }, + { input: "Array.from(" }, + // shift + enter creates a new line despite parse errors + { input: "{2,}", shiftKey: true }, +]; +const SHOULD_EXECUTE = [ + { input: "function foo() { }" }, + { input: "var a = 1;" }, + { input: "function foo() { var a = 1; }" }, + { input: '"asdf"' }, + { input: "99 + 3" }, + { input: "1, 2, 3" }, + // errors + { input: "function f(x) { let y = 1, }" }, + { input: "function f(x=,) {" }, + { input: "{2,}" }, +]; + +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + + for (const { input, shiftKey } of SHOULD_ENTER_MULTILINE) { + setInputValue(hud, input); + EventUtils.synthesizeKey("VK_RETURN", { shiftKey }); + + // We need to remove the spaces at the end of the input since code mirror do some + // automatic indent in some case. + const newValue = getInputValue(hud).replace(/ +$/g, ""); + is(newValue, input + "\n", "A new line was added"); + } + + for (const { input, shiftKey } of SHOULD_EXECUTE) { + setInputValue(hud, input); + const onMessage = waitForMessageByType(hud, "", ".result"); + EventUtils.synthesizeKey("VK_RETURN", { shiftKey }); + await onMessage; + + await waitFor(() => !getInputValue(hud)); + is(getInputValue(hud), "", "Input is cleared"); + } +}); |