summaryrefslogtreecommitdiffstats
path: root/js/src/tests/ecma_7/AsyncFunctions/async-contains-unicode-escape.js
blob: d53dff696c2f1174d7943c7c3d28ad4e7aa7cd05 (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
54
var BUGNUMBER = 1315815;
var summary = "async/await containing escapes";

print(BUGNUMBER + ": " + summary);

// Using "eval" as the argument name is fugly, but it means evals below are
// *direct* evals, and so their effects in the unescaped case won't extend
// past each separate |test| call (as would happen if we used a different name
// that made each eval into an indirect eval, affecting code in the global
// scope).
function test(code, eval)
{
  var unescaped = code.replace("###", "async");
  var escaped = code.replace("###", "\\u0061");

  assertThrowsInstanceOf(() => eval(escaped), SyntaxError);
  eval(unescaped);
}

test("### function f() {}", eval);
test("var x = ### function f() {}", eval);
test("### x => {};", eval);
test("var x = ### x => {}", eval);
test("### () => {};", eval);
test("var x = ### () => {}", eval);
test("### (y) => {};", eval);
test("var x = ### (y) => {}", eval);
test("({ ### x() {} })", eval);
test("var x = ### function f() {}", eval);

if (typeof parseModule === "function")
  test("export default ### function f() {}", parseModule);

assertThrowsInstanceOf(() => eval("async await => 1;"),
                       SyntaxError);
assertThrowsInstanceOf(() => eval("async aw\\u0061it => 1;"),
                       SyntaxError);

var async = 0;
assertEq(\u0061sync, 0);

var obj = { \u0061sync() { return 1; } };
assertEq(obj.async(), 1);

async = function() { return 42; };

var z = async(obj);
assertEq(z, 42);

var w = async(obj)=>{};
assertEq(typeof w, "function");

if (typeof reportCompare === "function")
    reportCompare(true, true);