@overkill-dev/run 0.0.10 → 0.0.11

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.
Files changed (59) hide show
  1. package/engine/engine.d.ts +27 -0
  2. package/engine/engine.d.ts.map +1 -0
  3. package/engine/engine.js +40 -0
  4. package/engine/engine.js.map +1 -0
  5. package/engine/identity.d.ts +1 -1
  6. package/engine/identity.d.ts.map +1 -1
  7. package/engine/identity.js +16 -1
  8. package/engine/identity.js.map +1 -1
  9. package/engine/run-if-main.d.ts +28 -0
  10. package/engine/run-if-main.d.ts.map +1 -0
  11. package/engine/run-if-main.js +46 -0
  12. package/engine/run-if-main.js.map +1 -0
  13. package/engine/test-node.d.ts +1 -0
  14. package/engine/test-node.d.ts.map +1 -1
  15. package/engine/test-node.js +137 -0
  16. package/engine/test-node.js.map +1 -0
  17. package/engine/test-plan.d.ts +11 -1
  18. package/engine/test-plan.d.ts.map +1 -1
  19. package/engine/test-plan.js +174 -0
  20. package/engine/test-plan.js.map +1 -0
  21. package/package.json +6 -2
  22. package/packages/engine/engine.entry-point.js +67 -0
  23. package/packages/engine/engine.entry-point.js.map +1 -0
  24. package/packages/run/run.entry-point.d.ts +4 -2
  25. package/packages/run/run.entry-point.d.ts.map +1 -1
  26. package/packages/run/run.entry-point.js +2 -1
  27. package/packages/run/run.entry-point.js.map +1 -1
  28. package/readme.md +11 -5
  29. package/run/command-line-command.d.ts +1 -3
  30. package/run/command-line-command.d.ts.map +1 -1
  31. package/run/command-line-command.js +4 -1
  32. package/run/command-line-command.js.map +1 -1
  33. package/run/command-line-runner.d.ts +1 -1
  34. package/run/command-line-runner.d.ts.map +1 -1
  35. package/run/command-line-runner.js +4 -3
  36. package/run/command-line-runner.js.map +1 -1
  37. package/run/command-line-unimplemented-commands.js +1 -1
  38. package/run/command-line-unimplemented-commands.js.map +1 -1
  39. package/run/default-run-engine.js +14 -0
  40. package/run/default-run-engine.js.map +1 -0
  41. package/run/run-config.js +1 -1
  42. package/run/run-config.js.map +1 -1
  43. package/run/run-discovery.js +75 -0
  44. package/run/run-discovery.js.map +1 -0
  45. package/run/run-errors.d.ts +16 -0
  46. package/run/run-errors.d.ts.map +1 -0
  47. package/run/run-errors.js +37 -0
  48. package/run/run-errors.js.map +1 -0
  49. package/run/run-orchestrator.d.ts +3 -0
  50. package/run/run-orchestrator.d.ts.map +1 -0
  51. package/run/run-orchestrator.js +43 -0
  52. package/run/run-orchestrator.js.map +1 -0
  53. package/run/run-test-modules.js +53 -0
  54. package/run/run-test-modules.js.map +1 -0
  55. package/run/run.d.ts +8 -13
  56. package/run/run.d.ts.map +1 -1
  57. package/run/run.js +68 -70
  58. package/run/run.js.map +1 -1
  59. package/sbom.cdx.json +4 -4
