@overkill-dev/run 0.0.3 → 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.d.ts +5 -0
- package/engine/reporter.d.ts.map +1 -1
- 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/engine/test-node.d.ts +17 -1
- package/engine/test-node.d.ts.map +1 -1
- package/engine/test-plan.d.ts +8 -2
- package/engine/test-plan.d.ts.map +1 -1
- 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,170 @@
|
|
|
1
|
+
import { serializeValue } from "../compare/serialized-value.js";
|
|
2
|
+
import { assertionSummary } from "./assertion-node.js";
|
|
3
|
+
import { assertionEvaluatorByCheck } from "./assertions/dispatch.js";
|
|
4
|
+
import { resolveSourceLocation } from "./source-location.js";
|
|
5
|
+
function primitiveValueType(value) {
|
|
6
|
+
if (value === null) {
|
|
7
|
+
return 'null';
|
|
8
|
+
}
|
|
9
|
+
const valueType = typeof value;
|
|
10
|
+
return valueType === 'object' || valueType === 'function' ? null : valueType;
|
|
11
|
+
}
|
|
12
|
+
function invalidOperand(check, role, value, index) {
|
|
13
|
+
const type = primitiveValueType(value);
|
|
14
|
+
return type === null
|
|
15
|
+
? null
|
|
16
|
+
: {
|
|
17
|
+
check,
|
|
18
|
+
index,
|
|
19
|
+
role,
|
|
20
|
+
type
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function invalidMember(check, role, values) {
|
|
24
|
+
for (const [index, value] of values.entries()) {
|
|
25
|
+
const invalid = invalidOperand(check, role, value, index);
|
|
26
|
+
if (invalid !== null) {
|
|
27
|
+
return invalid;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function invalidExactDeepAssertionOperand(check, assertion) {
|
|
33
|
+
return invalidOperand(check, 'actual', assertion.actual, null) ??
|
|
34
|
+
invalidOperand(check, 'expected', assertion.expected, null);
|
|
35
|
+
}
|
|
36
|
+
function invalidArrayContainsPartialOperand(check, assertion) {
|
|
37
|
+
const invalidActualMember = Array.isArray(assertion.actual)
|
|
38
|
+
? invalidMember(check, 'actual', assertion.actual)
|
|
39
|
+
: null;
|
|
40
|
+
return invalidOperand(check, 'actual', assertion.actual, null) ??
|
|
41
|
+
invalidActualMember ??
|
|
42
|
+
invalidOperand(check, 'expected', assertion.expected, null);
|
|
43
|
+
}
|
|
44
|
+
function invalidMembersPartialDeepEqualOperand(check, assertion) {
|
|
45
|
+
const invalidActualMember = Array.isArray(assertion.actual)
|
|
46
|
+
? invalidMember(check, 'actual', assertion.actual)
|
|
47
|
+
: null;
|
|
48
|
+
const invalidExpectedMember = Array.isArray(assertion.expected)
|
|
49
|
+
? invalidMember(check, 'expected', assertion.expected)
|
|
50
|
+
: null;
|
|
51
|
+
return invalidOperand(check, 'actual', assertion.actual, null) ??
|
|
52
|
+
invalidOperand(check, 'expected', assertion.expected, null) ??
|
|
53
|
+
invalidActualMember ??
|
|
54
|
+
invalidExpectedMember;
|
|
55
|
+
}
|
|
56
|
+
const deepOperandFinders = {
|
|
57
|
+
'array-contains-partial': invalidArrayContainsPartialOperand,
|
|
58
|
+
'deep-equal': invalidExactDeepAssertionOperand,
|
|
59
|
+
'members-partial-deep-equal': invalidMembersPartialDeepEqualOperand,
|
|
60
|
+
'not-deep-equal': invalidExactDeepAssertionOperand,
|
|
61
|
+
'partial-deep-equal': invalidExactDeepAssertionOperand
|
|
62
|
+
};
|
|
63
|
+
function isDeepAssertionCheck(check) {
|
|
64
|
+
return Object.hasOwn(deepOperandFinders, check);
|
|
65
|
+
}
|
|
66
|
+
function isDeepAssertion(assertion) {
|
|
67
|
+
return isDeepAssertionCheck(assertion.check) && Object.hasOwn(assertion, 'expected');
|
|
68
|
+
}
|
|
69
|
+
export function invalidDeepAssertionOperand(assertion) {
|
|
70
|
+
if (assertion.check === 'composite') {
|
|
71
|
+
for (const child of assertion.children) {
|
|
72
|
+
const invalid = invalidDeepAssertionOperand(child);
|
|
73
|
+
if (invalid !== null) {
|
|
74
|
+
return invalid;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return isDeepAssertion(assertion)
|
|
80
|
+
? deepOperandFinders[assertion.check](assertion.check, assertion)
|
|
81
|
+
: null;
|
|
82
|
+
}
|
|
83
|
+
function evaluateAssertionNode(check, assertion) {
|
|
84
|
+
return assertionEvaluatorByCheck[check](assertion);
|
|
85
|
+
}
|
|
86
|
+
function assertNonEmptyItems(items, message) {
|
|
87
|
+
if (items.length === 0) {
|
|
88
|
+
throw new TypeError(message);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function evaluateForeignAssertion(assertion, id) {
|
|
92
|
+
if (assertion.result.passed) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
actual: serializeValue(assertion.label),
|
|
97
|
+
diff: null,
|
|
98
|
+
error: assertion.result.error,
|
|
99
|
+
expected: serializeValue('foreign assertion pass'),
|
|
100
|
+
id,
|
|
101
|
+
kind: 'foreign',
|
|
102
|
+
label: assertion.label,
|
|
103
|
+
location: resolveSourceLocation(assertion.location),
|
|
104
|
+
path: [],
|
|
105
|
+
source: assertion.source,
|
|
106
|
+
summary: assertion.message ?? assertion.summary
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function evaluateLeafAssertion(assertion, id) {
|
|
110
|
+
const evaluation = {
|
|
111
|
+
...evaluateAssertionNode(assertion.check, assertion),
|
|
112
|
+
summary: assertionSummary(assertion)
|
|
113
|
+
};
|
|
114
|
+
if (evaluation.passed) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
actual: evaluation.actual,
|
|
119
|
+
diff: evaluation.diff,
|
|
120
|
+
expected: evaluation.expected,
|
|
121
|
+
id,
|
|
122
|
+
kind: 'leaf',
|
|
123
|
+
location: resolveSourceLocation(assertion.location),
|
|
124
|
+
path: evaluation.path,
|
|
125
|
+
source: assertion.source,
|
|
126
|
+
summary: evaluation.summary
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function evaluateCompositeChild(assertion, id) {
|
|
130
|
+
if (assertion.check === 'foreign') {
|
|
131
|
+
return evaluateForeignAssertion(assertion, id);
|
|
132
|
+
}
|
|
133
|
+
return evaluateLeafAssertion(assertion, id);
|
|
134
|
+
}
|
|
135
|
+
function evaluateCompositeAssertion(assertion, id) {
|
|
136
|
+
const children = assertion.children.flatMap(function evaluateChild(child, index) {
|
|
137
|
+
const failedCheck = evaluateCompositeChild(child, `${id}.${index + 1}`);
|
|
138
|
+
return failedCheck === null ? [] : [failedCheck];
|
|
139
|
+
});
|
|
140
|
+
if (children.length === 0) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
assertNonEmptyItems(children, 'Expected composite assertion failure to contain failed children.');
|
|
144
|
+
return {
|
|
145
|
+
actual: serializeValue(assertion.actual),
|
|
146
|
+
children,
|
|
147
|
+
diff: null,
|
|
148
|
+
expected: serializeValue(assertion.expected),
|
|
149
|
+
id,
|
|
150
|
+
kind: 'composite',
|
|
151
|
+
location: resolveSourceLocation(assertion.location),
|
|
152
|
+
path: [],
|
|
153
|
+
source: assertion.source,
|
|
154
|
+
summary: assertionSummary(assertion)
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
export function evaluateAssertion(assertion, id) {
|
|
158
|
+
const checkId = String(id);
|
|
159
|
+
if (assertion.check === 'composite') {
|
|
160
|
+
return evaluateCompositeAssertion(assertion, checkId);
|
|
161
|
+
}
|
|
162
|
+
if (assertion.check === 'foreign') {
|
|
163
|
+
return evaluateForeignAssertion(assertion, checkId);
|
|
164
|
+
}
|
|
165
|
+
return evaluateLeafAssertion(assertion, checkId);
|
|
166
|
+
}
|
|
167
|
+
export function assertionPasses(assertion) {
|
|
168
|
+
return evaluateAssertion(assertion, 1) === null;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=evaluation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation.js","sourceRoot":"","sources":["../../../../source/assertion-protocol/evaluation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "../compare/comparison.js";
|
|
2
|
+
export function isPlainObject(value) {
|
|
3
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
const prototype = Object.getPrototypeOf(value);
|
|
7
|
+
return prototype === Object.prototype || prototype === null;
|
|
8
|
+
}
|
|
9
|
+
export function ownKeys(value) {
|
|
10
|
+
return Reflect.ownKeys(value);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=partial-matching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partial-matching.js","sourceRoot":"","sources":["../../../../source/assertion-protocol/partial-matching.ts"],"names":[],"mappings":"AAAA,OAAkC,0BAA0B,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAA6C;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
export const unknownSourceLocation = {
|
|
3
|
+
column: null,
|
|
4
|
+
file: '',
|
|
5
|
+
line: null
|
|
6
|
+
};
|
|
7
|
+
const stackFramePattern = /^\s*at (?:.+? \()?(?<file>.+):(?<line>\d+):(?<column>\d+)\)?$/u;
|
|
8
|
+
const internalModulePatterns = [
|
|
9
|
+
/\/assertion-protocol\/source-location\.[cm]?[jt]s$/u,
|
|
10
|
+
/\/assertion-protocol\/assertion-reference\.[cm]?[jt]s$/u,
|
|
11
|
+
/\/engine\/assertion-facade\.[cm]?[jt]s$/u,
|
|
12
|
+
/\/engine\/custom-assertion-recording\.[cm]?[jt]s$/u,
|
|
13
|
+
/\/engine\/require-assertion-facade\.[cm]?[jt]s$/u
|
|
14
|
+
];
|
|
15
|
+
function normalizeStackFile(file) {
|
|
16
|
+
if (!file.startsWith('file:')) {
|
|
17
|
+
return file;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
return fileURLToPath(file);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return file;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function stackFileIsInternal(file) {
|
|
27
|
+
if (file.length === 0 || file.startsWith('node:')) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
const normalizedFile = file.replaceAll('\\', '/');
|
|
31
|
+
return internalModulePatterns.some(function patternMatches(pattern) {
|
|
32
|
+
return pattern.test(normalizedFile);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function sourceLocationFromStackGroups(groups) {
|
|
36
|
+
const file = normalizeStackFile(groups.file);
|
|
37
|
+
return stackFileIsInternal(file)
|
|
38
|
+
? null
|
|
39
|
+
: { column: Number(groups.column), file, line: Number(groups.line) };
|
|
40
|
+
}
|
|
41
|
+
function isStackFrameGroups(groups) {
|
|
42
|
+
return groups.file !== undefined && groups.line !== undefined && groups.column !== undefined;
|
|
43
|
+
}
|
|
44
|
+
function sourceLocationFromStackLine(line) {
|
|
45
|
+
const groups = stackFramePattern.exec(line)?.groups;
|
|
46
|
+
return groups !== undefined && isStackFrameGroups(groups)
|
|
47
|
+
? sourceLocationFromStackGroups(groups)
|
|
48
|
+
: null;
|
|
49
|
+
}
|
|
50
|
+
export function sourceLocationFromStack(stack) {
|
|
51
|
+
return stack.split('\n').reduce(function findLocation(found, line) {
|
|
52
|
+
return found ?? sourceLocationFromStackLine(line);
|
|
53
|
+
}, null) ?? unknownSourceLocation;
|
|
54
|
+
}
|
|
55
|
+
export function captureSourceLocation() {
|
|
56
|
+
const stackCarrier = new Error('Overkill source location');
|
|
57
|
+
let location = null;
|
|
58
|
+
return function capturedSourceLocation() {
|
|
59
|
+
if (location === null) {
|
|
60
|
+
location = sourceLocationFromStack(stackCarrier.stack ?? '');
|
|
61
|
+
}
|
|
62
|
+
return location;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function resolveSourceLocation(location) {
|
|
66
|
+
if (typeof location !== 'function') {
|
|
67
|
+
return location;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
return location();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return unknownSourceLocation;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=source-location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-location.js","sourceRoot":"","sources":["../../../../source/assertion-protocol/source-location.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function createThrownErrorRecord(thrown) {
|
|
2
|
+
if (thrown instanceof Error) {
|
|
3
|
+
return {
|
|
4
|
+
message: thrown.message,
|
|
5
|
+
name: thrown.name,
|
|
6
|
+
stack: thrown.stack ?? null,
|
|
7
|
+
thrown
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
message: 'Test body threw a non-error value.',
|
|
12
|
+
name: typeof thrown,
|
|
13
|
+
stack: null,
|
|
14
|
+
thrown
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=thrown-error-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thrown-error-record.js","sourceRoot":"","sources":["../../../../source/assertion-protocol/thrown-error-record.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACnD,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;QAC1B,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;YAC3B,MAAM;SACT,CAAC;IACN,CAAC;IAED,OAAO;QACH,OAAO,EAAE,oCAAoC;QAC7C,IAAI,EAAE,OAAO,MAAM;QACnB,KAAK,EAAE,IAAI;QACX,MAAM;KACT,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
function assertNonEmptyItems(items, message) {
|
|
2
|
+
if (items.length === 0) {
|
|
3
|
+
throw new TypeError(message);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
function isExactThrownMatcher(matcher) {
|
|
7
|
+
return Object.hasOwn(matcher, 'exact');
|
|
8
|
+
}
|
|
9
|
+
function expectedAction(kind) {
|
|
10
|
+
return kind === 'throws' ? 'throw' : 'reject';
|
|
11
|
+
}
|
|
12
|
+
function missingThrownValueChild(input) {
|
|
13
|
+
return {
|
|
14
|
+
actual: false,
|
|
15
|
+
check: 'true',
|
|
16
|
+
location: input.location,
|
|
17
|
+
message: `Expected function to ${expectedAction(input.kind)}.`,
|
|
18
|
+
source: input.source
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function expectedMatcherChild(input) {
|
|
22
|
+
if (input.check === 'equal') {
|
|
23
|
+
return {
|
|
24
|
+
actual: input.actual,
|
|
25
|
+
check: input.check,
|
|
26
|
+
expected: input.expected,
|
|
27
|
+
location: input.location,
|
|
28
|
+
message: input.message,
|
|
29
|
+
source: input.source
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
actual: input.actual,
|
|
34
|
+
check: input.check,
|
|
35
|
+
expected: input.expected,
|
|
36
|
+
location: input.location,
|
|
37
|
+
message: input.message,
|
|
38
|
+
source: input.source
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function matchMatcherChild(input) {
|
|
42
|
+
return {
|
|
43
|
+
actual: input.actual,
|
|
44
|
+
check: input.check,
|
|
45
|
+
location: input.location,
|
|
46
|
+
message: input.message,
|
|
47
|
+
pattern: input.pattern,
|
|
48
|
+
source: input.source
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function errorCode(error) {
|
|
52
|
+
return Reflect.get(error, 'code');
|
|
53
|
+
}
|
|
54
|
+
function matcherHas(matcher, key) {
|
|
55
|
+
return Object.hasOwn(matcher, key);
|
|
56
|
+
}
|
|
57
|
+
function errorInstanceChild(input, value, label) {
|
|
58
|
+
return expectedMatcherChild({
|
|
59
|
+
actual: value,
|
|
60
|
+
check: 'instance-of',
|
|
61
|
+
expected: Error,
|
|
62
|
+
location: input.location,
|
|
63
|
+
message: `Expected ${label} to be an Error.`,
|
|
64
|
+
source: input.source
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function typeMatcherChildren(input, matcher, value, label) {
|
|
68
|
+
return matcherHas(matcher, 'type')
|
|
69
|
+
? [
|
|
70
|
+
expectedMatcherChild({
|
|
71
|
+
actual: value,
|
|
72
|
+
check: 'instance-of',
|
|
73
|
+
expected: matcher.type,
|
|
74
|
+
location: input.location,
|
|
75
|
+
message: `Expected ${label} to be an instance of the constructor.`,
|
|
76
|
+
source: input.source
|
|
77
|
+
})
|
|
78
|
+
]
|
|
79
|
+
: [];
|
|
80
|
+
}
|
|
81
|
+
function messageMatcherChildren(input, matcher, value, label) {
|
|
82
|
+
if (matcherHas(matcher, 'message')) {
|
|
83
|
+
return matcher.message instanceof RegExp
|
|
84
|
+
? [
|
|
85
|
+
matchMatcherChild({
|
|
86
|
+
actual: value.message,
|
|
87
|
+
check: 'match',
|
|
88
|
+
location: input.location,
|
|
89
|
+
message: `Expected ${label} message to match the pattern.`,
|
|
90
|
+
pattern: matcher.message,
|
|
91
|
+
source: input.source
|
|
92
|
+
})
|
|
93
|
+
]
|
|
94
|
+
: [
|
|
95
|
+
expectedMatcherChild({
|
|
96
|
+
actual: value.message,
|
|
97
|
+
check: 'equal',
|
|
98
|
+
expected: matcher.message,
|
|
99
|
+
location: input.location,
|
|
100
|
+
message: `Expected ${label} message to equal the string.`,
|
|
101
|
+
source: input.source
|
|
102
|
+
})
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
function codeMatcherChildren(input, matcher, value, label) {
|
|
108
|
+
return matcherHas(matcher, 'code')
|
|
109
|
+
? [
|
|
110
|
+
expectedMatcherChild({
|
|
111
|
+
actual: errorCode(value),
|
|
112
|
+
check: 'equal',
|
|
113
|
+
expected: matcher.code,
|
|
114
|
+
location: input.location,
|
|
115
|
+
message: `Expected ${label} code to equal the string.`,
|
|
116
|
+
source: input.source
|
|
117
|
+
})
|
|
118
|
+
]
|
|
119
|
+
: [];
|
|
120
|
+
}
|
|
121
|
+
function nameMatcherChildren(input, matcher, value, label) {
|
|
122
|
+
return matcherHas(matcher, 'name')
|
|
123
|
+
? [
|
|
124
|
+
expectedMatcherChild({
|
|
125
|
+
actual: value.name,
|
|
126
|
+
check: 'equal',
|
|
127
|
+
expected: matcher.name,
|
|
128
|
+
location: input.location,
|
|
129
|
+
message: `Expected ${label} name to equal the string.`,
|
|
130
|
+
source: input.source
|
|
131
|
+
})
|
|
132
|
+
]
|
|
133
|
+
: [];
|
|
134
|
+
}
|
|
135
|
+
function causeMatcherChildren(input) {
|
|
136
|
+
return matcherHas(input.matcher, 'cause')
|
|
137
|
+
? input.childrenForMatcher(input.assertion, input.matcher.cause, input.value.cause, `${input.label} cause`)
|
|
138
|
+
: [];
|
|
139
|
+
}
|
|
140
|
+
function structuredErrorChildren(input) {
|
|
141
|
+
if (!(input.value instanceof Error)) {
|
|
142
|
+
return [errorInstanceChild(input.assertion, input.value, input.label)];
|
|
143
|
+
}
|
|
144
|
+
const errorInput = {
|
|
145
|
+
...input,
|
|
146
|
+
value: input.value
|
|
147
|
+
};
|
|
148
|
+
return [
|
|
149
|
+
errorInstanceChild(input.assertion, input.value, input.label),
|
|
150
|
+
...typeMatcherChildren(input.assertion, input.matcher, input.value, input.label),
|
|
151
|
+
...messageMatcherChildren(input.assertion, input.matcher, input.value, input.label),
|
|
152
|
+
...codeMatcherChildren(input.assertion, input.matcher, input.value, input.label),
|
|
153
|
+
...nameMatcherChildren(input.assertion, input.matcher, input.value, input.label),
|
|
154
|
+
...causeMatcherChildren(errorInput)
|
|
155
|
+
];
|
|
156
|
+
}
|
|
157
|
+
const matcherChildren = function createMatcherChildren(input, matcher, value, label) {
|
|
158
|
+
return isExactThrownMatcher(matcher)
|
|
159
|
+
? [
|
|
160
|
+
expectedMatcherChild({
|
|
161
|
+
actual: value,
|
|
162
|
+
check: 'equal',
|
|
163
|
+
expected: matcher.exact,
|
|
164
|
+
location: input.location,
|
|
165
|
+
message: `Expected ${label} to equal the exact matcher.`,
|
|
166
|
+
source: input.source
|
|
167
|
+
})
|
|
168
|
+
]
|
|
169
|
+
: structuredErrorChildren({
|
|
170
|
+
assertion: input,
|
|
171
|
+
childrenForMatcher: createMatcherChildren,
|
|
172
|
+
label,
|
|
173
|
+
matcher,
|
|
174
|
+
value
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
export function thrownMatcherChildren(input) {
|
|
178
|
+
const expectedStatus = input.kind === 'throws' ? 'threw' : 'rejected';
|
|
179
|
+
const children = input.observation.status === expectedStatus
|
|
180
|
+
? matcherChildren(input, input.matcher, input.observation.value, 'thrown value')
|
|
181
|
+
: [missingThrownValueChild(input)];
|
|
182
|
+
assertNonEmptyItems(children, 'Expected thrown matcher assertion to create children.');
|
|
183
|
+
return children;
|
|
184
|
+
}
|
|
185
|
+
function thrownMatcherSummary(kind) {
|
|
186
|
+
return `Expected function to ${expectedAction(kind)} matching value.`;
|
|
187
|
+
}
|
|
188
|
+
export function createThrownMatcherAssertion(input) {
|
|
189
|
+
return {
|
|
190
|
+
actual: input.observation,
|
|
191
|
+
check: 'composite',
|
|
192
|
+
children: thrownMatcherChildren(input),
|
|
193
|
+
expected: input.matcher,
|
|
194
|
+
location: input.location,
|
|
195
|
+
message: input.message,
|
|
196
|
+
name: input.kind,
|
|
197
|
+
source: input.source,
|
|
198
|
+
summary: thrownMatcherSummary(input.kind)
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=thrown-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thrown-matcher.js","sourceRoot":"","sources":["../../../../source/assertion-protocol/thrown-matcher.ts"],"names":[],"mappings":"AAkHA,SAAS,mBAAmB,CACxB,KAAsB,EACtB,OAAe;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAsB;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,IAAyB;IAC7C,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED,SAAS,uBAAuB,CAC5B,KAAmC;IAEnC,OAAO;QACH,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,wBAAwB,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;QAC9D,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;AACN,CAAC;AAED,SAAS,oBAAoB,CACzB,KAAiC;IAEjC,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO;YACH,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;SACvB,CAAC;IACN,CAAC;IAED,OAAO;QACH,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CACtB,KAAuC;IAEvC,OAAO;QACH,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,KAAY;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CACf,OAAqB,EACrB,GAAe;IAEf,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,kBAAkB,CACvB,KAAmC,EACnC,KAAc,EACd,KAAa;IAEb,OAAO,oBAAoB,CAAC;QACxB,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,YAAY,KAAK,kBAAkB;QAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;KACvB,CAAC,CAAC;AACP,CAAC;AAED,SAAS,mBAAmB,CACxB,KAAmC,EACnC,OAAqB,EACrB,KAAY,EACZ,KAAa;IAEb,OAAO,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9B,CAAC,CAAC;YACE,oBAAoB,CAAC;gBACjB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,aAAa;gBACpB,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,YAAY,KAAK,wCAAwC;gBAClE,MAAM,EAAE,KAAK,CAAC,MAAM;aACvB,CAAC;SACL;QACD,CAAC,CAAC,EAAE,CAAC;AACb,CAAC;AAED,SAAS,sBAAsB,CAC3B,KAAmC,EACnC,OAAqB,EACrB,KAAY,EACZ,KAAa;IAEb,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,OAAO,YAAY,MAAM;YACpC,CAAC,CAAC;gBACE,iBAAiB,CAAC;oBACd,MAAM,EAAE,KAAK,CAAC,OAAO;oBACrB,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO,EAAE,YAAY,KAAK,gCAAgC;oBAC1D,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACvB,CAAC;aACL;YACD,CAAC,CAAC;gBACE,oBAAoB,CAAC;oBACjB,MAAM,EAAE,KAAK,CAAC,OAAO;oBACrB,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,OAAO,CAAC,OAAO;oBACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO,EAAE,YAAY,KAAK,+BAA+B;oBACzD,MAAM,EAAE,KAAK,CAAC,MAAM;iBACvB,CAAC;aACL,CAAC;IACV,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CACxB,KAAmC,EACnC,OAAqB,EACrB,KAAY,EACZ,KAAa;IAEb,OAAO,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9B,CAAC,CAAC;YACE,oBAAoB,CAAC;gBACjB,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC;gBACxB,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,YAAY,KAAK,4BAA4B;gBACtD,MAAM,EAAE,KAAK,CAAC,MAAM;aACvB,CAAC;SACL;QACD,CAAC,CAAC,EAAE,CAAC;AACb,CAAC;AAED,SAAS,mBAAmB,CACxB,KAAmC,EACnC,OAAqB,EACrB,KAAY,EACZ,KAAa;IAEb,OAAO,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9B,CAAC,CAAC;YACE,oBAAoB,CAAC;gBACjB,MAAM,EAAE,KAAK,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,YAAY,KAAK,4BAA4B;gBACtD,MAAM,EAAE,KAAK,CAAC,MAAM;aACvB,CAAC;SACL;QACD,CAAC,CAAC,EAAE,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CACzB,KAAgC;IAEhC,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QACrC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,QAAQ,CAAC;QAC3G,CAAC,CAAC,EAAE,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAC5B,KAAqC;IAErC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,CAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAE,CAAC;IAC7E,CAAC;IAED,MAAM,UAAU,GAA8B;QAC1C,GAAG,KAAK;QACR,KAAK,EAAE,KAAK,CAAC,KAAK;KACrB,CAAC;IAEF,OAAO;QACH,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QAC7D,GAAG,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QAChF,GAAG,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QACnF,GAAG,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QAChF,GAAG,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;QAChF,GAAG,oBAAoB,CAAC,UAAU,CAAC;KACtC,CAAC;AACN,CAAC;AAED,MAAM,eAAe,GAA2B,SAAS,qBAAqB,CAC1E,KAAmC,EACnC,OAAsB,EACtB,KAAc,EACd,KAAa;IAEb,OAAO,oBAAoB,CAAC,OAAO,CAAC;QAChC,CAAC,CAAC;YACE,oBAAoB,CAAC;gBACjB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,OAAO,CAAC,KAAK;gBACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,YAAY,KAAK,8BAA8B;gBACxD,MAAM,EAAE,KAAK,CAAC,MAAM;aACvB,CAAC;SACL;QACD,CAAC,CAAC,uBAAuB,CAAC;YACtB,SAAS,EAAE,KAAK;YAChB,kBAAkB,EAAE,qBAAqB;YACzC,KAAK;YACL,OAAO;YACP,KAAK;SACR,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,UAAU,qBAAqB,CACjC,KAAmC;IAEnC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,cAAc;QACxD,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC;QAChF,CAAC,CAAC,CAAE,uBAAuB,CAAC,KAAK,CAAC,CAAE,CAAC;IAEzC,mBAAmB,CAAC,QAAQ,EAAE,uDAAuD,CAAC,CAAC;IAEvF,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAyB;IACnD,OAAO,wBAAwB,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,4BAA4B,CACxC,KAAmC;IAEnC,OAAO;QACH,MAAM,EAAE,KAAK,CAAC,WAAW;QACzB,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC;QACtC,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;KAC5C,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { serializeValue } from "./serialized-value.js";
|
|
2
|
+
export const emptyPath = [];
|
|
3
|
+
function indexSegment(index) {
|
|
4
|
+
return { index, kind: 'index' };
|
|
5
|
+
}
|
|
6
|
+
function operationPath(operation) {
|
|
7
|
+
if (operation.operation === 'missing-index') {
|
|
8
|
+
return [indexSegment(operation.index)];
|
|
9
|
+
}
|
|
10
|
+
if (operation.operation === 'missing-entry' || operation.operation === 'missing-member') {
|
|
11
|
+
return emptyPath;
|
|
12
|
+
}
|
|
13
|
+
return operation.path;
|
|
14
|
+
}
|
|
15
|
+
export function firstDiffPath(diff) {
|
|
16
|
+
if (diff === null || diff.kind === 'value' || diff.kind === 'string' || diff.kind === 'binary') {
|
|
17
|
+
return emptyPath;
|
|
18
|
+
}
|
|
19
|
+
const operation = diff.operations[0];
|
|
20
|
+
return operation === undefined ? emptyPath : operationPath(operation);
|
|
21
|
+
}
|
|
22
|
+
export function comparisonResult(input) {
|
|
23
|
+
return {
|
|
24
|
+
actual: serializeValue(input.actual),
|
|
25
|
+
diff: input.diff,
|
|
26
|
+
expected: serializeValue(input.expected),
|
|
27
|
+
passed: input.passed,
|
|
28
|
+
path: input.path
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function passedResult(actual, expected) {
|
|
32
|
+
return comparisonResult({ actual, diff: null, expected, passed: true, path: emptyPath });
|
|
33
|
+
}
|
|
34
|
+
export function failedResult(actual, expected, diff) {
|
|
35
|
+
return comparisonResult({ actual, diff, expected, passed: false, path: firstDiffPath(diff) });
|
|
36
|
+
}
|
|
37
|
+
export function serializedValueDiff(actual, expected) {
|
|
38
|
+
return {
|
|
39
|
+
actual: serializeValue(actual),
|
|
40
|
+
expected: serializeValue(expected),
|
|
41
|
+
kind: 'value'
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function valueMismatch(actual, expected) {
|
|
45
|
+
return failedResult(actual, expected, serializedValueDiff(actual, expected));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=comparison-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-result.js","sourceRoot":"","sources":["../../../../source/compare/comparison-result.ts"],"names":[],"mappings":"AAQA,OAAO,EAAwB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkB7E,MAAM,CAAC,MAAM,SAAS,GAA+B,EAAE,CAAC;AAExD,SAAS,YAAY,CAAC,KAAa;IAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAClB,SAAyF;IAEzF,IAAI,SAAS,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;QAC1C,OAAO,CAAE,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAE,CAAC;IAC7C,CAAC;IAED,IAAI,SAAS,CAAC,SAAS,KAAK,eAAe,IAAI,SAAS,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;QACtF,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC3C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7F,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAErC,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IACzD,OAAO;QACH,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QACpC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;KACnB,CAAC;AACN,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,QAAiB;IAC3D,OAAO,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,QAAiB,EAAE,IAAiB;IAC9E,OAAO,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAe,EAAE,QAAiB;IAClE,OAAO;QACH,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;QAC9B,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;QAClC,IAAI,EAAE,OAAO;KAChB,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe,EAAE,QAAiB;IAC5D,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function createComparisonState() {
|
|
2
|
+
return {
|
|
3
|
+
actualToExpected: new WeakMap(),
|
|
4
|
+
expectedToActual: new WeakMap()
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function objectPairStatus(actual, expected, state) {
|
|
8
|
+
const previousExpected = state.actualToExpected.get(actual);
|
|
9
|
+
const previousActual = state.expectedToActual.get(expected);
|
|
10
|
+
if (previousExpected === expected && previousActual === actual) {
|
|
11
|
+
return 'seen';
|
|
12
|
+
}
|
|
13
|
+
if (previousExpected !== undefined || previousActual !== undefined) {
|
|
14
|
+
return 'topology-mismatch';
|
|
15
|
+
}
|
|
16
|
+
state.actualToExpected.set(actual, expected);
|
|
17
|
+
state.expectedToActual.set(expected, actual);
|
|
18
|
+
return 'new';
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=comparison-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comparison-state.js","sourceRoot":"","sources":["../../../../source/compare/comparison-state.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,qBAAqB;IACjC,OAAO;QACH,gBAAgB,EAAE,IAAI,OAAO,EAAoB;QACjD,gBAAgB,EAAE,IAAI,OAAO,EAAoB;KACpD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,MAAe,EACf,QAAiB,EACjB,KAAsB;IAEtB,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE5D,IAAI,gBAAgB,KAAK,QAAQ,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,gBAAgB,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjE,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE7C,OAAO,KAAK,CAAC;AACjB,CAAC"}
|