summaryrefslogtreecommitdiff
path: root/test/language/expressions/optional-chaining/optional-chain-prod-expression.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/language/expressions/optional-chaining/optional-chain-prod-expression.js')
-rw-r--r--test/language/expressions/optional-chaining/optional-chain-prod-expression.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/language/expressions/optional-chaining/optional-chain-prod-expression.js b/test/language/expressions/optional-chaining/optional-chain-prod-expression.js
new file mode 100644
index 000000000..bd9030584
--- /dev/null
+++ b/test/language/expressions/optional-chaining/optional-chain-prod-expression.js
@@ -0,0 +1,42 @@
+// Copyright 2020 Salesforce.com, Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: prod-OptionalExpression
+description: >
+ Productions for ?. [Expression]
+info: |
+ OptionalChain:
+ ?.[ Expression ]
+features: [optional-chaining]
+---*/
+
+const $ = 'x';
+const arr = [39, 42];
+
+arr.true = 'prop';
+arr[1.1] = 'other prop';
+
+const obj = {
+ a: 'hello',
+ undefined: 40,
+ $: 0,
+ NaN: 41,
+ null: 42,
+ x: 43,
+ true: 44
+};
+
+assert.sameValue(arr?.[0], 39, '[0]');
+assert.sameValue(arr?.[0, 1], 42, '[0, 1]');
+assert.sameValue(arr?.[1], 42, '[1]');
+assert.sameValue(arr?.[1, 0], 39, '[1, 0]');
+assert.sameValue(arr?.[{}, NaN, undefined, 2, 0, 10 / 10], 42, '[{}, NaN, undefined, 2, 0, 10 / 10]');
+assert.sameValue(arr?.[true], 'prop', '[true]');
+assert.sameValue(arr?.[1.1], 'other prop', '[1.1]');
+
+assert.sameValue(obj?.[undefined], 40, '[undefined]');
+assert.sameValue(obj?.[NaN], 41, '[NaN]');
+assert.sameValue(obj?.[null], 42, '[null]');
+assert.sameValue(obj?.['$'], 0, '["$"]');
+assert.sameValue(obj?.[$], 43, '[$]');
+assert.sameValue(obj?.[true], 44, '[true]');