summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/extensions/expression-closure-syntax.js
blob: 84b3cc8fe998583ede66435944bbac3abebb8bfb (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
55
56
57
58
59
60
61
62
// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/licenses/publicdomain/

//-----------------------------------------------------------------------------
var BUGNUMBER = 1416337;
var summary =
  "Expression closure syntax is only permitted for functions that constitute " +
  "entire AssignmentExpressions, not PrimaryExpressions that are themselves " +
  "components of larger binary expressions";

print(BUGNUMBER + ": " + summary);

/**************
 * BEGIN TEST *
 **************/

{
  function assertThrowsSyntaxError(code)
  {
    function testOne(replacement)
    {
      var x, rv;
      try
      {
        rv = eval(code.replace("@@@", replacement));
      }
      catch (e)
      {
        assertEq(e instanceof SyntaxError, true,
                 "should have thrown a SyntaxError, instead got: " + e);
        return;
      }

      assertEq(true, false, "should have thrown, instead returned " + rv);
    }

    testOne("function");
    testOne("async function");
  }

  assertThrowsSyntaxError("x = ++@@@() 1");
  assertThrowsSyntaxError("x = delete @@@() 1");
  assertThrowsSyntaxError("x = new @@@() 1");
  assertThrowsSyntaxError("x = void @@@() 1");
  assertThrowsSyntaxError("x = +@@@() 1");
  assertThrowsSyntaxError("x = 1 + @@@() 1");
  assertThrowsSyntaxError("x = null != @@@() 1");
  assertThrowsSyntaxError("x = null != @@@() 0 ? 1 : a => {}");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {} !== null");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}.toString");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}['toString']");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}``");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}()");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}++");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {} || 0");
  assertThrowsSyntaxError("x = 0 || @@@() 0 ? 1 : a => {}");
  assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {} && true");
  assertThrowsSyntaxError("x = true && @@@() 0 ? 1 : a => {}");
}

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