mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-31 13:20:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			148 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			148 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); | ||
|  |     }); | ||
|  | }); |