From 337fbc6879f9dd4849df0b14319387615d1d6e18 Mon Sep 17 00:00:00 2001 From: Karl Tomlinson Date: Mon, 9 Sep 2019 00:42:03 +0000 Subject: [PATCH] Bug 1578623 add test for syntax errors and uncaught exceptions in worklet scripts r=bhackett Depends on D44611 Differential Revision: https://phabricator.services.mozilla.com/D44612 --HG-- rename : devtools/client/webconsole/test/browser/browser_webconsole_worker_error.js => devtools/client/webconsole/test/browser/browser_webconsole_worklet_error.js extra : moz-landing-system : lando --- .eslintignore | 3 +++ .../webconsole/test/browser/.eslintrc.js | 5 +++- .../webconsole/test/browser/browser.ini | 4 +++ .../browser_webconsole_worklet_error.js | 27 +++++++++++++++++++ .../test/browser/test-error-worklet.html | 24 +++++++++++++++++ .../test/browser/test-error-worklet.js | 21 +++++++++++++++ .../test/browser/test-syntaxerror-worklet.js | 6 +++++ 7 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 devtools/client/webconsole/test/browser/browser_webconsole_worklet_error.js create mode 100644 devtools/client/webconsole/test/browser/test-error-worklet.html create mode 100644 devtools/client/webconsole/test/browser/test-error-worklet.js create mode 100644 devtools/client/webconsole/test/browser/test-syntaxerror-worklet.js diff --git a/.eslintignore b/.eslintignore index c779e7a76d41..f474d9559b50 100644 --- a/.eslintignore +++ b/.eslintignore @@ -144,6 +144,9 @@ devtools/server/tests/unit/babel_and_browserify_script_with_source_map.js devtools/server/tests/unit/setBreakpoint* devtools/server/tests/unit/sourcemapped.js +# Testing syntax error +devtools/client/webconsole/test/browser/test-syntaxerror-worklet.js + # devtools specific format test file devtools/server/tests/unit/xpcshell_debugging_script.js diff --git a/devtools/client/webconsole/test/browser/.eslintrc.js b/devtools/client/webconsole/test/browser/.eslintrc.js index dd345712f031..9a3b883a23e7 100644 --- a/devtools/client/webconsole/test/browser/.eslintrc.js +++ b/devtools/client/webconsole/test/browser/.eslintrc.js @@ -4,7 +4,10 @@ module.exports = { // Extend from the shared list of defined globals for mochitests. "extends": "../../../../.eslintrc.mochitests.js", "overrides": [{ - "files": ["test-dynamic-import.js"], + "files": [ + "test-dynamic-import.js", + "test-error-worklet.js", + ], "parserOptions": { "sourceType": "module", }, diff --git a/devtools/client/webconsole/test/browser/browser.ini b/devtools/client/webconsole/test/browser/browser.ini index 5d47c606a19a..e1ff4e91ee6e 100644 --- a/devtools/client/webconsole/test/browser/browser.ini +++ b/devtools/client/webconsole/test/browser/browser.ini @@ -59,6 +59,8 @@ support-files = test-error-worker.html test-error-worker.js test-error-worker2.js + test-error-worklet.html + test-error-worklet.js test-eval-error.html test-eval-in-stackframe.html test-eval-sources.html @@ -140,6 +142,7 @@ support-files = test-subresource-security-error.html test-subresource-security-error.js test-subresource-security-error.js^headers^ + test-syntaxerror-worklet.js test-time-methods.html test-trackingprotection-securityerrors.html test-warning-groups.html @@ -502,3 +505,4 @@ skip-if = (os == "win" && bits == 32) && !debug # Bug 1560261 [browser_webconsole_websocket.js] [browser_webconsole_worker_error.js] [browser_webconsole_worker_evaluate.js] +[browser_webconsole_worklet_error.js] diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_worklet_error.js b/devtools/client/webconsole/test/browser/browser_webconsole_worklet_error.js new file mode 100644 index 000000000000..d369eee28b26 --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_webconsole_worklet_error.js @@ -0,0 +1,27 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Tests that syntax errors in worklet scripts show in the console and that +// throwing uncaught errors and primitive values in worklets shows a stack. + +"use strict"; + +const TEST_URI = + "https://example.com/browser/devtools/client/webconsole/" + + "test/browser/test-error-worklet.html"; + +add_task(async function() { + await SpecialPowers.pushPrefEnv({ + set: [["dom.audioworklet.enabled", true], ["dom.worklet.enabled", true]], + }); + + const hud = await openNewTabAndConsole(TEST_URI); + + await waitFor(() => + findMessage(hud, "SyntaxError: duplicate formal argument") + ); + ok(true, "Received expected SyntaxError"); + + await checkMessageStack(hud, "addModule", [18, 21]); + await checkMessageStack(hud, "process", [7, 12]); +}); diff --git a/devtools/client/webconsole/test/browser/test-error-worklet.html b/devtools/client/webconsole/test/browser/test-error-worklet.html new file mode 100644 index 000000000000..249e184fe637 --- /dev/null +++ b/devtools/client/webconsole/test/browser/test-error-worklet.html @@ -0,0 +1,24 @@ + + + + Worklet error generator + + + + diff --git a/devtools/client/webconsole/test/browser/test-error-worklet.js b/devtools/client/webconsole/test/browser/test-error-worklet.js new file mode 100644 index 000000000000..cca6667d1997 --- /dev/null +++ b/devtools/client/webconsole/test/browser/test-error-worklet.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function throw_process() { + throw "process"; // eslint-disable-line no-throw-literal +} + +class ErrorProcessor extends AudioWorkletProcessor { + process() { + throw_process(); + } +} +registerProcessor("error", ErrorProcessor); + +function throw_error() { + throw new Error("addModule"); +} + +throw_error(); diff --git a/devtools/client/webconsole/test/browser/test-syntaxerror-worklet.js b/devtools/client/webconsole/test/browser/test-syntaxerror-worklet.js new file mode 100644 index 000000000000..8b2ac630004f --- /dev/null +++ b/devtools/client/webconsole/test/browser/test-syntaxerror-worklet.js @@ -0,0 +1,6 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function f(a, a) {}