@@ -0,0 +1,27 @@
1
+ import type { WallClock } from '@enormora/wall-clock';
2
+ import type { Execute } from './execution.ts';
3
+ import { formatCaseId } from './identity.ts';
4
+ import { type RunIfMain } from './run-if-main.ts';
5
+ import { type RootOptions, type Suite, type SuiteOptions, type Table, type TableOptions, type TestCase, type TestCaseOptions, type TestNode, type TestRoot } from './test-node.ts';
6
+ import { type TestPlanFactory, type TestPlanFromTestFilesFactory } from './test-plan.ts';
7
+ export type Engine = {
8
+ readonly createRoot: (options: RootOptions) => TestRoot;
9
+ readonly createSuite: (options: SuiteOptions) => Suite;
10
+ readonly createTable: (options: TableOptions) => Table;
11
+ readonly createTestCase: (options: TestCaseOptions) => TestCase;
12
+ readonly createTestPlan: TestPlanFactory;
13
+ readonly createTestPlanFromTestFiles: TestPlanFromTestFilesFactory;
14
+ readonly execute: Execute;
15
+ readonly formatCaseId: typeof formatCaseId;
16
+ readonly ownsTestNode: (value: unknown) => value is TestNode;
17
+ readonly runIfMain: RunIfMain;
18
+ };
19
+ export type EngineDependencies = {
20
+ readonly execute: Execute;
21
+ readonly nodeVersion: string;
22
+ readonly readExitCode: () => number | string | null | undefined;
23
+ readonly wallClock: WallClock;
24
+ readonly writeExitCode: (exitCode: number) => void;
25
+ };
26
+ export declare function createEngine(dependencies: EngineDependencies): Engine;
27
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../source/engine/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAIH,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,QAAQ,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGH,KAAK,eAAe,EACpB,KAAK,4BAA4B,EACpC,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,QAAQ,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,KAAK,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,KAAK,CAAC;IACvD,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,QAAQ,CAAC;IAChE,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,2BAA2B,EAAE,4BAA4B,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,OAAO,YAAY,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,QAAQ,CAAC;IAC7D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,wBAAgB,YAAY,CAAC,YAAY,EAAE,kBAAkB,GAAG,MAAM,CAmCrE"}
@@ -0,0 +1,40 @@
1
+ import { formatCaseId } from "./identity.js";
2
+ import { createRunIfMain } from "./run-if-main.js";
3
+ import { createTestNodeOwner, createTestNodeFactory, isOwnedTestNode } from "./test-node.js";
4
+ import { createTestPlanFactory, createTestPlanFromTestFilesFactory } from "./test-plan.js";
5
+ export function createEngine(dependencies) {
6
+ const owner = createTestNodeOwner();
7
+ const { execute } = dependencies;
8
+ const constructedNodes = new Set();
9
+ const nodeFactory = createTestNodeFactory({
10
+ owner,
11
+ recordConstructedNode(node) {
12
+ constructedNodes.add(node);
13
+ }
14
+ });
15
+ const createTestPlan = createTestPlanFactory(owner, constructedNodes);
16
+ const createTestPlanFromTestFiles = createTestPlanFromTestFilesFactory(owner, nodeFactory.createRoot);
17
+ return {
18
+ createRoot: nodeFactory.createRoot,
19
+ createSuite: nodeFactory.createSuite,
20
+ createTable: nodeFactory.createTable,
21
+ createTestCase: nodeFactory.createTestCase,
22
+ createTestPlan,
23
+ createTestPlanFromTestFiles,
24
+ execute,
25
+ formatCaseId,
26
+ ownsTestNode(value) {
27
+ return isOwnedTestNode(value, owner);
28
+ },
29
+ runIfMain: createRunIfMain({
30
+ createRoot: nodeFactory.createRoot,
31
+ createTestPlan,
32
+ execute,
33
+ nodeVersion: dependencies.nodeVersion,
34
+ readExitCode: dependencies.readExitCode,
35
+ wallClock: dependencies.wallClock,
36
+ writeExitCode: dependencies.writeExitCode
37
+ })
38
+ };
39
+ }
40
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../source/engine/engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAkB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACH,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EAUlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,qBAAqB,EACrB,kCAAkC,EAGrC,MAAM,gBAAgB,CAAC;AAuBxB,MAAM,UAAU,YAAY,CAAC,YAAgC;IACzD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;IACjC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAY,CAAC;IAC7C,MAAM,WAAW,GAAG,qBAAqB,CAAC;QACtC,KAAK;QACL,qBAAqB,CAAC,IAAI;YACtB,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;KACJ,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACtE,MAAM,2BAA2B,GAAG,kCAAkC,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAEtG,OAAO;QACH,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,cAAc,EAAE,WAAW,CAAC,cAAc;QAC1C,cAAc;QACd,2BAA2B;QAC3B,OAAO;QACP,YAAY;QACZ,YAAY,CAAC,KAAK;YACd,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,SAAS,EAAE,eAAe,CAAC;YACvB,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,cAAc;YACd,OAAO;YACP,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,aAAa,EAAE,YAAY,CAAC,aAAa;SAC5C,CAAC;KACL,CAAC;AACN,CAAC"}
@@ -6,7 +6,7 @@ export type TestId = {
6
6
  export type CaseId = TestId & {
7
7
  readonly params: string | null;
8
8
  };
9
- export declare function createCaseId(suite: readonly string[], name: string, params: string | null): CaseId;
9
+ export declare function createCaseId(file: string | null, suite: readonly string[], name: string, params: string | null): CaseId;
10
10
  export declare function caseIdentityKey(caseId: CaseId): string;
11
11
  export declare function formatCaseId(caseId: CaseId): string;
12
12
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOlG;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASnD"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,wBAAgB,YAAY,CACxB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAOR;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASnD"}
@@ -1,5 +1,20 @@
1
+ export function createCaseId(file, suite, name, params) {
2
+ return {
3
+ file,
4
+ name,
5
+ params,
6
+ suite
7
+ };
8
+ }
1
9
  export function caseIdentityKey(caseId) {
2
10
  return JSON.stringify([caseId.file, caseId.suite, caseId.name, caseId.params]);
3
11
  }
