mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-30 11:13:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // This file was procedurally generated from the following sources:
 | |
| // - src/async-generators/yield-star-next-call-value-get-abrupt.case
 | |
| // - src/async-generators/default/async-declaration.template
 | |
| /*---
 | |
| description: Abrupt completion while getting value (Async generator Function declaration)
 | |
| esid: prod-AsyncGeneratorDeclaration
 | |
| features: [Symbol.iterator, Symbol.asyncIterator, async-iteration]
 | |
| flags: [generated, async]
 | |
| info: |
 | |
|     Async Generator Function Definitions
 | |
| 
 | |
|     AsyncGeneratorDeclaration:
 | |
|       async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
 | |
|         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).
 | |
|         ...
 | |
|         vi. If done is true, then
 | |
|            1. Return ? IteratorValue(innerResult).
 | |
|     ...
 | |
| 
 | |
| ---*/
 | |
| var reason = {};
 | |
| var obj = {
 | |
|   get [Symbol.iterator]() {
 | |
|     throw new Test262Error('it should not get Symbol.iterator');
 | |
|   },
 | |
|   [Symbol.asyncIterator]() {
 | |
|     return {
 | |
|       next() {
 | |
|         return {
 | |
|           done: true,
 | |
|           get value() {
 | |
|             throw reason;
 | |
|           }
 | |
|         };
 | |
|       }
 | |
|     };
 | |
|   }
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| var callCount = 0;
 | |
| 
 | |
| async function *gen() {
 | |
|   callCount += 1;
 | |
|   yield* obj;
 | |
|     throw new Test262Error('abrupt completion closes iter');
 | |
| 
 | |
| }
 | |
| 
 | |
| var iter = gen();
 | |
| 
 | |
| iter.next().then(() => {
 | |
|   throw new Test262Error('Promise incorrectly fulfilled.');
 | |
| }, v => {
 | |
|   assert.sameValue(v, reason, "reject reason");
 | |
| 
 | |
|   iter.next().then(({ done, value }) => {
 | |
|     assert.sameValue(done, true, 'the iterator is completed');
 | |
|     assert.sameValue(value, undefined, 'value is undefined');
 | |
|   }).then($DONE, $DONE);
 | |
| }).catch($DONE);
 | |
| 
 | |
| assert.sameValue(callCount, 1);
 |