mirror of
https://github.com/tc39/test262.git
synced 2025-11-07 07:19:44 +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.
52 lines
1.3 KiB
Plaintext
52 lines
1.3 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 throws a TypeError when `return` returns a non-Object value
|
|
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, « »).
|
|
7. If completion.[[type]] is throw, return Completion(completion).
|
|
8. If innerResult.[[type]] is throw, return Completion(innerResult).
|
|
9. If Type(innerResult.[[value]]) is not Object, throw a TypeError
|
|
exception.
|
|
features: [Symbol.iterator]
|
|
template: error
|
|
es6id: 12.14.5.2
|
|
esid: sec-runtime-semantics-destructuringassignmentevaluation
|
|
---*/
|
|
|
|
//- setup
|
|
var iterable = {};
|
|
var nextCount = 0;
|
|
var iterator = {
|
|
next: function() {
|
|
nextCount += 1;
|
|
// Set an upper-bound to limit unnecessary iteration in non-conformant
|
|
// implementations
|
|
return { done: nextCount > 10 };
|
|
},
|
|
return: function() {
|
|
return null;
|
|
}
|
|
};
|
|
iterable[Symbol.iterator] = function() {
|
|
return iterator;
|
|
};
|
|
//- error
|
|
TypeError
|
|
//- elems
|
|
[ , ]
|
|
//- vals
|
|
iterable
|