mirror of
https://github.com/tc39/test262.git
synced 2025-11-14 02:39:42 +01: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.
60 lines
1.4 KiB
Plaintext
60 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: >
|
|
IteratorClose is called when assignment evaluation has not exhausted the
|
|
iterator
|
|
info: |
|
|
ArrayAssignmentPattern : [ Elision ]
|
|
|
|
1. Let iterator be GetIterator(value).
|
|
[...]
|
|
5. If iteratorRecord.[[done]] is false, return IteratorClose(iterator,
|
|
result).
|
|
[...]
|
|
|
|
7.4.6 IteratorClose( iterator, completion )
|
|
|
|
[...]
|
|
6. Let innerResult be Call(return, iterator, « »).
|
|
[...]
|
|
features: [Symbol.iterator]
|
|
template: default
|
|
es6id: 12.14.5.2
|
|
esid: sec-runtime-semantics-destructuringassignmentevaluation
|
|
---*/
|
|
|
|
//- setup
|
|
var nextCount = 0;
|
|
var returnCount = 0;
|
|
var thisValue = null;
|
|
var args = null;
|
|
var iterable = {};
|
|
var iterator = {
|
|
next: function() {
|
|
nextCount += 1;
|
|
// Set an upper-bound to limit unnecessary iteration in non-conformant
|
|
// implementations
|
|
return { done: nextCount > 10 };
|
|
},
|
|
return: function() {
|
|
returnCount += 1;
|
|
thisValue = this;
|
|
args = arguments;
|
|
return {};
|
|
}
|
|
};
|
|
iterable[Symbol.iterator] = function() {
|
|
return iterator;
|
|
};
|
|
//- elems
|
|
[ , ]
|
|
//- vals
|
|
iterable
|
|
//- body
|
|
assert.sameValue(nextCount, 1);
|
|
assert.sameValue(returnCount, 1);
|
|
assert.sameValue(thisValue, iterator, 'correct `this` value');
|
|
assert(!!args, 'arguments object provided');
|
|
assert.sameValue(args.length, 0, 'zero arguments specified');
|