summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/strict/deprecated-octal-noctal-tokens.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/tests/non262/strict/deprecated-octal-noctal-tokens.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/js/src/tests/non262/strict/deprecated-octal-noctal-tokens.js b/js/src/tests/non262/strict/deprecated-octal-noctal-tokens.js
new file mode 100644
index 0000000000..c12be87e1c
--- /dev/null
+++ b/js/src/tests/non262/strict/deprecated-octal-noctal-tokens.js
@@ -0,0 +1,53 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+/**
+ * These test cases check implementation-specific error messages for invalid
+ * octal literals, octal escape sequences, and non-octal decimal escape
+ * sequences in strings in strict mode code, where the error can't be reported
+ * at time of tokenization.
+ */
+var JSMSG_DEPRECATED_OCTAL_LITERAL = "\"0\"-prefixed octal literals are deprecated; use the \"0o\" prefix instead";
+var JSMSG_DEPRECATED_OCTAL_ESCAPE = "octal escape sequences can't be used in untagged template literals or in strict mode code";
+var JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE = "the escapes \\8 and \\9 can't be used in untagged template literals or in strict mode code";
+
+function checkPrologue(val, msg) {
+ try {
+ eval('function invalid () { "' + val + '"; "use strict"; }');
+ } catch(e) {
+ assertEq(e.name, "SyntaxError");
+ assertEq(e.message, msg);
+ return;
+ }
+
+ // If it comes here, then test has failed
+ assertEq("No Errors", "SyntaxError");
+}
+
+checkPrologue('\\8', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE);
+checkPrologue('\\222', JSMSG_DEPRECATED_OCTAL_ESCAPE);
+checkPrologue('\\222\\8', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE);
+
+function checkAfter(val, msg) {
+ try {
+ eval('function invalid () { "use strict" \n ' + val + ' }');
+ } catch(e) {
+ assertEq(e.name, "SyntaxError");
+ assertEq(e.message, msg);
+ return;
+ }
+
+ // If it comes here, then test has failed
+ assertEq("No Errors", "SyntaxError");
+}
+
+checkAfter('0755', JSMSG_DEPRECATED_OCTAL_LITERAL);
+checkAfter('"\\8"', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE);
+checkAfter('"\\222"', JSMSG_DEPRECATED_OCTAL_ESCAPE);
+checkAfter('"\\222\\8"', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE);
+
+reportCompare(true, true);