test262/src/dstr-assignment/array-elem-iter-rtrn-close-...

67 lines
1.6 KiB
Plaintext
Raw Normal View History

Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
// Copyright (C) 2016 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
desc: >
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
IteratorClose throws a TypeError when `return` returns a non-Object value
info: |
ArrayAssignmentPattern : [ AssignmentElementList ]
[...]
5. If iteratorRecord.[[done]] is false, return IteratorClose(iterator,
result).
6. Return 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, generators]
template: default
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
es6id: 12.14.5.2
esid: sec-runtime-semantics-destructuringassignmentevaluation
---*/
//- setup
var nextCount = 0;
var returnCount = 0;
var unreachable = 0;
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
var iterator = {
next: function() {
nextCount += 1;
return {done: false, value: undefined};
},
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
return: function() {
returnCount += 1;
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
return null;
}
};
var iterable = {};
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
iterable[Symbol.iterator] = function() {
return iterator;
};
function* g() {
//- elems
[ {} = yield ]
//- vals
iterable
//- body
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
unreachable += 1;
//- teardown
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
}
var iter = g();
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
iter.next();
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 0);
Add tests for IteratorClose in dstr assignment (#524) The files in this patch are organized according to the following naming scheme: Prefix | Grammar production -------------------|------------------- `array-empty-` | ArrayAssignmentPattern : [ ] `array-elision-` | ArrayAssignmentPattern : [ Elision ] `array-rest-` | ArrayAssignmentPattern : [ Elisionopt AssignmentRestElement ] `array-elem-` | ArrayAssignmentPattern : [ AssignmentElementList ] `array-elem-trlg-` | ArrayAssignmentPattern : [ AssignmentElementList , Elisionopt AssignmentRestElementopt ] Suffix | Intent -------------------|------- `-abpt-close-err` | The assignment evaluation returns an abrupt completion, and the iterator's `return` method throws an error `-abpt-close-skip` | The assignment evaluation returns an abrupt completion, but IteratorClose is not invoked `-abpt-close` | The assignment evaluation returns an abrupt completion, and IteratorClose is invoked as specified `-get-err` | Abrupt completion returned from GetIterator `-nrml-close-err` | The assignment evaluation completes, and the iterator's `return` method throws an error `-nrml-close-null` | The assignment evaluation completes, and the iterator's `return` method returns a non-Object value (there is no corresponding `-abpt-` suffix because the algorithm does not reference the return value in those cases) `-nrml-close-skip` | The assignment evaluation completes, but IteratorClose is not invoked `-nrml-close` | The assignment evaluation completes, and IteratorClose is invoked as specified Not all suffixes are appropriate for all productions. Suffixes have been simplified in cases where less specificity is necessary to disambiguate test cases.
2016-04-18 20:33:21 +02:00
assert.throws(TypeError, function() {
iter.return();
});
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 1);
assert.sameValue(unreachable, 0, 'Unreachable statement was not executed');