@adobe/data-testing 0.10.2 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,4 +14,16 @@ export declare const bad: import("./cases.js").CasesResult<State, (_s: Pick<Stat
14
14
  readonly id: number;
15
15
  readonly count: number;
16
16
  }) => Pick<State, "selected">>;
17
+ export declare const throwsAny: import("./cases.js").CasesResult<State, (_s: Pick<State, "selected">, args: {
18
+ readonly id: number;
19
+ readonly count: number;
20
+ }) => Pick<State, "selected">>;
21
+ export declare const throwsSubstring: import("./cases.js").CasesResult<State, (_s: Pick<State, "selected">, args: {
22
+ readonly id: number;
23
+ readonly count: number;
24
+ }) => Pick<State, "selected">>;
25
+ export declare const badBoth: import("./cases.js").CasesResult<State, (_s: Pick<State, "selected">, args: {
26
+ readonly id: number;
27
+ readonly count: number;
28
+ }) => Pick<State, "selected">>;
17
29
  export {};
@@ -28,4 +28,11 @@ const _derivedCases = derived.cases;
28
28
  const badArgs = { type: "object", properties: { id: { type: "string" }, count: { type: "integer" } } };
29
29
  // @ts-expect-error — args type is not assignable to Schema.ToType<args>
30
30
  export const bad = cases(reparent, { args: badArgs }, { name: "bad", before: {}, args: { id: 1, count: 2 }, after: { selected: 1 } });
31
+ // A `throws` case takes no `after`/`effects` — `true` for any message, or a
32
+ // substring the thrown message must contain.
33
+ export const throwsAny = cases(reparent, { name: "throws (any message)", before: {}, args: { id: 1, count: 2 }, throws: true });
34
+ export const throwsSubstring = cases(reparent, { name: "throws (substring)", before: {}, args: { id: 1, count: 2 }, throws: "not found" });
35
+ // A case cannot declare both `after` and `throws` — the union forbids it.
36
+ // @ts-expect-error — `after` and `throws` are mutually exclusive
37
+ export const badBoth = cases(reparent, { name: "bad", before: {}, args: { id: 1, count: 2 }, after: { selected: 1 }, throws: true });
31
38
  //# sourceMappingURL=cases.type-test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cases.type-test.js","sourceRoot":"","sources":["../../src/conformance/cases.type-test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,wFAAwF;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,KAAK,GAAG,YAAY,EAAS,CAAC;AACpC,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;AAEzC,MAAM,QAAQ,GAAG,CAAC,EAA2B,EAAE,IAAqD,EAA2B,EAAE,CAAC,CAAC;IACjI,QAAQ,EAAE,IAAI,CAAC,EAAE;CAClB,CAAC,CAAC;AACH,MAAM,MAAM,GAAG,CAAC,EAA2B,EAA2B,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AAE3F,qEAAqE;AACrE,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CACvB,QAAQ;AACR,mFAAmF;AACnF,2EAA2E;AAC3E,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAC3F,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAC9E,CAAC;AACF,6EAA6E;AAC7E,MAAM,QAAQ,GAA0B,IAAI,CAAC,IAAI,CAAC;AAClD,MAAM,SAAS,GAA2B,IAAI,CAAC,KAAK,CAAC;AAErD,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7F,MAAM,YAAY,GAAuB,YAAY,CAAC,KAAK,CAAC;AAE5D,+DAA+D;AAC/D,MAAM,MAAM,GAAG,CAAC,EAAS,EAAU,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC;AAClD,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACjH,MAAM,aAAa,GAAuB,OAAO,CAAC,KAAK,CAAC;AAExD,mFAAmF;AACnF,oFAAoF;AACpF,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAW,CAAC;AAChH,wEAAwE;AACxE,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"cases.type-test.js","sourceRoot":"","sources":["../../src/conformance/cases.type-test.ts"],"names":[],"mappings":"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"}
@@ -30,9 +30,12 @@ const scan = (modules, isKind) => {
30
30
  }
31
31
  return out;
32
32
  };
