summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/xpcshell/test_breakpoint-21.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/tests/xpcshell/test_breakpoint-21.js')
-rw-r--r--devtools/server/tests/xpcshell/test_breakpoint-21.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/devtools/server/tests/xpcshell/test_breakpoint-21.js b/devtools/server/tests/xpcshell/test_breakpoint-21.js
new file mode 100644
index 0000000000..da7a87f91c
--- /dev/null
+++ b/devtools/server/tests/xpcshell/test_breakpoint-21.js
@@ -0,0 +1,62 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Bug 1122064 - make sure that scripts introduced via onNewScripts
+ * properly populate the `ScriptStore` with all there nested child
+ * scripts, so you can set breakpoints on deeply nested scripts
+ */
+
+add_task(
+ threadFrontTest(async ({ threadFront, debuggee }) => {
+ // Populate the `ScriptStore` so that we only test that the script
+ // is added through `onNewScript`
+ await getSources(threadFront);
+
+ let packet = await executeOnNextTickAndWaitForPause(() => {
+ evalCode(debuggee);
+ }, threadFront);
+ const source = await getSourceById(threadFront, packet.frame.where.actor);
+ const location = {
+ sourceUrl: source.url,
+ line: debuggee.line0 + 8,
+ };
+
+ setBreakpoint(threadFront, location);
+
+ await resume(threadFront);
+ packet = await waitForPause(threadFront);
+ Assert.equal(packet.why.type, "breakpoint");
+ Assert.equal(packet.frame.where.actor, source.actor);
+ Assert.equal(packet.frame.where.line, location.line);
+
+ await resume(threadFront);
+ })
+);
+
+function evalCode(debuggee) {
+ // Start a new script
+ /* eslint-disable mozilla/var-only-at-top-level, max-nested-callbacks, no-unused-vars */
+ // prettier-ignore
+ Cu.evalInSandbox(
+ "var line0 = Error().lineNumber;\n(" + function () {
+ debugger;
+ var a = (function () {
+ return (function () {
+ return (function () {
+ return (function () {
+ return (function () {
+ var x = 10; // This line gets a breakpoint
+ return 1;
+ })();
+ })();
+ })();
+ })();
+ })();
+ } + ")()",
+ debuggee
+ );
+ /* eslint-enable mozilla/var-only-at-top-level, max-nested-callbacks, no-unused-vars */
+}