summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/PrivateName/illegal-in-class-context.js
blob: 85b34563ec2a21ad8c2879235c05f0ab2cd6ee12 (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
// |reftest| skip-if(!xulRuntime.shell)

assertThrowsInstanceOf(() => eval(`class A { #x; #x; }`), SyntaxError);

// No computed private fields
assertThrowsInstanceOf(
    () => eval(`var x = "foo"; class A { #[x] = 20; }`), SyntaxError);

function assertThrowsWithMessage(f, msg) {
    var fullmsg;
    try {
        f();
    } catch (exc) {
        if (exc.message.normalize() === msg.normalize())
            return;

        fullmsg = `Assertion failed: expected message '${msg}', got '${exc.message}'`;
    }

    if (fullmsg === undefined)
        fullmsg = `Assertion failed: expected exception, no exception thrown`;

    throw new Error(fullmsg);
}

assertThrowsWithMessage(() => eval(`class A { #x; h(o) { return !#x; }}`),
    "invalid use of private name in unary expression without object reference");
assertThrowsWithMessage(() => eval(`class A { #x; h(o) { return 1 + #x in o; }}`),
    "invalid use of private name due to operator precedence");


if (typeof reportCompare === 'function') reportCompare(0, 0);