33
- // Transitions — files whose cases are `{ before, args?, after }` — keyed by the
34
- // transform's function name (the name the ecs transaction/action must share).
35
- export const discoverTransitions = (modules) => scan(modules, (c) => "after" in c);
33
+ // Transitions — files whose cases are `{ before, args?, after }` OR `{ before,
34
+ // args?, throws }` — keyed by the transform's function name (the name the ecs
35
+ // transaction/action must share). Checking either key means a module whose
36
+ // FIRST case happens to be a `throws` case is still recognized (only the first
37
+ // case decides the module's kind).
38
+ export const discoverTransitions = (modules) => scan(modules, (c) => "after" in c || "throws" in c);
36
39
  // Derivations — files whose cases are `{ input, value }` — keyed by the
37
40
  // derivation's function name (the name the ecs computed must share).
38
41
  export const discoverDerivations = (modules) => scan(modules, (c) => "value" in c);
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/conformance/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/conformance/discover.ts"],"names":[],"mappings":"AAWA,sFAAsF;AACtF,kFAAkF;AAClF,MAAM,cAAc,GAAG,CAAC,GAAY,EAAqD,EAAE;IACzF,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,GAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;QACjG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,GAAmD,CAAC;QAC5E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CACX,OAAgD,EAChD,MAAuD,EAC9B,EAAE;IAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACvC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAgC,CAAC;YAAE,SAAS;QACvG,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4CAA4C,CAAC,CAAC;QAClF,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE;YACd,EAAE,EAAE,MAAM,CAAC,MAAM,CAAqB;YACtC,KAAK,EAAE,IAA2B;YAClC,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,mCAAmC;AACnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAgD,EAA2B,EAAE,CAC/G,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC;AACtD,wEAAwE;AACxE,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAgD,EAA2B,EAAE,CAC/G,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AAErC,4EAA4E;AAC5E,oFAAoF;AACpF,4EAA4E;AAC5E,iFAAiF;AACjF,gFAAgF;AAChF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAA+B,EAA2C,EAAE;IACtG,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAmC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,IAAI,OAAO,MAAM,KAAK,UAAU;oBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAoC,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const expectThrows: (run: () => unknown, expected: true | string) => Promise<void>;
@@ -0,0 +1,29 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ // Assert that invoking `run` throws (synchronously or via a rejected promise).
3
+ // `expected: true` accepts any thrown error; a string narrows to one whose
4
+ // `message` contains it as a substring. Shared by every runner that supports a
5
+ // `throws` case (`runSpec`, `runTransactions`, `runActions`) so sync and async
6
+ // transforms are asserted identically — `await` a sync throw the same as a
7
+ // rejection, since the throw happens before the `await` inside the `try`.
8
+ export const expectThrows = async (run, expected) => {
9
+ let didThrow = false;
10
+ let thrown;
11
+ try {
12
+ await run();
13
+ }
14
+ catch (e) {
15
+ didThrow = true;
16
+ thrown = e;
17
+ }
18
+ if (!didThrow) {
19
+ const suffix = typeof expected === "string" ? ` containing "${expected}"` : "";
20
+ throw new Error(`expected a throw${suffix}, but none was thrown`);
21
+ }
22
+ if (typeof expected === "string") {
23
+ const message = thrown instanceof Error ? thrown.message : String(thrown);
24
+ if (!message.includes(expected)) {
25
+ throw new Error(`expected thrown error message to include "${expected}", got: ${JSON.stringify(message)}`);
26
+ }
27
+ }
28
+ };
29
+ //# sourceMappingURL=expect-throws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-throws.js","sourceRoot":"","sources":["../../src/conformance/expect-throws.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,+EAA+E;AAC/E,2EAA2E;AAC3E,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,GAAkB,EAAE,QAAuB,EAAiB,EAAE;IAC/F,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,GAAG,CAAC,CAAC;IACb,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,uBAAuB,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,35 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { describe, it, expect } from "vitest";
3
+ import { expectThrows } from "./expect-throws.js";
4
+ describe("expectThrows", () => {
5
+ it("resolves when the call throws and `true` accepts any message", async () => {
6
+ await expect(expectThrows(() => {
7
+ throw new Error("nope");
8
+ }, true)).resolves.toBeUndefined();
9
+ });
10
+ it("resolves when the thrown message contains the expected substring", async () => {
11
+ await expect(expectThrows(() => {
12
+ throw new Error("invalid quantity: -1");
13
+ }, "invalid quantity")).resolves.toBeUndefined();
14
+ });
15
+ it("rejects when the thrown message does not contain the expected substring", async () => {
16
+ await expect(expectThrows(() => {
17
+ throw new Error("something else");
18
+ }, "invalid quantity")).rejects.toThrow(/expected thrown error message to include/);
19
+ });
20
+ it("rejects when the call does not throw at all", async () => {
21
+ await expect(expectThrows(() => 42, true)).rejects.toThrow(/expected a throw/);
22
+ });
23
+ it("supports an async call that rejects", async () => {
24
+ await expect(expectThrows(async () => {
25
+ throw new Error("async failure");
26
+ }, "async failure")).resolves.toBeUndefined();
27
+ });
28
+ it("matches against a non-Error thrown value via String()", async () => {
29
+ await expect(expectThrows(() => {
30
+ // eslint-disable-next-line @typescript-eslint/no-throw-literal
31
+ throw "plain string failure";
32
+ }, "string failure")).resolves.toBeUndefined();
33
+ });
34
+ });
35
+ //# sourceMappingURL=expect-throws.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect-throws.test.js","sourceRoot":"","sources":["../../src/conformance/expect-throws.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,MAAM,CACV,YAAY,CAAC,GAAG,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAC,CACT,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,MAAM,CACV,YAAY,CAAC,GAAG,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC,EAAE,kBAAkB,CAAC,CACvB,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,MAAM,CACV,YAAY,CAAC,GAAG,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC,EAAE,kBAAkB,CAAC,CACvB,CAAC,OAAO,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,CACV,YAAY,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC,EAAE,eAAe,CAAC,CACpB,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,MAAM,CACV,YAAY,CAAC,GAAG,EAAE;YAChB,+DAA+D;YAC/D,MAAM,sBAAsB,CAAC;QAC/B,CAAC,EAAE,gBAAgB,CAAC,CACrB,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -6,4 +6,5 @@ export { runActions, type ActionRunConfig } from "./run-actions.js";
6
6
  export { runComputeds, type ComputedRunConfig } from "./run-computeds.js";
