mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:42:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| test("length is 1", () => {
 | |
|     expect(Promise.race).toHaveLength(1);
 | |
| });
 | |
| 
 | |
| describe("normal behavior", () => {
 | |
|     test("returns a Promise", () => {
 | |
|         const promise = Promise.race();
 | |
|         expect(promise).toBeInstanceOf(Promise);
 | |
|     });
 | |
| 
 | |
|     test("resolve", () => {
 | |
|         const promise1 = Promise.resolve(3);
 | |
|         const promise2 = 42;
 | |
|         const promise3 = new Promise((resolve, reject) => {
 | |
|             resolve("foo");
 | |
|         });
 | |
| 
 | |
|         let resolvedValue = null;
 | |
|         let wasRejected = false;
 | |
| 
 | |
|         Promise.race([promise1, promise2, promise3]).then(
 | |
|             value => {
 | |
|                 resolvedValue = value;
 | |
|             },
 | |
|             () => {
 | |
|                 wasRejected = true;
 | |
|             }
 | |
|         );
 | |
| 
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(resolvedValue).toBe(3);
 | |
|         expect(wasRejected).toBeFalse();
 | |
|     });
 | |
| 
 | |
|     test("reject", () => {
 | |
|         const promise1 = new Promise((resolve, reject) => {
 | |
|             reject("foo");
 | |
|         });
 | |
|         const promise2 = 42;
 | |
|         const promise3 = Promise.resolve(3);
 | |
| 
 | |
|         let rejectionReason = null;
 | |
|         let wasResolved = false;
 | |
| 
 | |
|         Promise.race([promise1, promise2, promise3]).then(
 | |
|             () => {
 | |
|                 wasResolved = true;
 | |
|             },
 | |
|             reason => {
 | |
|                 rejectionReason = reason;
 | |
|             }
 | |
|         );
 | |
| 
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(rejectionReason).toBe("foo");
 | |
|         expect(wasResolved).toBeFalse();
 | |
|     });
 | |
| });
 | |
| 
 | |
| describe("exceptional behavior", () => {
 | |
|     test("cannot invoke capabilities executor twice", () => {
 | |
|         function fn() {}
 | |
| 
 | |
|         expect(() => {
 | |
|             function promise(executor) {
 | |
|                 executor(fn, fn);
 | |
|                 executor(fn, fn);
 | |
|             }
 | |
| 
 | |
|             Promise.race.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
| 
 | |
|         expect(() => {
 | |
|             function promise(executor) {
 | |
|                 executor(fn, undefined);
 | |
|                 executor(fn, fn);
 | |
|             }
 | |
| 
 | |
|             Promise.race.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
| 
 | |
|         expect(() => {
 | |
|             function promise(executor) {
 | |
|                 executor(undefined, fn);
 | |
|                 executor(fn, fn);
 | |
|             }
 | |
| 
 | |
|             Promise.race.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
|     });
 | |
| 
 | |
|     test("promise without resolve method", () => {
 | |
|         expect(() => {
 | |
|             function promise(executor) {}
 | |
|             Promise.race.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
|     });
 | |
| 
 | |
|     test("no parameters", () => {
 | |
|         let rejectionReason = null;
 | |
|         Promise.race().catch(reason => {
 | |
|             rejectionReason = reason;
 | |
|         });
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(rejectionReason).toBeInstanceOf(TypeError);
 | |
|     });
 | |
| 
 | |
|     test("non-iterable", () => {
 | |
|         let rejectionReason = null;
 | |
|         Promise.race(1).catch(reason => {
 | |
|             rejectionReason = reason;
 | |
|         });
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(rejectionReason).toBeInstanceOf(TypeError);
 | |
|     });
 | |
| });
 | 
