mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-11 16:28:28 +00:00
28 lines
937 B
TypeScript
28 lines
937 B
TypeScript
import { test } from "bun:test"
|
|
import { Cause, Effect, Exit, Layer } from "effect"
|
|
import type { Scope } from "effect/Scope"
|
|
import { TestClock, TestConsole } from "effect/testing"
|
|
|
|
type Body<A, E, R> = Effect.Effect<A, E, R> | (() => Effect.Effect<A, E, R>)
|
|
|
|
const layer = Layer.mergeAll(TestConsole.layer, TestClock.layer())
|
|
|
|
const effect = <A, E>(name: string, body: Body<A, E, Scope>, options?: Parameters<typeof test>[2]) =>
|
|
test(
|
|
name,
|
|
() =>
|
|
Effect.gen(function* () {
|
|
const exit = yield* Effect.suspend(() => (typeof body === "function" ? body() : body)).pipe(
|
|
Effect.scoped,
|
|
Effect.provide(layer),
|
|
Effect.exit,
|
|
)
|
|
if (Exit.isFailure(exit)) {
|
|
yield* Effect.forEach(Cause.prettyErrors(exit.cause), Effect.logError, { discard: true })
|
|
}
|
|
return yield* exit
|
|
}).pipe(Effect.runPromise),
|
|
options,
|
|
)
|
|
|
|
export const it = { effect }
|