4
-
12
+ export function formatCaseId(caseId) {
13
+ const namePath = [...caseId.suite, caseId.name].join(' > ');
14
+ const originPath = caseId.file === null ? namePath : `${caseId.file}: ${namePath}`;
15
+ if (caseId.params === null) {
16
+ return originPath;
17
+ }
18
+ return `${originPath} [${caseId.params}]`;
19
+ }
5
20
  //# sourceMappingURL=identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,OAAuC,QASxB,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAE,CAAC,CAAC;AACrF,CAAC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../source/engine/identity.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,YAAY,CACxB,IAAmB,EACnB,KAAwB,EACxB,IAAY,EACZ,MAAqB;IAErB,OAAO;QACH,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,KAAK;KACR,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACvC,MAAM,QAAQ,GAAG,CAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;IAEnF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,OAAO,GAAG,UAAU,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { WallClock } from '@enormora/wall-clock';
2
+ import type { Execute } from './execution.ts';
3
+ import { type OutputRenderer } from './reporter-output.ts';
4
+ import type { Reporter, RunFacts } from './reporter.ts';
5
+ import type { Metadata, RootOptions, TestNode, TestRoot } from './test-node.ts';
6
+ import type { TestPlanFactory } from './test-plan.ts';
7
+ export type RunIfMainOptions = {
8
+ readonly outputRenderer?: OutputRenderer;
9
+ readonly reporters?: readonly Reporter[];
10
+ readonly root?: RunIfMainRootOptions;
11
+ readonly runFacts?: RunFacts;
12
+ };
13
+ export type RunIfMainRootOptions = {
14
+ readonly metadata: Metadata;
15
+ readonly name: string;
16
+ };
17
+ export type RunIfMain = (meta: Readonly<ImportMeta>, testNode: TestNode, options?: RunIfMainOptions) => Promise<void>;
18
+ export type RunIfMainDependencies = {
19
+ readonly createRoot: (options: RootOptions) => TestRoot;
20
+ readonly createTestPlan: TestPlanFactory;
21
+ readonly execute: Execute;
22
+ readonly nodeVersion: string;
23
+ readonly readExitCode: () => number | string | null | undefined;
24
+ readonly wallClock: WallClock;
25
+ readonly writeExitCode: (exitCode: number) => void;
26
+ };
27
+ export declare function createRunIfMain(dependencies: RunIfMainDependencies): RunIfMain;
28
+ //# sourceMappingURL=run-if-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-if-main.d.ts","sourceRoot":"","sources":["../../../../source/engine/run-if-main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CACpB,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC1B,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,gBAAgB,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,QAAQ,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD,CAAC;AAkDF,wBAAgB,eAAe,CAAC,YAAY,EAAE,qBAAqB,GAAG,SAAS,CAe9E"}
@@ -0,0 +1,46 @@
1
+ import { createPlainOutputRenderer } from "./reporter-output.js";
2
+ const failureExitCodes = new Set([undefined, null, 0, '0']);
3
+ function shouldSetFailureExitCode(exitCode) {
4
+ return failureExitCodes.has(exitCode);
5
+ }
6
+ function hasFailure(result) {
7
+ return result.summary.failed > 0 || result.runnerErrors.length > 0;
8
+ }
9
+ function rootMetadata(options) {
10
+ return options?.root?.metadata ?? {};
11
+ }
12
+ function rootName(meta, options) {
13
+ return options?.root?.name ?? meta.url;
14
+ }
15
+ function createRootOptions(meta, testNode, options) {
16
+ return {
17
+ children: [testNode],
18
+ metadata: rootMetadata(options),
19
+ name: rootName(meta, options)
20
+ };
21
+ }
22
+ function createExecuteOptions(options, dependencies) {
23
+ const startedAt = new Date(dependencies.wallClock.currentTimestampInMilliseconds);
24
+ return {
25
+ execution: { mode: 'serial-in-process' },
26
+ outputRenderer: options?.outputRenderer ?? createPlainOutputRenderer(),
27
+ reporters: options?.reporters ?? [],
28
+ runFacts: {
29
+ ...options?.runFacts,
30
+ nodeVersion: dependencies.nodeVersion
31
+ },
32
+ startedAt: startedAt.toISOString()
33
+ };
34
+ }
35
+ export function createRunIfMain(dependencies) {
36
+ return async function runIfMain(meta, testNode, options) {
37
+ if (!meta.main) {
38
+ return;
39
+ }
40
+ const result = await dependencies.execute(dependencies.createTestPlan(dependencies.createRoot(createRootOptions(meta, testNode, options))), createExecuteOptions(options, dependencies));
41
+ if (hasFailure(result) && shouldSetFailureExitCode(dependencies.readExitCode())) {
42
+ dependencies.writeExitCode(1);
43
+ }
44
+ };
45
+ }
46
+ //# sourceMappingURL=run-if-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-if-main.js","sourceRoot":"","sources":["../../../../source/engine/run-if-main.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAuB,MAAM,sBAAsB,CAAC;AAkCtF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAqC,CAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAE,CAAC,CAAC;AAElG,SAAS,wBAAwB,CAAC,QAA4C;IAC1E,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,MAAiB;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,OAAqC;IACvD,OAAO,OAAO,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,IAA0B,EAAE,OAAqC;IAC/E,OAAO,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CACtB,IAA0B,EAC1B,QAAkB,EAClB,OAAqC;IAErC,OAAO;QACH,QAAQ,EAAE,CAAE,QAAQ,CAAE;QACtB,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;QAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;KAChC,CAAC;AACN,CAAC;AAED,SAAS,oBAAoB,CACzB,OAAqC,EACrC,YAAmC;IAEnC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAElF,OAAO;QACH,SAAS,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;QACxC,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,yBAAyB,EAAE;QACtE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;QACnC,QAAQ,EAAE;YACN,GAAG,OAAO,EAAE,QAAQ;YACpB,WAAW,EAAE,YAAY,CAAC,WAAW;SACxC;QACD,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;KACrC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,YAAmC;IAC/D,OAAO,KAAK,UAAU,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO;QACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CACrC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAChG,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,CAC9C,CAAC;QAEF,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,wBAAwB,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;YAC9E,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
@@ -97,6 +97,7 @@ export type TableOptions = {
97
97
  export declare function createTestNodeOwner(): TestNodeOwner;
98
98
  export declare function isTestNode(value: unknown): value is TestNode;
99
99
  export declare function isTestRoot(value: unknown): value is TestRoot;
100
+ export declare function isOwnedTestNode(value: unknown, owner: TestNodeOwner): value is TestNode;
100
101
  export declare function ensureOwnedTestRoot(value: unknown, owner: TestNodeOwner, plainObjectMessage: string, foreignRootMessage: string): asserts value is TestRoot;
101
102
  export declare function createTestNodeFactory(factoryOptions: TestNodeFactoryOptions): TestNodeFactory;
102
103
  export declare function mergeMetadata(parent: Metadata, child: Metadata): Metadata;
@@ -1 +1 @@
1
- {"version":3,"file":"test-node.d.ts","sourceRoot":"","sources":["../../../../source/engine/test-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-node.d.ts","sourceRoot":"","sources":["../../../../source/engine/test-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ const testNodeBrand = Symbol('OverkillTestNode');
2
+ const testRootBrand = Symbol('OverkillTestRoot');
3
+ const testNodeOwnerBrand = Symbol('OverkillTestNodeOwner');
4
+ const testNodeOwnerIdentity = Symbol('OverkillTestNodeOwnerIdentity');
5
+ export function createTestNodeOwner() {
6
+ return { [testNodeOwnerIdentity]: true };
7
+ }
8
+ function ensureName(name) {
9
+ if (name.trim().length === 0) {
10
+ throw new TypeError('Test node name must not be empty.');
11
+ }
12
+ }
13
+ function ensureMetadata(metadata) {
14
+ if (typeof metadata !== 'object' || metadata === null || Array.isArray(metadata)) {
15
+ throw new TypeError('Test node metadata must be an object.');
16
+ }
17
+ }
18
+ function ensureTestBody(body) {
19
+ if (typeof body !== 'function') {
20
+ throw new TypeError('Test case body must be a function.');
21
+ }
22
+ }
23
+ export function isTestNode(value) {
24
+ return typeof value === 'object' && value !== null && Object.hasOwn(value, testNodeBrand);
25
+ }
26
+ export function isTestRoot(value) {
27
+ return typeof value === 'object' && value !== null && Object.hasOwn(value, testRootBrand);
28
+ }
29
+ export function isOwnedTestNode(value, owner) {
30
+ return isTestNode(value) && value[testNodeOwnerBrand] === owner;
31
+ }
32
+ function hasTestNodeOwner(value, owner) {
33
+ return value[testNodeOwnerBrand] === owner;
34
+ }
35
+ function hasTestRootOwner(value, owner) {
36
+ return value[testNodeOwnerBrand] === owner;
37
+ }
38
+ function ensureOwnedTestNode(value, owner, plainObjectMessage, foreignNodeMessage) {
39
+ if (!isTestNode(value)) {
40
+ throw new TypeError(plainObjectMessage);
41
+ }
42
+ if (!hasTestNodeOwner(value, owner)) {
43
+ throw new TypeError(foreignNodeMessage);
44
+ }
45
+ }
46
+ export function ensureOwnedTestRoot(value, owner, plainObjectMessage, foreignRootMessage) {
47
+ if (!isTestRoot(value)) {
48
+ throw new TypeError(plainObjectMessage);
49
+ }
50
+ if (!hasTestRootOwner(value, owner)) {
51
+ throw new TypeError(foreignRootMessage);
52
+ }
53
+ }
54
+ function toTestNode(value, owner, plainObjectMessage, foreignNodeMessage) {
55
+ ensureOwnedTestNode(value, owner, plainObjectMessage, foreignNodeMessage);
56
+ return value;
57
+ }
58
+ export function createTestNodeFactory(factoryOptions) {
59
+ const { owner, recordConstructedNode } = factoryOptions;
60
+ function createTestCase(options) {
61
+ ensureName(options.name);
62
+ ensureMetadata(options.metadata);
63
+ ensureTestBody(options.body);
64
+ const testCase = {
65
+ [testNodeBrand]: true,
66
+ [testNodeOwnerBrand]: owner,
67
+ body: options.body,
68
+ kind: 'test',
69
+ metadata: options.metadata,
70
+ name: options.name
71
+ };
72
+ recordConstructedNode(testCase);
73
+ return testCase;
74
+ }
75
+ function createRoot(options) {
76
+ ensureName(options.name);
77
+ ensureMetadata(options.metadata);
78
+ const children = options.children.map(function validateChild(child) {
79
+ return toTestNode(child, owner, 'Root children must be engine-created TestNode values.', 'Root children must be created by the same engine instance.');
80
+ });
81
+ return {
82
+ [testRootBrand]: true,
83
+ [testNodeOwnerBrand]: owner,
84
+ children,
85
+ kind: 'root',
86
+ metadata: options.metadata,
87
+ name: options.name
88
+ };
89
+ }
90
+ function createSuite(options) {
91
+ ensureName(options.name);
92
+ ensureMetadata(options.metadata);
93
+ const children = options.children.map(function validateChild(child) {
94
+ return toTestNode(child, owner, 'Suite children must be engine-created TestNode values.', 'Suite children must be created by the same engine instance.');
95
+ });
96
+ const suite = {
97
+ [testNodeBrand]: true,
98
+ [testNodeOwnerBrand]: owner,
99
+ children,
100
+ kind: 'suite',
101
+ metadata: options.metadata,
102
+ name: options.name
103
+ };
104
+ recordConstructedNode(suite);
105
+ return suite;
106
+ }
107
+ function createTable(options) {
108
+ ensureName(options.name);
109
+ ensureMetadata(options.metadata);
110
+ for (const tableCase of options.cases) {
111
+ ensureName(tableCase.name);
112
+ ensureMetadata(tableCase.metadata);
113
+ ensureMetadata(tableCase.parameters);
114
+ ensureTestBody(tableCase.body);
115
+ }
116
+ const table = {
117
+ [testNodeBrand]: true,
118
+ [testNodeOwnerBrand]: owner,
119
+ cases: options.cases,
120
+ kind: 'table',
121
+ metadata: options.metadata,
122
+ name: options.name
123
+ };
124
+ recordConstructedNode(table);
125
+ return table;
126
+ }
127
+ return {
128
+ createRoot,
129
+ createSuite,
130
+ createTable,
131
+ createTestCase
132
+ };
133
+ }
134
+ export function mergeMetadata(parent, child) {
135
+ return { ...parent, ...child };
136
+ }
137
+ //# sourceMappingURL=test-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-node.js","sourceRoot":"","sources":["../../../../source/engine/test-node.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
2
2
  import { type CaseId } from './identity.ts';
3
3
  import type { OrphanedNode } from './run-result.ts';
4
- import { type Metadata, type TestBody, type TestNode, type TestNodeOwner, type TestRoot } from './test-node.ts';
4
+ import { type Metadata, type RootOptions, type TestBody, type TestNode, type TestNodeOwner, type TestRoot } from './test-node.ts';
5
5
  export type TestPlanCaseBody = TestBody;
6
6
  export type TestPlanCase = {
7
7
  readonly id: CaseId;
@@ -21,6 +21,16 @@ type TestPlanRoot = {
21
21
  readonly name: string;
22
22
  };
23
23
  export type TestPlanFactory = (root: TestRoot) => TestPlan;
24
+ export type TestPlanFile = {
25
+ readonly file: string;
26
+ readonly testNode: TestNode;
27
+ };
28
+ export type TestPlanFromTestFilesOptions = {
29
+ readonly files: NonEmptyReadonlyArray<TestPlanFile>;
30
+ readonly root: TestPlanRoot;
31
+ };
32
+ export type TestPlanFromTestFilesFactory = (options: TestPlanFromTestFilesOptions) => TestPlan;
24
33
  export declare function createTestPlanFactory(owner: TestNodeOwner, constructedNodes: ReadonlySet<TestNode>): TestPlanFactory;
34
+ export declare function createTestPlanFromTestFilesFactory(owner: TestNodeOwner, createRoot: (options: RootOptions) => TestRoot): TestPlanFromTestFilesFactory;
25
35
  export {};
26
36
  //# sourceMappingURL=test-plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-plan.d.ts","sourceRoot":"","sources":["../../../../source/engine/test-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAA+C,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAGH,KAAK,QAAQ,EAEb,KAAK,QAAQ,EAEb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EAChB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAsJ3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,eAAe,CAyBpH"}
1
+ {"version":3,"file":"test-plan.d.ts","sourceRoot":"","sources":["../../../../source/engine/test-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAA+C,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAIH,KAAK,QAAQ,EACb,KAAK,WAAW,EAEhB,KAAK,QAAQ,EAEb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EAChB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,4BAA4B,KAAK,QAAQ,CAAC;AAqK/F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,eAAe,CAyBpH;AAgBD,wBAAgB,kCAAkC,CAC9C,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,QAAQ,GAC/C,4BAA4B,CA4B9B"}
@@ -0,0 +1,174 @@
1
+ import { caseIdentityKey, createCaseId, formatCaseId } from "./identity.js";
2
+ import { ensureOwnedTestRoot, isOwnedTestNode, mergeMetadata } from "./test-node.js";
3
+ function collectTestCase(testCase, file, suitePath, metadata) {
4
+ const resolvedMetadata = mergeMetadata(metadata, testCase.metadata);
5
+ return {
6
+ cases: [
7
+ {
8
+ body: testCase.body,
9
+ id: createCaseId(file, suitePath, testCase.name, null),
10
+ metadata: resolvedMetadata,
11
+ suitePath
12
+ }
13
+ ],
14
+ reachedNodes: [testCase]
15
+ };
16
+ }
17
+ function collectTable(table, file, suitePath, metadata) {
18
+ if (table.cases.length === 0) {
19
+ throw new TypeError(`Table must contain at least one case: ${[...suitePath, table.name].join(' > ')}.`);
20
+ }
21
+ const tablePath = [...suitePath, table.name];
22
+ const tableMetadata = mergeMetadata(metadata, table.metadata);
23
+ return {
24
+ cases: table.cases.map(function collectTableCase(tableCase) {
25
+ const resolvedMetadata = mergeMetadata(tableMetadata, tableCase.metadata);
26
+ return {
27
+ body: tableCase.body,
28
+ id: createCaseId(file, tablePath, tableCase.name, null),
29
+ metadata: resolvedMetadata,
30
+ suitePath: tablePath
31
+ };
32
+ }),
33
+ reachedNodes: [table]
34
+ };
35
+ }
36
+ function mergeCollectedTestCases(collections) {
37
+ return {
38
+ cases: collections.flatMap(function collectCases(collection) {
39
+ return collection.cases;
40
+ }),
41
+ reachedNodes: collections.flatMap(function collectReachedNodes(collection) {
42
+ return collection.reachedNodes;
43
+ })
44
+ };
45
+ }
46
+ function collectNode(node, file, suitePath, metadata) {
47
+ if (node.kind === 'test') {
48
+ return collectTestCase(node, file, suitePath, metadata);
49
+ }
50
+ if (node.kind === 'table') {
51
+ return collectTable(node, file, suitePath, metadata);
52
+ }
53
+ if (node.children.length === 0) {
54
+ throw new TypeError(`Suite must contain at least one child: ${[...suitePath, node.name].join(' > ')}.`);
55
+ }
56
+ const childPath = [...suitePath, node.name];
57
+ const childMetadata = mergeMetadata(metadata, node.metadata);
58
+ const children = mergeCollectedTestCases(node.children.map(function collectChild(child) {
59
+ return collectNode(child, file, childPath, childMetadata);
60
+ }));
61
+ return {
62
+ cases: children.cases,
63
+ reachedNodes: [node, ...children.reachedNodes]
64
+ };
65
+ }
66
+ function collectRoot(root) {
67
+ if (root.children.length === 0) {
68
+ throw new TypeError(`Root must contain at least one child: ${root.name}.`);
69
+ }
70
+ return mergeCollectedTestCases(root.children.map(function collectChild(child) {
71
+ return collectNode(child, null, [], root.metadata);
72
+ }));
73
+ }
74
+ function collectTestFiles(root, files) {
75
+ return mergeCollectedTestCases(root.children.map(function collectChild(child, index) {
76
+ const file = files[index];
77
+ if (file === undefined) {
78
+ throw new TypeError('Every test file must map to one root child.');
79
+ }
80
+ return collectNode(child, file.file, [], root.metadata);
81
+ }));
82
+ }
83
+ function toReachedNodeSet(reachedNodes) {
84
+ return new Set(reachedNodes);
85
+ }
86
+ function createOrphanedNode(node) {
87
+ return {
88
+ file: null,
89
+ kind: node.kind,
90
+ name: node.name
91
+ };
92
+ }
93
+ function collectOrphans(constructedNodes, reachedNodes) {
94
+ const reachedNodeSet = toReachedNodeSet(reachedNodes);
95
+ return Array
96
+ .from(constructedNodes)
97
+ .filter(function isOrphan(node) {
98
+ return !reachedNodeSet.has(node);
99
+ })
100
+ .map(createOrphanedNode);
101
+ }
102
+ function assertUniqueCaseIds(cases) {
103
+ const seenCaseIds = new Set();
104
+ for (const testCase of cases) {
105
+ const key = caseIdentityKey(testCase.id);
106
+ if (seenCaseIds.has(key)) {
107
+ throw new TypeError(`Duplicate test case identity: ${formatCaseId(testCase.id)}.`);
108
+ }
109
+ seenCaseIds.add(key);
110
+ }
111
+ }
112
+ function assertNonEmptyCases(cases) {
113
+ if (cases.length === 0) {
114
+ throw new TypeError('Test plan must contain at least one executable test case.');
115
+ }
116
+ }
117
+ export function createTestPlanFactory(owner, constructedNodes) {
118
+ return function createTestPlan(root) {
119
+ ensureOwnedTestRoot(root, owner, 'Test plan root must be an engine-created TestRoot value.', 'Test plan root must be created by the same engine instance.');
120
+ const collection = collectRoot(root);
121
+ const { cases: discoveredCases, reachedNodes } = collection;
122
+ assertNonEmptyCases(discoveredCases);
123
+ assertUniqueCaseIds(discoveredCases);
124
+ return {
125
+ cases: discoveredCases,
126
+ defined: constructedNodes.size,
127
+ discoveredCases,
128
+ orphans: collectOrphans(constructedNodes, reachedNodes),
129
+ root: {
130
+ metadata: root.metadata,
131
+ name: root.name
132
+ }
133
+ };
134
+ };
135
+ }
136
+ function ensureTestPlanFile(file, owner) {
137
+ if (file.file.trim().length === 0) {
138
+ throw new TypeError('Test file identity must not be empty.');
139
+ }
140
+ if (!isOwnedTestNode(file.testNode, owner)) {
141
+ throw new TypeError('Test file must provide a TestNode created by the selected engine.');
142
+ }
143
+ }
144
+ function countReachedNodes(reachedNodes) {
145
+ return reachedNodes.length;
146
+ }
147
+ export function createTestPlanFromTestFilesFactory(owner, createRoot) {
148
+ return function createTestPlanFromTestFiles(options) {
149
+ for (const file of options.files) {
150
+ ensureTestPlanFile(file, owner);
151
+ }
152
+ const root = createRoot({
153
+ children: options.files.map(function toTestNode(file) {
154
+ return file.testNode;
155
+ }),
156
+ metadata: options.root.metadata,
157
+ name: options.root.name
158
+ });
159
+ const { cases: discoveredCases, reachedNodes } = collectTestFiles(root, options.files);
160
+ assertNonEmptyCases(discoveredCases);
161
+ assertUniqueCaseIds(discoveredCases);
162
+ return {
163
+ cases: discoveredCases,
164
+ defined: countReachedNodes(reachedNodes),
165
+ discoveredCases,
166
+ orphans: [],
167
+ root: {
168
+ metadata: root.metadata,
169
+ name: root.name
170
+ }
171
+ };
172
+ };
173
+ }
174
+ //# sourceMappingURL=test-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-plan.js","sourceRoot":"","sources":["../../../../source/engine/test-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAe,MAAM,eAAe,CAAC;AAEzF,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,aAAa,EAShB,MAAM,gBAAgB,CAAC;AA2CxB,SAAS,eAAe,CACpB,QAAkB,EAClB,IAAmB,EACnB,SAA4B,EAC5B,QAAkB;IAElB,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEpE,OAAO;QACH,KAAK,EAAE;YACH;gBACI,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;gBACtD,QAAQ,EAAE,gBAAgB;gBAC1B,SAAS;aACZ;SACJ;QACD,YAAY,EAAE,CAAE,QAAQ,CAAE;KAC7B,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CACjB,KAAY,EACZ,IAAmB,EACnB,SAA4B,EAC5B,QAAkB;IAElB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAE,GAAG,SAAS,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,SAAS,GAAG,CAAE,GAAG,SAAS,EAAE,KAAK,CAAC,IAAI,CAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE9D,OAAO;QACH,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,gBAAgB,CAAC,SAAS;YACtD,MAAM,gBAAgB,GAAG,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YAE1E,OAAO;gBACH,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;gBACvD,QAAQ,EAAE,gBAAgB;gBAC1B,SAAS,EAAE,SAAS;aACvB,CAAC;QACN,CAAC,CAAC;QACF,YAAY,EAAE,CAAE,KAAK,CAAE;KAC1B,CAAC;AACN,CAAC;AAED,SAAS,uBAAuB,CAAC,WAA0C;IACvE,OAAO;QACH,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,YAAY,CAAC,UAAU;YACvD,OAAO,UAAU,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC;QACF,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,mBAAmB,CAAC,UAAU;YACrE,OAAO,UAAU,CAAC,YAAY,CAAC;QACnC,CAAC,CAAC;KACL,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAChB,IAAc,EACd,IAAmB,EACnB,SAA4B,EAC5B,QAAkB;IAElB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAE,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,SAAS,GAAG,CAAE,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,CAAE,CAAC;IAC9C,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK;QAClF,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC,CAAC;IAEJ,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,YAAY,EAAE,CAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAE;KACnD,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAC,IAAc;IAC/B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,yCAAyC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK;QACxE,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc,EAAE,KAA0C;IAChF,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK,EAAE,KAAK;QAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAiC;IACvD,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACtC,OAAO;QACH,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;KAClB,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CACnB,gBAAuC,EACvC,YAAiC;IAEjC,MAAM,cAAc,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEtD,OAAO,KAAK;SACP,IAAI,CAAC,gBAAgB,CAAC;SACtB,MAAM,CAAC,SAAS,QAAQ,CAAC,IAAI;QAC1B,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;SACD,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA8B;IACvD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEzC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,SAAS,CAAC,iCAAiC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACvF,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA8B;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,2DAA2D,CAAC,CAAC;IACrF,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAoB,EAAE,gBAAuC;IAC/F,OAAO,SAAS,cAAc,CAAC,IAAc;QACzC,mBAAmB,CACf,IAAI,EACJ,KAAK,EACL,0DAA0D,EAC1D,6DAA6D,CAChE,CAAC;QAEF,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC;QAC5D,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACrC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAErC,OAAO;YACH,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,gBAAgB,CAAC,IAAI;YAC9B,eAAe;YACf,OAAO,EAAE,cAAc,CAAC,gBAAgB,EAAE,YAAY,CAAC;YACvD,IAAI,EAAE;gBACF,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB;SACJ,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAkB,EAAE,KAAoB;IAChE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;IAC7F,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,YAAiC;IACxD,OAAO,YAAY,CAAC,MAAM,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,kCAAkC,CAC9C,KAAoB,EACpB,UAA8C;IAE9C,OAAO,SAAS,2BAA2B,CAAC,OAAO;QAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC/B,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC;YACpB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,IAAI;gBAChD,OAAO,IAAI,CAAC,QAAQ,CAAC;YACzB,CAAC,CAAC;YACF,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;YAC/B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;SAC1B,CAAC,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACvF,mBAAmB,CAAC,eAAe,CAAC,CAAC;QACrC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAErC,OAAO;YACH,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,iBAAiB,CAAC,YAAY,CAAC;YACxC,eAAe;YACf,OAAO,EAAE,EAAE;YACX,IAAI,EAAE;gBACF,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;aAClB;SACJ,CAAC;IACN,CAAC,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -42,12 +42,16 @@
42
42
  "sideEffects": [
43
43
  "./assertion-protocol/assertion-reference.js",
44
44
  "./engine/execution.js",
45
+ "./engine/run-if-main.js",
46
+ "./packages/engine/engine.entry-point.js",
45
47
  "./reporters/line-reporter.js",
46
48
  "./run/command-line-command.js",
47
49
  "./run/command-line-runner.js",
50
+ "./run/default-run-engine.js",
48
51
  "./run/run-config.js",
49
- "./run/run.js"
52
+ "./run/run-orchestrator.js",
53
+ "./run/run-test-modules.js"
50
54
  ],
51
55
  "type": "module",
52
- "version": "0.0.10"
56
+ "version": "0.0.11"
53
57
  }