mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-26 09:22:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			147 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| test("length is 1", () => {
 | |
|     expect(Promise.any).toHaveLength(1);
 | |
| });
 | |
| 
 | |
| describe("normal behavior", () => {
 | |
|     test("returns a Promise", () => {
 | |
|         const promise = Promise.any();
 | |
|         expect(promise).toBeInstanceOf(Promise);
 | |
|     });
 | |
| 
 | |
|     test("all resolve", () => {
 | |
|         const promise1 = Promise.resolve(3);
 | |
|         const promise2 = 42;
 | |
|         const promise3 = new Promise((resolve, reject) => {
 | |
|             resolve("foo");
 | |
|         });
 | |
| 
 | |
|         let resolvedValues = null;
 | |
|         let wasRejected = false;
 | |
| 
 | |
|         Promise.any([promise1, promise2, promise3]).then(
 | |
|             values => {
 | |
|                 resolvedValues = values;
 | |
|             },
 | |
|             () => {
 | |
|                 wasRejected = true;
 | |
|             }
 | |
|         );
 | |
| 
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(resolvedValues).toBe(3);
 | |
|         expect(wasRejected).toBeFalse();
 | |
|     });
 | |
| 
 | |
|     test("last resolve", () => {
 | |
|         const promise1 = Promise.reject(3);
 | |
|         const promise2 = new Promise((resolve, reject) => {
 | |
|             resolve("foo");
 | |
|         });
 | |
| 
 | |
|         let resolvedValues = null;
 | |
|         let wasRejected = false;
 | |
| 
 | |
|         Promise.any([promise1, promise2]).then(
 | |
|             values => {
 | |
|                 resolvedValues = values;
 | |
|             },
 | |
|             () => {
 | |
|                 wasRejected = true;
 | |
|             }
 | |
|         );
 | |
| 
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(resolvedValues).toBe("foo");
 | |
|         expect(wasRejected).toBeFalse();
 | |
|     });
 | |
| 
 | |
|     test("reject", () => {
 | |
|         const promise1 = Promise.reject(3);
 | |
|         const promise2 = new Promise((resolve, reject) => {
 | |
|             reject("foo");
 | |
|         });
 | |
| 
 | |
|         let rejectionReason = null;
 | |
|         let wasResolved = false;
 | |
| 
 | |
|         Promise.any([promise1, promise2]).then(
 | |
|             () => {
 | |
|                 wasResolved = true;
 | |
|             },
 | |
|             reason => {
 | |
|                 rejectionReason = reason;
 | |
|             }
 | |
|         );
 | |
| 
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(rejectionReason).toBeInstanceOf(AggregateError);
 | |
|         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.any.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
| 
 | |
|         expect(() => {
 | |
|             function promise(executor) {
 | |
|                 executor(fn, undefined);
 | |
|                 executor(fn, fn);
 | |
|             }
 | |
| 
 | |
|             Promise.any.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
| 
 | |
|         expect(() => {
 | |
|             function promise(executor) {
 | |
|                 executor(undefined, fn);
 | |
|                 executor(fn, fn);
 | |
|             }
 | |
| 
 | |
|             Promise.any.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
|     });
 | |
| 
 | |
|     test("promise without resolve method", () => {
 | |
|         expect(() => {
 | |
|             function promise(executor) {}
 | |
|             Promise.any.call(promise, []);
 | |
|         }).toThrow(TypeError);
 | |
|     });
 | |
| 
 | |
|     test("no parameters", () => {
 | |
|         let rejectionReason = null;
 | |
|         Promise.any().catch(reason => {
 | |
|             rejectionReason = reason;
 | |
|         });
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(rejectionReason).toBeInstanceOf(TypeError);
 | |
|     });
 | |
| 
 | |
|     test("non-iterable", () => {
 | |
|         let rejectionReason = null;
 | |
|         Promise.any(1).catch(reason => {
 | |
|             rejectionReason = reason;
 | |
|         });
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(rejectionReason).toBeInstanceOf(TypeError);
 | |
|     });
 | |
| 
 | |
|     test("empty list", () => {
 | |
|         let rejectionReason = null;
 | |
|         Promise.any([]).catch(reason => {
 | |
|             rejectionReason = reason;
 | |
|         });
 | |
|         runQueuedPromiseJobs();
 | |
|         expect(rejectionReason).toBeInstanceOf(AggregateError);
 | |
|     });
 | |
| });
 | 
