123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- 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);
- });
- });
|