mirror of
https://github.com/tc39/test262.git
synced 2025-07-07 06:04:37 +02:00
Utilize the test generation tool to increase coverage of destructuring assignment semantics. Previously, only destructuring assignment in the AssignmentExpression position was tested. With this change applied, the same tests will assert expected behavior for destructuring assignment in `for..of` statements, as well. A limited number of tests are applied to the `for..in` statement as well, but due to the iteration protocol observed by that statement, many destructuring tests are not relevant, and others cannot be automatically generated from this format.
54 lines
1.4 KiB
Plaintext
54 lines
1.4 KiB
Plaintext
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
/*---
|
|
desc: Reference is evaluated during assignment
|
|
info: |
|
|
ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ]
|
|
|
|
[...]
|
|
5. Let result be the result of performing
|
|
IteratorDestructuringAssignmentEvaluation of AssignmentRestElement with
|
|
iteratorRecord as the argument
|
|
6. If iteratorRecord.[[done]] is false, return IteratorClose(iterator,
|
|
result).
|
|
|
|
AssignmentRestElement[Yield] : ... DestructuringAssignmentTarget
|
|
|
|
1. If DestructuringAssignmentTarget is neither an ObjectLiteral nor an
|
|
ArrayLiteral, then
|
|
a. Let lref be the result of evaluating DestructuringAssignmentTarget.
|
|
b. ReturnIfAbrupt(lref).
|
|
[...]
|
|
features: [Symbol.iterator]
|
|
template: default
|
|
es6id: 12.14.5.2
|
|
esid: sec-runtime-semantics-destructuringassignmentevaluation
|
|
---*/
|
|
|
|
//- setup
|
|
var nextCount = 0;
|
|
var returnCount = 0;
|
|
var iterable = {};
|
|
var iterator = {
|
|
next: function() {
|
|
nextCount += 1;
|
|
return { done: true };
|
|
},
|
|
return: function() {
|
|
returnCount += 1;
|
|
}
|
|
};
|
|
var obj = {};
|
|
iterable[Symbol.iterator] = function() {
|
|
return iterator;
|
|
};
|
|
//- elems
|
|
[...obj['a' + 'b']]
|
|
//- vals
|
|
iterable
|
|
//- body
|
|
assert.sameValue(nextCount, 1);
|
|
assert.sameValue(returnCount, 0);
|
|
assert(!!obj.ab);
|
|
assert.sameValue(obj.ab.length, 0);
|