-
-
Notifications
You must be signed in to change notification settings - Fork 269
/
Copy pathdestructors.test.ts
83 lines (81 loc) · 3.48 KB
/
destructors.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import * as Cause from "effect/Cause"
import * as Effect from "effect/Effect"
import * as Either from "effect/Either"
import * as Exit from "effect/Exit"
import * as Option from "effect/Option"
import * as it from "effect/test/utils/extend"
import { assert, describe } from "vitest"
const ExampleError = new Error("Oh noes!")
describe("Effect", () => {
it.effect("head - on non empty list", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.succeed([1, 2, 3]), Effect.head, Effect.either)
assert.deepStrictEqual(result, Either.right(1))
}))
it.effect("head - on empty list", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.succeed([] as ReadonlyArray<number>), Effect.head, Effect.option)
assert.deepStrictEqual(result, Option.none())
}))
it.effect("head - on failure", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.fail("fail"), Effect.head, Effect.either)
assert.deepStrictEqual(result, Either.left("fail"))
}))
it.effect("isFailure - returns true when the effect is a failure", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.isFailure(Effect.fail("fail")))
assert.isTrue(result)
}))
it.effect("isFailure - returns false when the effect is a success", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.isFailure(Effect.succeed("succeed")))
assert.isFalse(result)
}))
it.effect("isSuccess - returns false when the effect is a failure", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.isSuccess(Effect.fail("fail")))
assert.isFalse(result)
}))
it.effect("isSuccess - returns true when the effect is a success", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.isSuccess(Effect.succeed("succeed")))
assert.isTrue(result)
}))
it.effect("none - on Some fails with NoSuchElementException", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.exit(Effect.none(Effect.succeed(Option.some(1)))))
assert.deepStrictEqual(result, Exit.fail(new Cause.NoSuchElementException()))
}))
it.effect("none - on None succeeds with undefined", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.none(Effect.succeed(Option.none())))
assert.isUndefined(result)
}))
it.effect("none - fails with ex when effect fails with ex", () =>
Effect.gen(function*($) {
const error = new Cause.RuntimeException("failed task")
const result = yield* $(Effect.exit(Effect.none(Effect.fail(error))))
assert.deepStrictEqual(result, Exit.fail(error))
}))
it.effect("option - return success in Some", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.option(Effect.succeed(11)))
assert.deepStrictEqual(result, Option.some(11))
}))
it.effect("option - return failure as None", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.option(Effect.fail(123)))
assert.deepStrictEqual(result, Option.none())
}))
it.effect("option - not catch throwable", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.exit(Effect.option(Effect.die(ExampleError))))
assert.deepStrictEqual(result, Exit.die(ExampleError))
}))
it.effect("option - catch throwable after sandboxing", () =>
Effect.gen(function*($) {
const result = yield* $(Effect.option(Effect.sandbox(Effect.die(ExampleError))))
assert.deepStrictEqual(result, Option.none())
}))
})