yield-star-next-non-object-ignores-then.js (3453B)
1 // |reftest| async 2 // This file was procedurally generated from the following sources: 3 // - src/async-generators/yield-star-next-non-object-ignores-then.case 4 // - src/async-generators/default/async-class-expr-private-method.template 5 /*--- 6 description: If next() value is not-object, do not access respective then property (Async generator method as a ClassExpression element) 7 esid: prod-AsyncGeneratorPrivateMethod 8 features: [Symbol.iterator, Symbol.asyncIterator, async-iteration, class-methods-private] 9 flags: [generated, async] 10 info: | 11 ClassElement : 12 PrivateMethodDefinition 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 49 ---*/ 50 Number.prototype.then = function() { 51 throw new Test262Error('Number#then should not be used'); 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 42; 61 } 62 }; 63 } 64 }; 65 66 67 68 var callCount = 0; 69 70 var C = class { 71 async *#gen() { 72 callCount += 1; 73 yield* obj; 74 throw new Test262Error('abrupt completion closes iter'); 75 76 } 77 get gen() { return this.#gen; } 78 } 79 80 const c = new C(); 81 82 // Test the private fields do not appear as properties before set to value 83 assert( 84 !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"), 85 "#gen does not appear as an own property on C prototype" 86 ); 87 assert( 88 !Object.prototype.hasOwnProperty.call(C, "#gen"), 89 "#gen does not appear as an own property on C constructor" 90 ); 91 assert( 92 !Object.prototype.hasOwnProperty.call(c, "#gen"), 93 "#gen does not appear as an own property on C instance" 94 ); 95 96 var iter = c.gen(); 97 98 iter.next().then(() => { 99 throw new Test262Error('Promise incorrectly fulfilled.'); 100 }, v => { 101 assert.sameValue(v.constructor, TypeError, 'TypeError'); 102 103 iter.next().then(({ done, value }) => { 104 assert.sameValue(done, true, 'the iterator is completed'); 105 assert.sameValue(value, undefined, 'value is undefined'); 106 }).then($DONE, $DONE); 107 }).catch($DONE); 108 109 assert.sameValue(callCount, 1); 110 111 // Test the private fields do not appear as properties after set to value 112 assert( 113 !Object.prototype.hasOwnProperty.call(C.prototype, "#gen"), 114 "#gen does not appear as an own property on C prototype" 115 ); 116 assert( 117 !Object.prototype.hasOwnProperty.call(C, "#gen"), 118 "#gen does not appear as an own property on C constructor" 119 ); 120 assert( 121 !Object.prototype.hasOwnProperty.call(c, "#gen"), 122 "#gen does not appear as an own property on C instance" 123 );