diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_jsterm_helpers_no_override.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_jsterm_helpers_no_override.js | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_jsterm_helpers_no_override.js b/devtools/client/webconsole/test/browser/browser_jsterm_helpers_no_override.js new file mode 100644 index 0000000000..674e92c038 --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_jsterm_helpers_no_override.js @@ -0,0 +1,143 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Check that console helpers are not set when existing variables with similar names +// exists in the page. + +const TEST_URI = `data:text/html,<!DOCTYPE html><script> + var $ = "var_$"; + const $$ = "const_$$"; + let help = "let_help"; + globalThis.values = "globalThis_values"; + function keys() { + return "function_keys"; + } + + function pauseInDebugger() { + let $x = "let_$x"; + debugger; + } + </script>`; + +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + + let message = await executeAndWaitForResultMessage(hud, "$", "var_$"); + ok(message, "$ was not overridden"); + + message = await executeAndWaitForResultMessage(hud, "$$", "const_$$"); + ok(message, "$$ was not overridden"); + + message = await executeAndWaitForResultMessage(hud, "help", "let_help"); + ok(message, "help was not overridden"); + + message = await executeAndWaitForResultMessage( + hud, + "values", + "globalThis_values" + ); + ok(message, "values was not overridden"); + + message = await executeAndWaitForResultMessage( + hud, + "keys()", + "function_keys" + ); + ok(message, "keys was not overridden"); + + info("Pause in Debugger"); + await openDebugger(); + const toolbox = gDevTools.getToolboxForTab(gBrowser.selectedTab); + const dbg = createDebuggerContext(toolbox); + SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () { + content.wrappedJSObject.pauseInDebugger(); + }); + await pauseDebugger(dbg); + + info("Go back to Console"); + await toolbox.selectTool("webconsole"); + message = await executeAndWaitForResultMessage(hud, "$x", "let_$x"); + ok( + message, + `frame variable "$x" was not overridden while paused in the debugger` + ); + + await resume(dbg); +}); + +add_task(async function () { + // Test the behavior when the variables are declared in the script. + + const hud = await openNewTabAndConsole("data:text/html,Nothing"); + + let message = await executeAndWaitForResultMessage( + hud, + "var $ = 'var_$'; $", + "var_$" + ); + ok(message, "$ was not overridden"); + + message = await executeAndWaitForResultMessage( + hud, + "const $$ = 'const_$$'; $$", + "const_$$" + ); + ok(message, "$$ was not overridden"); + + message = await executeAndWaitForResultMessage( + hud, + "function keys() { return 'function_keys'; } keys()", + "function_keys" + ); + ok(message, "keys was not overridden"); + + // Hoisted variable. + message = await executeAndWaitForResultMessage( + hud, + "{ var clear = 'var_clear'; } clear", + "var_clear" + ); + ok(message, "clear was not overridden"); + + // Hoisted function. + message = await executeAndWaitForResultMessage( + hud, + "{ function help() { return 'function_help'; } } help()", + "function_help" + ); + ok(message, "help was not overridden"); + + // Lexical variables are not hoisted. + message = await executeAndWaitForResultMessage( + hud, + "{ let values = 'let_values'; } typeof values", + "function" + ); + ok(message, "values was not overridden because it's not global"); +}); + +add_task(async function () { + // NOTE: Open a new page to use the same binding name again. + + const hud = await openNewTabAndConsole("data:text/html,Nothing"); + + // An assignment on `globalThis` property inside the script doesn't shadow + // the helper binding. + let message = await executeAndWaitForResultMessage( + hud, + "globalThis.values = 'globalThis_values'; typeof values", + "function" + ); + ok(message, "values was overridden because it's not declaration"); + + // Executing `values` again shadows the helper binding, given it exists + // before the execution. + message = await executeAndWaitForResultMessage( + hud, + "values", + "globalThis_values" + ); + ok(message, "values was not overridden if it exists before the execution"); +}); |