yield-star-next-then-non-callable-null-fulfillpromise.js (2282B)
1 // |reftest| async 2 // This file was procedurally generated from the following sources: 3 // - src/async-generators/yield-star-next-then-non-callable-null-fulfillpromise.case 4 // - src/async-generators/default/async-class-decl-method.template 5 /*--- 6 description: FulfillPromise if next().then is not-callable (null) (Async Generator method as a ClassDeclaration element) 7 esid: prod-AsyncGeneratorMethod 8 features: [Symbol.iterator, Symbol.asyncIterator, async-iteration] 9 flags: [generated, async] 10 info: | 11 ClassElement : 12 MethodDefinition 13 14 MethodDefinition : 15 AsyncGeneratorMethod 16 17 Async Generator Function Definitions 18 19 AsyncGeneratorMethod : 20 async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } 21 22 23 YieldExpression: yield * AssignmentExpression 24 ... 25 6. Repeat 26 a. If received.[[Type]] is normal, then 27 ii. Let innerResult be ? Invoke(iterator, "next", 28 « received.[[Value]] »). 29 iii. If generatorKind is async, then set innerResult to 30 ? Await(innerResult). 31 iv. If Type(innerResult) is not Object, throw a TypeError exception. 32 ... 33 34 Await 35 36 ... 37 2. Let promiseCapability be ! NewPromiseCapability(%Promise%). 38 3. Perform ! Call(promiseCapability.[[Resolve]], undefined, « promise »). 39 ... 40 41 Promise Resolve Functions 42 43 ... 44 7. If Type(resolution) is not Object, then 45 a. Return FulfillPromise(promise, resolution). 46 8. Let then be Get(resolution, "then"). 47 ... 48 11. If IsCallable(thenAction) is false, then 49 a. Return FulfillPromise(promise, resolution). 50 ... 51 52 ---*/ 53 var obj = { 54 get [Symbol.iterator]() { 55 throw new Test262Error('it should not get Symbol.iterator'); 56 }, 57 [Symbol.asyncIterator]() { 58 return { 59 next() { 60 return { 61 then: null, 62 value: 42, 63 done: false 64 } 65 } 66 }; 67 } 68 }; 69 70 71 72 var callCount = 0; 73 74 class C { async *gen() { 75 callCount += 1; 76 yield* obj; 77 throw new Test262Error('completion closes iter'); 78 79 }} 80 81 var gen = C.prototype.gen; 82 83 var iter = gen(); 84 85 iter.next().then(({ value, done }) => { 86 assert.sameValue(value, 42); 87 assert.sameValue(done, false); 88 }).then($DONE, $DONE); 89 90 assert.sameValue(callCount, 1);