7
7
  export { runFeature, type FeatureRunConfig, type Projection } from "./run-feature.js";
8
8
  export { assertState } from "./assert-state.js";
9
+ export { expectThrows } from "./expect-throws.js";
9
10
  export type { SchemaSource } from "./refify.js";
@@ -7,4 +7,7 @@ export { runFeature } from "./run-feature.js";
7
7
  // For custom conformance harnesses (e.g. an ECS-system frame): compare two States
8
8
  // up to an id-bijection, the same way the runners do.
9
9
  export { assertState } from "./assert-state.js";
10
+ // For custom conformance harnesses: assert a call throws, the same way a case's
11
+ // `throws` field does in the built-in runners.
12
+ export { expectThrows } from "./expect-throws.js";
10
13
  //# sourceMappingURL=public.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/conformance/public.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,kBAAkB,GAKnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAsB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAA6B,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAA0C,MAAM,kBAAkB,CAAC;AACtF,kFAAkF;AAClF,sDAAsD;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/conformance/public.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,kBAAkB,GAKnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAsB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,eAAe,EAA6B,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAA0B,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAA0C,MAAM,kBAAkB,CAAC;AACtF,kFAAkF;AAClF,sDAAsD;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,gFAAgF;AAChF,+CAA+C;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -2,6 +2,7 @@
2
2
  import { describe, it } from "vitest";
3
3
  import { discoverTransitions, discoverOps } from "./discover.js";
4
4
  import { expectAfter } from "./expect-after.js";
5
+ import { expectThrows } from "./expect-throws.js";
5
6
  import { resolveArgs } from "./resolve-args.js";
6
7
  import { splitAndRecordServices, expectEffects } from "./record-effects.js";
7
8
  import { resolver } from "./resolve.js";
