// Copyright 2017 Tooru Fujisawa. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- template: default desc: FulfillPromise if next().then is not-callable (boolean) info: | YieldExpression: yield * AssignmentExpression ... 6. Repeat a. If received.[[Type]] is normal, then ii. Let innerResult be ? Invoke(iterator, "next", « received.[[Value]] »). iii. If generatorKind is async, then set innerResult to ? Await(innerResult). iv. If Type(innerResult) is not Object, throw a TypeError exception. ... Await ... 2. Let promiseCapability be ! NewPromiseCapability(%Promise%). 3. Perform ! Call(promiseCapability.[[Resolve]], undefined, « promise »). ... Promise Resolve Functions ... 7. If Type(resolution) is not Object, then a. Return FulfillPromise(promise, resolution). 8. Let then be Get(resolution, "then"). ... 11. If IsCallable(thenAction) is false, then a. Return FulfillPromise(promise, resolution). ... features: [Symbol.iterator, Symbol.asyncIterator] flags: [async] ---*/ //- setup var obj = { get [Symbol.iterator]() { throw new Test262Error('it should not get Symbol.iterator'); }, [Symbol.asyncIterator]() { return { next() { return { then: true, value: 42, done: false } } }; } }; //- body yield* obj; throw new Test262Error('completion closes iter'); //- assertions iter.next().then(({ value, done }) => { assert.sameValue(value, 42); assert.sameValue(done, false); }).then($DONE, $DONE);