37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { Cause, Deferred, Effect, Exit, Fiber } from "effect"
|
|
import { forwardInitializationFailure } from "./initialization"
|
|
|
|
describe("desktop initialization", () => {
|
|
const failure = new Error("sidecar startup failed")
|
|
const expectFailure = (exit: Exit.Exit<unknown, unknown>) => {
|
|
expect(Exit.isFailure(exit)).toBe(true)
|
|
if (Exit.isSuccess(exit)) return
|
|
expect(Cause.squash(exit.cause)).toBe(failure)
|
|
}
|
|
|
|
test("forwards loading task failures before renderer initialization", () => {
|
|
const exit = Effect.runSync(
|
|
Effect.gen(function* () {
|
|
const initialization = yield* Deferred.make<never, unknown>()
|
|
yield* forwardInitializationFailure(initialization)(Effect.die(failure)).pipe(Effect.exit)
|
|
return yield* Deferred.await(initialization).pipe(Effect.exit)
|
|
}),
|
|
)
|
|
|
|
expectFailure(exit)
|
|
})
|
|
|
|
test("forwards loading task failures while renderer initialization waits", () => {
|
|
const exit = Effect.runSync(
|
|
Effect.gen(function* () {
|
|
const initialization = yield* Deferred.make<never, unknown>()
|
|
const waiting = yield* Deferred.await(initialization).pipe(Effect.exit, Effect.forkChild)
|
|
yield* forwardInitializationFailure(initialization)(Effect.die(failure)).pipe(Effect.exit)
|
|
return yield* Fiber.join(waiting)
|
|
}),
|
|
)
|
|
|
|
expectFailure(exit)
|
|
})
|
|
})
|