diff --git a/packages/opencode/test/effect/run-service.test.ts b/packages/opencode/test/effect/run-service.test.ts index b5f1a1d09b..e9baf88538 100644 --- a/packages/opencode/test/effect/run-service.test.ts +++ b/packages/opencode/test/effect/run-service.test.ts @@ -1,46 +1,49 @@ -import { expect, test } from "bun:test" +import { expect } from "bun:test" import { Effect, Layer, Context } from "effect" import { makeRuntime } from "../../src/effect/run-service" +import { it } from "../lib/effect" class Shared extends Context.Service()("@test/Shared") {} -test("makeRuntime shares dependent layers through the shared memo map", async () => { - let n = 0 +it.live("makeRuntime shares dependent layers through the shared memo map", () => + Effect.gen(function* () { + let n = 0 - const shared = Layer.effect( - Shared, - Effect.sync(() => { - n += 1 - return Shared.of({ id: n }) - }), - ) + const shared = Layer.effect( + Shared, + Effect.sync(() => { + n += 1 + return Shared.of({ id: n }) + }), + ) - class One extends Context.Service Effect.Effect }>()("@test/One") {} - const one = Layer.effect( - One, - Effect.gen(function* () { - const svc = yield* Shared - return One.of({ - get: Effect.fn("One.get")(() => Effect.succeed(svc.id)), - }) - }), - ).pipe(Layer.provide(shared)) + class One extends Context.Service Effect.Effect }>()("@test/One") {} + const one = Layer.effect( + One, + Effect.gen(function* () { + const svc = yield* Shared + return One.of({ + get: Effect.fn("One.get")(() => Effect.succeed(svc.id)), + }) + }), + ).pipe(Layer.provide(shared)) - class Two extends Context.Service Effect.Effect }>()("@test/Two") {} - const two = Layer.effect( - Two, - Effect.gen(function* () { - const svc = yield* Shared - return Two.of({ - get: Effect.fn("Two.get")(() => Effect.succeed(svc.id)), - }) - }), - ).pipe(Layer.provide(shared)) + class Two extends Context.Service Effect.Effect }>()("@test/Two") {} + const two = Layer.effect( + Two, + Effect.gen(function* () { + const svc = yield* Shared + return Two.of({ + get: Effect.fn("Two.get")(() => Effect.succeed(svc.id)), + }) + }), + ).pipe(Layer.provide(shared)) - const { runPromise: runOne } = makeRuntime(One, one) - const { runPromise: runTwo } = makeRuntime(Two, two) + const { runPromise: runOne } = makeRuntime(One, one) + const { runPromise: runTwo } = makeRuntime(Two, two) - expect(await runOne((svc) => svc.get())).toBe(1) - expect(await runTwo((svc) => svc.get())).toBe(1) - expect(n).toBe(1) -}) + expect(yield* Effect.promise(() => runOne((svc) => svc.get()))).toBe(1) + expect(yield* Effect.promise(() => runTwo((svc) => svc.get()))).toBe(1) + expect(n).toBe(1) + }), +)