// |reftest| async // This file was procedurally generated from the following sources: // - src/async-generators/yield-star-next-then-non-callable-null-fulfillpromise.case // - src/async-generators/default/async-class-decl-private-method.template /*--- description: FulfillPromise if next().then is not-callable (null) (Async Generator method as a ClassDeclaration element) esid: prod-AsyncGeneratorPrivateMethod features: [Symbol.iterator, Symbol.asyncIterator, async-iteration, class-methods-private] flags: [generated, async] info: | ClassElement : PrivateMethodDefinition MethodDefinition : AsyncGeneratorMethod Async Generator Function Definitions AsyncGeneratorMethod : async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } 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). ... ---*/ var obj = { get [Symbol.iterator]() { throw new Test262Error('it should not get Symbol.iterator'); }, [Symbol.asyncIterator]() { return { next() { return { then: null, value: 42, done: false } } }; } }; var callCount = 0; class C { async *#gen() { callCount += 1; yield* obj; throw new Test262Error('completion closes iter'); } get gen() { return this.#gen; } } const c = new C(); // Test the private fields do not appear as properties before set to value assert( !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"), "#gen does not appear as an own property on C prototype" ); assert( !Object.prototype.hasOwnProperty.call(C, "#gen"), "#gen does not appear as an own property on C constructor" ); assert( !Object.prototype.hasOwnProperty.call(c, "#gen"), "#gen does not appear as an own property on C instance" ); var iter = c.gen(); iter.next().then(({ value, done }) => { assert.sameValue(value, 42); assert.sameValue(done, false); }).then($DONE, $DONE); assert.sameValue(callCount, 1); // Test the private fields do not appear as properties after set to value assert( !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"), "#gen does not appear as an own property on C prototype" ); assert( !Object.prototype.hasOwnProperty.call(C, "#gen"), "#gen does not appear as an own property on C constructor" ); assert( !Object.prototype.hasOwnProperty.call(c, "#gen"), "#gen does not appear as an own property on C instance" );