Add coverage for rest properties with computed key

gh-2089
This commit is contained in:
HyeockJinKim 2020-09-22 07:59:23 +09:00 committed by Rick Waldron
parent e75ed15b91
commit be99a3e519
3 changed files with 119 additions and 0 deletions

View File

@ -0,0 +1,32 @@
// Copyright (C) 2020 HyeockJin Kim. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
desc: >
Destructuring field can be a non-string computed property, i.e it
can be defined only at runtime. Rest operation needs to skip
these properties as well.
template: default
includes: [propertyHelper.js]
features: [object-rest]
---*/
//- setup
var a = 1.;
var b, rest;
//- elems
{[a]:b, ...rest}
//- vals
{[a]: 1, bar: 2 }
//- body
assert.sameValue(b, 1);
assert.sameValue(Object.getOwnPropertyDescriptor(rest, "1"), undefined);
verifyProperty(rest, "bar", {
value: 2,
enumerable: true,
writable: true,
configurable: true
});

View File

@ -0,0 +1,39 @@
// This file was procedurally generated from the following sources:
// - src/dstr-assignment/obj-rest-non-string-computed-property.case
// - src/dstr-assignment/default/assignment-expr.template
/*---
description: Destructuring field can be a non-string computed property, i.e it can be defined only at runtime. Rest operation needs to skip these properties as well. (AssignmentExpression)
esid: sec-variable-statement-runtime-semantics-evaluation
features: [object-rest, destructuring-binding]
flags: [generated]
includes: [propertyHelper.js]
info: |
VariableDeclaration : BindingPattern Initializer
1. Let rhs be the result of evaluating Initializer.
2. Let rval be GetValue(rhs).
3. ReturnIfAbrupt(rval).
4. Return the result of performing BindingInitialization for
BindingPattern passing rval and undefined as arguments.
---*/
var a = 1.;
var b, rest;
var result;
var vals = {[a]: 1, bar: 2 };
result = {[a]:b, ...rest} = vals;
assert.sameValue(b, 1);
assert.sameValue(Object.getOwnPropertyDescriptor(rest, "1"), undefined);
verifyProperty(rest, "bar", {
value: 2,
enumerable: true,
writable: true,
configurable: true
});
assert.sameValue(result, vals);

View File

@ -0,0 +1,48 @@
// This file was procedurally generated from the following sources:
// - src/dstr-assignment/obj-rest-non-string-computed-property.case
// - src/dstr-assignment/default/for-of.template
/*---
description: Destructuring field can be a non-string computed property, i.e it can be defined only at runtime. Rest operation needs to skip these properties as well. (For..of statement)
esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation
features: [object-rest, destructuring-binding]
flags: [generated]
includes: [propertyHelper.js]
info: |
IterationStatement :
for ( LeftHandSideExpression of AssignmentExpression ) Statement
1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« »,
AssignmentExpression, iterate).
2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement,
keyResult, assignment, labelSet).
13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation
[...]
4. If destructuring is true and if lhsKind is assignment, then
a. Assert: lhs is a LeftHandSideExpression.
b. Let assignmentPattern be the parse of the source text corresponding to
lhs using AssignmentPattern as the goal symbol.
[...]
---*/
var a = 1.;
var b, rest;
var counter = 0;
for ({[a]:b, ...rest} of [{[a]: 1, bar: 2 }]) {
assert.sameValue(b, 1);
assert.sameValue(Object.getOwnPropertyDescriptor(rest, "1"), undefined);
verifyProperty(rest, "bar", {
value: 2,
enumerable: true,
writable: true,
configurable: true
});
counter += 1;
}
assert.sameValue(counter, 1);