typed-utilities
Version:
Strongly typed general purpose utilities
79 lines (62 loc) • 2.47 kB
JavaScript
;
var _ = require("..");
describe(`Result`, () => {
test(`Sync`, () => {
const divide = (a, b) => {
if (b === 0) {
throw new Error(`division by zero`);
}
return a / b;
};
const res1 = _.Result.tryCatch(() => divide(1, 10));
const res2 = _.Result.tryCatch(() => divide(1, 0));
expect(_.Result.is.ok(res1)).toEqual(true);
expect(_.Result.is.err(res1)).toEqual(false);
expect(_.Result.to.okValue(res1)).toEqual(0.1);
expect(_.Result.is.ok(res2)).toEqual(false);
expect(_.Result.is.err(res2)).toEqual(true);
expect(_.Result.to.errError(res2)).toBeInstanceOf(Error);
const t1 = [1, 2, 3].map(_.Result.of.ok);
for (const m of t1) {
expect(_.Result.is.ok(m)).toEqual(true);
}
const isNotOdd = new Error(`not odd`);
const keepOdd = v => v % 2 === 1 ? _.Result.of.ok(v) : _.Result.of.err(isNotOdd);
const t2 = t1.map(r => _.Result.match(r, {
ok: keepOdd,
err: error => _.Result.of.err(error)
}));
expect(t2).toEqual([_.Result.of.ok(1), _.Result.of.err(isNotOdd), _.Result.of.ok(3)]);
expect(t2.filter(_.Result.is.ok).map(_.Result.to.okValue)).toEqual([1, 3]);
});
test(`Async`, async () => {
const divide = async (a, b) => {
await (0, _.sleep)(1);
if (b === 0) {
throw new Error(`division by zero`);
}
return a / b;
};
const res1 = await _.Result.tryCatchAsync(async () => await divide(1, 10));
const res2 = await _.Result.tryCatchAsync(async () => await divide(1, 0));
expect(_.Result.is.ok(res1)).toEqual(true);
expect(_.Result.is.err(res1)).toEqual(false);
expect(_.Result.to.okValue(res1)).toEqual(0.1);
expect(_.Result.is.ok(res2)).toEqual(false);
expect(_.Result.is.err(res2)).toEqual(true);
expect(_.Result.to.errError(res2)).toBeInstanceOf(Error);
const t1 = [1, 2, 3].map(_.Result.of.ok);
for (const m of t1) {
expect(_.Result.is.ok(m)).toEqual(true);
}
const isNotOdd = new Error(`not odd`);
const keepOdd = v => v % 2 === 1 ? _.Result.of.ok(v) : _.Result.of.err(isNotOdd);
const t2 = t1.map(r => _.Result.match(r, {
ok: keepOdd,
err: error => _.Result.of.err(error)
}));
expect(t2).toEqual([_.Result.of.ok(1), _.Result.of.err(isNotOdd), _.Result.of.ok(3)]);
expect(t2.filter(_.Result.is.ok).map(_.Result.to.okValue)).toEqual([1, 3]);
});
});
//# sourceMappingURL=Result.test.js.map