mirror of https://github.com/tc39/test262.git
76 lines
1.4 KiB
JavaScript
76 lines
1.4 KiB
JavaScript
// Copyright 2019 Google, Inc. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
/*---
|
|
esid: prod-OptionalExpression
|
|
description: >
|
|
optional chain on call expression
|
|
info: |
|
|
Left-Hand-Side Expressions
|
|
OptionalExpression:
|
|
CallExpression OptionalChain
|
|
features: [optional-chaining]
|
|
---*/
|
|
|
|
// CallExpression CoverCallExpressionAndAsyncArrowHead
|
|
function fn () {
|
|
return {a: 33};
|
|
};
|
|
const obj = {
|
|
fn () {
|
|
return 44;
|
|
}
|
|
}
|
|
assert.sameValue(33, fn()?.a);
|
|
assert.sameValue(undefined, fn()?.b);
|
|
assert.sameValue(44, obj?.fn());
|
|
|
|
// CallExpression SuperCall
|
|
class A {}
|
|
class B extends A {
|
|
constructor () {
|
|
assert.sameValue(undefined, super()?.a);
|
|
}
|
|
}
|
|
new B();
|
|
|
|
// CallExpression Arguments
|
|
function fn2 () {
|
|
return () => {
|
|
return {a: 66};
|
|
};
|
|
}
|
|
function fn3 () {
|
|
return () => {
|
|
return null;
|
|
};
|
|
}
|
|
assert.sameValue(66, fn2()()?.a);
|
|
assert.sameValue(undefined, fn3()()?.a);
|
|
|
|
// CallExpression [Expression]
|
|
function fn4 () {
|
|
return [{a: 77}];
|
|
}
|
|
function fn5 () {
|
|
return [];
|
|
}
|
|
assert.sameValue(77, fn4()[0]?.a);
|
|
assert.sameValue(undefined, fn5()[0]?.a);
|
|
|
|
// CallExpression .IdentifierName
|
|
function fn6 () {
|
|
return {
|
|
a: {
|
|
b: 88
|
|
}
|
|
};
|
|
}
|
|
assert.sameValue(88, fn6().a?.b);
|
|
assert.sameValue(undefined, fn6().b?.c);
|
|
|
|
// CallExpression TemplateLiteral
|
|
function fn7 () {
|
|
return () => {};
|
|
}
|
|
assert.sameValue(undefined, fn7()`hello`?.a);
|