Skip to content

Commit db6f630

Browse files
authored
Adding test coverage for 'OptionalChain'.PrivateIdentifier case (#2534)
1 parent 344612b commit db6f630

File tree

3 files changed

+128
-0
lines changed

3 files changed

+128
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright (C) 2020 Caio Lima (Igalia SL). All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
desc: OptionalChain.PrivateIdentifier is a valid syntax
6+
info: |
7+
Updated Productions
8+
9+
OptionalChain[Yield, Await] :
10+
`?.` `[` Expression[+In, ?Yield, ?Await] `]`
11+
`?.` IdentifierName
12+
`?.` Arguments[?Yield, ?Await]
13+
`?.` TemplateLiteral[?Yield, ?Await, +Tagged]
14+
OptionalChain[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
15+
OptionalChain[?Yield, ?Await] `.` IdentifierName
16+
OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]
17+
OptionalChain[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
18+
OptionalChain[?Yield, ?Await] `.` PrivateIdentifier
19+
template: default
20+
features: [class-fields-private, optional-chaining]
21+
---*/
22+
23+
//- elements
24+
#f = 'Test262';
25+
26+
method(o) {
27+
return o?.c.#f;
28+
}
29+
//- assertions
30+
let c = new C();
31+
let o = {c: c};
32+
assert.sameValue(c.method(o), 'Test262');
33+
34+
assert.sameValue(c.method(null), undefined);
35+
assert.sameValue(c.method(undefined), undefined);
36+
37+
o = {c: new Object()};
38+
assert.throws(TypeError, function() {
39+
c.method(o);
40+
}, 'accessed private field from an ordinary object');
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// This file was procedurally generated from the following sources:
2+
// - src/class-elements/private-field-after-optional-chain.case
3+
// - src/class-elements/default/cls-expr.template
4+
/*---
5+
description: OptionalChain.PrivateIdentifier is a valid syntax (field definitions in a class expression)
6+
esid: prod-FieldDefinition
7+
features: [class-fields-private, optional-chaining, class]
8+
flags: [generated]
9+
info: |
10+
Updated Productions
11+
12+
OptionalChain[Yield, Await] :
13+
`?.` `[` Expression[+In, ?Yield, ?Await] `]`
14+
`?.` IdentifierName
15+
`?.` Arguments[?Yield, ?Await]
16+
`?.` TemplateLiteral[?Yield, ?Await, +Tagged]
17+
OptionalChain[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
18+
OptionalChain[?Yield, ?Await] `.` IdentifierName
19+
OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]
20+
OptionalChain[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
21+
OptionalChain[?Yield, ?Await] `.` PrivateIdentifier
22+
23+
---*/
24+
25+
26+
var C = class {
27+
#f = 'Test262';
28+
29+
method(o) {
30+
return o?.c.#f;
31+
}
32+
}
33+
34+
let c = new C();
35+
let o = {c: c};
36+
assert.sameValue(c.method(o), 'Test262');
37+
38+
assert.sameValue(c.method(null), undefined);
39+
assert.sameValue(c.method(undefined), undefined);
40+
41+
o = {c: new Object()};
42+
assert.throws(TypeError, function() {
43+
c.method(o);
44+
}, 'accessed private field from an ordinary object');
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// This file was procedurally generated from the following sources:
2+
// - src/class-elements/private-field-after-optional-chain.case
3+
// - src/class-elements/default/cls-decl.template
4+
/*---
5+
description: OptionalChain.PrivateIdentifier is a valid syntax (field definitions in a class declaration)
6+
esid: prod-FieldDefinition
7+
features: [class-fields-private, optional-chaining, class]
8+
flags: [generated]
9+
info: |
10+
Updated Productions
11+
12+
OptionalChain[Yield, Await] :
13+
`?.` `[` Expression[+In, ?Yield, ?Await] `]`
14+
`?.` IdentifierName
15+
`?.` Arguments[?Yield, ?Await]
16+
`?.` TemplateLiteral[?Yield, ?Await, +Tagged]
17+
OptionalChain[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
18+
OptionalChain[?Yield, ?Await] `.` IdentifierName
19+
OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]
20+
OptionalChain[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
21+
OptionalChain[?Yield, ?Await] `.` PrivateIdentifier
22+
23+
---*/
24+
25+
26+
class C {
27+
#f = 'Test262';
28+
29+
method(o) {
30+
return o?.c.#f;
31+
}
32+
}
33+
34+
let c = new C();
35+
let o = {c: c};
36+
assert.sameValue(c.method(o), 'Test262');
37+
38+
assert.sameValue(c.method(null), undefined);
39+
assert.sameValue(c.method(undefined), undefined);
40+
41+
o = {c: new Object()};
42+
assert.throws(TypeError, function() {
43+
c.method(o);
44+
}, 'accessed private field from an ordinary object');

0 commit comments

Comments
 (0)