|
|
|
import { assertEquals } from "https://deno.land/std@0.178.0/testing/asserts.ts";
|
|
|
|
import { promiseObject } from "./index.ts";
|
|
|
|
|
|
|
|
// Simple object
|
|
|
|
const simple = {
|
|
|
|
test: { foo: Promise.resolve(1), bar: { foobar: Promise.resolve(2) } },
|
|
|
|
resolved: { foo: 1, bar: { foobar: 2 } },
|
|
|
|
};
|
|
|
|
|
|
|
|
// Nested promises with circular reference
|
|
|
|
const nested = {
|
|
|
|
test: (() => {
|
|
|
|
let o = {
|
|
|
|
foo: Promise.resolve(1),
|
|
|
|
bar: { foobar: Promise.resolve(2) },
|
|
|
|
baz: [1, "two", Promise.resolve(3)],
|
|
|
|
};
|
|
|
|
|
|
|
|
return Object.assign(o, { link1: o, link2: { link3: o } });
|
|
|
|
})(),
|
|
|
|
resolved: (() => {
|
|
|
|
const o = {
|
|
|
|
foo: 1,
|
|
|
|
bar: { foobar: 2 },
|
|
|
|
baz: [1, "two", 3],
|
|
|
|
};
|
|
|
|
|
|
|
|
return Object.assign(o, { link1: o, link2: { link3: o } });
|
|
|
|
})(),
|
|
|
|
};
|
|
|
|
|
|
|
|
// Deeply nested promises
|
|
|
|
const deeplyNested = {
|
|
|
|
test: Promise.resolve({ foo: Promise.resolve({ bar: Promise.resolve(Promise.resolve(5)) }) }),
|
|
|
|
resolved: { foo: { bar: 5 } },
|
|
|
|
};
|
|
|
|
|
|
|
|
Deno.test("Should resolve simple object", async () => {
|
|
|
|
assertEquals(await promiseObject(simple.test), simple.resolved);
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("Should resolve cyclic objects", async () => {
|
|
|
|
assertEquals(await promiseObject(nested.test), nested.resolved);
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("Should resolve deeply cyclic promises", async () => {
|
|
|
|
assertEquals(await promiseObject(deeplyNested.test), deeplyNested.resolved);
|
|
|
|
});
|