summaryrefslogtreecommitdiff
path: root/test/language/expressions/optional-chaining/optional-chain.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/language/expressions/optional-chaining/optional-chain.js')
-rw-r--r--test/language/expressions/optional-chaining/optional-chain.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/language/expressions/optional-chaining/optional-chain.js b/test/language/expressions/optional-chaining/optional-chain.js
new file mode 100644
index 000000000..fed70c0c7
--- /dev/null
+++ b/test/language/expressions/optional-chaining/optional-chain.js
@@ -0,0 +1,50 @@
+// Copyright 2019 Google, Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: prod-OptionalExpression
+description: >
+ various optional chain expansions
+info: |
+ OptionalChain[Yield, Await]:
+ ?.[Expression]
+ ?.IdentifierName
+ ?.Arguments
+ ?.TemplateLiteral
+ OptionalChain [Expression]
+ OptionalChain .IdentifierName
+ OptionalChain Arguments[?Yield, ?Await]
+ OptionalChain TemplateLiteral
+features: [optional-chaining]
+---*/
+
+const arr = [10, 11];
+const obj = {
+ a: 'hello',
+ b: {val: 13},
+ c(arg1) {
+ return arg1 * 2;
+ },
+ arr: [11, 12]
+};
+const i = 0;
+
+// OptionalChain: ?.[Expression]
+assert.sameValue(11, arr?.[i + 1]);
+
+// OptionalChain: ?.IdentifierName
+assert.sameValue('hello', obj?.a);
+
+// OptionalChain: ?.Arguments
+const fn = (arg1, arg2) => {
+ return arg1 + arg2;
+}
+assert.sameValue(30, fn?.(10, 20));
+
+// OptionalChain: OptionalChain [Expression]
+assert.sameValue(12, obj?.arr[i + 1]);
+
+// OptionalChain: OptionalChain .IdentifierName
+assert.sameValue(13, obj?.b.val);
+
+// OptionalChain: OptionalChain Arguments
+assert.sameValue(20, obj?.c(10));