@@ -25,7 +26,12 @@ export function runActions(config) {
25
26
  // Resolve entity-reference args (the fields the case's `args` schema marks)
26
27
  // to the seeded entities; a transition with no such schema passes through.
27
28
  const args = resolveArgs(input, paired.argsSchema, resolve);
28
- await action(db, args);
29
+ const call = action;
30
+ if (testCase.throws !== undefined) {
31
+ await expectThrows(() => call(db, args), testCase.throws);
32
+ return;
33
+ }
34
+ await call(db, args);
29
35
  // `after` is a writes patch, compared up to an id-bijection.
30
36
  const store = config.store(db);
31
37
  expectAfter(config.toState(store), before, testCase.after, store, config.match);
@@ -1 +1 @@
1
- {"version":3,"file":"run-actions.js","sourceRoot":"","sources":["../../src/conformance/run-actions.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAwBxC,gFAAgF;AAChF,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAwC,MAAyC;IACzG,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,SAAS,CAAC,yEAAyE;QAChG,QAAQ,CAAC,GAAG,IAAI,kBAAkB,EAAE,GAAG,EAAE;YACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,EAAE,CAAC,QAAQ,CAAC,IAAc,EAAE,KAAK,IAAI,EAAE;oBACrC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACzE,qDAAqD;oBACrD,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAI,QAAQ,CAAC,MAAiB,EAAW,CAAC;oBACtF,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACrE,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAChD,4EAA4E;oBAC5E,2EAA2E;oBAC3E,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAC5D,MAAO,MAAuD,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACzE,6DAA6D;oBAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC/B,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAgB,EAAE,QAAQ,CAAC,KAAe,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAgB,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run-actions.js","sourceRoot":"","sources":["../../src/conformance/run-actions.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAwBxC,gFAAgF;AAChF,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAwC,MAAyC;IACzG,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,SAAS,CAAC,yEAAyE;QAChG,QAAQ,CAAC,GAAG,IAAI,kBAAkB,EAAE,GAAG,EAAE;YACvC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,EAAE,CAAC,QAAQ,CAAC,IAAc,EAAE,KAAK,IAAI,EAAE;oBACrC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACzE,qDAAqD;oBACrD,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAI,QAAQ,CAAC,MAAiB,EAAW,CAAC;oBACtF,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACrE,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAChD,4EAA4E;oBAC5E,2EAA2E;oBAC3E,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAC5D,MAAM,IAAI,GAAG,MAAsD,CAAC;oBACpE,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAClC,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAuB,CAAC,CAAC;wBAC3E,OAAO;oBACT,CAAC;oBACD,MAAM,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACrB,6DAA6D;oBAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC/B,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAgB,EAAE,QAAQ,CAAC,KAAe,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAgB,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -3,6 +3,7 @@ import { describe, it } from "vitest";
3
3
  import { Store } from "@adobe/data/ecs";
4
4
  import { assert } from "../match/assert.js";
5
5
  import { expectAfter } from "./expect-after.js";
6
+ import { expectThrows } from "./expect-throws.js";
6
7
  import { recordArgServices, expectEffects } from "./record-effects.js";
7
8
  const isDerivationCase = (c) => typeof c === "object" && c !== null && "value" in c;
8
9
  // The single pure-spec test for every transform AND derivation in a `data/state/`
@@ -81,6 +82,10 @@ export const runSpec = (config) => {
81
82
  ...(config.state?.create() ?? {}),
82
83
  ...tc.before,
83
84
  };
85
+ if (tc.throws !== undefined) {
86
+ await expectThrows(() => suite.fn(before, args), tc.throws);
87
+ return;
88
+ }
84
89
  const result = (await suite.fn(before, args));
85
90
  // The pure transform mints its own spec-ids, so compare up to an
86
91
  // id-bijection too (entity map keys always; reference fields when a
@@ -1 +1 @@
1
- {"version":3,"file":"run-spec.js","sourceRoot":"","sources":["../../src/conformance/run-spec.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAY,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGvE,MAAM,gBAAgB,GAAG,CAAC,CAAU,EAAyC,EAAE,CAC7E,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC;AAyCtD,kFAAkF;AAClF,kFAAkF;AAClF,oFAAoF;AACpF,+EAA+E;AAC/E,oFAAoF;AACpF,4EAA4E;AAC5E,EAAE;AACF,2EAA2E;AAC3E,kFAAkF;AAClF,4EAA4E;AAC5E,gFAAgF;AAChF,+BAA+B;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAqB,EAAQ,EAAE;IACrD,iFAAiF;IACjF,+EAA+E;IAC/E,oEAAoE;IACpE,MAAM,YAAY,GAAiB,MAAM,CAAC,MAAM;QAC9C,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAe,CAAC,CAAC,gBAAgB,EAAE;QAC7E,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QAC7C,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,UAAU,CAC3C,CAAC;QACF,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;YACxB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;YAC5B,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,CAAC;QAC9B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,gFAAgF;QAChF,kEAAkE;QAClE,MAAM,KAAK,GAAI,MAAM,CAAC,OAAO,CAAoC,EAAE,KAAK,IAAI,EAAE,CAAC;QAC/E,6EAA6E;QAC7E,4DAA4D;QAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO;YACb,KAAK;YACL,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAE,CAAoC;YAChE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,+DAA+D;QACjE,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;YACzB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;oBAClD,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAC1F,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/B,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CACrB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAC/D,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,MAAM,EAAE,GAAG,QAMV,CAAC;gBACF,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;oBACrB,2EAA2E;oBAC3E,8EAA8E;oBAC9E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBACnD,6EAA6E;oBAC7E,MAAM,MAAM,GAAG;wBACb,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;wBACjC,GAAI,EAAE,CAAC,MAAkC;qBAC1C,CAAC;oBACF,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAA4B,CAAC;oBACzE,iEAAiE;oBACjE,oEAAoE;oBACpE,8BAA8B;oBAC9B,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,KAAgC,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC/G,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"run-spec.js","sourceRoot":"","sources":["../../src/conformance/run-spec.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,12 @@ import { Conformance } from "../index.js";
3
3
  // Non-empty discovery: one pure transition with co-located cases still pairs and
4
4
  // asserts as before (empty-discovery path must not break populated specs).
5
5
  const increment = (state, { by }) => ({ n: state.n + by });
6
+ // A `throws` case: no `after`/`effects`, just an optional message substring.
7
+ const withdraw = (state, { amount }) => {
8
+ if (amount > state.n)
9
+ throw new Error(`insufficient funds: have ${state.n}, want ${amount}`);
10
+ return { n: state.n - amount };
11
+ };
6
12
  Conformance.runSpec({
7
13
  state: { create: () => ({ n: 0 }) },
8
14
  transitions: {
@@ -27,6 +33,31 @@ Conformance.runSpec({
27
33
  ],
28
34
  },
29
35
  },
36
+ "./withdraw.ts": {
37
+ withdraw,
38
+ cases: {
39
+ cases: [
40
+ {
41
+ name: "withdraws within balance",
42
+ before: { n: 10 },
43
+ args: { amount: 4 },
44
+ after: { n: 6 },
45
+ },
46
+ {
47
+ name: "throws on any error when `throws: true`",
48
+ before: { n: 10 },
49
+ args: { amount: 11 },
50
+ throws: true,
51
+ },
52
+ {
53
+ name: "throws with a message containing the given substring",
54
+ before: { n: 10 },
55
+ args: { amount: 11 },
56
+ throws: "insufficient funds",
57
+ },
58
+ ],
59
+ },
60
+ },
30
61
  },
31
62
  });
32
63
  //# sourceMappingURL=run-spec.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-spec.test.js","sourceRoot":"","sources":["../../src/conformance/run-spec.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,iFAAiF;AACjF,2EAA2E;AAC3E,MAAM,SAAS,GAAG,CAChB,KAAoB,EACpB,EAAE,EAAE,EAAkB,EACP,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE1C,WAAW,CAAC,OAAO,CAAC;IAClB,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACnC,WAAW,EAAE;QACX,gBAAgB,EAAE;YAChB,SAAS;YACT,iFAAiF;YACjF,wEAAwE;YACxE,KAAK,EAAE;gBACL,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,oCAAoC;wBAC1C,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;wBACf,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;qBAChB;oBACD;wBACE,IAAI,EAAE,mCAAmC;wBACzC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;wBACjB,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;wBACf,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;qBACjB;iBACF;aACF;SACF;KACF;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"run-spec.test.js","sourceRoot":"","sources":["../../src/conformance/run-spec.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,iFAAiF;AACjF,2EAA2E;AAC3E,MAAM,SAAS,GAAG,CAChB,KAAoB,EACpB,EAAE,EAAE,EAAkB,EACP,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE1C,6EAA6E;AAC7E,MAAM,QAAQ,GAAG,CACf,KAAoB,EACpB,EAAE,MAAM,EAAsB,EACf,EAAE;IACjB,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;IAC7F,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;AACjC,CAAC,CAAC;AAEF,WAAW,CAAC,OAAO,CAAC;IAClB,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACnC,WAAW,EAAE;QACX,gBAAgB,EAAE;YAChB,SAAS;YACT,iFAAiF;YACjF,wEAAwE;YACxE,KAAK,EAAE;gBACL,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,oCAAoC;wBAC1C,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;wBACf,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;qBAChB;oBACD;wBACE,IAAI,EAAE,mCAAmC;wBACzC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;wBACjB,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;wBACf,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;qBACjB;iBACF;aACF;SACF;QACD,eAAe,EAAE;YACf,QAAQ;YACR,KAAK,EAAE;gBACL,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,0BAA0B;wBAChC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;wBACjB,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;wBACnB,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;qBAChB;oBACD;wBACE,IAAI,EAAE,yCAAyC;wBAC/C,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;wBACjB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;wBACpB,MAAM,EAAE,IAAI;qBACb;oBACD;wBACE,IAAI,EAAE,sDAAsD;wBAC5D,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;wBACjB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;wBACpB,MAAM,EAAE,oBAAoB;qBAC7B;iBACF;aACF;SACF;KACF;CACF,CAAC,CAAC"}
@@ -2,6 +2,7 @@
2
2
  import { describe, it } from "vitest";
3
3
  import { discoverTransitions, discoverOps } from "./discover.js";
4
4
  import { expectAfter } from "./expect-after.js";
5
+ import { expectThrows } from "./expect-throws.js";
5
6
  import { resolveArgs } from "./resolve-args.js";
6
7
  import { resolver } from "./resolve.js";
7
8
  // The single conformance test for every ecs transaction, proving
@@ -14,7 +15,7 @@ export function runTransactions(config) {
14
15
  continue; // infrastructure / system-dispatched — no transition to conform to
15
16
  describe(`${name} transaction conforms`, () => {
16
17
  for (const testCase of paired.cases) {
17
- it(testCase.name, () => {
18
+ it(testCase.name, async () => {
18
19
  // Case `before` is a delta over the feature default.
19
20
  const before = { ...(config.initial ?? {}), ...testCase.before };
20
21
  const store = config.createStore();
@@ -23,7 +24,12 @@ export function runTransactions(config) {
23
24
  // Resolve entity-reference args (the fields the case's `args` schema marks)
24
25
  // to the seeded entities; a transition with no such schema passes through.
25
26
  const args = resolveArgs(testCase.args, paired.argsSchema, resolve);
26
- transaction(store, args);
27
+ const call = transaction;
28
+ if (testCase.throws !== undefined) {
29
+ await expectThrows(() => call(store, args), testCase.throws);
30
+ return;
31
+ }
32
+ call(store, args);
27
33
  // `after` is a writes patch, compared up to an id-bijection (the ecs mints
28
34
  // its own ids).
29
35
  expectAfter(config.toState(store), before, testCase.after, store, config.match);
@@ -1 +1 @@
1
- {"version":3,"file":"run-transactions.js","sourceRoot":"","sources":["../../src/conformance/run-transactions.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AA4BxC,iEAAiE;AACjE,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAoC,MAA0C;IAC3G,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,SAAS,CAAC,mEAAmE;QAC1F,QAAQ,CAAC,GAAG,IAAI,uBAAuB,EAAE,GAAG,EAAE;YAC5C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,EAAE,CAAC,QAAQ,CAAC,IAAc,EAAE,GAAG,EAAE;oBAC/B,qDAAqD;oBACrD,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAI,QAAQ,CAAC,MAAiB,EAAW,CAAC;oBACtF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC1D,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACnD,4EAA4E;oBAC5E,2EAA2E;oBAC3E,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBACnE,WAA+C,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC9D,2EAA2E;oBAC3E,gBAAgB;oBAChB,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAgB,EAAE,QAAQ,CAAC,KAAe,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtG,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run-transactions.js","sourceRoot":"","sources":["../../src/conformance/run-transactions.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AA4BxC,iEAAiE;AACjE,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAoC,MAA0C;IAC3G,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,SAAS,CAAC,mEAAmE;QAC1F,QAAQ,CAAC,GAAG,IAAI,uBAAuB,EAAE,GAAG,EAAE;YAC5C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpC,EAAE,CAAC,QAAQ,CAAC,IAAc,EAAE,KAAK,IAAI,EAAE;oBACrC,qDAAqD;oBACrD,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAI,QAAQ,CAAC,MAAiB,EAAW,CAAC;oBACtF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC1D,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACnD,4EAA4E;oBAC5E,2EAA2E;oBAC3E,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBACpE,MAAM,IAAI,GAAG,WAA8C,CAAC;oBAC5D,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAClC,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAuB,CAAC,CAAC;wBAC9E,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAClB,2EAA2E;oBAC3E,gBAAgB;oBAChB,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAgB,EAAE,QAAQ,CAAC,KAAe,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtG,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -9,12 +9,18 @@ export type Effects<Args> = {
9
9
  readonly [K in keyof Args as IsService<Args[K]> extends true ? K : never]?: readonly ServiceCall<Args[K]>[] | ReadonlySet<ServiceCall<Args[K]>>;
10
10
  };
11
11
  type ArgsOf<F extends (...args: never[]) => unknown> = Parameters<F> extends [unknown, infer Args, ...unknown[]] ? Args : void;
12
- export type Case<State, Args> = {
12
+ export type Case<State, Args> = ({
13
13
  readonly name: string;
14
14
  readonly before: Partial<State>;
15
+ } & ({
15
16
  readonly after: Partial<State>;
16
17
  readonly effects?: Effects<Args>;
17
- } & ([Args] extends [void] ? {
18
+ readonly throws?: undefined;
19
+ } | {
20
+ readonly throws: true | string;
21
+ readonly after?: undefined;
22
+ readonly effects?: undefined;
23
+ })) & ([Args] extends [void] ? {
18
24
  readonly args?: undefined;
19
25
  } : {
20
26
  readonly args: Args;
package/dist/index.js CHANGED
@@ -3,7 +3,16 @@
3
3
  // Match — tolerant, matcher-aware value comparison (framework-agnostic).
4
4
  // Conformance — the case types, effect recording, id resolution, and the
5
5
  // spec/transaction/action/computed runner drivers.
6
- // Import only from `*.test.ts`; `sideEffects: false` keeps it out of app builds.
6
+ // Import only from `*.test.ts`. `sideEffects: false` lets a bundler drop an
7
+ // unused *import* of this package, but a co-located `Conformance.cases(fn, …)` /
8
+ // `Conformance.derivations(fn, …)` call in a transform file is still a plain
9
+ // function call — an unannotated call is kept even when its result (the `cases`
10
+ // export) is never read. Every call site MUST be written
11
+ // `/*@__PURE__*/ Conformance.cases(...)` (see `data/state.md`), or the case
12
+ // fixtures — and this package's builder code — ship in the production bundle
13
+ // of any app that actually calls the transition. Verified against a Vite/Rollup
14
+ // production build: without the annotation the case data is retained; with it,
15
+ // gone.
7
16
  export * as Match from "./match/public.js";
8
17
  export * as Conformance from "./conformance/public.js";
9
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,mFAAmF;AACnF,iFAAiF;AACjF,2EAA2E;AAC3E,mEAAmE;AACnE,iFAAiF;AACjF,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,mFAAmF;AACnF,iFAAiF;AACjF,2EAA2E;AAC3E,mEAAmE;AACnE,4EAA4E;AAC5E,iFAAiF;AACjF,6EAA6E;AAC7E,gFAAgF;AAChF,yDAAyD;AACzD,4EAA4E;AAC5E,6EAA6E;AAC7E,gFAAgF;AAChF,+EAA+E;AAC/E,QAAQ;AACR,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/data-testing",
3
- "version": "0.10.2",
3
+ "version": "0.10.3",
4
4
  "description": "Conformance-testing utilities (Match + Conformance runners) for @adobe/data ECS features",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -15,7 +15,7 @@
15
15
  "LICENSE"
16
16
  ],
17
17
  "dependencies": {
18
- "@adobe/data": "0.10.2"
18
+ "@adobe/data": "0.10.3"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "vitest": "^1.6.0"