Bug 1434305 - Part 14: Add testcases. r=jimb
authorTooru Fujisawa <arai_a@mac.com>
Thu, 26 Jul 2018 12:36:18 +0900
changeset 428532 697902c363da639e5171e9af352b43aeab324e87
parent 428531 960a1f20a4117ed597bd89238c0cc53d4be4b5c3
child 428533 3f664d1e98727b296f51d1660acf640b557d08d1
push id34337
push userncsoregi@mozilla.com
push dateThu, 26 Jul 2018 21:58:45 +0000
treeherdermozilla-central@8f2f847b2f9d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjimb
bugs1434305
milestone63.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1434305 - Part 14: Add testcases. r=jimb
js/src/jit-test/tests/debug/Debugger-findScripts-uncompleted-01.js
js/src/jit-test/tests/debug/Debugger-findScripts-uncompleted-02.js
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Debugger-findScripts-uncompleted-01.js
@@ -0,0 +1,52 @@
+// Uncompleted scripts and their inner scripts shouldn't be found in
+// findScripts.
+
+let g = newGlobal();
+let dbg = new Debugger(g);
+
+let message = "";
+try {
+  g.eval(`
+(function nonLazyOuter() {
+  (function nonLazyInner() {
+    function lazy1() {
+      function lazy2() {
+      }
+    }
+  })();
+})();
+
+(function uncompletedNonLazy() {
+  function lazyInUncompleted1() {
+    function lazyInUncompleted2() {
+    }
+  }
+  // LazyScripts for above 2 functions are created when parsing,
+  // and JSScript for uncompletedNonLazy is created at the beginning of
+  // compiling it, but it doesn't get code() since the following switch-case
+  // throws error while emitting bytecode.
+  switch (1) {
+    ${"case 1:".repeat(2**16+1)}
+  }
+})();
+`);
+} catch (e) {
+  message = e.message;
+}
+
+assertEq(message.includes("too many switch cases"), true,
+         "Error for switch-case should be thrown," +
+         "in order to test the case that uncompleted script is created");
+
+for (var script of dbg.findScripts()) {
+  // Since all of above scripts can be GCed, we cannot check the set of
+  // found scripts.
+  if (script.displayName) {
+    assertEq(script.displayName != "uncompletedNonLazy", true,
+             "Uncompiled script shouldn't be found");
+    assertEq(script.displayName != "lazyInUncompleted1", true,
+             "Scripts inside uncompiled script shouldn't be found");
+    assertEq(script.displayName != "lazyInUncompleted2", true,
+             "Scripts inside uncompiled script shouldn't be found");
+  }
+}
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Debugger-findScripts-uncompleted-02.js
@@ -0,0 +1,49 @@
+// Uncompleted scripts shouldn't be found in findScripts.
+
+let g = newGlobal();
+let dbg = new Debugger(g);
+
+let message = "";
+try {
+  g.eval(`
+(function nonLazyOuter() {
+  (function nonLazyInner() {
+    function lazy1() {
+      function lazy2() {
+      }
+    }
+  })();
+})();
+
+(function uncompletedNonLazy() {
+  (function completedNonLazy() {
+    function lazyInCompleted1() {
+      function lazyInCompleted2() {
+      }
+    }
+  })();
+  // completedNonLazy and its inner scripts can be exposed to debugger since
+  // the compilation for completedNonLazy finishes, even if the enclosing
+  // uncompletedNonLazy fails to compile.
+  switch (1) {
+    ${"case 1:".repeat(2**16+1)}
+  }
+})();
+`);
+} catch (e) {
+  message = e.message;
+}
+
+assertEq(message.includes("too many switch cases"), true,
+         "Error for switch-case should be thrown," +
+         "in order to test the case that uncompleted script is created");
+
+let actualNames = [];
+for (var script of dbg.findScripts()) {
+  // Since all of above scripts can be GCed, we cannot check the set of
+  // found scripts.
+  if (script.displayName) {
+    assertEq(script.displayName != "uncompletedNonLazy", true,
+             "Uncompiled script shouldn't be found");
+  }
+}