@overkill-dev/run 0.0.4 → 0.0.5
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/assertion-protocol/assertion-evaluation.js +6 -0
- package/assertion-protocol/assertion-evaluation.js.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.js +49 -0
- package/assertion-protocol/assertion-reference.js.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.js +21 -0
- package/assertion-protocol/assertions/collection.js.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.js +24 -0
- package/assertion-protocol/assertions/equality.js.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.js +43 -0
- package/assertion-protocol/assertions/numeric.js.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.js +20 -0
- package/assertion-protocol/assertions/presence.js.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.js +43 -0
- package/assertion-protocol/assertions/type-shape.js.map +1 -0
- package/assertion-protocol/collection-count.js +42 -0
- package/assertion-protocol/collection-count.js.map +1 -0
- package/assertion-protocol/evaluation.js +170 -0
- package/assertion-protocol/evaluation.js.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.js +76 -0
- package/assertion-protocol/source-location.js.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.js +201 -0
- package/assertion-protocol/thrown-matcher.js.map +1 -0
- package/compare/comparison-result.js +47 -0
- package/compare/comparison-result.js.map +1 -0
- package/compare/comparison-state.js +20 -0
- package/compare/comparison-state.js.map +1 -0
- package/compare/comparison.js +78 -0
- package/compare/comparison.js.map +1 -0
- package/compare/diff-path.js +37 -0
- package/compare/diff-path.js.map +1 -0
- package/compare/raw-comparison.js +285 -0
- package/compare/raw-comparison.js.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.js +12 -0
- package/compare/serialized-value-shape.js.map +1 -0
- package/compare/serialized-value-state.js +55 -0
- package/compare/serialized-value-state.js.map +1 -0
- package/compare/serialized-value.js +387 -0
- package/compare/serialized-value.js.map +1 -0
- package/compare/structured-diff.js +382 -0
- package/compare/structured-diff.js.map +1 -0
- package/compare/value-classification.js +112 -0
- package/compare/value-classification.js.map +1 -0
- package/diff/binary-diff.js +49 -0
- package/diff/binary-diff.js.map +1 -0
- package/diff/string-diff.js +22 -0
- package/diff/string-diff.js.map +1 -0
- package/engine/assertion-facade.js +361 -0
- package/engine/assertion-facade.js.map +1 -0
- package/engine/case-execution.js +408 -0
- package/engine/case-execution.js.map +1 -0
- package/engine/custom-assertion-recording.js +175 -0
- package/engine/custom-assertion-recording.js.map +1 -0
- package/engine/execution.d.ts +20 -0
- package/engine/execution.d.ts.map +1 -0
- package/engine/execution.js +323 -0
- package/engine/execution.js.map +1 -0
- package/engine/identity.js +5 -0
- package/engine/identity.js.map +1 -0
- package/engine/reporter-event-queue.js +23 -0
- package/engine/reporter-event-queue.js.map +1 -0
- package/engine/reporter.js +177 -0
- package/engine/reporter.js.map +1 -0
- package/engine/require-assertion-facade.js +127 -0
- package/engine/require-assertion-facade.js.map +1 -0
- package/engine/run-result.js +13 -0
- package/engine/run-result.js.map +1 -0
- package/package.json +8 -3
- package/packages/engine/assertion-protocol.entry-point.js +4 -0
- package/packages/engine/assertion-protocol.entry-point.js.map +1 -0
- package/packages/run/run.entry-point.d.ts +2 -1
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.js +1 -0
- package/packages/run/run.entry-point.js.map +1 -1
- package/readme.md +7 -2
- package/run/run.d.ts +87 -36
- package/run/run.d.ts.map +1 -1
- package/run/run.js +182 -8
- package/run/run.js.map +1 -1
- package/sbom.cdx.json +22 -5
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { assertionPasses, evaluateAssertion, invalidDeepAssertionOperand } from "../assertion-protocol/evaluation.js";
|
|
2
|
+
import { createThrownErrorRecord } from "../assertion-protocol/thrown-error-record.js";
|
|
3
|
+
import { createRecordingAssertFacade } from "./assertion-facade.js";
|
|
4
|
+
import { createRecordingRequireFacade } from "./require-assertion-facade.js";
|
|
5
|
+
import { invalidDeepAssertionOperandFailure, verdictFromOutcome } from "./run-result.js";
|
|
6
|
+
class RequireFailedSignalError extends Error {
|
|
7
|
+
constructor() {
|
|
8
|
+
super('Requirement failed.');
|
|
9
|
+
this.name = 'RequireFailedSignalError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
class TestContractSignalError extends Error {
|
|
13
|
+
contractFailure;
|
|
14
|
+
constructor(failure, options) {
|
|
15
|
+
super(failure.summary, options);
|
|
16
|
+
this.name = 'TestContractSignalError';
|
|
17
|
+
this.contractFailure = failure;
|
|
18
|
+
}
|
|
19
|
+
failure() {
|
|
20
|
+
return this.contractFailure;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function assertNonEmptyItems(items, message) {
|
|
24
|
+
if (items.length === 0) {
|
|
25
|
+
throw new TypeError(message);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function createNoAssertionsFailure() {
|
|
29
|
+
return {
|
|
30
|
+
actual: 0,
|
|
31
|
+
code: 'no-assertions',
|
|
32
|
+
expected: 'at least one assertion',
|
|
33
|
+
kind: 'test-contract',
|
|
34
|
+
summary: 'Expected at least one assertion.'
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function createInvalidPlanFailure(actual) {
|
|
38
|
+
return {
|
|
39
|
+
actual,
|
|
40
|
+
code: 'invalid-plan',
|
|
41
|
+
expected: 'positive integer plan before assertions',
|
|
42
|
+
kind: 'test-contract',
|
|
43
|
+
summary: 'Assertion plan must be a positive integer before assertions.'
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function createPlanMismatchFailure(actual, expected) {
|
|
47
|
+
return {
|
|
48
|
+
actual,
|
|
49
|
+
code: 'plan-mismatch',
|
|
50
|
+
expected: String(expected),
|
|
51
|
+
kind: 'test-contract',
|
|
52
|
+
summary: 'Assertion plan count did not match.'
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function createDeadBuilderAssertionFailure() {
|
|
56
|
+
return {
|
|
57
|
+
actual: 'missing recorded builder assertion',
|
|
58
|
+
code: 'dead-builder-assertion',
|
|
59
|
+
expected: 'returned assertions include every recorded builder assertion',
|
|
60
|
+
kind: 'test-contract',
|
|
61
|
+
summary: 'Returned assertions must include every recorded builder assertion.'
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function createPendingAsyncAssertionFailure() {
|
|
65
|
+
return {
|
|
66
|
+
actual: 'pending async assertion',
|
|
67
|
+
code: 'pending-async-assertion',
|
|
68
|
+
expected: 'all async assertions awaited before collect',
|
|
69
|
+
kind: 'test-contract',
|
|
70
|
+
summary: 'Async assertion must be awaited before scope.assert.collect().'
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function isTestContractFailure(value) {
|
|
74
|
+
return !Array.isArray(value);
|
|
75
|
+
}
|
|
76
|
+
function isAssertionNode(assertionResult) {
|
|
77
|
+
return !Array.isArray(assertionResult);
|
|
78
|
+
}
|
|
79
|
+
function normalizeAssertionResult(assertionResult) {
|
|
80
|
+
const assertions = isAssertionNode(assertionResult) ? [assertionResult] : assertionResult;
|
|
81
|
+
assertNonEmptyItems(assertions, 'Expected returned assertions to be non-empty.');
|
|
82
|
+
return assertions;
|
|
83
|
+
}
|
|
84
|
+
function builderAssertionsInReturnedOrder(builderAssertions, returnedAssertions) {
|
|
85
|
+
let returnedIndex = 0;
|
|
86
|
+
return builderAssertions.every(function builderAssertionReturned(builderAssertion) {
|
|
87
|
+
while (returnedIndex < returnedAssertions.length) {
|
|
88
|
+
const returnedAssertion = returnedAssertions[returnedIndex];
|
|
89
|
+
returnedIndex += 1;
|
|
90
|
+
if (returnedAssertion === builderAssertion) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function recordContainsBuilderAssertion(recorded, builderAssertion) {
|
|
98
|
+
return recorded?.builderAssertion === builderAssertion;
|
|
99
|
+
}
|
|
100
|
+
function requireAssertionFromRecord(recorded) {
|
|
101
|
+
if (recorded?.assertion?.source === 'require') {
|
|
102
|
+
return recorded.assertion;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
function requireAssertionsFromRecord(recorded) {
|
|
107
|
+
const requireAssertion = requireAssertionFromRecord(recorded);
|
|
108
|
+
if (requireAssertion !== null) {
|
|
109
|
+
return [requireAssertion];
|
|
110
|
+
}
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
function appendRecordedRequiresBeforeBuilderAssertion(recordedAssertions, recordIndex, builderAssertion) {
|
|
114
|
+
let nextRecordIndex = recordIndex;
|
|
115
|
+
const assertions = [];
|
|
116
|
+
while (nextRecordIndex < recordedAssertions.length) {
|
|
117
|
+
const recorded = recordedAssertions[nextRecordIndex];
|
|
118
|
+
if (recordContainsBuilderAssertion(recorded, builderAssertion)) {
|
|
119
|
+
return { assertions, recordIndex: nextRecordIndex + 1 };
|
|
120
|
+
}
|
|
121
|
+
assertions.push(...requireAssertionsFromRecord(recorded));
|
|
122
|
+
nextRecordIndex += 1;
|
|
123
|
+
}
|
|
124
|
+
return { assertions, recordIndex: nextRecordIndex };
|
|
125
|
+
}
|
|
126
|
+
function appendRemainingRecordedRequires(recordedAssertions, recordIndex) {
|
|
127
|
+
const assertions = [];
|
|
128
|
+
for (const recorded of recordedAssertions.slice(recordIndex)) {
|
|
129
|
+
if (recorded.assertion?.source === 'require') {
|
|
130
|
+
assertions.push(recorded.assertion);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return assertions;
|
|
134
|
+
}
|
|
135
|
+
function mergeRecordedRequires(recordedAssertions, returnedAssertions) {
|
|
136
|
+
const mergedAssertions = [];
|
|
137
|
+
let recordIndex = 0;
|
|
138
|
+
for (const returnedAssertion of returnedAssertions) {
|
|
139
|
+
const step = appendRecordedRequiresBeforeBuilderAssertion(recordedAssertions, recordIndex, returnedAssertion);
|
|
140
|
+
recordIndex = step.recordIndex;
|
|
141
|
+
mergedAssertions.push(...step.assertions, returnedAssertion);
|
|
142
|
+
}
|
|
143
|
+
mergedAssertions.push(...appendRemainingRecordedRequires(recordedAssertions, recordIndex));
|
|
144
|
+
return mergedAssertions;
|
|
145
|
+
}
|
|
146
|
+
function createAssertionRecorder() {
|
|
147
|
+
const builderAssertions = [];
|
|
148
|
+
const recordedAssertions = [];
|
|
149
|
+
let failedRequireIndex = null;
|
|
150
|
+
let plannedCount = null;
|
|
151
|
+
function activeRecords() {
|
|
152
|
+
if (failedRequireIndex === null) {
|
|
153
|
+
return recordedAssertions;
|
|
154
|
+
}
|
|
155
|
+
return recordedAssertions.slice(0, failedRequireIndex + 1);
|
|
156
|
+
}
|
|
157
|
+
function pendingAssertionExists() {
|
|
158
|
+
return builderAssertions.includes(null);
|
|
159
|
+
}
|
|
160
|
+
function ensurePlanAllowed(count) {
|
|
161
|
+
if (!Number.isSafeInteger(count) || count <= 0 || plannedCount !== null || recordedAssertions.length > 0) {
|
|
162
|
+
throw new TestContractSignalError(createInvalidPlanFailure(count), undefined);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function collect() {
|
|
166
|
+
if (builderAssertions.length === 0) {
|
|
167
|
+
throw new TestContractSignalError(createNoAssertionsFailure(), undefined);
|
|
168
|
+
}
|
|
169
|
+
if (pendingAssertionExists()) {
|
|
170
|
+
throw new TestContractSignalError(createPendingAsyncAssertionFailure(), undefined);
|
|
171
|
+
}
|
|
172
|
+
const resolvedAssertions = builderAssertions.filter(function resolvedAssertion(assertion) {
|
|
173
|
+
return assertion !== null;
|
|
174
|
+
});
|
|
175
|
+
assertNonEmptyItems(resolvedAssertions, 'Expected builder assertions to be non-empty.');
|
|
176
|
+
return resolvedAssertions;
|
|
177
|
+
}
|
|
178
|
+
function validateReturnedAssertions(assertions) {
|
|
179
|
+
if (pendingAssertionExists()) {
|
|
180
|
+
return createPendingAsyncAssertionFailure();
|
|
181
|
+
}
|
|
182
|
+
const resolvedAssertions = builderAssertions.filter(function resolvedAssertion(assertion) {
|
|
183
|
+
return assertion !== null;
|
|
184
|
+
});
|
|
185
|
+
if (!builderAssertionsInReturnedOrder(resolvedAssertions, assertions)) {
|
|
186
|
+
return createDeadBuilderAssertionFailure();
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
activeRecordedAssertions() {
|
|
192
|
+
return activeRecords().flatMap(function toAssertion(recorded) {
|
|
193
|
+
return recorded.assertion === null ? [] : [recorded.assertion];
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
collect,
|
|
197
|
+
failContract(failure) {
|
|
198
|
+
throw new TestContractSignalError(failure, undefined);
|
|
199
|
+
},
|
|
200
|
+
plan(count) {
|
|
201
|
+
ensurePlanAllowed(count);
|
|
202
|
+
plannedCount = count;
|
|
203
|
+
},
|
|
204
|
+
recordAssert(assertion) {
|
|
205
|
+
builderAssertions.push(assertion);
|
|
206
|
+
recordedAssertions.push({ assertion, builderAssertion: assertion });
|
|
207
|
+
},
|
|
208
|
+
recordPendingAssert() {
|
|
209
|
+
const builderIndex = builderAssertions.length;
|
|
210
|
+
const recordIndex = recordedAssertions.length;
|
|
211
|
+
builderAssertions.push(null);
|
|
212
|
+
recordedAssertions.push({ assertion: null, builderAssertion: null });
|
|
213
|
+
return {
|
|
214
|
+
resolve(assertion) {
|
|
215
|
+
builderAssertions[builderIndex] = assertion;
|
|
216
|
+
recordedAssertions[recordIndex] = { assertion, builderAssertion: assertion };
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
recordRequire(assertion) {
|
|
221
|
+
recordedAssertions.push({ assertion, builderAssertion: null });
|
|
222
|
+
if (!assertionPasses(assertion)) {
|
|
223
|
+
failedRequireIndex = recordedAssertions.length - 1;
|
|
224
|
+
throw new RequireFailedSignalError();
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
requireFailed() {
|
|
228
|
+
return failedRequireIndex !== null;
|
|
229
|
+
},
|
|
230
|
+
returnedAssertions(assertionResult) {
|
|
231
|
+
const assertions = normalizeAssertionResult(assertionResult);
|
|
232
|
+
const contractFailure = validateReturnedAssertions(assertions);
|
|
233
|
+
if (contractFailure !== null) {
|
|
234
|
+
return contractFailure;
|
|
235
|
+
}
|
|
236
|
+
return mergeRecordedRequires(activeRecords(), assertions);
|
|
237
|
+
},
|
|
238
|
+
validateAssertionCount(reachedAssertionCount) {
|
|
239
|
+
if (plannedCount !== null && plannedCount !== reachedAssertionCount) {
|
|
240
|
+
return createPlanMismatchFailure(reachedAssertionCount, plannedCount);
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function evaluatedAssertionFailure(assertions) {
|
|
247
|
+
const checks = assertions.flatMap(function evaluateRecordedAssertion(assertion, index) {
|
|
248
|
+
const failedCheck = evaluateAssertion(assertion, index + 1);
|
|
249
|
+
return failedCheck === null ? [] : [failedCheck];
|
|
250
|
+
});
|
|
251
|
+
if (checks.length === 0) {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
assertNonEmptyItems(checks, 'Expected failed checks to be non-empty.');
|
|
255
|
+
return {
|
|
256
|
+
checks,
|
|
257
|
+
kind: 'assertion'
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function assertionContractFailure(assertions) {
|
|
261
|
+
for (const assertion of assertions) {
|
|
262
|
+
const invalid = invalidDeepAssertionOperand(assertion);
|
|
263
|
+
if (invalid !== null) {
|
|
264
|
+
return invalidDeepAssertionOperandFailure(invalid);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
function assertionFailure(assertions) {
|
|
270
|
+
return assertionContractFailure(assertions) ?? evaluatedAssertionFailure(assertions);
|
|
271
|
+
}
|
|
272
|
+
function createTestScope(recorder) {
|
|
273
|
+
const assertContext = Object.assign(createRecordingAssertFacade({
|
|
274
|
+
failContract(failure) {
|
|
275
|
+
return recorder.failContract(failure);
|
|
276
|
+
},
|
|
277
|
+
recordAssert(assertion) {
|
|
278
|
+
recorder.recordAssert(assertion);
|
|
279
|
+
},
|
|
280
|
+
recordPendingAssert() {
|
|
281
|
+
return recorder.recordPendingAssert();
|
|
282
|
+
}
|
|
283
|
+
}, null), {
|
|
284
|
+
collect() {
|
|
285
|
+
return recorder.collect();
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
return {
|
|
289
|
+
assert: assertContext,
|
|
290
|
+
plan(count) {
|
|
291
|
+
recorder.plan(count);
|
|
292
|
+
},
|
|
293
|
+
require: createRecordingRequireFacade({
|
|
294
|
+
failContract(failure) {
|
|
295
|
+
return recorder.failContract(failure);
|
|
296
|
+
},
|
|
297
|
+
recordRequire(assertion) {
|
|
298
|
+
recorder.recordRequire(assertion);
|
|
299
|
+
}
|
|
300
|
+
}, null)
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
function requireFailedBody(recorder) {
|
|
304
|
+
return {
|
|
305
|
+
bodyError: null,
|
|
306
|
+
contractFailure: null,
|
|
307
|
+
requireFailed: true,
|
|
308
|
+
returnedAssertions: recorder.activeRecordedAssertions()
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
function contractFailedBody(recorder, contractFailure) {
|
|
312
|
+
return {
|
|
313
|
+
bodyError: null,
|
|
314
|
+
contractFailure,
|
|
315
|
+
requireFailed: false,
|
|
316
|
+
returnedAssertions: recorder.activeRecordedAssertions()
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
function bodyErrorResult(recorder, error) {
|
|
320
|
+
return {
|
|
321
|
+
bodyError: createThrownErrorRecord(error),
|
|
322
|
+
contractFailure: null,
|
|
323
|
+
requireFailed: false,
|
|
324
|
+
returnedAssertions: recorder.activeRecordedAssertions()
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function completedBody(recorder, assertionResult) {
|
|
328
|
+
if (recorder.requireFailed()) {
|
|
329
|
+
return requireFailedBody(recorder);
|
|
330
|
+
}
|
|
331
|
+
const returnedAssertions = recorder.returnedAssertions(assertionResult);
|
|
332
|
+
return isTestContractFailure(returnedAssertions)
|
|
333
|
+
? contractFailedBody(recorder, returnedAssertions)
|
|
334
|
+
: {
|
|
335
|
+
bodyError: null,
|
|
336
|
+
contractFailure: null,
|
|
337
|
+
requireFailed: false,
|
|
338
|
+
returnedAssertions
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
function failedBody(recorder, error) {
|
|
342
|
+
if (error instanceof RequireFailedSignalError) {
|
|
343
|
+
return requireFailedBody(recorder);
|
|
344
|
+
}
|
|
345
|
+
return error instanceof TestContractSignalError
|
|
346
|
+
? contractFailedBody(recorder, error.failure())
|
|
347
|
+
: bodyErrorResult(recorder, error);
|
|
348
|
+
}
|
|
349
|
+
async function runCaseBody(testCase, recorder) {
|
|
350
|
+
try {
|
|
351
|
+
return completedBody(recorder, await testCase.body(createTestScope(recorder)));
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
return failedBody(recorder, error);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function bodyFailure(executedBody) {
|
|
358
|
+
if (executedBody.contractFailure !== null) {
|
|
359
|
+
return executedBody.contractFailure;
|
|
360
|
+
}
|
|
361
|
+
if (executedBody.bodyError !== null) {
|
|
362
|
+
return {
|
|
363
|
+
error: executedBody.bodyError,
|
|
364
|
+
kind: 'body-error'
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
function planFailure(recorder, executedBody) {
|
|
370
|
+
if (executedBody.requireFailed || executedBody.contractFailure !== null || executedBody.bodyError !== null) {
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
return recorder.validateAssertionCount(executedBody.returnedAssertions.length);
|
|
374
|
+
}
|
|
375
|
+
function createOutcome(recorder, executedBody) {
|
|
376
|
+
const failures = [
|
|
377
|
+
assertionFailure(executedBody.returnedAssertions),
|
|
378
|
+
bodyFailure(executedBody),
|
|
379
|
+
planFailure(recorder, executedBody)
|
|
380
|
+
]
|
|
381
|
+
.filter(function isTestFailure(failure) {
|
|
382
|
+
return failure !== null;
|
|
383
|
+
});
|
|
384
|
+
if (failures.length === 0) {
|
|
385
|
+
return { kind: 'pass' };
|
|
386
|
+
}
|
|
387
|
+
assertNonEmptyItems(failures, 'Expected test failures to be non-empty.');
|
|
388
|
+
return {
|
|
389
|
+
failures,
|
|
390
|
+
kind: 'fail'
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
export async function runTestCase(testCase, wallClock) {
|
|
394
|
+
const recorder = createAssertionRecorder();
|
|
395
|
+
const startedAt = wallClock.currentTimestampInMilliseconds;
|
|
396
|
+
const executedBody = await runCaseBody(testCase, recorder);
|
|
397
|
+
const outcome = createOutcome(recorder, executedBody);
|
|
398
|
+
const verdict = verdictFromOutcome(outcome);
|
|
399
|
+
return {
|
|
400
|
+
result: {
|
|
401
|
+
id: testCase.id,
|
|
402
|
+
outcome,
|
|
403
|
+
verdict
|
|
404
|
+
},
|
|
405
|
+
wallTimeMs: wallClock.currentTimestampInMilliseconds - startedAt
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=case-execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"case-execution.js","sourceRoot":"","sources":["../../../../source/engine/case-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { getAssertionReferenceRecord, getNarrowingAssertionReferenceRecord, isAssertionReference, isCompositeAssertionGroup, isNarrowingAssertionReference } from "../packages/engine/assertion-protocol.entry-point.js";
|
|
2
|
+
const expectedArgumentSlot = 1;
|
|
3
|
+
function createInvalidAssertionReferenceFailure(actual) {
|
|
4
|
+
return {
|
|
5
|
+
actual,
|
|
6
|
+
code: 'invalid-assertion-reference',
|
|
7
|
+
expected: 'engine-created assertion reference',
|
|
8
|
+
kind: 'test-contract',
|
|
9
|
+
summary: 'Expected an engine-created assertion reference.'
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function createInvalidRequireReferenceFailure(actual) {
|
|
13
|
+
return {
|
|
14
|
+
actual,
|
|
15
|
+
code: 'invalid-require-reference',
|
|
16
|
+
expected: 'narrowing assertion reference',
|
|
17
|
+
kind: 'test-contract',
|
|
18
|
+
summary: 'Expected a narrowing assertion reference.'
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function createInvalidCompositeResultFailure(actual) {
|
|
22
|
+
return {
|
|
23
|
+
actual,
|
|
24
|
+
code: 'invalid-composite-result',
|
|
25
|
+
expected: 'composite assertion child or group',
|
|
26
|
+
kind: 'test-contract',
|
|
27
|
+
summary: 'Composite assertion returned an invalid result.'
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function isPromiseLike(value) {
|
|
31
|
+
return typeof value === 'object' && value !== null && typeof Reflect.get(value, 'then') === 'function';
|
|
32
|
+
}
|
|
33
|
+
function isCompositeAssertionChildNode(value) {
|
|
34
|
+
return typeof value === 'object' && value !== null && Object.hasOwn(value, 'check');
|
|
35
|
+
}
|
|
36
|
+
function assertionArguments(parameters) {
|
|
37
|
+
return [
|
|
38
|
+
parameters[0],
|
|
39
|
+
parameters.at(expectedArgumentSlot)
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
function defaultCustomSummary(name) {
|
|
43
|
+
return `Expected ${name} assertion to pass.`;
|
|
44
|
+
}
|
|
45
|
+
function customSummary(record, source, annotation, parameters) {
|
|
46
|
+
if (annotation !== null) {
|
|
47
|
+
return annotation;
|
|
48
|
+
}
|
|
49
|
+
if (record.formatSummary !== null) {
|
|
50
|
+
if (record.kind === 'composite') {
|
|
51
|
+
return record.formatSummary({ name: record.name, source }, ...parameters);
|
|
52
|
+
}
|
|
53
|
+
return record.formatSummary({ name: record.name, source }, parameters[0], ...parameters.slice(1));
|
|
54
|
+
}
|
|
55
|
+
return defaultCustomSummary(record.name);
|
|
56
|
+
}
|
|
57
|
+
function normalizeCompositeChildren(result, failContract) {
|
|
58
|
+
if (isCompositeAssertionGroup(result)) {
|
|
59
|
+
return result.children;
|
|
60
|
+
}
|
|
61
|
+
if (isCompositeAssertionChildNode(result)) {
|
|
62
|
+
return [result];
|
|
63
|
+
}
|
|
64
|
+
return failContract(createInvalidCompositeResultFailure(result));
|
|
65
|
+
}
|
|
66
|
+
function createCompositeAssertionNode(input) {
|
|
67
|
+
const [actual, expectedArgument] = assertionArguments(input.parameters);
|
|
68
|
+
return {
|
|
69
|
+
actual,
|
|
70
|
+
check: 'composite',
|
|
71
|
+
children: input.children,
|
|
72
|
+
expected: expectedArgument ?? input.record.name,
|
|
73
|
+
location: input.location,
|
|
74
|
+
message: input.annotation,
|
|
75
|
+
name: input.record.name,
|
|
76
|
+
source: input.source,
|
|
77
|
+
summary: customSummary(input.record, input.source, input.annotation, input.parameters)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function createNarrowingCompositeAssertionNode(input) {
|
|
81
|
+
const passed = input.record.narrows(input.parameters[0], ...input.parameters.slice(1));
|
|
82
|
+
const child = {
|
|
83
|
+
actual: passed,
|
|
84
|
+
check: 'true',
|
|
85
|
+
location: input.location,
|
|
86
|
+
message: `Expected ${input.record.name} narrowing predicate to pass.`,
|
|
87
|
+
source: input.source
|
|
88
|
+
};
|
|
89
|
+
return createCompositeAssertionNode({
|
|
90
|
+
annotation: input.annotation,
|
|
91
|
+
children: [child],
|
|
92
|
+
location: input.location,
|
|
93
|
+
parameters: input.parameters,
|
|
94
|
+
record: input.record,
|
|
95
|
+
source: input.source
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function recordResolvedCompositeAssertion(input) {
|
|
99
|
+
const resolved = await input.result;
|
|
100
|
+
input.pending.resolve(createCompositeAssertionNode({
|
|
101
|
+
annotation: input.annotation,
|
|
102
|
+
children: normalizeCompositeChildren(resolved, input.sink.failContract),
|
|
103
|
+
location: input.location,
|
|
104
|
+
parameters: input.parameters,
|
|
105
|
+
record: input.record,
|
|
106
|
+
source: 'assert'
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
function recordCompositeAssertion(input) {
|
|
110
|
+
const result = input.record.run({
|
|
111
|
+
location: input.location,
|
|
112
|
+
message: null,
|
|
113
|
+
parameters: input.parameters,
|
|
114
|
+
source: 'assert'
|
|
115
|
+
});
|
|
116
|
+
if (!isPromiseLike(result)) {
|
|
117
|
+
input.sink.recordAssert(createCompositeAssertionNode({
|
|
118
|
+
annotation: input.annotation,
|
|
119
|
+
children: normalizeCompositeChildren(result, input.sink.failContract),
|
|
120
|
+
location: input.location,
|
|
121
|
+
parameters: input.parameters,
|
|
122
|
+
record: input.record,
|
|
123
|
+
source: 'assert'
|
|
124
|
+
}));
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
return recordResolvedCompositeAssertion({
|
|
128
|
+
annotation: input.annotation,
|
|
129
|
+
location: input.location,
|
|
130
|
+
parameters: input.parameters,
|
|
131
|
+
pending: input.sink.recordPendingAssert(),
|
|
132
|
+
record: input.record,
|
|
133
|
+
result,
|
|
134
|
+
sink: input.sink
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
export function recordAssertReference(input) {
|
|
138
|
+
if (!isAssertionReference(input.reference)) {
|
|
139
|
+
input.sink.failContract(createInvalidAssertionReferenceFailure(input.reference));
|
|
140
|
+
}
|
|
141
|
+
const record = getAssertionReferenceRecord(input.reference);
|
|
142
|
+
if (record.kind === 'narrowing-composite') {
|
|
143
|
+
input.sink.recordAssert(createNarrowingCompositeAssertionNode({
|
|
144
|
+
annotation: input.annotation,
|
|
145
|
+
location: input.location,
|
|
146
|
+
parameters: input.parameters,
|
|
147
|
+
record,
|
|
148
|
+
source: 'assert'
|
|
149
|
+
}));
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
return recordCompositeAssertion({
|
|
153
|
+
annotation: input.annotation,
|
|
154
|
+
location: input.location,
|
|
155
|
+
parameters: input.parameters,
|
|
156
|
+
record,
|
|
157
|
+
sink: input.sink
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
export function recordRequireReference(input) {
|
|
161
|
+
if (!isNarrowingAssertionReference(input.reference)) {
|
|
162
|
+
input.sink.failContract(isAssertionReference(input.reference)
|
|
163
|
+
? createInvalidRequireReferenceFailure(getAssertionReferenceRecord(input.reference).name)
|
|
164
|
+
: createInvalidAssertionReferenceFailure(input.reference));
|
|
165
|
+
}
|
|
166
|
+
const record = getNarrowingAssertionReferenceRecord(input.reference);
|
|
167
|
+
input.sink.recordRequire(createNarrowingCompositeAssertionNode({
|
|
168
|
+
annotation: input.annotation,
|
|
169
|
+
location: input.location,
|
|
170
|
+
parameters: input.parameters,
|
|
171
|
+
record,
|
|
172
|
+
source: 'require'
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=custom-assertion-recording.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-assertion-recording.js","sourceRoot":"","sources":["../../../../source/engine/custom-assertion-recording.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { WallClock } from '@enormora/wall-clock';
|
|
2
|
+
import { type Reporter, type ReporterDispatcher, type RunFacts } from './reporter.ts';
|
|
3
|
+
import { type RunResult } from './run-result.ts';
|
|
4
|
+
import type { TestPlan } from './test-plan.ts';
|
|
5
|
+
export type ExecuteExecution = {
|
|
6
|
+
readonly mode: 'concurrent-in-process' | 'serial-in-process';
|
|
7
|
+
};
|
|
8
|
+
export type ExecuteOptions = {
|
|
9
|
+
readonly execution: ExecuteExecution;
|
|
10
|
+
readonly reporters: readonly Reporter[];
|
|
11
|
+
readonly runFacts: RunFacts;
|
|
12
|
+
readonly startedAt: string;
|
|
13
|
+
};
|
|
14
|
+
export type ExecuteDependencies = {
|
|
15
|
+
readonly reporterDispatcher: ReporterDispatcher;
|
|
16
|
+
readonly wallClock: WallClock;
|
|
17
|
+
};
|
|
18
|
+
export type Execute = (testPlan: TestPlan, options?: ExecuteOptions) => Promise<RunResult>;
|
|
19
|
+
export declare function createExecute(dependencies: ExecuteDependencies): Execute;
|
|
20
|
+
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../../source/engine/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EAEhB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAA0C,KAAK,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AAC3G,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CACjC,CAAC;AA8fF,MAAM,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAE3F,wBAAgB,aAAa,CAAC,YAAY,EAAE,mBAAmB,GAAG,OAAO,CAWxE"}
|