summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/strict/deprecated-octal-noctal-tokens.js
blob: c12be87e1ce340562a66369e28c9d488d44d7ecc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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);