@overkill-dev/run 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/assertion-protocol/assertion-evaluation.js +6 -0
  2. package/assertion-protocol/assertion-evaluation.js.map +1 -0
  3. package/assertion-protocol/assertion-node.js +33 -0
  4. package/assertion-protocol/assertion-node.js.map +1 -0
  5. package/assertion-protocol/assertion-reference.js +49 -0
  6. package/assertion-protocol/assertion-reference.js.map +1 -0
  7. package/assertion-protocol/assertions/boolean.js +12 -0
  8. package/assertion-protocol/assertions/boolean.js.map +1 -0
  9. package/assertion-protocol/assertions/collection.js +21 -0
  10. package/assertion-protocol/assertions/collection.js.map +1 -0
  11. package/assertion-protocol/assertions/dispatch.js +47 -0
  12. package/assertion-protocol/assertions/dispatch.js.map +1 -0
  13. package/assertion-protocol/assertions/equality.js +24 -0
  14. package/assertion-protocol/assertions/equality.js.map +1 -0
  15. package/assertion-protocol/assertions/fail.js +8 -0
  16. package/assertion-protocol/assertions/fail.js.map +1 -0
  17. package/assertion-protocol/assertions/numeric.js +43 -0
  18. package/assertion-protocol/assertions/numeric.js.map +1 -0
  19. package/assertion-protocol/assertions/partial.js +17 -0
  20. package/assertion-protocol/assertions/partial.js.map +1 -0
  21. package/assertion-protocol/assertions/presence.js +20 -0
  22. package/assertion-protocol/assertions/presence.js.map +1 -0
  23. package/assertion-protocol/assertions/string.js +33 -0
  24. package/assertion-protocol/assertions/string.js.map +1 -0
  25. package/assertion-protocol/assertions/type-shape.js +43 -0
  26. package/assertion-protocol/assertions/type-shape.js.map +1 -0
  27. package/assertion-protocol/collection-count.js +42 -0
  28. package/assertion-protocol/collection-count.js.map +1 -0
  29. package/assertion-protocol/evaluation.js +170 -0
  30. package/assertion-protocol/evaluation.js.map +1 -0
  31. package/assertion-protocol/partial-matching.js +13 -0
  32. package/assertion-protocol/partial-matching.js.map +1 -0
  33. package/assertion-protocol/source-location.js +76 -0
  34. package/assertion-protocol/source-location.js.map +1 -0
  35. package/assertion-protocol/thrown-error-record.js +17 -0
  36. package/assertion-protocol/thrown-error-record.js.map +1 -0
  37. package/assertion-protocol/thrown-matcher.js +201 -0
  38. package/assertion-protocol/thrown-matcher.js.map +1 -0
  39. package/compare/comparison-result.js +47 -0
  40. package/compare/comparison-result.js.map +1 -0
  41. package/compare/comparison-state.js +20 -0
  42. package/compare/comparison-state.js.map +1 -0
  43. package/compare/comparison.js +78 -0
  44. package/compare/comparison.js.map +1 -0
  45. package/compare/diff-path.js +37 -0
  46. package/compare/diff-path.js.map +1 -0
  47. package/compare/raw-comparison.js +285 -0
  48. package/compare/raw-comparison.js.map +1 -0
  49. package/compare/serialized-value-classification.js +99 -0
  50. package/compare/serialized-value-classification.js.map +1 -0
  51. package/compare/serialized-value-shape.js +12 -0
  52. package/compare/serialized-value-shape.js.map +1 -0
  53. package/compare/serialized-value-state.js +55 -0
  54. package/compare/serialized-value-state.js.map +1 -0
  55. package/compare/serialized-value.js +387 -0
  56. package/compare/serialized-value.js.map +1 -0
  57. package/compare/structured-diff.js +382 -0
  58. package/compare/structured-diff.js.map +1 -0
  59. package/compare/value-classification.js +112 -0
  60. package/compare/value-classification.js.map +1 -0
  61. package/diff/binary-diff.js +49 -0
  62. package/diff/binary-diff.js.map +1 -0
  63. package/diff/string-diff.js +22 -0
  64. package/diff/string-diff.js.map +1 -0
  65. package/engine/assertion-facade.js +361 -0
  66. package/engine/assertion-facade.js.map +1 -0
  67. package/engine/case-execution.js +408 -0
  68. package/engine/case-execution.js.map +1 -0
  69. package/engine/custom-assertion-recording.js +175 -0
  70. package/engine/custom-assertion-recording.js.map +1 -0
  71. package/engine/execution.d.ts +20 -0
  72. package/engine/execution.d.ts.map +1 -0
  73. package/engine/execution.js +323 -0
  74. package/engine/execution.js.map +1 -0
  75. package/engine/identity.js +5 -0
  76. package/engine/identity.js.map +1 -0
  77. package/engine/reporter-event-queue.js +23 -0
  78. package/engine/reporter-event-queue.js.map +1 -0
  79. package/engine/reporter.js +177 -0
  80. package/engine/reporter.js.map +1 -0
  81. package/engine/require-assertion-facade.js +127 -0
  82. package/engine/require-assertion-facade.js.map +1 -0
  83. package/engine/run-result.js +13 -0
  84. package/engine/run-result.js.map +1 -0
  85. package/package.json +17 -3
  86. package/packages/engine/assertion-protocol.entry-point.js +4 -0
  87. package/packages/engine/assertion-protocol.entry-point.js.map +1 -0
  88. package/packages/run/command-line.entry-point.d.ts +5 -0
  89. package/packages/run/command-line.entry-point.d.ts.map +1 -0
  90. package/packages/run/command-line.entry-point.js +3 -0
  91. package/packages/run/command-line.entry-point.js.map +1 -0
  92. package/packages/run/run.entry-point.d.ts +2 -2
  93. package/packages/run/run.entry-point.d.ts.map +1 -1
  94. package/packages/run/run.entry-point.js +1 -1
  95. package/packages/run/run.entry-point.js.map +1 -1
  96. package/readme.md +16 -2
  97. package/run/command-line-runner.d.ts +35 -0
  98. package/run/command-line-runner.d.ts.map +1 -0
  99. package/run/command-line-runner.js +109 -0
  100. package/run/command-line-runner.js.map +1 -0
  101. package/run/run-config.d.ts +24 -0
  102. package/run/run-config.d.ts.map +1 -0
  103. package/run/run-config.js +123 -0
  104. package/run/run-config.js.map +1 -0
  105. package/run/run.d.ts +86 -36
  106. package/run/run.d.ts.map +1 -1
  107. package/run/run.js +177 -8
  108. package/run/run.js.map +1 -1
  109. package/sbom.cdx.json +74 -6
@@ -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":"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"}
@@ -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"}