| 1 | import { assert, describe, it } from "@effect/vitest" |
| 2 | import { Cause, Exit, Result } from "effect" |
| 3 | import * as Pull from "effect/Pull" |
| 4 | |
| 5 | describe("Pull", () => { |
| 6 | describe("filterDone", () => { |
| 7 | it("succeeds when the done signal is the only failure", () => { |
| 8 | const result = Pull.filterDone(Cause.fail(Cause.Done("leftover"))) |
| 9 | assert.deepStrictEqual(result, Result.succeed(Cause.Done("leftover"))) |
| 10 | }) |
| 11 | |
| 12 | it("strips the done signal when merged with other failures", () => { |
| 13 | const cause = Cause.combine(Cause.fail(Cause.Done("leftover")), Cause.die("boom")) |
| 14 | const result = Pull.filterDone(cause) |
| 15 | assert.deepStrictEqual(result, Result.fail(Cause.die("boom"))) |
| 16 | }) |
| 17 | |
| 18 | it("fails with the original cause when no done signal is present", () => { |
| 19 | const cause = Cause.fail("error") |
| 20 | assert.deepStrictEqual(Pull.filterDone(cause), Result.fail(cause)) |
| 21 | }) |
| 22 | |
| 23 | it("succeeds when the done signal is merged only with interruptions", () => { |
| 24 | const cause = Cause.combine(Cause.interrupt(1), Cause.fail(Cause.Done("leftover"))) |
| 25 | assert.deepStrictEqual(Pull.filterDone(cause), Result.succeed(Cause.Done("leftover"))) |
| 26 | }) |
| 27 | }) |
| 28 | |
| 29 | describe("doneExitFromCause", () => { |
| 30 | it("treats a pure done cause as success", () => { |
| 31 | const exit = Pull.doneExitFromCause(Cause.fail(Cause.Done("leftover"))) |
| 32 | assert.deepStrictEqual(exit, Exit.succeed("leftover")) |
| 33 | }) |
| 34 | |
| 35 | it("fails with the stripped cause when the done signal was merged with a failure", () => { |
| 36 | const cause = Cause.combine(Cause.fail(Cause.Done("leftover")), Cause.die("boom")) |
| 37 | assert.deepStrictEqual(Pull.doneExitFromCause(cause), Exit.failCause(Cause.die("boom"))) |
| 38 | }) |
| 39 | }) |
| 40 | }) |