@overkill-dev/doubles 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/assert/assertion-extension.d.ts +65 -0
- package/assert/assertion-extension.d.ts.map +1 -0
- package/assert/assertion-extension.js +250 -0
- package/assert/assertion-extension.js.map +1 -0
- package/doubles/disposal-symbol.js +10 -0
- package/doubles/disposal-symbol.js.map +1 -0
- package/doubles/double-behavior.d.ts +106 -0
- package/doubles/double-behavior.d.ts.map +1 -0
- package/doubles/double-behavior.js +257 -0
- package/doubles/double-behavior.js.map +1 -0
- package/doubles/double-chronology.js +78 -0
- package/doubles/double-chronology.js.map +1 -0
- package/doubles/double-history-api.js +125 -0
- package/doubles/double-history-api.js.map +1 -0
- package/doubles/double-history-record.d.ts +82 -0
- package/doubles/double-history-record.d.ts.map +1 -0
- package/doubles/double-history-record.js +65 -0
- package/doubles/double-history-record.js.map +1 -0
- package/doubles/double-history-store.d.ts +21 -0
- package/doubles/double-history-store.d.ts.map +1 -0
- package/doubles/double-history-store.js +118 -0
- package/doubles/double-history-store.js.map +1 -0
- package/doubles/double-history.d.ts +141 -0
- package/doubles/double-history.d.ts.map +1 -0
- package/doubles/double-history.js +32 -0
- package/doubles/double-history.js.map +1 -0
- package/doubles/double-iterator-event-types.d.ts +25 -0
- package/doubles/double-iterator-event-types.d.ts.map +1 -0
- package/doubles/double-iterator-tracking.d.ts +12 -0
- package/doubles/double-iterator-tracking.d.ts.map +1 -0
- package/doubles/double-iterator-tracking.js +161 -0
- package/doubles/double-iterator-tracking.js.map +1 -0
- package/doubles/double-rule-arguments.d.ts +18 -0
- package/doubles/double-rule-arguments.d.ts.map +1 -0
- package/doubles/double-rule-callback.d.ts +40 -0
- package/doubles/double-rule-callback.d.ts.map +1 -0
- package/doubles/double-rule-callback.js +84 -0
- package/doubles/double-rule-callback.js.map +1 -0
- package/doubles/double-rule-generator.d.ts +108 -0
- package/doubles/double-rule-generator.d.ts.map +1 -0
- package/doubles/double-rule-generator.js +37 -0
- package/doubles/double-rule-generator.js.map +1 -0
- package/doubles/double-rule-types.d.ts +162 -0
- package/doubles/double-rule-types.d.ts.map +1 -0
- package/doubles/double-rule.d.ts +3 -0
- package/doubles/double-rule.d.ts.map +1 -0
- package/doubles/double-rule.js +113 -0
- package/doubles/double-rule.js.map +1 -0
- package/doubles/double-runtime.js +173 -0
- package/doubles/double-runtime.js.map +1 -0
- package/doubles/double-signature.d.ts +5 -0
- package/doubles/double-signature.d.ts.map +1 -0
- package/doubles/double-usage-argument-assertion.js +202 -0
- package/doubles/double-usage-argument-assertion.js.map +1 -0
- package/doubles/double-usage-contract.d.ts +29 -0
- package/doubles/double-usage-contract.d.ts.map +1 -0
- package/doubles/double-usage-contract.js +11 -0
- package/doubles/double-usage-contract.js.map +1 -0
- package/doubles/double-usage-count-assertion.js +73 -0
- package/doubles/double-usage-count-assertion.js.map +1 -0
- package/doubles/double-usage-disposal-assertion.js +175 -0
- package/doubles/double-usage-disposal-assertion.js.map +1 -0
- package/doubles/double-usage-inspection.js +59 -0
- package/doubles/double-usage-inspection.js.map +1 -0
- package/doubles/double-usage-iterator-assertion.js +124 -0
- package/doubles/double-usage-iterator-assertion.js.map +1 -0
- package/doubles/double-usage-order-assertion.js +91 -0
- package/doubles/double-usage-order-assertion.js.map +1 -0
- package/doubles/double-usage.d.ts +81 -0
- package/doubles/double-usage.d.ts.map +1 -0
- package/doubles/double-usage.js +228 -0
- package/doubles/double-usage.js.map +1 -0
- package/doubles/protocol-disposable-double.d.ts +16 -0
- package/doubles/protocol-disposable-double.d.ts.map +1 -0
- package/doubles/protocol-disposable-double.js +37 -0
- package/doubles/protocol-disposable-double.js.map +1 -0
- package/doubles/protocol-double-metadata.js +30 -0
- package/doubles/protocol-double-metadata.js.map +1 -0
- package/doubles/protocol-double.d.ts +50 -0
- package/doubles/protocol-double.d.ts.map +1 -0
- package/doubles/protocol-double.js +76 -0
- package/doubles/protocol-double.js.map +1 -0
- package/doubles/protocol-iterator-double.d.ts +93 -0
- package/doubles/protocol-iterator-double.d.ts.map +1 -0
- package/doubles/protocol-iterator-double.js +512 -0
- package/doubles/protocol-iterator-double.js.map +1 -0
- package/doubles/test-double.d.ts +62 -0
- package/doubles/test-double.d.ts.map +1 -0
- package/doubles/test-double.js +192 -0
- package/doubles/test-double.js.map +1 -0
- package/package.json +38 -6
- package/packages/doubles/doubles.entry-point.d.ts +13 -0
- package/packages/doubles/doubles.entry-point.d.ts.map +1 -0
- package/packages/doubles/doubles.entry-point.js +5 -0
- package/packages/doubles/doubles.entry-point.js.map +1 -0
- package/readme.md +423 -5
- package/sbom.cdx.json +50 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { comparePartially } from "@overkill-dev/engine/compare/raw-comparison.js";
|
|
2
|
+
const unanswered = { answered: false };
|
|
3
|
+
export function isUnknownFunction(value) {
|
|
4
|
+
return typeof value === 'function';
|
|
5
|
+
}
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return typeof value === 'object' && value !== null;
|
|
8
|
+
}
|
|
9
|
+
export function isConstructorInstance(value) {
|
|
10
|
+
return isRecord(value) || typeof value === 'function';
|
|
11
|
+
}
|
|
12
|
+
export function ensureConstructorInstance(instance, source) {
|
|
13
|
+
if (!isConstructorInstance(instance)) {
|
|
14
|
+
throw new TypeError(`${source} requires an object instance.`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function returnsBehavior(value) {
|
|
18
|
+
return {
|
|
19
|
+
behaviorKind: 'returns',
|
|
20
|
+
mode: 'call',
|
|
21
|
+
result() {
|
|
22
|
+
return value;
|
|
23
|
+
},
|
|
24
|
+
produce() {
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function resolvesBehavior(value) {
|
|
30
|
+
return {
|
|
31
|
+
behaviorKind: 'resolves',
|
|
32
|
+
mode: 'call',
|
|
33
|
+
async result() {
|
|
34
|
+
return value;
|
|
35
|
+
},
|
|
36
|
+
async produce() {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function rejectsBehavior(reason) {
|
|
42
|
+
return {
|
|
43
|
+
behaviorKind: 'rejects',
|
|
44
|
+
mode: 'call',
|
|
45
|
+
async result() {
|
|
46
|
+
throw reason;
|
|
47
|
+
},
|
|
48
|
+
async produce() {
|
|
49
|
+
throw reason;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function throwsBehavior(thrown) {
|
|
54
|
+
return {
|
|
55
|
+
behaviorKind: 'throws',
|
|
56
|
+
mode: 'both',
|
|
57
|
+
result() {
|
|
58
|
+
throw thrown;
|
|
59
|
+
},
|
|
60
|
+
produce() {
|
|
61
|
+
throw thrown;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function constructsBehavior(instance) {
|
|
66
|
+
ensureConstructorInstance(instance, 'rule.constructs()');
|
|
67
|
+
return {
|
|
68
|
+
behaviorKind: 'constructs',
|
|
69
|
+
mode: 'construction',
|
|
70
|
+
result() {
|
|
71
|
+
return instance;
|
|
72
|
+
},
|
|
73
|
+
produce() {
|
|
74
|
+
return instance;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function callsBehavior(answer) {
|
|
79
|
+
return {
|
|
80
|
+
behaviorKind: 'calls',
|
|
81
|
+
mode: 'both',
|
|
82
|
+
result() {
|
|
83
|
+
throw new TypeError('calls result marker should not be called.');
|
|
84
|
+
},
|
|
85
|
+
produce(invocation) {
|
|
86
|
+
return answer(...invocation.arguments);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function ensureCallInvocation(invocation) {
|
|
91
|
+
if (invocation.kind !== 'call') {
|
|
92
|
+
throw new TypeError('generator behavior can only answer calls.');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function syncValuesIterator(values, returnValue) {
|
|
96
|
+
return (function* yieldValues() {
|
|
97
|
+
yield* values;
|
|
98
|
+
return returnValue;
|
|
99
|
+
})();
|
|
100
|
+
}
|
|
101
|
+
function syncDelegatedIterator(sourceFactory, invocationArguments) {
|
|
102
|
+
return (function* yieldDelegatedValues() {
|
|
103
|
+
const returnValue = yield* sourceFactory(...invocationArguments);
|
|
104
|
+
return returnValue;
|
|
105
|
+
})();
|
|
106
|
+
}
|
|
107
|
+
function asyncValuesIterator(values, returnValue) {
|
|
108
|
+
return (async function* yieldAsyncValues() {
|
|
109
|
+
yield* values;
|
|
110
|
+
return returnValue;
|
|
111
|
+
})();
|
|
112
|
+
}
|
|
113
|
+
function asyncDelegatedIterator(sourceFactory, invocationArguments) {
|
|
114
|
+
return (async function* yieldAsyncDelegatedValues() {
|
|
115
|
+
const returnValue = yield* sourceFactory(...invocationArguments);
|
|
116
|
+
return returnValue;
|
|
117
|
+
})();
|
|
118
|
+
}
|
|
119
|
+
export function yieldsBehavior(values, returnValue) {
|
|
120
|
+
const snapshot = Array.from(values);
|
|
121
|
+
return {
|
|
122
|
+
behaviorKind: 'yields',
|
|
123
|
+
mode: 'call',
|
|
124
|
+
result() {
|
|
125
|
+
return syncValuesIterator(snapshot, returnValue);
|
|
126
|
+
},
|
|
127
|
+
produce(invocation, runtime) {
|
|
128
|
+
ensureCallInvocation(invocation);
|
|
129
|
+
return runtime.trackSyncIterator(invocation, function createIterator() {
|
|
130
|
+
return syncValuesIterator(snapshot, returnValue);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export function yieldsFromBehavior(sourceFactory) {
|
|
136
|
+
return {
|
|
137
|
+
behaviorKind: 'yields-from',
|
|
138
|
+
mode: 'call',
|
|
139
|
+
result() {
|
|
140
|
+
throw new TypeError('yieldsFrom result marker should not be called.');
|
|
141
|
+
},
|
|
142
|
+
produce(invocation, runtime) {
|
|
143
|
+
ensureCallInvocation(invocation);
|
|
144
|
+
const invocationArguments = Array.from(invocation.arguments);
|
|
145
|
+
return runtime.trackSyncIterator(invocation, function createIterator() {
|
|
146
|
+
return syncDelegatedIterator(sourceFactory, invocationArguments);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export function yieldsAsyncBehavior(values, returnValue) {
|
|
152
|
+
const snapshot = Array.from(values);
|
|
153
|
+
return {
|
|
154
|
+
behaviorKind: 'yields-async',
|
|
155
|
+
mode: 'call',
|
|
156
|
+
result() {
|
|
157
|
+
return asyncValuesIterator(snapshot, returnValue);
|
|
158
|
+
},
|
|
159
|
+
produce(invocation, runtime) {
|
|
160
|
+
ensureCallInvocation(invocation);
|
|
161
|
+
return runtime.trackAsyncIterator(invocation, function createIterator() {
|
|
162
|
+
return asyncValuesIterator(snapshot, returnValue);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
export function yieldsAsyncFromBehavior(sourceFactory) {
|
|
168
|
+
return {
|
|
169
|
+
behaviorKind: 'yields-async-from',
|
|
170
|
+
mode: 'call',
|
|
171
|
+
result() {
|
|
172
|
+
throw new TypeError('yieldsAsyncFrom result marker should not be called.');
|
|
173
|
+
},
|
|
174
|
+
produce(invocation, runtime) {
|
|
175
|
+
ensureCallInvocation(invocation);
|
|
176
|
+
const invocationArguments = Array.from(invocation.arguments);
|
|
177
|
+
return runtime.trackAsyncIterator(invocation, function createIterator() {
|
|
178
|
+
return asyncDelegatedIterator(sourceFactory, invocationArguments);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
export function sequenceBehavior(entries) {
|
|
184
|
+
return {
|
|
185
|
+
behaviorKind: 'sequence',
|
|
186
|
+
entries,
|
|
187
|
+
mode: 'both',
|
|
188
|
+
result() {
|
|
189
|
+
throw new TypeError('sequence result marker should not be called.');
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export function isRuntimeBehavior(value) {
|
|
194
|
+
return isRecord(value) &&
|
|
195
|
+
Object.hasOwn(value, 'behaviorKind') &&
|
|
196
|
+
Object.hasOwn(value, 'mode');
|
|
197
|
+
}
|
|
198
|
+
export function isRuntimeRule(value) {
|
|
199
|
+
return isRecord(value) &&
|
|
200
|
+
Object.hasOwn(value, 'behavior') &&
|
|
201
|
+
Object.hasOwn(value, 'criterion');
|
|
202
|
+
}
|
|
203
|
+
function behaviorCanAnswer(behavior, invocation) {
|
|
204
|
+
return behavior.mode === 'both' || behavior.mode === invocation.kind;
|
|
205
|
+
}
|
|
206
|
+
function behaviorFromEntry(entry) {
|
|
207
|
+
return isRuntimeBehavior(entry) ? entry : returnsBehavior(entry);
|
|
208
|
+
}
|
|
209
|
+
function fixedBehaviorFrom(behavior, invocation, runtime) {
|
|
210
|
+
let currentBehavior = behavior;
|
|
211
|
+
while (currentBehavior.behaviorKind === 'sequence') {
|
|
212
|
+
const entry = runtime.nextSequenceEntry(currentBehavior);
|
|
213
|
+
if (entry === undefined) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
currentBehavior = behaviorFromEntry(entry);
|
|
217
|
+
if (!behaviorCanAnswer(currentBehavior, invocation)) {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return currentBehavior;
|
|
222
|
+
}
|
|
223
|
+
export function answerFromBehavior(behavior, invocation, runtime) {
|
|
224
|
+
if (!behaviorCanAnswer(behavior, invocation)) {
|
|
225
|
+
return unanswered;
|
|
226
|
+
}
|
|
227
|
+
const fixedBehavior = fixedBehaviorFrom(behavior, invocation, runtime);
|
|
228
|
+
return fixedBehavior === null
|
|
229
|
+
? unanswered
|
|
230
|
+
: {
|
|
231
|
+
answered: true,
|
|
232
|
+
value: fixedBehavior.behaviorKind === 'sequence'
|
|
233
|
+
? fixedBehavior.result()
|
|
234
|
+
: fixedBehavior.produce(invocation, runtime)
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
function argumentsMatch(actualArguments, expectedArguments) {
|
|
238
|
+
return actualArguments.length >= expectedArguments.length &&
|
|
239
|
+
expectedArguments.every(function argumentMatches(expectedArgument, index) {
|
|
240
|
+
return comparePartially(actualArguments[index], expectedArgument);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
export function ruleMatches(configuredRule, invocation) {
|
|
244
|
+
if (configuredRule.criterion.invocationKind !== invocation.kind) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
return configuredRule.criterion.kind === 'arguments'
|
|
248
|
+
? argumentsMatch(invocation.arguments, configuredRule.criterion.expectedArguments)
|
|
249
|
+
: configuredRule.criterion.index === invocation.index;
|
|
250
|
+
}
|
|
251
|
+
export function fallbackForInvocation(fallback, invocation) {
|
|
252
|
+
if (isRuntimeBehavior(fallback)) {
|
|
253
|
+
return fallback;
|
|
254
|
+
}
|
|
255
|
+
return fallback[invocation.kind] ?? null;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=double-behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-behavior.js","sourceRoot":"","sources":["../../../../source/doubles/double-behavior.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const testDoubleSymbol = Symbol('overkill.testDouble');
|
|
2
|
+
const chronologySymbol = Symbol('overkill.doubleChronology');
|
|
3
|
+
export function createChronologyScope() {
|
|
4
|
+
let nextOrder = 0;
|
|
5
|
+
const token = {};
|
|
6
|
+
return {
|
|
7
|
+
nextOrder() {
|
|
8
|
+
const order = nextOrder;
|
|
9
|
+
nextOrder += 1;
|
|
10
|
+
return order;
|
|
11
|
+
},
|
|
12
|
+
token
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createDoubleChronology(scope) {
|
|
16
|
+
const calls = [];
|
|
17
|
+
const constructions = [];
|
|
18
|
+
const interactions = [];
|
|
19
|
+
return {
|
|
20
|
+
calls,
|
|
21
|
+
constructions,
|
|
22
|
+
interactions,
|
|
23
|
+
record(event) {
|
|
24
|
+
if (event.kind === 'call') {
|
|
25
|
+
calls.push(event);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
constructions.push(event);
|
|
29
|
+
}
|
|
30
|
+
interactions.push(event);
|
|
31
|
+
},
|
|
32
|
+
reset() {
|
|
33
|
+
calls.length = 0;
|
|
34
|
+
constructions.length = 0;
|
|
35
|
+
interactions.length = 0;
|
|
36
|
+
},
|
|
37
|
+
scope
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function isChronologyRecord(value) {
|
|
41
|
+
return typeof value === 'object' && value !== null;
|
|
42
|
+
}
|
|
43
|
+
function hasChronologyArrays(value) {
|
|
44
|
+
return Array.isArray(Reflect.get(value, 'calls')) &&
|
|
45
|
+
Array.isArray(Reflect.get(value, 'constructions')) &&
|
|
46
|
+
Array.isArray(Reflect.get(value, 'interactions'));
|
|
47
|
+
}
|
|
48
|
+
function hasChronologyFunctions(value) {
|
|
49
|
+
return typeof Reflect.get(value, 'record') === 'function' &&
|
|
50
|
+
typeof Reflect.get(value, 'reset') === 'function';
|
|
51
|
+
}
|
|
52
|
+
function isDoubleChronology(value) {
|
|
53
|
+
return isChronologyRecord(value) &&
|
|
54
|
+
hasChronologyArrays(value) &&
|
|
55
|
+
hasChronologyFunctions(value);
|
|
56
|
+
}
|
|
57
|
+
export function doubleChronology(value) {
|
|
58
|
+
if (typeof value !== 'function' || !Object.hasOwn(value, testDoubleSymbol)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, chronologySymbol);
|
|
62
|
+
return isDoubleChronology(descriptor?.value) ? descriptor.value : null;
|
|
63
|
+
}
|
|
64
|
+
export function installDoubleChronology(target, scope) {
|
|
65
|
+
const chronology = createDoubleChronology(scope);
|
|
66
|
+
Object.defineProperties(target, {
|
|
67
|
+
[chronologySymbol]: {
|
|
68
|
+
enumerable: false,
|
|
69
|
+
value: chronology
|
|
70
|
+
},
|
|
71
|
+
[testDoubleSymbol]: {
|
|
72
|
+
enumerable: false,
|
|
73
|
+
value: true
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return chronology;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=double-chronology.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-chronology.js","sourceRoot":"","sources":["../../../../source/doubles/double-chronology.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { copyCall, copyConstruction, copyInteraction, copyIteratorEvent, copyResult } from "./double-history-record.js";
|
|
2
|
+
const historyPropertyNames = [
|
|
3
|
+
'callCount',
|
|
4
|
+
'calls',
|
|
5
|
+
'constructionCount',
|
|
6
|
+
'constructions',
|
|
7
|
+
'firstCall',
|
|
8
|
+
'firstConstruction',
|
|
9
|
+
'firstInteraction',
|
|
10
|
+
'firstIteratorEvent',
|
|
11
|
+
'firstResult',
|
|
12
|
+
'interactionCount',
|
|
13
|
+
'interactions',
|
|
14
|
+
'iteratorEventCount',
|
|
15
|
+
'iteratorEvents',
|
|
16
|
+
'lastCall',
|
|
17
|
+
'lastConstruction',
|
|
18
|
+
'lastInteraction',
|
|
19
|
+
'lastIteratorEvent',
|
|
20
|
+
'lastResult',
|
|
21
|
+
'nthCall',
|
|
22
|
+
'nthConstruction',
|
|
23
|
+
'nthInteraction',
|
|
24
|
+
'nthIteratorEvent',
|
|
25
|
+
'reset',
|
|
26
|
+
'results'
|
|
27
|
+
];
|
|
28
|
+
function copyNullable(item, copy) {
|
|
29
|
+
return item === null ? null : copy(item);
|
|
30
|
+
}
|
|
31
|
+
function validHistoryIndex(index) {
|
|
32
|
+
return Number.isSafeInteger(index) && index >= 0;
|
|
33
|
+
}
|
|
34
|
+
export function createHistoryApi(store) {
|
|
35
|
+
return {
|
|
36
|
+
get callCount() {
|
|
37
|
+
return store.calls.length;
|
|
38
|
+
},
|
|
39
|
+
get calls() {
|
|
40
|
+
return store.calls.map(copyCall);
|
|
41
|
+
},
|
|
42
|
+
get constructionCount() {
|
|
43
|
+
return store.constructions.length;
|
|
44
|
+
},
|
|
45
|
+
get constructions() {
|
|
46
|
+
return store.constructions.map(copyConstruction);
|
|
47
|
+
},
|
|
48
|
+
get firstCall() {
|
|
49
|
+
return copyNullable(store.calls[0] ?? null, copyCall);
|
|
50
|
+
},
|
|
51
|
+
get firstConstruction() {
|
|
52
|
+
return copyNullable(store.constructions[0] ?? null, copyConstruction);
|
|
53
|
+
},
|
|
54
|
+
get firstInteraction() {
|
|
55
|
+
return copyNullable(store.interactions[0] ?? null, copyInteraction);
|
|
56
|
+
},
|
|
57
|
+
get firstIteratorEvent() {
|
|
58
|
+
return copyNullable(store.iteratorEvents[0] ?? null, copyIteratorEvent);
|
|
59
|
+
},
|
|
60
|
+
get firstResult() {
|
|
61
|
+
return copyNullable(store.results[0] ?? null, copyResult);
|
|
62
|
+
},
|
|
63
|
+
get interactionCount() {
|
|
64
|
+
return store.interactions.length;
|
|
65
|
+
},
|
|
66
|
+
get interactions() {
|
|
67
|
+
return store.interactions.map(copyInteraction);
|
|
68
|
+
},
|
|
69
|
+
get iteratorEventCount() {
|
|
70
|
+
return store.iteratorEvents.length;
|
|
71
|
+
},
|
|
72
|
+
get iteratorEvents() {
|
|
73
|
+
return store.iteratorEvents.map(copyIteratorEvent);
|
|
74
|
+
},
|
|
75
|
+
get lastCall() {
|
|
76
|
+
return copyNullable(store.calls.at(-1) ?? null, copyCall);
|
|
77
|
+
},
|
|
78
|
+
get lastConstruction() {
|
|
79
|
+
return copyNullable(store.constructions.at(-1) ?? null, copyConstruction);
|
|
80
|
+
},
|
|
81
|
+
get lastInteraction() {
|
|
82
|
+
return copyNullable(store.interactions.at(-1) ?? null, copyInteraction);
|
|
83
|
+
},
|
|
84
|
+
get lastIteratorEvent() {
|
|
85
|
+
return copyNullable(store.iteratorEvents.at(-1) ?? null, copyIteratorEvent);
|
|
86
|
+
},
|
|
87
|
+
get lastResult() {
|
|
88
|
+
return copyNullable(store.results.at(-1) ?? null, copyResult);
|
|
89
|
+
},
|
|
90
|
+
nthCall(index) {
|
|
91
|
+
return validHistoryIndex(index) ? copyNullable(store.calls[index] ?? null, copyCall) : null;
|
|
92
|
+
},
|
|
93
|
+
nthConstruction(index) {
|
|
94
|
+
return validHistoryIndex(index) ? copyNullable(store.constructions[index] ?? null, copyConstruction) : null;
|
|
95
|
+
},
|
|
96
|
+
nthInteraction(index) {
|
|
97
|
+
return validHistoryIndex(index) ? copyNullable(store.interactions[index] ?? null, copyInteraction) : null;
|
|
98
|
+
},
|
|
99
|
+
nthIteratorEvent(index) {
|
|
100
|
+
return validHistoryIndex(index)
|
|
101
|
+
? copyNullable(store.iteratorEvents[index] ?? null, copyIteratorEvent)
|
|
102
|
+
: null;
|
|
103
|
+
},
|
|
104
|
+
reset: store.reset,
|
|
105
|
+
get results() {
|
|
106
|
+
return store.results.map(copyResult);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function defineHistoryProperty(target, api, name) {
|
|
111
|
+
const descriptor = Object.getOwnPropertyDescriptor(api, name);
|
|
112
|
+
if (descriptor === undefined) {
|
|
113
|
+
throw new TypeError(`test double history property ${name} is not defined.`);
|
|
114
|
+
}
|
|
115
|
+
Object.defineProperty(target, name, {
|
|
116
|
+
...descriptor,
|
|
117
|
+
enumerable: false
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
export function installHistory(target, api) {
|
|
121
|
+
for (const name of historyPropertyNames) {
|
|
122
|
+
defineHistoryProperty(target, api, name);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=double-history-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-history-api.js","sourceRoot":"","sources":["../../../../source/doubles/double-history-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { ConstructorReturnValue, InvocationKind } from './double-behavior.ts';
|
|
2
|
+
export type DoubleReturnedResult<Value = unknown> = {
|
|
3
|
+
readonly invocationIndex: number;
|
|
4
|
+
readonly invocationKind: InvocationKind;
|
|
5
|
+
readonly order: number;
|
|
6
|
+
readonly status: 'returned';
|
|
7
|
+
readonly value: Value;
|
|
8
|
+
};
|
|
9
|
+
export type DoubleThrownResult = {
|
|
10
|
+
readonly invocationIndex: number;
|
|
11
|
+
readonly invocationKind: InvocationKind;
|
|
12
|
+
readonly order: number;
|
|
13
|
+
readonly status: 'threw';
|
|
14
|
+
readonly thrown: unknown;
|
|
15
|
+
};
|
|
16
|
+
export type DoubleResult<Value = unknown> = DoubleReturnedResult<Value> | DoubleThrownResult;
|
|
17
|
+
export type DoubleIteratorProtocol = 'async' | 'sync';
|
|
18
|
+
export type DoubleIteratorMethod = 'next' | 'return' | 'throw';
|
|
19
|
+
type DoubleIteratorEventBase<Protocol extends DoubleIteratorProtocol = DoubleIteratorProtocol, Arguments extends readonly unknown[] = readonly unknown[]> = {
|
|
20
|
+
readonly arguments: Arguments;
|
|
21
|
+
readonly callIndex: number;
|
|
22
|
+
readonly index: number;
|
|
23
|
+
readonly iteratorIndex: number;
|
|
24
|
+
readonly method: DoubleIteratorMethod;
|
|
25
|
+
readonly protocol: Protocol;
|
|
26
|
+
};
|
|
27
|
+
export type DoubleIteratorYieldEvent<YieldValue = unknown, NextArguments extends readonly unknown[] = readonly unknown[]> = DoubleIteratorEventBase<DoubleIteratorProtocol, NextArguments> & {
|
|
28
|
+
readonly kind: 'yield';
|
|
29
|
+
readonly value: YieldValue;
|
|
30
|
+
};
|
|
31
|
+
export type DoubleIteratorReturnEvent<ReturnValue = unknown, NextArguments extends readonly unknown[] = readonly unknown[]> = DoubleIteratorEventBase<DoubleIteratorProtocol, NextArguments> & {
|
|
32
|
+
readonly kind: 'return';
|
|
33
|
+
readonly value: ReturnValue;
|
|
34
|
+
};
|
|
35
|
+
export type DoubleIteratorThrowEvent<NextArguments extends readonly unknown[] = readonly unknown[]> = DoubleIteratorEventBase<DoubleIteratorProtocol, NextArguments> & {
|
|
36
|
+
readonly kind: 'throw';
|
|
37
|
+
readonly thrown: unknown;
|
|
38
|
+
};
|
|
39
|
+
type DoubleIteratorEventKind = keyof {
|
|
40
|
+
readonly return: unknown;
|
|
41
|
+
readonly throw: unknown;
|
|
42
|
+
readonly yield: unknown;
|
|
43
|
+
};
|
|
44
|
+
export type DoubleIteratorEvent<YieldValue = unknown, ReturnValue = unknown, NextArguments extends readonly unknown[] = readonly unknown[]> = {
|
|
45
|
+
readonly return: DoubleIteratorReturnEvent<ReturnValue, NextArguments>;
|
|
46
|
+
readonly throw: DoubleIteratorThrowEvent<NextArguments>;
|
|
47
|
+
readonly yield: DoubleIteratorYieldEvent<YieldValue, NextArguments>;
|
|
48
|
+
}[DoubleIteratorEventKind];
|
|
49
|
+
export type DoubleCall<Arguments extends readonly unknown[] = readonly unknown[], ReturnValue = unknown, ThisValue = unknown> = {
|
|
50
|
+
readonly arguments: Arguments;
|
|
51
|
+
readonly index: number;
|
|
52
|
+
readonly kind: 'call';
|
|
53
|
+
readonly order: number;
|
|
54
|
+
readonly result: DoubleResult<ReturnValue>;
|
|
55
|
+
readonly thisValue: ThisValue;
|
|
56
|
+
};
|
|
57
|
+
export type DoubleConstruction<Arguments extends readonly unknown[] = readonly unknown[], Instance = unknown> = {
|
|
58
|
+
readonly arguments: Arguments;
|
|
59
|
+
readonly index: number;
|
|
60
|
+
readonly instance: Instance | null;
|
|
61
|
+
readonly kind: 'construction';
|
|
62
|
+
readonly order: number;
|
|
63
|
+
readonly result: DoubleResult<Instance>;
|
|
64
|
+
};
|
|
65
|
+
export type DoubleInteraction<CallRecord extends DoubleCall = DoubleCall, ConstructionRecord extends DoubleConstruction = DoubleConstruction> = CallRecord | ConstructionRecord;
|
|
66
|
+
export type HistoryInvocation<Kind extends InvocationKind = InvocationKind> = {
|
|
67
|
+
readonly arguments: readonly unknown[];
|
|
68
|
+
readonly index: number;
|
|
69
|
+
readonly kind: Kind;
|
|
70
|
+
readonly order: number;
|
|
71
|
+
};
|
|
72
|
+
export declare function copyResult(result: DoubleResult): DoubleResult;
|
|
73
|
+
export declare function copyIteratorEvent(event: DoubleIteratorEvent): DoubleIteratorEvent;
|
|
74
|
+
export declare function copyCall(call: DoubleCall): DoubleCall;
|
|
75
|
+
export declare function copyConstruction(construction: DoubleConstruction): DoubleConstruction;
|
|
76
|
+
export declare function copyInteraction(interaction: DoubleInteraction): DoubleInteraction;
|
|
77
|
+
export declare function createReturnedResult(invocation: HistoryInvocation, value: unknown): DoubleResult;
|
|
78
|
+
export declare function createThrownResult(invocation: HistoryInvocation, thrown: unknown): DoubleResult;
|
|
79
|
+
export declare function createCallRecord(invocation: HistoryInvocation<'call'>, thisValue: unknown, result: DoubleResult): DoubleCall;
|
|
80
|
+
export declare function createConstructionRecord(invocation: HistoryInvocation<'construction'>, instance: ConstructorReturnValue | null, result: DoubleResult): DoubleConstruction;
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=double-history-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-history-record.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-history-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export function copyResult(result) {
|
|
2
|
+
return { ...result };
|
|
3
|
+
}
|
|
4
|
+
export function copyIteratorEvent(event) {
|
|
5
|
+
return {
|
|
6
|
+
...event,
|
|
7
|
+
arguments: Array.from(event.arguments)
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function copyCall(call) {
|
|
11
|
+
return {
|
|
12
|
+
...call,
|
|
13
|
+
arguments: Array.from(call.arguments),
|
|
14
|
+
result: copyResult(call.result)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function copyConstruction(construction) {
|
|
18
|
+
return {
|
|
19
|
+
...construction,
|
|
20
|
+
arguments: Array.from(construction.arguments),
|
|
21
|
+
result: copyResult(construction.result)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function copyInteraction(interaction) {
|
|
25
|
+
return interaction.kind === 'call' ? copyCall(interaction) : copyConstruction(interaction);
|
|
26
|
+
}
|
|
27
|
+
export function createReturnedResult(invocation, value) {
|
|
28
|
+
return {
|
|
29
|
+
invocationIndex: invocation.index,
|
|
30
|
+
invocationKind: invocation.kind,
|
|
31
|
+
order: invocation.order,
|
|
32
|
+
status: 'returned',
|
|
33
|
+
value
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function createThrownResult(invocation, thrown) {
|
|
37
|
+
return {
|
|
38
|
+
invocationIndex: invocation.index,
|
|
39
|
+
invocationKind: invocation.kind,
|
|
40
|
+
order: invocation.order,
|
|
41
|
+
status: 'threw',
|
|
42
|
+
thrown
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function createCallRecord(invocation, thisValue, result) {
|
|
46
|
+
return {
|
|
47
|
+
arguments: Array.from(invocation.arguments),
|
|
48
|
+
index: invocation.index,
|
|
49
|
+
kind: 'call',
|
|
50
|
+
order: invocation.order,
|
|
51
|
+
result,
|
|
52
|
+
thisValue
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function createConstructionRecord(invocation, instance, result) {
|
|
56
|
+
return {
|
|
57
|
+
arguments: Array.from(invocation.arguments),
|
|
58
|
+
index: invocation.index,
|
|
59
|
+
instance,
|
|
60
|
+
kind: 'construction',
|
|
61
|
+
order: invocation.order,
|
|
62
|
+
result
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=double-history-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-history-record.js","sourceRoot":"","sources":["../../../../source/doubles/double-history-record.ts"],"names":[],"mappings":"AAkHA,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC3C,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA0B;IACxD,OAAO;QACH,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;KACzC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACrC,OAAO;QACH,GAAG,IAAI;QACP,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACrC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;KAClC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAgC;IAC7D,OAAO;QACH,GAAG,YAAY;QACf,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QAC7C,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;KAC1C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAA8B;IAC1D,OAAO,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAA6B,EAAE,KAAc;IAC9E,OAAO;QACH,eAAe,EAAE,UAAU,CAAC,KAAK;QACjC,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU;QAClB,KAAK;KACR,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAA6B,EAAE,MAAe;IAC7E,OAAO;QACH,eAAe,EAAE,UAAU,CAAC,KAAK;QACjC,cAAc,EAAE,UAAU,CAAC,IAAI;QAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,OAAO;QACf,MAAM;KACT,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,UAAqC,EACrC,SAAkB,EAClB,MAAoB;IAEpB,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM;QACN,SAAS;KACZ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,wBAAwB,CACpC,UAA6C,EAC7C,QAAuC,EACvC,MAAoB;IAEpB,OAAO;QACH,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ;QACR,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM;KACT,CAAC;AACN,CAAC"}
|