diff --git a/AGENTS.md b/AGENTS.md index 916bc2f8..fe1610a6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -59,7 +59,10 @@ covered without editing anything here: Shared production modules must not access host-specific APIs or detect the active runtime. Runtime-named entrypoints and adapters install host-specific behavior — `packages/cli/src/{deno,node,bun,compiled}.ts` are - the CLI's. + the CLI's. `packages/test-support` is the same boundary for tests: it + detects the active runtime to drive `@std/testing/bdd`, `node:test`, or + `bun:test` from one BDD surface, and is exempt from this rule. The Oxlint + rule tracked by issue #156 carries the same path exemption. ## Writing Guide diff --git a/bun.lock b/bun.lock index e784738e..459f8ffe 100644 --- a/bun.lock +++ b/bun.lock @@ -31,7 +31,7 @@ }, "devDependencies": { "@durable-streams/server": "^0.3.8", - "@effectionx/bdd": "workspace:*", + "@executablemd/test-support": "workspace:*", "@types/node": "^22.0.0", "expect": "^30.0.0", "oxfmt": "^0.41.0", @@ -142,9 +142,11 @@ }, }, "packages/test-support": { - "name": "@effectionx/bdd", + "name": "@executablemd/test-support", "version": "0.0.0", "dependencies": { + "@effectionx/test-adapter": "0.7.4", + "effection": "4.1.0-alpha.10", "expect": "^30.0.0", }, }, @@ -180,8 +182,6 @@ "@durable-streams/state": ["@durable-streams/state@0.3.1", "", { "dependencies": { "@durable-streams/client": "0.2.6", "@standard-schema/spec": "^1.0.0" }, "peerDependencies": { "@tanstack/db": ">=0.6.0 <1.0.0" }, "optionalPeers": ["@tanstack/db"], "bin": { "intent": "bin/intent.js" } }, "sha512-HYhw520Bfl9+L3MJgWpzLQjByP5y/uNNasOqSSFfyWhFxZeaKHM6Go2P79YFfTJPmXh4ZHEh1jOgIfrumqT6hA=="], - "@effectionx/bdd": ["@effectionx/bdd@workspace:packages/test-support"], - "@effectionx/context-api": ["@effectionx/context-api@0.6.0", "", { "dependencies": { "@effectionx/middleware": "0.1.1" }, "peerDependencies": { "effection": "^3 || ^4" } }, "sha512-t004qvlkJDMB6EhHP1lOQ97PeIn90m7cv4+wsRPnx4YBem+pJzTL+Sm1KWbKMjMeFJz4oqllUWuBJZsCi+nuTw=="], "@effectionx/converge": ["@effectionx/converge@0.1.4", "", { "dependencies": { "@effectionx/timebox": "0.4.3" }, "peerDependencies": { "effection": "^3 || ^4" } }, "sha512-M11KU7jK3gOFGI4RT+Bf6ITMJntzzoGEO2KPx9r8uBoR+Rgwiyeuq+OeIHkuiHLUC+bB1g93KOj7aKR/G0F1/Q=="], @@ -272,6 +272,8 @@ "@executablemd/test-agent": ["@executablemd/test-agent@workspace:packages/test-agent"], + "@executablemd/test-support": ["@executablemd/test-support@workspace:packages/test-support"], + "@executablemd/testing": ["@executablemd/testing@workspace:packages/testing"], "@harperfast/extended-iterable": ["@harperfast/extended-iterable@1.0.3", "", {}, "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw=="], diff --git a/deno.json b/deno.json index 1f4d43bb..d420197a 100644 --- a/deno.json +++ b/deno.json @@ -6,8 +6,8 @@ "@types/node": "npm:@types/node@^24.5.2", "@durable-streams/client": "npm:@durable-streams/client@^0.2.2", "@durable-streams/server": "npm:@durable-streams/server@^0.3.8", - "@effectionx/bdd/node": "./packages/test-support/bdd.ts", - "@effectionx/bdd/expect": "./packages/test-support/expect.ts", + "@executablemd/test-support/bdd": "./packages/test-support/bdd.ts", + "@executablemd/test-support/expect": "./packages/test-support/expect.ts", "@effectionx/test-adapter": "npm:@effectionx/test-adapter@0.7.4", "effection": "npm:effection@4.1.0-alpha.10", "effection/experimental": "npm:effection@4.1.0-alpha.10/experimental", diff --git a/deno.lock b/deno.lock index 478696e0..e796e3a4 100644 --- a/deno.lock +++ b/deno.lock @@ -3339,6 +3339,8 @@ "packages/test-support": { "packageJson": { "dependencies": [ + "npm:@effectionx/test-adapter@0.7.4", + "npm:effection@4.1.0-alpha.10", "npm:expect@30" ] } diff --git a/package.json b/package.json index 8b9ccb26..3cc17685 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ }, "devDependencies": { "@durable-streams/server": "^0.3.8", - "@effectionx/bdd": "workspace:*", + "@executablemd/test-support": "workspace:*", "oxlint": "^1", "oxfmt": "^0.41.0", "tsx": "^4.19.0", diff --git a/packages/acp/tests/acceptance.test.ts b/packages/acp/tests/acceptance.test.ts index 10cd3c59..7d37d2eb 100644 --- a/packages/acp/tests/acceptance.test.ts +++ b/packages/acp/tests/acceptance.test.ts @@ -3,8 +3,8 @@ * `rootProvider` seam drives the full Agent → session → prompt → teardown * lifecycle. Fake ACPX runtime, no subprocess. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, scoped } from "effection"; import { ensureDir, rm, writeTextFile } from "@effectionx/fs"; import { randomUUID } from "node:crypto"; diff --git a/packages/acp/tests/permission-bridge.test.ts b/packages/acp/tests/permission-bridge.test.ts index 672def43..f077cb6d 100644 --- a/packages/acp/tests/permission-bridge.test.ts +++ b/packages/acp/tests/permission-bridge.test.ts @@ -5,8 +5,8 @@ * aborts, and unknown option ids. Promise adaptation exists only at * the simulated ACPX callback boundary. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { createScope, ensure, diff --git a/packages/acp/tests/provider.test.ts b/packages/acp/tests/provider.test.ts index 060d1949..f70b5bb8 100644 --- a/packages/acp/tests/provider.test.ts +++ b/packages/acp/tests/provider.test.ts @@ -4,8 +4,8 @@ * Drives the provider through its dependencies with a scriptable fake runtime: * no agent process ever starts. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped, sleep, spawn, until, withResolvers } from "effection"; import type { Operation } from "effection"; import { Agent, Config } from "@executablemd/core"; diff --git a/packages/acp/tests/serial-queue.test.ts b/packages/acp/tests/serial-queue.test.ts index 8ff32c24..770796a8 100644 --- a/packages/acp/tests/serial-queue.test.ts +++ b/packages/acp/tests/serial-queue.test.ts @@ -3,8 +3,8 @@ * FIFO ordering, and that an active holder failing or halting still * advances the queue for both `slot()` and `withSlot()`. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped, sleep, spawn } from "effection"; import { useSerialQueues } from "../src/serial-queue.ts"; diff --git a/packages/acp/tests/session-key.test.ts b/packages/acp/tests/session-key.test.ts index 92b62c4f..abee5ab9 100644 --- a/packages/acp/tests/session-key.test.ts +++ b/packages/acp/tests/session-key.test.ts @@ -1,8 +1,8 @@ /** * Tier SK — session identity tests (specs/acp-client-spec.md §Session). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { API } from "@executablemd/runtime"; import type { Operation } from "effection"; import { diff --git a/packages/cli/tests/agent-cli.test.ts b/packages/cli/tests/agent-cli.test.ts index 4757d921..e4443d59 100644 --- a/packages/cli/tests/agent-cli.test.ts +++ b/packages/cli/tests/agent-cli.test.ts @@ -8,8 +8,8 @@ * commands — so availability fails fast and the failure text identifies * which value was selected. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { timebox } from "@effectionx/timebox"; import { ensure, scoped, spawn, each } from "effection"; import type { Operation } from "effection"; diff --git a/packages/cli/tests/agent-config.test.ts b/packages/cli/tests/agent-config.test.ts index 0a1c12e0..b07ef992 100644 --- a/packages/cli/tests/agent-config.test.ts +++ b/packages/cli/tests/agent-config.test.ts @@ -7,8 +7,8 @@ * play. The environment fallback for the default agent is applied by the * CLI, not here. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import type { PermissionMode } from "@executablemd/core"; import { resolveAgentConfig } from "../src/agent-config.ts"; import type { AgentFlags } from "../src/agent-config.ts"; diff --git a/packages/cli/tests/cli-help.test.ts b/packages/cli/tests/cli-help.test.ts index 48a0c05b..0def1e41 100644 --- a/packages/cli/tests/cli-help.test.ts +++ b/packages/cli/tests/cli-help.test.ts @@ -7,8 +7,8 @@ * never reached a trailing `--help`, so `xmd run --help` exited 1 with * `path: Invalid input: expected string, received undefined`. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { exec, type Exec } from "@effectionx/process"; import process from "node:process"; import * as path from "node:path"; diff --git a/packages/cli/tests/command.test.ts b/packages/cli/tests/command.test.ts index 82741a45..48b6cd3f 100644 --- a/packages/cli/tests/command.test.ts +++ b/packages/cli/tests/command.test.ts @@ -6,8 +6,8 @@ * per-host argument order lives inside each entrypoint's own middleware and is * proven by that relaunch succeeding, not by inspecting an array. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure } from "effection"; import { ensureDir, rm } from "@effectionx/fs"; import { exec } from "@effectionx/process"; diff --git a/packages/cli/tests/props-cli.test.ts b/packages/cli/tests/props-cli.test.ts index 52f06238..ad327bf3 100644 --- a/packages/cli/tests/props-cli.test.ts +++ b/packages/cli/tests/props-cli.test.ts @@ -6,8 +6,8 @@ * asserted TTY-independently, and so environment sources are exercised * the way a user supplies them. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { exec, type Exec } from "@effectionx/process"; import { ensureDir, rm, writeTextFile } from "@effectionx/fs"; import { ensure, scoped } from "effection"; diff --git a/packages/cli/tests/props-schema.test.ts b/packages/cli/tests/props-schema.test.ts index 8a926307..8a7879a2 100644 --- a/packages/cli/tests/props-schema.test.ts +++ b/packages/cli/tests/props-schema.test.ts @@ -6,8 +6,8 @@ * for whole-object validation; these compare the two only where the * adapter has to agree with it. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { validateProps } from "@executablemd/core"; import type { PropsSchema } from "@executablemd/core"; import { z } from "zod"; diff --git a/packages/cli/tests/props-sources.test.ts b/packages/cli/tests/props-sources.test.ts index ef094acb..3e01e209 100644 --- a/packages/cli/tests/props-sources.test.ts +++ b/packages/cli/tests/props-sources.test.ts @@ -6,8 +6,8 @@ * boundary: it stores whatever a Standard Schema returns, and it selects * the last valid source rather than the highest-priority supplied one. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { buildBindings, extractPropsArgs, PropsError, resolveProps } from "../src/props.ts"; import type { Binding } from "../src/props.ts"; diff --git a/packages/code-review-agent/tests/parse-diagnostics.test.ts b/packages/code-review-agent/tests/parse-diagnostics.test.ts index 0e825b3b..1c091ef8 100644 --- a/packages/code-review-agent/tests/parse-diagnostics.test.ts +++ b/packages/code-review-agent/tests/parse-diagnostics.test.ts @@ -2,8 +2,8 @@ * Tests for parseDiagnostics — Oxlint JSON output parser. * Covers PD1-PD8 from the oxlint-sensor-spec. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { parseDiagnostics } from "../src/parse-diagnostics.ts"; import type { DoctorResult, OxlintDiagnostic, PR } from "../src/types.ts"; diff --git a/packages/code-review-agent/tests/parse-diff.test.ts b/packages/code-review-agent/tests/parse-diff.test.ts index 14df3bf4..634a0a6b 100644 --- a/packages/code-review-agent/tests/parse-diff.test.ts +++ b/packages/code-review-agent/tests/parse-diff.test.ts @@ -1,8 +1,8 @@ /** * Tests for parseDiff — unified diff parser. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { parseDiff } from "../src/parse-diff.ts"; const META = { title: "Test PR", body: "Test body", number: "42" }; diff --git a/packages/code-review-agent/tests/policy.test.ts b/packages/code-review-agent/tests/policy.test.ts index 5e411021..f8a14c0d 100644 --- a/packages/code-review-agent/tests/policy.test.ts +++ b/packages/code-review-agent/tests/policy.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { buildCleanupAnalysis, buildPolicyInput, diff --git a/packages/core/tests/agent-api.test.ts b/packages/core/tests/agent-api.test.ts index c4b90bee..3c2589ac 100644 --- a/packages/core/tests/agent-api.test.ts +++ b/packages/core/tests/agent-api.test.ts @@ -9,8 +9,8 @@ * operations need, so the message must not point at the registry or a CLI * flag. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { Agent } from "../src/agent/agent-api.ts"; import type { PermissionRequest } from "../src/agent/agent-api.ts"; diff --git a/packages/core/tests/agent-components.test.ts b/packages/core/tests/agent-components.test.ts index fde642aa..c893e3ee 100644 --- a/packages/core/tests/agent-components.test.ts +++ b/packages/core/tests/agent-components.test.ts @@ -7,8 +7,8 @@ * `installAgentComponents`'s `rootProvider` seam — no real provider, * subprocess, or provider selection. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { ensure, scoped } from "effection"; import type { Operation, Result, Stream } from "effection"; diff --git a/packages/core/tests/agent-stack.test.ts b/packages/core/tests/agent-stack.test.ts index 4c1114f9..7a6de86d 100644 --- a/packages/core/tests/agent-stack.test.ts +++ b/packages/core/tests/agent-stack.test.ts @@ -6,8 +6,8 @@ * provider factories — no subprocess, no real provider. CLI precedence is * not established here; it is asserted at the CLI boundary. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, scoped } from "effection"; import type { Operation, Result } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; diff --git a/packages/core/tests/capture-errors.test.ts b/packages/core/tests/capture-errors.test.ts index 5efdfbf7..87bce065 100644 --- a/packages/core/tests/capture-errors.test.ts +++ b/packages/core/tests/capture-errors.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation } from "effection"; import { ephemeral } from "@executablemd/durable-streams"; diff --git a/packages/core/tests/cli-journal.test.ts b/packages/core/tests/cli-journal.test.ts index a9b3f50a..6c44db12 100644 --- a/packages/core/tests/cli-journal.test.ts +++ b/packages/core/tests/cli-journal.test.ts @@ -7,8 +7,8 @@ * Each test shells out to `deno run --allow-all packages/cli/src/deno.ts` * and uses timebox to prevent hangs from blocking the test suite. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { timebox } from "@effectionx/timebox"; import { exists, readTextFile, rm, writeTextFile } from "@effectionx/fs"; import { ensure, spawn, each, type Operation } from "effection"; diff --git a/packages/core/tests/compiler-boundary.test.ts b/packages/core/tests/compiler-boundary.test.ts index 585094f7..b132f820 100644 --- a/packages/core/tests/compiler-boundary.test.ts +++ b/packages/core/tests/compiler-boundary.test.ts @@ -6,8 +6,8 @@ * no compiler, one with eval blocks says so plainly when none is installed, * and a compiler the caller installed is the one that runs. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import type { Operation } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs } from "@executablemd/runtime/test"; diff --git a/packages/core/tests/component-api.test.ts b/packages/core/tests/component-api.test.ts index 49df2699..819af658 100644 --- a/packages/core/tests/component-api.test.ts +++ b/packages/core/tests/component-api.test.ts @@ -2,8 +2,8 @@ * Component Api tests — default operations, missing-provider diagnostics, * scoped middleware overrides, and nested provider precedence. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation } from "effection"; import { diff --git a/packages/core/tests/component-schema-conformance.test.ts b/packages/core/tests/component-schema-conformance.test.ts index 334979aa..85dffc14 100644 --- a/packages/core/tests/component-schema-conformance.test.ts +++ b/packages/core/tests/component-schema-conformance.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import matter from "gray-matter"; import { readTextFile, walk } from "@effectionx/fs"; import { forEach } from "@effectionx/stream-helpers"; diff --git a/packages/core/tests/config-api.test.ts b/packages/core/tests/config-api.test.ts index a1b0b18b..a1e8c520 100644 --- a/packages/core/tests/config-api.test.ts +++ b/packages/core/tests/config-api.test.ts @@ -6,8 +6,8 @@ * no timeout of its own. Imported through @executablemd/core to exercise * the core re-export. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import { Config, timeout } from "@executablemd/core"; import { exec, fetch } from "@executablemd/runtime"; diff --git a/packages/core/tests/daemon-integration.test.ts b/packages/core/tests/daemon-integration.test.ts index b27f2308..11747477 100644 --- a/packages/core/tests/daemon-integration.test.ts +++ b/packages/core/tests/daemon-integration.test.ts @@ -14,9 +14,9 @@ * - output shape (empty output from daemon blocks) * - error propagation via component-scoped daemon + children */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { race, sleep } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; import { execute } from "../src/execute.ts"; diff --git a/packages/core/tests/daemon.test.ts b/packages/core/tests/daemon.test.ts index f9550214..c48b03a8 100644 --- a/packages/core/tests/daemon.test.ts +++ b/packages/core/tests/daemon.test.ts @@ -4,8 +4,8 @@ * Verifies daemonFactory satisfies ModifierFactory, ignores next, * and composes correctly in the modifier chain. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import { daemonFactory } from "../src/modifiers/daemon.ts"; import { combine } from "@effectionx/middleware"; diff --git a/packages/core/tests/document-output-api.test.ts b/packages/core/tests/document-output-api.test.ts index 2b8b65f9..3b02dba7 100644 --- a/packages/core/tests/document-output-api.test.ts +++ b/packages/core/tests/document-output-api.test.ts @@ -6,8 +6,8 @@ * scope.around semantics: first-installed runs first (outermost). * Its next() delegates to the second-installed, and so on to the core. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { createChannel } from "effection"; import { DocumentOutput } from "../src/api.ts"; import { subscribe } from "../src/subscribe.ts"; diff --git a/packages/core/tests/each.test.ts b/packages/core/tests/each.test.ts index b5e0cc44..dc42b6c5 100644 --- a/packages/core/tests/each.test.ts +++ b/packages/core/tests/each.test.ts @@ -1,6 +1,6 @@ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation } from "effection"; import { expandSegments } from "../src/expand.ts"; diff --git a/packages/core/tests/eval-bindings.test.ts b/packages/core/tests/eval-bindings.test.ts index 5a129bdf..b2e96c88 100644 --- a/packages/core/tests/eval-bindings.test.ts +++ b/packages/core/tests/eval-bindings.test.ts @@ -4,9 +4,9 @@ * Tests cross-block binding sharing, shadowing, empty blocks, * undeclared references, and syntax errors. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useEchoExec } from "@executablemd/runtime/test"; import { execute } from "../src/execute.ts"; diff --git a/packages/core/tests/eval-context.test.ts b/packages/core/tests/eval-context.test.ts index 67f724c0..419f1bf3 100644 --- a/packages/core/tests/eval-context.test.ts +++ b/packages/core/tests/eval-context.test.ts @@ -13,8 +13,8 @@ * so they install the temp-file one: it is the only implementation that * loads on all three runtimes. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { compileBlock } from "../src/eval-context.ts"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; diff --git a/packages/core/tests/eval-durable.test.ts b/packages/core/tests/eval-durable.test.ts index b8e34c09..8a19f9de 100644 --- a/packages/core/tests/eval-durable.test.ts +++ b/packages/core/tests/eval-durable.test.ts @@ -6,9 +6,9 @@ * * Uses InMemoryStream for journaling and API.Fs/API.Process middleware for I/O stubs. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useEchoExec } from "@executablemd/runtime/test"; import { execute } from "../src/execute.ts"; diff --git a/packages/core/tests/eval-interpolate.test.ts b/packages/core/tests/eval-interpolate.test.ts index 8fe92b29..61a5b3b8 100644 --- a/packages/core/tests/eval-interpolate.test.ts +++ b/packages/core/tests/eval-interpolate.test.ts @@ -4,8 +4,8 @@ * Verifies that bare `{name}` references in code block content resolve * from the eval binding environment (env.values). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { interpolateEvalBindings } from "../src/eval-interpolate.ts"; describe("Tier P — Eval binding interpolation", () => { diff --git a/packages/core/tests/eval-middleware.test.ts b/packages/core/tests/eval-middleware.test.ts index 2d3b01ae..b0e8494d 100644 --- a/packages/core/tests/eval-middleware.test.ts +++ b/packages/core/tests/eval-middleware.test.ts @@ -4,8 +4,8 @@ * Verifies that evalFactory, persistFactory, and timeoutFactory * satisfy the ModifierFactory type and compose correctly via combine(). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { evalFactory } from "../src/eval-handler.ts"; import { persistFactory } from "../src/modifiers/persist.ts"; import { timeoutFactory } from "../src/modifiers/timeout.ts"; diff --git a/packages/core/tests/eval-persist.test.ts b/packages/core/tests/eval-persist.test.ts index bab55337..32056a85 100644 --- a/packages/core/tests/eval-persist.test.ts +++ b/packages/core/tests/eval-persist.test.ts @@ -7,9 +7,9 @@ * Note: In v1, persist delegates directly to next() — actual * resource retention via evalScope.eval() is deferred to v2. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useEchoExec } from "@executablemd/runtime/test"; import { execute } from "../src/execute.ts"; diff --git a/packages/core/tests/eval-return.test.ts b/packages/core/tests/eval-return.test.ts index c44867dc..38af216c 100644 --- a/packages/core/tests/eval-return.test.ts +++ b/packages/core/tests/eval-return.test.ts @@ -5,9 +5,9 @@ * that value becomes the block's rendered output. output() takes * precedence over return. Null/undefined returns produce no output. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useEchoExec } from "@executablemd/runtime/test"; import { execute } from "../src/execute.ts"; diff --git a/packages/core/tests/eval-scope.test.ts b/packages/core/tests/eval-scope.test.ts index fe2417bb..b272c82f 100644 --- a/packages/core/tests/eval-scope.test.ts +++ b/packages/core/tests/eval-scope.test.ts @@ -4,9 +4,9 @@ * Tests that eval scopes are properly scoped to components and * that child/parent scope relationships work correctly. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useEchoExec } from "@executablemd/runtime/test"; import { execute } from "../src/execute.ts"; diff --git a/packages/core/tests/eval-timeout.test.ts b/packages/core/tests/eval-timeout.test.ts index affe6c67..402a4e64 100644 --- a/packages/core/tests/eval-timeout.test.ts +++ b/packages/core/tests/eval-timeout.test.ts @@ -3,9 +3,9 @@ * * Tests timeout behavior and duration parsing. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { parseDuration } from "../src/modifiers/timeout.ts"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useEchoExec } from "@executablemd/runtime/test"; diff --git a/packages/core/tests/eval-transform.test.ts b/packages/core/tests/eval-transform.test.ts index a555e392..becbbd11 100644 --- a/packages/core/tests/eval-transform.test.ts +++ b/packages/core/tests/eval-transform.test.ts @@ -7,8 +7,8 @@ * - Source map and sourceURL generation * - Execution mode detection (generator, async, sync) */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { transformBlock, isJson, serializeExports } from "../src/eval-transform.ts"; describe("Tier T1 — Source transform", () => { diff --git a/packages/core/tests/execute.test.ts b/packages/core/tests/execute.test.ts index 3bac269d..f3817d7d 100644 --- a/packages/core/tests/execute.test.ts +++ b/packages/core/tests/execute.test.ts @@ -8,8 +8,8 @@ * Golden run — InMemoryStream() (empty) + useStubFs(files) → assert output + journal * Replay — reuse same InMemoryStream (has events) + useNoIO() → zero I/O */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useFailingExec } from "@executablemd/runtime/test"; import { API } from "@executablemd/runtime"; diff --git a/packages/core/tests/expand-element.test.ts b/packages/core/tests/expand-element.test.ts index 5941378e..1644568b 100644 --- a/packages/core/tests/expand-element.test.ts +++ b/packages/core/tests/expand-element.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation } from "effection"; import { expandSegments } from "../src/expand.ts"; diff --git a/packages/core/tests/expand-segments-operation.test.ts b/packages/core/tests/expand-segments-operation.test.ts index aaaa70fb..224208c5 100644 --- a/packages/core/tests/expand-segments-operation.test.ts +++ b/packages/core/tests/expand-segments-operation.test.ts @@ -7,8 +7,8 @@ * frame it binds to must carry the interpolation inputs, the cycle-detection * hide set, and the block counter of the expansion that offered the element. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation } from "effection"; import { expandSegments } from "../src/expand.ts"; diff --git a/packages/core/tests/expand.test.ts b/packages/core/tests/expand.test.ts index f60abd0d..5bef4acc 100644 --- a/packages/core/tests/expand.test.ts +++ b/packages/core/tests/expand.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import { expandSegments } from "../src/expand.ts"; import { Component } from "../src/component-api.ts"; diff --git a/packages/core/tests/expression-props.test.ts b/packages/core/tests/expression-props.test.ts index cd3591b8..50ff01cd 100644 --- a/packages/core/tests/expression-props.test.ts +++ b/packages/core/tests/expression-props.test.ts @@ -5,9 +5,9 @@ * parseExpressionValue changes, and integration with expansion/validation. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { parseExpressionValue, scanSegments } from "../src/scanner.ts"; import { execute } from "../src/execute.ts"; import { collect } from "../src/collect.ts"; diff --git a/packages/core/tests/find-free-port.test.ts b/packages/core/tests/find-free-port.test.ts index beeec12b..6efd6520 100644 --- a/packages/core/tests/find-free-port.test.ts +++ b/packages/core/tests/find-free-port.test.ts @@ -4,8 +4,8 @@ * Verifies findFreePort returns a usable port and that VM sandbox * globals are accessible — both standalone and inside eval blocks. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { race } from "effection"; import type { Operation } from "effection"; import { once } from "@effectionx/node"; diff --git a/packages/core/tests/frontmatter.test.ts b/packages/core/tests/frontmatter.test.ts index 7510b47f..9eabe7d9 100644 --- a/packages/core/tests/frontmatter.test.ts +++ b/packages/core/tests/frontmatter.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { parseFrontmatter } from "../src/frontmatter.ts"; describe("parseFrontmatter", () => { diff --git a/packages/core/tests/function-components.test.ts b/packages/core/tests/function-components.test.ts index b78e5e71..ac2af99e 100644 --- a/packages/core/tests/function-components.test.ts +++ b/packages/core/tests/function-components.test.ts @@ -4,8 +4,8 @@ * Tests .ts files as components alongside .md files. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { execute } from "../src/execute.ts"; import { collect } from "../src/collect.ts"; import { InMemoryStream } from "@executablemd/durable-streams"; diff --git a/packages/core/tests/heal.test.ts b/packages/core/tests/heal.test.ts index 002f5676..7bc731f3 100644 --- a/packages/core/tests/heal.test.ts +++ b/packages/core/tests/heal.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import { healSegment } from "../src/heal.ts"; import { scanSegments } from "../src/scanner.ts"; diff --git a/packages/core/tests/json.test.ts b/packages/core/tests/json.test.ts index b50828c9..74e76d90 100644 --- a/packages/core/tests/json.test.ts +++ b/packages/core/tests/json.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { parseJson, parseJsonObject } from "../src/json.ts"; describe("parseJson", () => { diff --git a/packages/core/tests/named-slots.test.ts b/packages/core/tests/named-slots.test.ts index c3e0f594..b61686f6 100644 --- a/packages/core/tests/named-slots.test.ts +++ b/packages/core/tests/named-slots.test.ts @@ -6,9 +6,9 @@ * boundary scanner confirmation. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation } from "effection"; import { partitionBySlot, stripSlotProp } from "../src/expand.ts"; diff --git a/packages/core/tests/output-normalize.test.ts b/packages/core/tests/output-normalize.test.ts index 3805d2b4..74b8367e 100644 --- a/packages/core/tests/output-normalize.test.ts +++ b/packages/core/tests/output-normalize.test.ts @@ -1,8 +1,8 @@ /** * Tier WN — Whitespace normalization middleware tests (spec §9.4). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { createChannel, type Operation } from "effection"; import { DocumentOutput } from "../src/api.ts"; import { useNormalizedOutput } from "../src/output/normalize.ts"; diff --git a/packages/core/tests/output-terminal.test.ts b/packages/core/tests/output-terminal.test.ts index 2374418f..35f17914 100644 --- a/packages/core/tests/output-terminal.test.ts +++ b/packages/core/tests/output-terminal.test.ts @@ -6,8 +6,8 @@ * that the middleware transforms markdown (strips syntax, reformats) * rather than checking for specific ANSI codes. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { createChannel, type Operation } from "effection"; import { DocumentOutput } from "../src/api.ts"; import { useTerminalOutput } from "../src/output/terminal.ts"; diff --git a/packages/core/tests/provider-integration.test.ts b/packages/core/tests/provider-integration.test.ts index 951ac01a..ba7a0b8e 100644 --- a/packages/core/tests/provider-integration.test.ts +++ b/packages/core/tests/provider-integration.test.ts @@ -11,9 +11,9 @@ * 4. expand with server available * 5. Component scope closes → daemon terminated */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { execute } from "../src/execute.ts"; import { collect } from "../src/collect.ts"; diff --git a/packages/core/tests/replay-stream.test.ts b/packages/core/tests/replay-stream.test.ts index 2ca001dd..94ca2732 100644 --- a/packages/core/tests/replay-stream.test.ts +++ b/packages/core/tests/replay-stream.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped, spawn } from "effection"; import type { Operation, Subscription } from "effection"; import { createReplayStream } from "../src/replay-stream.ts"; diff --git a/packages/core/tests/root-props.test.ts b/packages/core/tests/root-props.test.ts index 0a5fdf25..3b2455c5 100644 --- a/packages/core/tests/root-props.test.ts +++ b/packages/core/tests/root-props.test.ts @@ -5,8 +5,8 @@ * validated and defaulted before any body effect, then available through * `{props.name}`, bare binding interpolation, and eval blocks. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import type { Json } from "@executablemd/durable-streams"; import { useStubFs } from "@executablemd/runtime/test"; diff --git a/packages/core/tests/root-provider.test.ts b/packages/core/tests/root-provider.test.ts index 9f556ec0..12a37d97 100644 --- a/packages/core/tests/root-provider.test.ts +++ b/packages/core/tests/root-provider.test.ts @@ -7,8 +7,8 @@ * fake provider is an Effection resource whose finalizer is driven by scope * teardown — never a manual teardown call or a Promise. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, scoped } from "effection"; import type { Operation, Result, Stream } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; diff --git a/packages/core/tests/sample-component.test.ts b/packages/core/tests/sample-component.test.ts index c7c4bb18..bd8d3d18 100644 --- a/packages/core/tests/sample-component.test.ts +++ b/packages/core/tests/sample-component.test.ts @@ -12,9 +12,9 @@ * Uses stub providers (Sample.around middleware) to intercept Sample Api * calls and return canned responses for testing. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs, useEchoExec } from "@executablemd/runtime/test"; import { execute } from "../src/execute.ts"; diff --git a/packages/core/tests/scanner.test.ts b/packages/core/tests/scanner.test.ts index ab452014..4d0cbc99 100644 --- a/packages/core/tests/scanner.test.ts +++ b/packages/core/tests/scanner.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import assert from "node:assert/strict"; import { scanSegments, parseInfoString } from "../src/scanner.ts"; import type { ComponentElement, ExecutableCodeBlock, TextSegment } from "../src/types.ts"; diff --git a/packages/core/tests/source-position.test.ts b/packages/core/tests/source-position.test.ts index 84b32c43..9b68a471 100644 --- a/packages/core/tests/source-position.test.ts +++ b/packages/core/tests/source-position.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { useStubFs } from "@executablemd/runtime/test"; import { scanSegments } from "../src/scanner.ts"; diff --git a/packages/core/tests/streaming-emission.test.ts b/packages/core/tests/streaming-emission.test.ts index b7e5011b..6e52ff30 100644 --- a/packages/core/tests/streaming-emission.test.ts +++ b/packages/core/tests/streaming-emission.test.ts @@ -4,8 +4,8 @@ * Tests per-segment emission through the document stream returned by * execute, and blockId stability across per-segment expansion calls. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { forEach } from "@effectionx/stream-helpers"; import { createBlockCounter } from "../src/expand.ts"; diff --git a/packages/core/tests/text-interpolation.test.ts b/packages/core/tests/text-interpolation.test.ts index 26f2d587..f32b0c9c 100644 --- a/packages/core/tests/text-interpolation.test.ts +++ b/packages/core/tests/text-interpolation.test.ts @@ -5,8 +5,8 @@ * the eval binding environment (env.values), matching the test plan * from the text-interpolation spec §9. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import { expandSegments } from "../src/expand.ts"; import { Component } from "../src/component-api.ts"; diff --git a/packages/core/tests/unused-in-diff.test.ts b/packages/core/tests/unused-in-diff.test.ts index 01209680..7614e585 100644 --- a/packages/core/tests/unused-in-diff.test.ts +++ b/packages/core/tests/unused-in-diff.test.ts @@ -1,6 +1,6 @@ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "../src/temp-file-compiler.ts"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { readTextFile } from "@effectionx/fs"; import type { Operation } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; diff --git a/packages/core/tests/validate.test.ts b/packages/core/tests/validate.test.ts index b42d1977..5893fb5f 100644 --- a/packages/core/tests/validate.test.ts +++ b/packages/core/tests/validate.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { compilePropsSchema, PropsSchemaError, diff --git a/packages/core/tests/validation-integration.test.ts b/packages/core/tests/validation-integration.test.ts index 177fc6ea..34f7d145 100644 --- a/packages/core/tests/validation-integration.test.ts +++ b/packages/core/tests/validation-integration.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; diff --git a/packages/durable-streams/specs/DECISIONS.md b/packages/durable-streams/specs/DECISIONS.md index 8edf5139..b768787d 100644 --- a/packages/durable-streams/specs/DECISIONS.md +++ b/packages/durable-streams/specs/DECISIONS.md @@ -80,8 +80,9 @@ Updated before completion of every phase and committed at the end of each phase. - **Rationale:** JSR is the standard for Deno dependencies. Avoids uncached URL resolution issues. - **Consequences:** Added to deno.json imports. -- **Update:** Tests now use the Node.js test runner (`node --test`) with - `@effectionx/bdd` for describe/it/beforeEach and `expect` for assertions. +- **Update:** Tests run under Deno, Node, and Bun. `@executablemd/test-support` + supplies BDD integration (describe/it/beforeEach) and assertions, binding each + runtime's own test runner to a single test surface. ## DEC-005: Sequential workflows only in initial scope diff --git a/packages/durable-streams/tests/deterministic-id.test.ts b/packages/durable-streams/tests/deterministic-id.test.ts index 39e50586..99602528 100644 --- a/packages/durable-streams/tests/deterministic-id.test.ts +++ b/packages/durable-streams/tests/deterministic-id.test.ts @@ -6,8 +6,8 @@ * and that the structured concurrency combinators produce consistent IDs. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { type DurableEvent, InMemoryStream, diff --git a/packages/durable-streams/tests/divergence-api.test.ts b/packages/durable-streams/tests/divergence-api.test.ts index 0b224495..e267355d 100644 --- a/packages/durable-streams/tests/divergence-api.test.ts +++ b/packages/durable-streams/tests/divergence-api.test.ts @@ -10,9 +10,9 @@ * middleware via Api.around(), then yield*s into durableRun. */ -import { describe, it } from "@effectionx/bdd/node"; +import { describe, it } from "@executablemd/test-support/bdd"; import { call, run, useScope } from "effection"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { ContinuePastCloseDivergenceError, Divergence, diff --git a/packages/durable-streams/tests/divergence.test.ts b/packages/durable-streams/tests/divergence.test.ts index c79ca49e..fdff2c45 100644 --- a/packages/durable-streams/tests/divergence.test.ts +++ b/packages/durable-streams/tests/divergence.test.ts @@ -6,8 +6,8 @@ * in ways incompatible with the stored journal. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ContinuePastCloseDivergenceError, DivergenceError, diff --git a/packages/durable-streams/tests/durable-each.test.ts b/packages/durable-streams/tests/durable-each.test.ts index 1c595bfd..5a4c3932 100644 --- a/packages/durable-streams/tests/durable-each.test.ts +++ b/packages/durable-streams/tests/durable-each.test.ts @@ -8,9 +8,9 @@ * handles break/cancellation, and integrates with durableCall. */ -import { describe, it } from "@effectionx/bdd/node"; +import { describe, it } from "@executablemd/test-support/bdd"; import type { Operation } from "effection"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { type DurableEvent, type DurableSource, diff --git a/packages/durable-streams/tests/durable-run.test.ts b/packages/durable-streams/tests/durable-run.test.ts index 579066e2..9b3a3608 100644 --- a/packages/durable-streams/tests/durable-run.test.ts +++ b/packages/durable-streams/tests/durable-run.test.ts @@ -6,8 +6,8 @@ * stored events, and handles crash recovery scenarios. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { type DurableEvent, InMemoryStream, diff --git a/packages/durable-streams/tests/ephemeral.test.ts b/packages/durable-streams/tests/ephemeral.test.ts index 67eb8248..76f0b812 100644 --- a/packages/durable-streams/tests/ephemeral.test.ts +++ b/packages/durable-streams/tests/ephemeral.test.ts @@ -10,10 +10,10 @@ * - the type boundary is enforced (bare Operations rejected by combinators) */ -import { describe, it } from "@effectionx/bdd/node"; +import { describe, it } from "@executablemd/test-support/bdd"; import { useScope } from "effection"; import type { Operation } from "effection"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { type DurableEvent, InMemoryStream, diff --git a/packages/durable-streams/tests/replay-guard.test.ts b/packages/durable-streams/tests/replay-guard.test.ts index ff7b03c7..4863cb2c 100644 --- a/packages/durable-streams/tests/replay-guard.test.ts +++ b/packages/durable-streams/tests/replay-guard.test.ts @@ -10,9 +10,9 @@ * description, outputs belong in the result. */ -import { describe, it } from "@effectionx/bdd/node"; +import { describe, it } from "@executablemd/test-support/bdd"; import { run } from "effection"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { type DurableEvent, InMemoryStream, diff --git a/packages/durable-streams/tests/replay-index.test.ts b/packages/durable-streams/tests/replay-index.test.ts index 48138bac..f9b15dc3 100644 --- a/packages/durable-streams/tests/replay-index.test.ts +++ b/packages/durable-streams/tests/replay-index.test.ts @@ -7,8 +7,8 @@ * No Effection dependency — pure data structure. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ReplayIndex } from "../replay-index.ts"; import type { DurableEvent, Json } from "../types.ts"; diff --git a/packages/durable-streams/tests/smoke.test.ts b/packages/durable-streams/tests/smoke.test.ts index 232c9763..95a8a18d 100644 --- a/packages/durable-streams/tests/smoke.test.ts +++ b/packages/durable-streams/tests/smoke.test.ts @@ -2,8 +2,8 @@ * Smoke test to verify project scaffolding works. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream, ReplayIndex } from "../mod.ts"; import type { DurableEvent } from "../mod.ts"; diff --git a/packages/durable-streams/tests/structured-concurrency.test.ts b/packages/durable-streams/tests/structured-concurrency.test.ts index 748d3aab..52638c24 100644 --- a/packages/durable-streams/tests/structured-concurrency.test.ts +++ b/packages/durable-streams/tests/structured-concurrency.test.ts @@ -6,8 +6,8 @@ * scope lifecycles, Close events, cancellation, and replay. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream, type Json, diff --git a/packages/durable-streams/tests/types.test.ts b/packages/durable-streams/tests/types.test.ts index 56a92d5f..af56ec7a 100644 --- a/packages/durable-streams/tests/types.test.ts +++ b/packages/durable-streams/tests/types.test.ts @@ -9,9 +9,9 @@ * Tests are runtime no-ops — they only validate at compile time. */ -import { describe, it } from "@effectionx/bdd/node"; +import { describe, it } from "@executablemd/test-support/bdd"; import type { Operation } from "effection"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import type { DurableEffect, EffectionResult, Resolve, Workflow } from "../types.ts"; function testDurableEffect(value: T): DurableEffect { diff --git a/packages/test-agent/tests/acp-server.test.ts b/packages/test-agent/tests/acp-server.test.ts index d2bd0bb8..37e8beeb 100644 --- a/packages/test-agent/tests/acp-server.test.ts +++ b/packages/test-agent/tests/acp-server.test.ts @@ -6,8 +6,8 @@ * handler — the connection closes on input EOF and its scope teardown halts the * in-flight op, so nothing is stranded. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, race, sleep, spawn, suspend, withResolvers } from "effection"; import type { Operation } from "effection"; import { serveAcp } from "../src/worker/acp-server.ts"; diff --git a/packages/test-agent/tests/behavior-engine.test.ts b/packages/test-agent/tests/behavior-engine.test.ts index 9e36c0ba..cf1f17ed 100644 --- a/packages/test-agent/tests/behavior-engine.test.ts +++ b/packages/test-agent/tests/behavior-engine.test.ts @@ -5,8 +5,8 @@ * Proves stage advancement, capture exposure, mismatch retention, and * reaching a second stage through EOF. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, spawn } from "effection"; import type { Operation, Subscription } from "effection"; import { ensureDir, rm, writeTextFile } from "@effectionx/fs"; diff --git a/packages/test-agent/tests/bridge.test.ts b/packages/test-agent/tests/bridge.test.ts index d2721fe0..7d5c5ae5 100644 --- a/packages/test-agent/tests/bridge.test.ts +++ b/packages/test-agent/tests/bridge.test.ts @@ -5,8 +5,8 @@ * cancellation safety in both directions and output-before-terminal * ordering in collectTurn(). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { createChannel, race, sleep, spawn } from "effection"; import { collectTurn, createTurnBridge } from "../src/worker/bridge.ts"; import type { BridgeEvent } from "../src/worker/bridge.ts"; diff --git a/packages/test-agent/tests/command-lazy.test.ts b/packages/test-agent/tests/command-lazy.test.ts index a26b5e66..9d97612e 100644 --- a/packages/test-agent/tests/command-lazy.test.ts +++ b/packages/test-agent/tests/command-lazy.test.ts @@ -5,8 +5,8 @@ * even where no entrypoint installed a command adapter. These suites install a * deliberately throwing adapter and assert what does and does not reach it. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, scoped } from "effection"; import type { Operation } from "effection"; import { randomUUID } from "node:crypto"; diff --git a/packages/test-agent/tests/components.test.ts b/packages/test-agent/tests/components.test.ts index 0b4dd8b0..f05133ae 100644 --- a/packages/test-agent/tests/components.test.ts +++ b/packages/test-agent/tests/components.test.ts @@ -5,9 +5,9 @@ * clean suspension at teardown — driven through the component surface * with real workers. */ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "@executablemd/core"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, scoped } from "effection"; import type { Operation, Result } from "effection"; import { ensureDir, rm, writeTextFile } from "@effectionx/fs"; diff --git a/packages/test-agent/tests/controller.test.ts b/packages/test-agent/tests/controller.test.ts index ec2fd442..d9f05952 100644 --- a/packages/test-agent/tests/controller.test.ts +++ b/packages/test-agent/tests/controller.test.ts @@ -5,8 +5,8 @@ * failure marks, scenario isolation, connection revocation on unregister, * and teardown. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, race, scoped, spawn, suspend, until, withResolvers } from "effection"; import type { Operation } from "effection"; import { once } from "@effectionx/node"; diff --git a/packages/test-agent/tests/net.test.ts b/packages/test-agent/tests/net.test.ts index c3b52745..bcff1c32 100644 --- a/packages/test-agent/tests/net.test.ts +++ b/packages/test-agent/tests/net.test.ts @@ -4,8 +4,8 @@ * a line round-trip, abrupt peer closure settling the client, and server * teardown closing accepted connections and stopping the listener. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { each, ensure, race, scoped, spawn, suspend, withResolvers } from "effection"; import type { Operation } from "effection"; import { once } from "@effectionx/node"; diff --git a/packages/test-agent/tests/profile.test.ts b/packages/test-agent/tests/profile.test.ts index fd1648f4..16d1456f 100644 --- a/packages/test-agent/tests/profile.test.ts +++ b/packages/test-agent/tests/profile.test.ts @@ -8,8 +8,8 @@ * not reachable from behavior-document surface, so each is invoked directly * in a scope with the profile installed. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import type { Operation } from "effection"; import { compile, cwd, env, exec, fetch, glob, readTextFile, stat } from "@executablemd/runtime"; import { useTempFileCompiler } from "@executablemd/core"; diff --git a/packages/test-agent/tests/protocol.test.ts b/packages/test-agent/tests/protocol.test.ts index ce01e1c9..21d00e64 100644 --- a/packages/test-agent/tests/protocol.test.ts +++ b/packages/test-agent/tests/protocol.test.ts @@ -2,8 +2,8 @@ * Tier TP — controller/worker protocol tests (specs/test-agent-spec.md * §Controller and worker). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { createLineSplitter, encodeMessage, diff --git a/packages/test-agent/tests/provider.test.ts b/packages/test-agent/tests/provider.test.ts index 807f5ae7..e93a6205 100644 --- a/packages/test-agent/tests/provider.test.ts +++ b/packages/test-agent/tests/provider.test.ts @@ -3,8 +3,8 @@ * §Scenario instances): withSessionRoute pins the pending route for the * provider's registry-dependent work and releases it otherwise. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { sleep, spawn } from "effection"; import type { Operation } from "effection"; import { Agent } from "@executablemd/core"; diff --git a/packages/test-agent/tests/public-api.test.ts b/packages/test-agent/tests/public-api.test.ts index 1dc6f034..e0d068b5 100644 --- a/packages/test-agent/tests/public-api.test.ts +++ b/packages/test-agent/tests/public-api.test.ts @@ -5,8 +5,8 @@ * merely absent from the published types, and the scenario a harness holds is * still torn down with the scope that acquired it. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, scoped, withResolvers } from "effection"; import type { Operation } from "effection"; import { connect } from "node:net"; diff --git a/packages/test-agent/tests/route-slot.test.ts b/packages/test-agent/tests/route-slot.test.ts index 38f77a4f..2b1681bd 100644 --- a/packages/test-agent/tests/route-slot.test.ts +++ b/packages/test-agent/tests/route-slot.test.ts @@ -3,8 +3,8 @@ * slot is exclusive and granted in arrival order, and a holder that fails or * halts still advances the queue rather than stranding the route. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { sleep, spawn } from "effection"; import { useRouteSlot } from "../src/route-slot.ts"; diff --git a/packages/test-agent/tests/smoke.test.ts b/packages/test-agent/tests/smoke.test.ts index dec13791..484d5514 100644 --- a/packages/test-agent/tests/smoke.test.ts +++ b/packages/test-agent/tests/smoke.test.ts @@ -5,8 +5,8 @@ * in process to replay a completed journal — the CLI never loads an * existing journal, so replay cannot be exercised through it. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { each, scoped, spawn } from "effection"; import type { Operation, Result } from "effection"; import { timebox } from "@effectionx/timebox"; diff --git a/packages/test-agent/tests/template.test.ts b/packages/test-agent/tests/template.test.ts index 647472cf..a48b7d6d 100644 --- a/packages/test-agent/tests/template.test.ts +++ b/packages/test-agent/tests/template.test.ts @@ -2,8 +2,8 @@ * Tier TT — WhenPrompt template tests (specs/test-agent-spec.md * §WhenPrompt templates). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { matchPrompt, parseTemplate } from "../src/template.ts"; import type { ParsedTemplate } from "../src/template.ts"; diff --git a/packages/test-agent/tests/worker-lifecycle.test.ts b/packages/test-agent/tests/worker-lifecycle.test.ts index b6e060fb..102be93a 100644 --- a/packages/test-agent/tests/worker-lifecycle.test.ts +++ b/packages/test-agent/tests/worker-lifecycle.test.ts @@ -5,8 +5,8 @@ * rendered text, mismatch diagnostics, and restart-between-turns with * session/load rehydration. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { createSignal, each, ensure, scoped, sleep, spawn, until, withResolvers } from "effection"; import type { Operation, WithResolvers } from "effection"; import { ensureDir, rm, writeTextFile } from "@effectionx/fs"; diff --git a/packages/test-support/package.json b/packages/test-support/package.json index de055d3a..8c7f8d9c 100644 --- a/packages/test-support/package.json +++ b/packages/test-support/package.json @@ -1,13 +1,15 @@ { - "name": "@effectionx/bdd", + "name": "@executablemd/test-support", "version": "0.0.0", "private": true, "type": "module", "exports": { - "./node": "./bdd.ts", + "./bdd": "./bdd.ts", "./expect": "./expect.ts" }, "dependencies": { + "@effectionx/test-adapter": "0.7.4", + "effection": "4.1.0-alpha.10", "expect": "^30.0.0" } } diff --git a/packages/testing/tests/agent-composition.test.ts b/packages/testing/tests/agent-composition.test.ts index 0ade2e06..a61edfcf 100644 --- a/packages/testing/tests/agent-composition.test.ts +++ b/packages/testing/tests/agent-composition.test.ts @@ -5,8 +5,8 @@ * outside a passing must still surface as the agent aggregate. * Lives in the testing package because core cannot depend on testing. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import { ensure } from "effection"; import type { Result, Stream } from "effection"; diff --git a/packages/testing/tests/assert-throws.test.ts b/packages/testing/tests/assert-throws.test.ts index 8c9420ad..48d8ed49 100644 --- a/packages/testing/tests/assert-throws.test.ts +++ b/packages/testing/tests/assert-throws.test.ts @@ -1,6 +1,6 @@ -import { describe, it } from "@effectionx/bdd/node"; +import { describe, it } from "@executablemd/test-support/bdd"; import { scoped } from "effection"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { AssertionError } from "node:assert/strict"; import { Component } from "@executablemd/core"; import type { ComponentElement } from "@executablemd/core"; diff --git a/packages/testing/tests/assert.test.ts b/packages/testing/tests/assert.test.ts index dcf8ae33..0aad08bd 100644 --- a/packages/testing/tests/assert.test.ts +++ b/packages/testing/tests/assert.test.ts @@ -7,8 +7,8 @@ * resolve a workspace package's subpath export in CI, where `bun install` runs * without pnpm's node_modules links. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { AssertionError as NodeAssertionError } from "node:assert/strict"; import { assert, diff --git a/packages/testing/tests/assertions.test.ts b/packages/testing/tests/assertions.test.ts index a7c9a5de..cb6f9826 100644 --- a/packages/testing/tests/assertions.test.ts +++ b/packages/testing/tests/assertions.test.ts @@ -1,6 +1,6 @@ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "@executablemd/core"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { AssertionError } from "node:assert/strict"; import { TestFailureError } from "../src/test-api.ts"; import { failureOf, runDoc } from "./helpers.ts"; diff --git a/packages/testing/tests/cli.test.ts b/packages/testing/tests/cli.test.ts index c307f49c..6a2c6386 100644 --- a/packages/testing/tests/cli.test.ts +++ b/packages/testing/tests/cli.test.ts @@ -4,8 +4,8 @@ * Shells out to `deno run --allow-all packages/cli/src/deno.ts` with piped stdio, so * exit codes and report output are asserted TTY-independently. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { timebox } from "@effectionx/timebox"; import { spawn, each } from "effection"; import type { Operation } from "effection"; diff --git a/packages/testing/tests/replay.test.ts b/packages/testing/tests/replay.test.ts index c25e9663..2d341a70 100644 --- a/packages/testing/tests/replay.test.ts +++ b/packages/testing/tests/replay.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { InMemoryStream } from "@executablemd/durable-streams"; import type { DurableEvent } from "@executablemd/durable-streams"; import { API } from "@executablemd/runtime"; diff --git a/packages/testing/tests/smoke.test.ts b/packages/testing/tests/smoke.test.ts index 9752352a..175264fa 100644 --- a/packages/testing/tests/smoke.test.ts +++ b/packages/testing/tests/smoke.test.ts @@ -1,6 +1,6 @@ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "@executablemd/core"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; import type { Operation, Result } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; diff --git a/packages/testing/tests/testing-mode.test.ts b/packages/testing/tests/testing-mode.test.ts index 9e2834a2..22af93d2 100644 --- a/packages/testing/tests/testing-mode.test.ts +++ b/packages/testing/tests/testing-mode.test.ts @@ -1,6 +1,6 @@ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "@executablemd/core"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { sleep } from "effection"; import { API } from "@executablemd/runtime"; import { useFailingExec } from "@executablemd/runtime/test"; diff --git a/packages/testing/tests/use-testing.test.ts b/packages/testing/tests/use-testing.test.ts index baebd751..5376db34 100644 --- a/packages/testing/tests/use-testing.test.ts +++ b/packages/testing/tests/use-testing.test.ts @@ -1,6 +1,6 @@ -import { describe, it, beforeAll } from "@effectionx/bdd/node"; +import { describe, it, beforeAll } from "@executablemd/test-support/bdd"; import { useTempFileCompiler } from "@executablemd/core"; -import { expect } from "@effectionx/bdd/expect"; +import { expect } from "@executablemd/test-support/expect"; import { scoped, sleep, spawn } from "effection"; import type { Operation, Subscription } from "effection"; import { InMemoryStream } from "@executablemd/durable-streams"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1251a803..888d7b3f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,7 +84,7 @@ importers: '@durable-streams/server': specifier: ^0.3.8 version: 0.3.8 - '@effectionx/bdd': + '@executablemd/test-support': specifier: workspace:* version: link:packages/test-support '@types/node': @@ -302,6 +302,12 @@ importers: packages/test-support: dependencies: + '@effectionx/test-adapter': + specifier: 0.7.4 + version: 0.7.4(effection@4.1.0-alpha.10) + effection: + specifier: 4.1.0-alpha.10 + version: 4.1.0-alpha.10 expect: specifier: ^30.0.0 version: 30.3.0 diff --git a/scripts/tests/build-npm.test.ts b/scripts/tests/build-npm.test.ts index fa46f9b6..3f2aaf3b 100644 --- a/scripts/tests/build-npm.test.ts +++ b/scripts/tests/build-npm.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure } from "effection"; import type { Operation } from "effection"; import { exec, Stdio } from "@effectionx/process"; diff --git a/scripts/tests/bump-version.test.ts b/scripts/tests/bump-version.test.ts index d94a410d..ea352c5a 100644 --- a/scripts/tests/bump-version.test.ts +++ b/scripts/tests/bump-version.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure } from "effection"; import type { Operation } from "effection"; import { ensureDir, readTextFile, rm, writeTextFile } from "@effectionx/fs"; diff --git a/scripts/tests/cli-npm-bin.test.ts b/scripts/tests/cli-npm-bin.test.ts index 11269ee6..f08374d3 100644 --- a/scripts/tests/cli-npm-bin.test.ts +++ b/scripts/tests/cli-npm-bin.test.ts @@ -12,8 +12,8 @@ * API, then red for a reason the branch cannot fix. This is also the only * coverage of the local-sibling build mode. */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure } from "effection"; import type { Operation } from "effection"; import { exec, Stdio } from "@effectionx/process"; diff --git a/scripts/tests/fixtures/aliased-import.ts b/scripts/tests/fixtures/aliased-import.ts index 91678b00..3880ed87 100644 --- a/scripts/tests/fixtures/aliased-import.ts +++ b/scripts/tests/fixtures/aliased-import.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped as inScope } from "effection"; describe("aliased import", () => { diff --git a/scripts/tests/fixtures/doubled.ts b/scripts/tests/fixtures/doubled.ts index 0bd58b87..90cd8324 100644 --- a/scripts/tests/fixtures/doubled.ts +++ b/scripts/tests/fixtures/doubled.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped } from "effection"; describe("doubled wrappers", () => { diff --git a/scripts/tests/fixtures/local-scoped.ts b/scripts/tests/fixtures/local-scoped.ts index c81f25e9..87babf7a 100644 --- a/scripts/tests/fixtures/local-scoped.ts +++ b/scripts/tests/fixtures/local-scoped.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import type { Operation } from "effection"; function* scoped(body: () => Operation): Operation { diff --git a/scripts/tests/fixtures/partial-scope.ts b/scripts/tests/fixtures/partial-scope.ts index bbe5d103..623fa2ad 100644 --- a/scripts/tests/fixtures/partial-scope.ts +++ b/scripts/tests/fixtures/partial-scope.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure, scoped, spawn } from "effection"; import type { Operation } from "effection"; diff --git a/scripts/tests/fixtures/whole-body.ts b/scripts/tests/fixtures/whole-body.ts index 5035b775..3f29b2c4 100644 --- a/scripts/tests/fixtures/whole-body.ts +++ b/scripts/tests/fixtures/whole-body.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { scoped, sleep } from "effection"; describe("whole-body wrappers", () => { diff --git a/scripts/tests/no-redundant-test-scope.test.ts b/scripts/tests/no-redundant-test-scope.test.ts index 70bafbe1..022ecb12 100644 --- a/scripts/tests/no-redundant-test-scope.test.ts +++ b/scripts/tests/no-redundant-test-scope.test.ts @@ -1,8 +1,8 @@ /** * Rule tests for `local/no-redundant-test-scope` (scripts/oxlint-rules). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import type { Operation } from "effection"; import fs from "node:fs"; import os from "node:os"; diff --git a/scripts/tests/no-yield-in-finally.test.ts b/scripts/tests/no-yield-in-finally.test.ts index 387d046f..5053289b 100644 --- a/scripts/tests/no-yield-in-finally.test.ts +++ b/scripts/tests/no-yield-in-finally.test.ts @@ -1,8 +1,8 @@ /** * Rule tests for `local/no-yield-in-finally` (scripts/oxlint-rules). */ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import type { Operation } from "effection"; import { violations } from "./oxlint.ts"; diff --git a/scripts/tests/workspace.test.ts b/scripts/tests/workspace.test.ts index a7456b22..c41c641c 100644 --- a/scripts/tests/workspace.test.ts +++ b/scripts/tests/workspace.test.ts @@ -1,5 +1,5 @@ -import { describe, it } from "@effectionx/bdd/node"; -import { expect } from "@effectionx/bdd/expect"; +import { describe, it } from "@executablemd/test-support/bdd"; +import { expect } from "@executablemd/test-support/expect"; import { ensure } from "effection"; import type { Operation } from "effection"; import { ensureDir, rm, writeTextFile } from "@effectionx/fs"; diff --git a/specs/executable-mdx-spec.md b/specs/executable-mdx-spec.md index 73e69afb..0f375236 100644 --- a/specs/executable-mdx-spec.md +++ b/specs/executable-mdx-spec.md @@ -1246,7 +1246,7 @@ run but are absent from the diagnostic trace. | `src/data-uri-compiler.ts` | `useDataUriCompiler()` — data: URI compiler middleware for Deno/Bun; owns `STANDARD_IMPORTS` | | `src/temp-file-compiler.ts` | `useTempFileCompiler()` — temp-file compiler middleware for Node/Bun; owns `STANDARD_IMPORTS` | | `src/content-context.ts` | `useContent()` — content slot access for function components | -| `packages/test-support/bdd.ts` | Deno-native BDD shim — wraps `@std/testing/bdd` with Effection test adapter | +| `packages/test-support/bdd.ts` | Cross-runtime Effection BDD adapter — drives `@std/testing/bdd`, `node:test`, and `bun:test` | | `src/eval-handler.ts` | `evalFactory` | | `src/eval-interpolate.ts` | `interpolateEvalBindings()` — bare `{name}` substitution | | `src/modifiers/persist.ts` | `persistFactory` | diff --git a/tsconfig.node.json b/tsconfig.node.json index 9282a484..b47c6407 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -18,8 +18,8 @@ "@executablemd/durable-streams": ["./packages/durable-streams/mod.ts"], "@executablemd/code-review-agent": ["./packages/code-review-agent/mod.ts"], "@executablemd/testing": ["./packages/testing/mod.ts"], - "@effectionx/bdd/node": ["./packages/test-support/bdd.ts"], - "@effectionx/bdd/expect": ["./packages/test-support/expect.ts"] + "@executablemd/test-support/bdd": ["./packages/test-support/bdd.ts"], + "@executablemd/test-support/expect": ["./packages/test-support/expect.ts"] } }, "include": [