41 lines
		
	
	
	
		
			985 B
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
	
		
			985 B
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2022 Signal Messenger, LLC
							 | 
						||
| 
								 | 
							
								// SPDX-License-Identifier: AGPL-3.0-only
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { assert } from 'chai';
							 | 
						||
| 
								 | 
							
								import { EventEmitter } from 'events';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import { wrapEventEmitterOnce as once } from '../../util/wrapEventEmitterOnce';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('wrapEventEmitterOnce', () => {
							 | 
						||
| 
								 | 
							
								  let ee: EventEmitter;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  beforeEach(() => {
							 | 
						||
| 
								 | 
							
								    ee = new EventEmitter();
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should get the event arguments', async () => {
							 | 
						||
| 
								 | 
							
								    const result = once(ee, 'result');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ee.emit('result', 1, 2, 3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    assert.deepStrictEqual(await result, [1, 2, 3]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should handle error event', async () => {
							 | 
						||
| 
								 | 
							
								    const result = once(ee, 'result');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ee.emit('error', new Error('aha!'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    await assert.isRejected(result, 'aha!');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should stop handling error event after result', async () => {
							 | 
						||
| 
								 | 
							
								    const result = once(ee, 'result');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ee.emit('result', 'okay');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    assert.deepStrictEqual(await result, ['okay']);
							 | 
						||
| 
								 | 
							
								    assert.strictEqual(ee.listeners('error').length, 0);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |