UNPKG

typed-utilities

Version:
79 lines (62 loc) 2.47 kB
"use strict"; 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