@overkill-dev/engine 0.0.1 → 0.0.2
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.
- package/LICENSE +21 -0
- package/assertion-protocol/assertion-evaluation.d.ts +13 -0
- package/assertion-protocol/assertion-evaluation.d.ts.map +1 -0
- package/assertion-protocol/assertion-evaluation.js +6 -0
- package/assertion-protocol/assertion-evaluation.js.map +1 -0
- package/assertion-protocol/assertion-node-shape.d.ts +71 -0
- package/assertion-protocol/assertion-node-shape.d.ts.map +1 -0
- package/assertion-protocol/assertion-node.d.ts +97 -0
- package/assertion-protocol/assertion-node.d.ts.map +1 -0
- package/assertion-protocol/assertion-node.js +33 -0
- package/assertion-protocol/assertion-node.js.map +1 -0
- package/assertion-protocol/assertion-reference.d.ts +73 -0
- package/assertion-protocol/assertion-reference.d.ts.map +1 -0
- package/assertion-protocol/assertion-reference.js +49 -0
- package/assertion-protocol/assertion-reference.js.map +1 -0
- package/assertion-protocol/assertions/boolean.d.ts +11 -0
- package/assertion-protocol/assertions/boolean.d.ts.map +1 -0
- package/assertion-protocol/assertions/boolean.js +12 -0
- package/assertion-protocol/assertions/boolean.js.map +1 -0
- package/assertion-protocol/assertions/collection.d.ts +22 -0
- package/assertion-protocol/assertions/collection.d.ts.map +1 -0
- package/assertion-protocol/assertions/collection.js +21 -0
- package/assertion-protocol/assertions/collection.js.map +1 -0
- package/assertion-protocol/assertions/dispatch.d.ts +88 -0
- package/assertion-protocol/assertions/dispatch.d.ts.map +1 -0
- package/assertion-protocol/assertions/dispatch.js +47 -0
- package/assertion-protocol/assertions/dispatch.js.map +1 -0
- package/assertion-protocol/assertions/equality.d.ts +17 -0
- package/assertion-protocol/assertions/equality.d.ts.map +1 -0
- package/assertion-protocol/assertions/equality.js +24 -0
- package/assertion-protocol/assertions/equality.js.map +1 -0
- package/assertion-protocol/assertions/fail.d.ts +13 -0
- package/assertion-protocol/assertions/fail.d.ts.map +1 -0
- package/assertion-protocol/assertions/fail.js +8 -0
- package/assertion-protocol/assertions/fail.js.map +1 -0
- package/assertion-protocol/assertions/numeric.d.ts +29 -0
- package/assertion-protocol/assertions/numeric.d.ts.map +1 -0
- package/assertion-protocol/assertions/numeric.js +43 -0
- package/assertion-protocol/assertions/numeric.js.map +1 -0
- package/assertion-protocol/assertions/partial.d.ts +14 -0
- package/assertion-protocol/assertions/partial.d.ts.map +1 -0
- package/assertion-protocol/assertions/partial.js +17 -0
- package/assertion-protocol/assertions/partial.js.map +1 -0
- package/assertion-protocol/assertions/presence.d.ts +17 -0
- package/assertion-protocol/assertions/presence.d.ts.map +1 -0
- package/assertion-protocol/assertions/presence.js +20 -0
- package/assertion-protocol/assertions/presence.js.map +1 -0
- package/assertion-protocol/assertions/string.d.ts +28 -0
- package/assertion-protocol/assertions/string.d.ts.map +1 -0
- package/assertion-protocol/assertions/string.js +33 -0
- package/assertion-protocol/assertions/string.js.map +1 -0
- package/assertion-protocol/assertions/type-shape.d.ts +42 -0
- package/assertion-protocol/assertions/type-shape.d.ts.map +1 -0
- package/assertion-protocol/assertions/type-shape.js +43 -0
- package/assertion-protocol/assertions/type-shape.js.map +1 -0
- package/assertion-protocol/collection-count.d.ts +6 -0
- package/assertion-protocol/collection-count.d.ts.map +1 -0
- package/assertion-protocol/collection-count.js +42 -0
- package/assertion-protocol/collection-count.js.map +1 -0
- package/assertion-protocol/evaluation.d.ts +32 -0
- package/assertion-protocol/evaluation.d.ts.map +1 -0
- package/assertion-protocol/evaluation.js +170 -0
- package/assertion-protocol/evaluation.js.map +1 -0
- package/assertion-protocol/partial-matching.d.ts +4 -0
- package/assertion-protocol/partial-matching.d.ts.map +1 -0
- package/assertion-protocol/partial-matching.js +13 -0
- package/assertion-protocol/partial-matching.js.map +1 -0
- package/assertion-protocol/source-location.d.ts +6 -0
- package/assertion-protocol/source-location.d.ts.map +1 -0
- package/assertion-protocol/source-location.js +76 -0
- package/assertion-protocol/source-location.js.map +1 -0
- package/assertion-protocol/thrown-error-record.d.ts +8 -0
- package/assertion-protocol/thrown-error-record.d.ts.map +1 -0
- package/assertion-protocol/thrown-error-record.js +17 -0
- package/assertion-protocol/thrown-error-record.js.map +1 -0
- package/assertion-protocol/thrown-matcher.d.ts +51 -0
- package/assertion-protocol/thrown-matcher.d.ts.map +1 -0
- package/assertion-protocol/thrown-matcher.js +201 -0
- package/assertion-protocol/thrown-matcher.js.map +1 -0
- package/compare/comparison-result.d.ts +25 -0
- package/compare/comparison-result.d.ts.map +1 -0
- package/compare/comparison-result.js +47 -0
- package/compare/comparison-result.js.map +1 -0
- package/compare/comparison-state.d.ts +7 -0
- package/compare/comparison-state.d.ts.map +1 -0
- package/compare/comparison-state.js +20 -0
- package/compare/comparison-state.js.map +1 -0
- package/compare/comparison.d.ts +12 -0
- package/compare/comparison.d.ts.map +1 -0
- package/compare/comparison.js +78 -0
- package/compare/comparison.js.map +1 -0
- package/compare/diff-path.d.ts +8 -0
- package/compare/diff-path.d.ts.map +1 -0
- package/compare/diff-path.js +37 -0
- package/compare/diff-path.js.map +1 -0
- package/compare/raw-comparison.d.ts +24 -0
- package/compare/raw-comparison.d.ts.map +1 -0
- package/compare/raw-comparison.js +285 -0
- package/compare/raw-comparison.js.map +1 -0
- package/compare/serialized-value-classification.d.ts +12 -0
- package/compare/serialized-value-classification.d.ts.map +1 -0
- package/compare/serialized-value-classification.js +99 -0
- package/compare/serialized-value-classification.js.map +1 -0
- package/compare/serialized-value-shape.d.ts +143 -0
- package/compare/serialized-value-shape.d.ts.map +1 -0
- package/compare/serialized-value-shape.js +12 -0
- package/compare/serialized-value-shape.js.map +1 -0
- package/compare/serialized-value-state.d.ts +12 -0
- package/compare/serialized-value-state.d.ts.map +1 -0
- package/compare/serialized-value-state.js +55 -0
- package/compare/serialized-value-state.js.map +1 -0
- package/compare/serialized-value.d.ts +11 -0
- package/compare/serialized-value.d.ts.map +1 -0
- package/compare/serialized-value.js +389 -0
- package/compare/serialized-value.js.map +1 -0
- package/compare/structured-diff.d.ts +4 -0
- package/compare/structured-diff.d.ts.map +1 -0
- package/compare/structured-diff.js +382 -0
- package/compare/structured-diff.js.map +1 -0
- package/compare/value-classification.d.ts +26 -0
- package/compare/value-classification.d.ts.map +1 -0
- package/compare/value-classification.js +112 -0
- package/compare/value-classification.js.map +1 -0
- package/diff/binary-diff.d.ts +4 -0
- package/diff/binary-diff.d.ts.map +1 -0
- package/diff/binary-diff.js +49 -0
- package/diff/binary-diff.js.map +1 -0
- package/diff/diff-shape.d.ts +117 -0
- package/diff/diff-shape.d.ts.map +1 -0
- package/diff/string-diff.d.ts +3 -0
- package/diff/string-diff.d.ts.map +1 -0
- package/diff/string-diff.js +22 -0
- package/diff/string-diff.js.map +1 -0
- package/engine/assertion-facade.d.ts +50 -0
- package/engine/assertion-facade.d.ts.map +1 -0
- package/engine/assertion-facade.js +361 -0
- package/engine/assertion-facade.js.map +1 -0
- package/engine/case-execution.d.ts +10 -0
- package/engine/case-execution.d.ts.map +1 -0
- package/engine/case-execution.js +408 -0
- package/engine/case-execution.js.map +1 -0
- package/engine/custom-assertion-recording.d.ts +33 -0
- package/engine/custom-assertion-recording.d.ts.map +1 -0
- package/engine/custom-assertion-recording.js +175 -0
- package/engine/custom-assertion-recording.js.map +1 -0
- package/engine/engine.d.ts +24 -0
- package/engine/engine.d.ts.map +1 -0
- package/engine/engine.js +33 -0
- package/engine/engine.js.map +1 -0
- package/engine/execution.d.ts +16 -0
- package/engine/execution.d.ts.map +1 -0
- package/engine/execution.js +223 -0
- package/engine/execution.js.map +1 -0
- package/engine/identity.d.ts +12 -0
- package/engine/identity.d.ts.map +1 -0
- package/engine/identity.js +20 -0
- package/engine/identity.js.map +1 -0
- package/engine/reporter.d.ts +103 -0
- package/engine/reporter.d.ts.map +1 -0
- package/engine/reporter.js +177 -0
- package/engine/reporter.js.map +1 -0
- package/engine/require-assertion-facade.d.ts +21 -0
- package/engine/require-assertion-facade.d.ts.map +1 -0
- package/engine/require-assertion-facade.js +127 -0
- package/engine/require-assertion-facade.js.map +1 -0
- package/engine/run-if-main.d.ts +20 -0
- package/engine/run-if-main.d.ts.map +1 -0
- package/engine/run-if-main.js +30 -0
- package/engine/run-if-main.js.map +1 -0
- package/engine/run-result.d.ts +110 -0
- package/engine/run-result.d.ts.map +1 -0
- package/engine/run-result.js +13 -0
- package/engine/run-result.js.map +1 -0
- package/engine/test-node.d.ts +88 -0
- package/engine/test-node.d.ts.map +1 -0
- package/engine/test-node.js +103 -0
- package/engine/test-node.js.map +1 -0
- package/engine/test-plan.d.ts +20 -0
- package/engine/test-plan.d.ts.map +1 -0
- package/engine/test-plan.js +115 -0
- package/engine/test-plan.js.map +1 -0
- package/package.json +78 -6
- package/packages/engine/assertion-protocol.entry-point.d.ts +9 -0
- package/packages/engine/assertion-protocol.entry-point.d.ts.map +1 -0
- package/packages/engine/assertion-protocol.entry-point.js +4 -0
- package/packages/engine/assertion-protocol.entry-point.js.map +1 -0
- package/packages/engine/engine.entry-point.d.ts +39 -0
- package/packages/engine/engine.entry-point.d.ts.map +1 -0
- package/packages/engine/engine.entry-point.js +47 -0
- package/packages/engine/engine.entry-point.js.map +1 -0
- package/readme.md +121 -5
- package/sbom.cdx.json +67 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { NarrowingCompositeAssertionReference } from '../packages/engine/assertion-protocol.entry-point.ts';
|
|
2
|
+
import type { AssertionOptions, InstanceConstructor, ResolvableSourceLocation } from '../assertion-protocol/assertion-node-shape.ts';
|
|
3
|
+
import { type RequireAssertionSink } from './custom-assertion-recording.ts';
|
|
4
|
+
export type RequireAssertionFacade = {
|
|
5
|
+
<Actual, Narrowed extends Actual, Arguments extends readonly unknown[]>(reference: NarrowingCompositeAssertionReference<Actual, Narrowed, Arguments>, actual: Actual, ...parameters: Arguments): asserts actual is Narrowed;
|
|
6
|
+
readonly annotated: (message: string) => RequireAssertionFacade;
|
|
7
|
+
readonly array: (actual: unknown, options?: AssertionOptions) => asserts actual is readonly unknown[];
|
|
8
|
+
readonly boolean: (actual: unknown, options?: AssertionOptions) => asserts actual is boolean;
|
|
9
|
+
readonly defined: <Value>(actual: Value, options?: AssertionOptions) => asserts actual is NonNullable<Value>;
|
|
10
|
+
readonly function: (actual: unknown, options?: AssertionOptions) => asserts actual is (...parameters: readonly unknown[]) => unknown;
|
|
11
|
+
readonly hasProperty: <Key extends PropertyKey>(actual: unknown, key: Key, options?: AssertionOptions) => asserts actual is Readonly<Record<Key, unknown>>;
|
|
12
|
+
readonly instanceOf: <Constructor extends InstanceConstructor>(actual: unknown, expected: Constructor, options?: AssertionOptions) => asserts actual is InstanceType<Constructor>;
|
|
13
|
+
readonly notNull: <Value>(actual: Value, options?: AssertionOptions) => asserts actual is Exclude<Value, null>;
|
|
14
|
+
readonly null: (actual: unknown, options?: AssertionOptions) => asserts actual is null;
|
|
15
|
+
readonly number: (actual: unknown, options?: AssertionOptions) => asserts actual is number;
|
|
16
|
+
readonly object: (actual: unknown, options?: AssertionOptions) => asserts actual is Readonly<Record<PropertyKey, unknown>>;
|
|
17
|
+
readonly string: (actual: unknown, options?: AssertionOptions) => asserts actual is string;
|
|
18
|
+
};
|
|
19
|
+
export declare function createRecordingRequireFacadeWithLocation(sink: RequireAssertionSink, annotation: string | null, captureLocation: () => ResolvableSourceLocation): RequireAssertionFacade;
|
|
20
|
+
export declare function createRecordingRequireFacade(sink: RequireAssertionSink, annotation: string | null): RequireAssertionFacade;
|
|
21
|
+
//# sourceMappingURL=require-assertion-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-assertion-facade.d.ts","sourceRoot":"","sources":["../../../../source/engine/require-assertion-facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { captureSourceLocation } from "../assertion-protocol/source-location.js";
|
|
2
|
+
import { recordRequireReference } from "./custom-assertion-recording.js";
|
|
3
|
+
function messageFromOptions(options, annotation) {
|
|
4
|
+
return options?.message ?? annotation;
|
|
5
|
+
}
|
|
6
|
+
export function createRecordingRequireFacadeWithLocation(sink, annotation, captureLocation) {
|
|
7
|
+
const methods = {
|
|
8
|
+
annotated(message) {
|
|
9
|
+
return createRecordingRequireFacadeWithLocation(sink, message, captureLocation);
|
|
10
|
+
},
|
|
11
|
+
array(actual, options) {
|
|
12
|
+
sink.recordRequire({
|
|
13
|
+
actual,
|
|
14
|
+
check: 'array',
|
|
15
|
+
location: captureLocation(),
|
|
16
|
+
message: messageFromOptions(options, annotation),
|
|
17
|
+
source: 'require'
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
boolean(actual, options) {
|
|
21
|
+
sink.recordRequire({
|
|
22
|
+
actual,
|
|
23
|
+
check: 'boolean',
|
|
24
|
+
location: captureLocation(),
|
|
25
|
+
message: messageFromOptions(options, annotation),
|
|
26
|
+
source: 'require'
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
defined(actual, options) {
|
|
30
|
+
sink.recordRequire({
|
|
31
|
+
actual,
|
|
32
|
+
check: 'defined',
|
|
33
|
+
location: captureLocation(),
|
|
34
|
+
message: messageFromOptions(options, annotation),
|
|
35
|
+
source: 'require'
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
function(actual, options) {
|
|
39
|
+
sink.recordRequire({
|
|
40
|
+
actual,
|
|
41
|
+
check: 'function',
|
|
42
|
+
location: captureLocation(),
|
|
43
|
+
message: messageFromOptions(options, annotation),
|
|
44
|
+
source: 'require'
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
hasProperty(actual, key, options) {
|
|
48
|
+
sink.recordRequire({
|
|
49
|
+
actual,
|
|
50
|
+
check: 'has-property',
|
|
51
|
+
key,
|
|
52
|
+
location: captureLocation(),
|
|
53
|
+
message: messageFromOptions(options, annotation),
|
|
54
|
+
source: 'require'
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
instanceOf(actual, expected, options) {
|
|
58
|
+
sink.recordRequire({
|
|
59
|
+
actual,
|
|
60
|
+
check: 'instance-of',
|
|
61
|
+
expected,
|
|
62
|
+
location: captureLocation(),
|
|
63
|
+
message: messageFromOptions(options, annotation),
|
|
64
|
+
source: 'require'
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
notNull(actual, options) {
|
|
68
|
+
sink.recordRequire({
|
|
69
|
+
actual,
|
|
70
|
+
check: 'not-null',
|
|
71
|
+
location: captureLocation(),
|
|
72
|
+
message: messageFromOptions(options, annotation),
|
|
73
|
+
source: 'require'
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
null(actual, options) {
|
|
77
|
+
sink.recordRequire({
|
|
78
|
+
actual,
|
|
79
|
+
check: 'null',
|
|
80
|
+
location: captureLocation(),
|
|
81
|
+
message: messageFromOptions(options, annotation),
|
|
82
|
+
source: 'require'
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
number(actual, options) {
|
|
86
|
+
sink.recordRequire({
|
|
87
|
+
actual,
|
|
88
|
+
check: 'number',
|
|
89
|
+
location: captureLocation(),
|
|
90
|
+
message: messageFromOptions(options, annotation),
|
|
91
|
+
source: 'require'
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
object(actual, options) {
|
|
95
|
+
sink.recordRequire({
|
|
96
|
+
actual,
|
|
97
|
+
check: 'object',
|
|
98
|
+
location: captureLocation(),
|
|
99
|
+
message: messageFromOptions(options, annotation),
|
|
100
|
+
source: 'require'
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
string(actual, options) {
|
|
104
|
+
sink.recordRequire({
|
|
105
|
+
actual,
|
|
106
|
+
check: 'string',
|
|
107
|
+
location: captureLocation(),
|
|
108
|
+
message: messageFromOptions(options, annotation),
|
|
109
|
+
source: 'require'
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
function callRequireReference(reference, ...parameters) {
|
|
114
|
+
recordRequireReference({
|
|
115
|
+
annotation,
|
|
116
|
+
location: captureLocation(),
|
|
117
|
+
parameters,
|
|
118
|
+
reference,
|
|
119
|
+
sink
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return Object.assign(callRequireReference, methods);
|
|
123
|
+
}
|
|
124
|
+
export function createRecordingRequireFacade(sink, annotation) {
|
|
125
|
+
return createRecordingRequireFacadeWithLocation(sink, annotation, captureSourceLocation);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=require-assertion-facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-assertion-facade.js","sourceRoot":"","sources":["../../../../source/engine/require-assertion-facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { WallClock } from '@enormora/wall-clock';
|
|
2
|
+
import type { Execute } from './execution.ts';
|
|
3
|
+
import type { Reporter, RunFacts } from './reporter.ts';
|
|
4
|
+
import type { TestNode } from './test-node.ts';
|
|
5
|
+
import type { TestPlanFactory } from './test-plan.ts';
|
|
6
|
+
export type RunIfMainOptions = {
|
|
7
|
+
readonly reporters?: readonly Reporter[];
|
|
8
|
+
readonly runFacts?: RunFacts;
|
|
9
|
+
};
|
|
10
|
+
export type RunIfMain = (meta: Readonly<ImportMeta>, testNode: TestNode, options?: RunIfMainOptions) => Promise<void>;
|
|
11
|
+
export type RunIfMainDependencies = {
|
|
12
|
+
readonly createTestPlan: TestPlanFactory;
|
|
13
|
+
readonly execute: Execute;
|
|
14
|
+
readonly nodeVersion: string;
|
|
15
|
+
readonly readExitCode: () => number | string | null | undefined;
|
|
16
|
+
readonly wallClock: WallClock;
|
|
17
|
+
readonly writeExitCode: (exitCode: number) => void;
|
|
18
|
+
};
|
|
19
|
+
export declare function createRunIfMain(dependencies: RunIfMainDependencies): RunIfMain;
|
|
20
|
+
//# 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,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAChC,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,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;AA4BF,wBAAgB,eAAe,CAAC,YAAY,EAAE,qBAAqB,GAAG,SAAS,CAe9E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const failureExitCodes = new Set([undefined, null, 0, '0']);
|
|
2
|
+
function shouldSetFailureExitCode(exitCode) {
|
|
3
|
+
return failureExitCodes.has(exitCode);
|
|
4
|
+
}
|
|
5
|
+
function hasFailure(result) {
|
|
6
|
+
return result.summary.failed > 0 || result.runnerErrors.length > 0;
|
|
7
|
+
}
|
|
8
|
+
function createExecuteOptions(options, dependencies) {
|
|
9
|
+
const startedAt = new Date(dependencies.wallClock.currentTimestampInMilliseconds);
|
|
10
|
+
return {
|
|
11
|
+
reporters: options?.reporters ?? [],
|
|
12
|
+
runFacts: {
|
|
13
|
+
...options?.runFacts,
|
|
14
|
+
nodeVersion: dependencies.nodeVersion
|
|
15
|
+
},
|
|
16
|
+
startedAt: startedAt.toISOString()
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function createRunIfMain(dependencies) {
|
|
20
|
+
return async function runIfMain(meta, testNode, options) {
|
|
21
|
+
if (!meta.main) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const result = await dependencies.execute(dependencies.createTestPlan(testNode), createExecuteOptions(options, dependencies));
|
|
25
|
+
if (hasFailure(result) && shouldSetFailureExitCode(dependencies.readExitCode())) {
|
|
26
|
+
dependencies.writeExitCode(1);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# 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":"AA2BA,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,oBAAoB,CACzB,OAAqC,EACrC,YAAmC;IAEnC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAElF,OAAO;QACH,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,QAAQ,CAAC,EACrC,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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { InvalidDeepAssertionOperand } from '../assertion-protocol/evaluation.ts';
|
|
2
|
+
import type { FailedCheck, NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
|
|
3
|
+
import type { CaseId } from './identity.ts';
|
|
4
|
+
type RunnerErrorSubtypeByName = {
|
|
5
|
+
readonly attributionDrift: 'attribution-drift';
|
|
6
|
+
readonly crash: 'crash';
|
|
7
|
+
readonly fixture: 'fixture';
|
|
8
|
+
readonly loader: 'loader';
|
|
9
|
+
readonly permission: 'permission';
|
|
10
|
+
readonly reporter: 'reporter';
|
|
11
|
+
readonly unhandledRejection: 'unhandled-rejection';
|
|
12
|
+
};
|
|
13
|
+
type RunnerErrorSubtype = RunnerErrorSubtypeByName[keyof RunnerErrorSubtypeByName];
|
|
14
|
+
export type PassOutcome = {
|
|
15
|
+
readonly checks?: never;
|
|
16
|
+
readonly kind: 'pass';
|
|
17
|
+
readonly reason?: never;
|
|
18
|
+
};
|
|
19
|
+
export type AssertionTestFailure = {
|
|
20
|
+
readonly checks: NonEmptyReadonlyArray<FailedCheck>;
|
|
21
|
+
readonly kind: 'assertion';
|
|
22
|
+
};
|
|
23
|
+
export type BodyErrorTestFailure = {
|
|
24
|
+
readonly error: {
|
|
25
|
+
readonly message: string;
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly stack: string | null;
|
|
28
|
+
readonly thrown: unknown;
|
|
29
|
+
};
|
|
30
|
+
readonly kind: 'body-error';
|
|
31
|
+
};
|
|
32
|
+
type TestContractFailureCodeByName = {
|
|
33
|
+
readonly deadBuilderAssertion: 'dead-builder-assertion';
|
|
34
|
+
readonly invalidAssertionReference: 'invalid-assertion-reference';
|
|
35
|
+
readonly invalidCompositeResult: 'invalid-composite-result';
|
|
36
|
+
readonly invalidDeepAssertionOperand: 'invalid-deep-assertion-operand';
|
|
37
|
+
readonly invalidPlan: 'invalid-plan';
|
|
38
|
+
readonly invalidRequireReference: 'invalid-require-reference';
|
|
39
|
+
readonly noAssertions: 'no-assertions';
|
|
40
|
+
readonly pendingAsyncAssertion: 'pending-async-assertion';
|
|
41
|
+
readonly planMismatch: 'plan-mismatch';
|
|
42
|
+
};
|
|
43
|
+
export type TestContractFailureCode = TestContractFailureCodeByName[keyof TestContractFailureCodeByName];
|
|
44
|
+
export type TestContractFailure = {
|
|
45
|
+
readonly actual: unknown;
|
|
46
|
+
readonly code: TestContractFailureCode;
|
|
47
|
+
readonly expected: string;
|
|
48
|
+
readonly kind: 'test-contract';
|
|
49
|
+
readonly summary: string;
|
|
50
|
+
};
|
|
51
|
+
export type TestFailure = AssertionTestFailure | BodyErrorTestFailure | TestContractFailure;
|
|
52
|
+
export declare function invalidDeepAssertionOperandFailure(actual: InvalidDeepAssertionOperand): TestContractFailure;
|
|
53
|
+
export type FailOutcome = {
|
|
54
|
+
readonly failures: NonEmptyReadonlyArray<TestFailure>;
|
|
55
|
+
readonly kind: 'fail';
|
|
56
|
+
readonly reason?: never;
|
|
57
|
+
};
|
|
58
|
+
export type SkipOutcome = {
|
|
59
|
+
readonly checks?: never;
|
|
60
|
+
readonly kind: 'skip';
|
|
61
|
+
readonly reason: string;
|
|
62
|
+
};
|
|
63
|
+
export type InconclusiveOutcome = {
|
|
64
|
+
readonly checks?: never;
|
|
65
|
+
readonly kind: 'inconclusive';
|
|
66
|
+
readonly reason: string;
|
|
67
|
+
};
|
|
68
|
+
export type TestOutcome = FailOutcome | InconclusiveOutcome | PassOutcome | SkipOutcome;
|
|
69
|
+
export type RunnerError = {
|
|
70
|
+
readonly attributedTo: CaseId | null;
|
|
71
|
+
readonly cause: unknown;
|
|
72
|
+
readonly message: string;
|
|
73
|
+
readonly subtype: RunnerErrorSubtype;
|
|
74
|
+
};
|
|
75
|
+
export type RunSummary = {
|
|
76
|
+
readonly defined: number;
|
|
77
|
+
readonly discovered: number;
|
|
78
|
+
readonly failed: number;
|
|
79
|
+
readonly inconclusive: number;
|
|
80
|
+
readonly passed: number;
|
|
81
|
+
readonly planned: number;
|
|
82
|
+
readonly skipped: number;
|
|
83
|
+
};
|
|
84
|
+
export type PerTestResult = {
|
|
85
|
+
readonly id: CaseId;
|
|
86
|
+
readonly outcome: TestOutcome;
|
|
87
|
+
readonly verdict: TestOutcome['kind'];
|
|
88
|
+
};
|
|
89
|
+
export type SuiteRunCounts = {
|
|
90
|
+
readonly discovered: number;
|
|
91
|
+
readonly executed: number;
|
|
92
|
+
readonly planned: number;
|
|
93
|
+
};
|
|
94
|
+
export type OrphanedNode = {
|
|
95
|
+
readonly file: string | null;
|
|
96
|
+
readonly kind: 'suite' | 'table' | 'test';
|
|
97
|
+
readonly name: string;
|
|
98
|
+
};
|
|
99
|
+
export type RunResult = {
|
|
100
|
+
readonly artifacts: readonly string[];
|
|
101
|
+
readonly bySuite: Readonly<Record<string, SuiteRunCounts>>;
|
|
102
|
+
readonly orphans: readonly OrphanedNode[];
|
|
103
|
+
readonly perTest: readonly PerTestResult[];
|
|
104
|
+
readonly runnerErrors: readonly RunnerError[];
|
|
105
|
+
readonly summary: RunSummary;
|
|
106
|
+
readonly wallTimeMs: number;
|
|
107
|
+
};
|
|
108
|
+
export declare function verdictFromOutcome(outcome: TestOutcome): PerTestResult['verdict'];
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=run-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-result.d.ts","sourceRoot":"","sources":["../../../../source/engine/run-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function invalidDeepAssertionOperandFailure(actual) {
|
|
2
|
+
return {
|
|
3
|
+
actual,
|
|
4
|
+
code: 'invalid-deep-assertion-operand',
|
|
5
|
+
expected: 'non-primitive deep assertion operand',
|
|
6
|
+
kind: 'test-contract',
|
|
7
|
+
summary: 'Deep assertions require non-primitive operands.'
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function verdictFromOutcome(outcome) {
|
|
11
|
+
return outcome.kind;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=run-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-result.js","sourceRoot":"","sources":["../../../../source/engine/run-result.ts"],"names":[],"mappings":"AA6DA,MAAM,UAAU,kCAAkC,CAAC,MAAmC;IAClF,OAAO;QACH,MAAM;QACN,IAAI,EAAE,gCAAgC;QACtC,QAAQ,EAAE,sCAAsC;QAChD,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,iDAAiD;KAC7D,CAAC;AACN,CAAC;AAmED,MAAM,UAAU,kBAAkB,CAAC,OAAoB;IACnD,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { AssertAssertionNode, AssertionResult } from '../assertion-protocol/assertion-node.ts';
|
|
2
|
+
import type { NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
|
|
3
|
+
import type { AssertAssertionFacade } from './assertion-facade.ts';
|
|
4
|
+
import type { RequireAssertionFacade } from './require-assertion-facade.ts';
|
|
5
|
+
declare const testNodeBrand: unique symbol;
|
|
6
|
+
declare const testNodeOwnerBrand: unique symbol;
|
|
7
|
+
declare const testNodeOwnerIdentity: unique symbol;
|
|
8
|
+
export type Metadata = Readonly<Record<string, unknown>>;
|
|
9
|
+
export type TestScopeAssertContext = AssertAssertionFacade & {
|
|
10
|
+
readonly collect: () => NonEmptyReadonlyArray<AssertAssertionNode>;
|
|
11
|
+
};
|
|
12
|
+
export type TestScope = {
|
|
13
|
+
readonly assert: TestScopeAssertContext;
|
|
14
|
+
readonly plan: (count: number) => void;
|
|
15
|
+
readonly require: RequireAssertionFacade;
|
|
16
|
+
};
|
|
17
|
+
export type TestBody = (scope: TestScope) => AssertionResult | Promise<AssertionResult>;
|
|
18
|
+
export type TestCase = {
|
|
19
|
+
readonly [testNodeBrand]: true;
|
|
20
|
+
readonly [testNodeOwnerBrand]: TestNodeOwner;
|
|
21
|
+
readonly body: TestBody;
|
|
22
|
+
readonly kind: 'test';
|
|
23
|
+
readonly metadata: Metadata;
|
|
24
|
+
readonly name: string;
|
|
25
|
+
};
|
|
26
|
+
export type Suite = {
|
|
27
|
+
readonly [testNodeBrand]: true;
|
|
28
|
+
readonly [testNodeOwnerBrand]: TestNodeOwner;
|
|
29
|
+
readonly children: readonly TestNode[];
|
|
30
|
+
readonly kind: 'suite';
|
|
31
|
+
readonly metadata: Metadata;
|
|
32
|
+
readonly name: string;
|
|
33
|
+
};
|
|
34
|
+
export type TableCase = {
|
|
35
|
+
readonly body: TestBody;
|
|
36
|
+
readonly metadata: Metadata;
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly parameters: Readonly<Record<string, unknown>>;
|
|
39
|
+
};
|
|
40
|
+
export type Table = {
|
|
41
|
+
readonly [testNodeBrand]: true;
|
|
42
|
+
readonly [testNodeOwnerBrand]: TestNodeOwner;
|
|
43
|
+
readonly cases: readonly TableCase[];
|
|
44
|
+
readonly kind: 'table';
|
|
45
|
+
readonly metadata: Metadata;
|
|
46
|
+
readonly name: string;
|
|
47
|
+
};
|
|
48
|
+
export type TestNode = Suite | Table | TestCase;
|
|
49
|
+
export type TestNodeOwner = {
|
|
50
|
+
readonly [testNodeOwnerIdentity]: true;
|
|
51
|
+
};
|
|
52
|
+
export type TestNodeFactory = {
|
|
53
|
+
readonly createSuite: (options: SuiteOptions) => Suite;
|
|
54
|
+
readonly createTable: (options: TableOptions) => Table;
|
|
55
|
+
readonly createTestCase: (options: TestCaseOptions) => TestCase;
|
|
56
|
+
};
|
|
57
|
+
export type TestNodeFactoryOptions = {
|
|
58
|
+
readonly owner: TestNodeOwner;
|
|
59
|
+
readonly recordConstructedNode: (node: TestNode) => void;
|
|
60
|
+
};
|
|
61
|
+
export type TestCaseOptions = {
|
|
62
|
+
readonly body: TestBody;
|
|
63
|
+
readonly metadata: Metadata;
|
|
64
|
+
readonly name: string;
|
|
65
|
+
};
|
|
66
|
+
export type SuiteOptions = {
|
|
67
|
+
readonly children: readonly unknown[];
|
|
68
|
+
readonly metadata: Metadata;
|
|
69
|
+
readonly name: string;
|
|
70
|
+
};
|
|
71
|
+
export type TableCaseOptions = {
|
|
72
|
+
readonly body: TestBody;
|
|
73
|
+
readonly metadata: Metadata;
|
|
74
|
+
readonly name: string;
|
|
75
|
+
readonly parameters: Readonly<Record<string, unknown>>;
|
|
76
|
+
};
|
|
77
|
+
export type TableOptions = {
|
|
78
|
+
readonly cases: readonly TableCaseOptions[];
|
|
79
|
+
readonly metadata: Metadata;
|
|
80
|
+
readonly name: string;
|
|
81
|
+
};
|
|
82
|
+
export declare function createTestNodeOwner(): TestNodeOwner;
|
|
83
|
+
export declare function isTestNode(value: unknown): value is TestNode;
|
|
84
|
+
export declare function ensureOwnedTestNode(value: unknown, owner: TestNodeOwner, plainObjectMessage: string, foreignNodeMessage: string): asserts value is TestNode;
|
|
85
|
+
export declare function createTestNodeFactory(factoryOptions: TestNodeFactoryOptions): TestNodeFactory;
|
|
86
|
+
export declare function mergeMetadata(parent: Metadata, child: Metadata): Metadata;
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=test-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-node.d.ts","sourceRoot":"","sources":["../../../../source/engine/test-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
const testNodeBrand = Symbol('OverkillTestNode');
|
|
2
|
+
const testNodeOwnerBrand = Symbol('OverkillTestNodeOwner');
|
|
3
|
+
const testNodeOwnerIdentity = Symbol('OverkillTestNodeOwnerIdentity');
|
|
4
|
+
export function createTestNodeOwner() {
|
|
5
|
+
return { [testNodeOwnerIdentity]: true };
|
|
6
|
+
}
|
|
7
|
+
function ensureName(name) {
|
|
8
|
+
if (name.trim().length === 0) {
|
|
9
|
+
throw new TypeError('Test node name must not be empty.');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function ensureMetadata(metadata) {
|
|
13
|
+
if (typeof metadata !== 'object' || metadata === null || Array.isArray(metadata)) {
|
|
14
|
+
throw new TypeError('Test node metadata must be an object.');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function ensureTestBody(body) {
|
|
18
|
+
if (typeof body !== 'function') {
|
|
19
|
+
throw new TypeError('Test case body must be a function.');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function isTestNode(value) {
|
|
23
|
+
return typeof value === 'object' && value !== null && Object.hasOwn(value, testNodeBrand);
|
|
24
|
+
}
|
|
25
|
+
function hasTestNodeOwner(value, owner) {
|
|
26
|
+
return value[testNodeOwnerBrand] === owner;
|
|
27
|
+
}
|
|
28
|
+
export function ensureOwnedTestNode(value, owner, plainObjectMessage, foreignNodeMessage) {
|
|
29
|
+
if (!isTestNode(value)) {
|
|
30
|
+
throw new TypeError(plainObjectMessage);
|
|
31
|
+
}
|
|
32
|
+
if (!hasTestNodeOwner(value, owner)) {
|
|
33
|
+
throw new TypeError(foreignNodeMessage);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function toTestNode(value, owner) {
|
|
37
|
+
ensureOwnedTestNode(value, owner, 'Suite children must be engine-created TestNode values.', 'Suite children must be created by the same engine instance.');
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
export function createTestNodeFactory(factoryOptions) {
|
|
41
|
+
const { owner, recordConstructedNode } = factoryOptions;
|
|
42
|
+
function createTestCase(options) {
|
|
43
|
+
ensureName(options.name);
|
|
44
|
+
ensureMetadata(options.metadata);
|
|
45
|
+
ensureTestBody(options.body);
|
|
46
|
+
const testCase = {
|
|
47
|
+
[testNodeBrand]: true,
|
|
48
|
+
[testNodeOwnerBrand]: owner,
|
|
49
|
+
body: options.body,
|
|
50
|
+
kind: 'test',
|
|
51
|
+
metadata: options.metadata,
|
|
52
|
+
name: options.name
|
|
53
|
+
};
|
|
54
|
+
recordConstructedNode(testCase);
|
|
55
|
+
return testCase;
|
|
56
|
+
}
|
|
57
|
+
function createSuite(options) {
|
|
58
|
+
ensureName(options.name);
|
|
59
|
+
ensureMetadata(options.metadata);
|
|
60
|
+
const children = options.children.map(function validateChild(child) {
|
|
61
|
+
return toTestNode(child, owner);
|
|
62
|
+
});
|
|
63
|
+
const suite = {
|
|
64
|
+
[testNodeBrand]: true,
|
|
65
|
+
[testNodeOwnerBrand]: owner,
|
|
66
|
+
children,
|
|
67
|
+
kind: 'suite',
|
|
68
|
+
metadata: options.metadata,
|
|
69
|
+
name: options.name
|
|
70
|
+
};
|
|
71
|
+
recordConstructedNode(suite);
|
|
72
|
+
return suite;
|
|
73
|
+
}
|
|
74
|
+
function createTable(options) {
|
|
75
|
+
ensureName(options.name);
|
|
76
|
+
ensureMetadata(options.metadata);
|
|
77
|
+
for (const tableCase of options.cases) {
|
|
78
|
+
ensureName(tableCase.name);
|
|
79
|
+
ensureMetadata(tableCase.metadata);
|
|
80
|
+
ensureMetadata(tableCase.parameters);
|
|
81
|
+
ensureTestBody(tableCase.body);
|
|
82
|
+
}
|
|
83
|
+
const table = {
|
|
84
|
+
[testNodeBrand]: true,
|
|
85
|
+
[testNodeOwnerBrand]: owner,
|
|
86
|
+
cases: options.cases,
|
|
87
|
+
kind: 'table',
|
|
88
|
+
metadata: options.metadata,
|
|
89
|
+
name: options.name
|
|
90
|
+
};
|
|
91
|
+
recordConstructedNode(table);
|
|
92
|
+
return table;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
createSuite,
|
|
96
|
+
createTable,
|
|
97
|
+
createTestCase
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function mergeMetadata(parent, child) {
|
|
101
|
+
return { ...parent, ...child };
|
|
102
|
+
}
|
|
103
|
+
//# 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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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
|
|
2
|
+
import { type CaseId } from './identity.ts';
|
|
3
|
+
import type { OrphanedNode } from './run-result.ts';
|
|
4
|
+
import { type Metadata, type TestBody, type TestNode, type TestNodeOwner } from './test-node.ts';
|
|
5
|
+
export type TestPlanCaseBody = TestBody;
|
|
6
|
+
export type TestPlanCase = {
|
|
7
|
+
readonly id: CaseId;
|
|
8
|
+
readonly suitePath: readonly string[];
|
|
9
|
+
readonly metadata: Metadata;
|
|
10
|
+
readonly body: TestPlanCaseBody;
|
|
11
|
+
};
|
|
12
|
+
export type TestPlan = {
|
|
13
|
+
readonly defined: number;
|
|
14
|
+
readonly cases: NonEmptyReadonlyArray<TestPlanCase>;
|
|
15
|
+
readonly discoveredCases: NonEmptyReadonlyArray<TestPlanCase>;
|
|
16
|
+
readonly orphans: readonly OrphanedNode[];
|
|
17
|
+
};
|
|
18
|
+
export type TestPlanFactory = (root: TestNode) => TestPlan;
|
|
19
|
+
export declare function createTestPlanFactory(owner: TestNodeOwner, constructedNodes: ReadonlySet<TestNode>): TestPlanFactory;
|
|
20
|
+
//# sourceMappingURL=test-plan.d.ts.map
|
|
@@ -0,0 +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,EACrB,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;CAC7C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC;AA4I3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,eAAe,CAqBpH"}
|