diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_webconsole_lenient_this_warning.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_webconsole_lenient_this_warning.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_lenient_this_warning.js b/devtools/client/webconsole/test/browser/browser_webconsole_lenient_this_warning.js new file mode 100644 index 0000000000..1d8914b845 --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_webconsole_lenient_this_warning.js @@ -0,0 +1,68 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Check that calling the LenientThis warning is only called when expected. +const TEST_URI = `data:text/html;charset=utf8,<!DOCTYPE html>${encodeURI(` + <h1>LenientThis warning</h1> + <script> + const el = document.createElement('div'); + globalThis.htmlDivElementProto = Object.getPrototypeOf(el); + function triggerLenientThisWarning(){ + Object.getOwnPropertyDescriptor( + Object.getPrototypeOf(globalThis.htmlDivElementProto), + 'onmouseenter' + ).get.call() + } + </script>`)}`; + +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + + const expectedWarningMessageText = + "Ignoring get or set of property that has [LenientThis] "; + + await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () { + const global = content.wrappedJSObject; + global.console.log(global.htmlDivElementProto); + }); + + info("Wait for a bit so any warning message could be displayed"); + await wait(1000); + await waitFor(() => findConsoleAPIMessage(hud, "HTMLDivElementPrototype")); + + ok( + !findWarningMessage(hud, expectedWarningMessageText, ".warn"), + "Displaying the HTMLDivElementPrototype does not trigger the LenientThis warning" + ); + + info( + "Call a LenientThis getter with the wrong `this` to trigger a warning message" + ); + await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () { + content.wrappedJSObject.triggerLenientThisWarning(); + }); + + await waitFor(() => + findWarningMessage(hud, expectedWarningMessageText, ".warn") + ); + ok( + true, + "Calling the LenientThis getter with an unexpected `this` did triggered the warning" + ); + + info( + "Clear the console and call the LenientThis getter with an unexpected `this` again" + ); + await clearOutput(hud); + await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () { + content.wrappedJSObject.triggerLenientThisWarning(); + }); + info("Wait for a bit so any warning message could be displayed"); + await wait(1000); + ok( + !findWarningMessage(hud, expectedWarningMessageText, ".warn"), + "Calling the LenientThis getter a second time did not trigger the warning again" + ); +}); |