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