diff options
Diffstat (limited to 'js/src/tests/test262/language/statements/async-generator/yield-star-return-missing-value-is-awaited.js')
-rw-r--r-- | js/src/tests/test262/language/statements/async-generator/yield-star-return-missing-value-is-awaited.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/statements/async-generator/yield-star-return-missing-value-is-awaited.js b/js/src/tests/test262/language/statements/async-generator/yield-star-return-missing-value-is-awaited.js new file mode 100644 index 0000000000..d4d3f641be --- /dev/null +++ b/js/src/tests/test262/language/statements/async-generator/yield-star-return-missing-value-is-awaited.js @@ -0,0 +1,45 @@ +// |reftest| async +// Copyright (C) 2020 Alexey Shvayka. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-generator-function-definitions-runtime-semantics-evaluation +description: > + If iterator's "return" method is missing, + received value is awaited before forwarded to the runtime. +info: | + YieldExpression : yield * AssignmentExpression + + [...] + 7. Repeat, + [...] + c. Else, + i. Assert: received.[[Type]] is return. + ii. Let return be ? GetMethod(iterator, "return"). + iii. If return is undefined, then + 1. If generatorKind is async, then set received.[[Value]] to ? Await(received.[[Value]]). + 2. Return Completion(received). +features: [Symbol.asyncIterator, async-iteration] +flags: [async] +---*/ + +var asyncIterable = { + [Symbol.asyncIterator]: function() { + return this; + }, + next: function() { + return {value: 1, done: false}; + }, +}; + +async function* asyncGenerator() { + yield* asyncIterable; +} + +var asyncIterator = asyncGenerator(); +asyncIterator.next().then(function() { + var promise = Promise.resolve(2).then(() => 3); + return asyncIterator.return(promise).then(function(result) { + assert.sameValue(result.value, 3); + assert.sameValue(result.done, true); + }); +}).then($DONE, $DONE); |