summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/syntax/syntax-parsed-arrow-then-directive.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/tests/non262/syntax/syntax-parsed-arrow-then-directive.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/js/src/tests/non262/syntax/syntax-parsed-arrow-then-directive.js b/js/src/tests/non262/syntax/syntax-parsed-arrow-then-directive.js
new file mode 100644
index 0000000000..9be9c3fca6
--- /dev/null
+++ b/js/src/tests/non262/syntax/syntax-parsed-arrow-then-directive.js
@@ -0,0 +1,72 @@
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 1596706;
+var summary =
+ "Properly apply a directive comment that's only tokenized by a syntax " +
+ "parser (because the directive comment appears immediately after an arrow " +
+ "function with expression body)";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+var stack;
+
+function reset()
+{
+ stack = "";
+}
+
+function assertStackContains(needle, msg)
+{
+ assertEq(stack.indexOf(needle) >= 0, true,
+ `stack should contain '${needle}': ${msg}`);
+}
+
+Object.defineProperty(this, "detectSourceURL", {
+ get() {
+ stack = new Error().stack;
+ return 17;
+ }
+});
+
+// block followed by semicolon
+reset();
+assertEq(eval(`x=>{};
+//# sourceURL=http://example.com/foo.js
+detectSourceURL`), 17);
+assertStackContains("http://example.com/foo.js", "block, semi");
+
+// block not followed by semicolon
+reset();
+assertEq(eval(`x=>{}
+//# sourceURL=http://example.com/bar.js
+detectSourceURL`), 17);
+assertStackContains("http://example.com/bar.js", "block, not semi");
+
+// expr followed by semicolon
+reset();
+assertEq(eval(`x=>y;
+//# sourceURL=http://example.com/baz.js
+detectSourceURL`), 17);
+assertStackContains("http://example.com/baz.js", "expr, semi");
+
+// expr not followed by semicolon
+reset();
+assertEq(eval(`x=>y
+//# sourceURL=http://example.com/quux.js
+detectSourceURL`), 17);
+assertStackContains("http://example.com/quux.js", "expr, not semi");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");