@overkill-dev/doubles 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/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/assertion-protocol/assertion-evaluation.d.ts +13 -0
- package/assertion-protocol/assertion-evaluation.d.ts.map +1 -0
- package/assertion-protocol/assertion-node-shape.d.ts +71 -0
- package/assertion-protocol/assertion-node-shape.d.ts.map +1 -0
- package/assertion-protocol/assertion-node.d.ts +97 -0
- package/assertion-protocol/assertion-node.d.ts.map +1 -0
- package/assertion-protocol/assertion-reference.d.ts +73 -0
- package/assertion-protocol/assertion-reference.d.ts.map +1 -0
- package/assertion-protocol/assertion-reference.js +49 -0
- package/assertion-protocol/assertion-reference.js.map +1 -0
- package/assertion-protocol/assertions/boolean.d.ts +11 -0
- package/assertion-protocol/assertions/boolean.d.ts.map +1 -0
- package/assertion-protocol/assertions/collection.d.ts +22 -0
- package/assertion-protocol/assertions/collection.d.ts.map +1 -0
- package/assertion-protocol/assertions/equality.d.ts +17 -0
- package/assertion-protocol/assertions/equality.d.ts.map +1 -0
- package/assertion-protocol/assertions/fail.d.ts +13 -0
- package/assertion-protocol/assertions/fail.d.ts.map +1 -0
- package/assertion-protocol/assertions/numeric.d.ts +29 -0
- package/assertion-protocol/assertions/numeric.d.ts.map +1 -0
- package/assertion-protocol/assertions/partial.d.ts +14 -0
- package/assertion-protocol/assertions/partial.d.ts.map +1 -0
- package/assertion-protocol/assertions/presence.d.ts +17 -0
- package/assertion-protocol/assertions/presence.d.ts.map +1 -0
- package/assertion-protocol/assertions/string.d.ts +28 -0
- package/assertion-protocol/assertions/string.d.ts.map +1 -0
- package/assertion-protocol/assertions/type-shape.d.ts +42 -0
- package/assertion-protocol/assertions/type-shape.d.ts.map +1 -0
- package/assertion-protocol/thrown-error-record.d.ts +8 -0
- package/assertion-protocol/thrown-error-record.d.ts.map +1 -0
- package/assertion-protocol/thrown-error-record.js +17 -0
- package/assertion-protocol/thrown-error-record.js.map +1 -0
- package/assertion-protocol/thrown-matcher.d.ts +51 -0
- package/assertion-protocol/thrown-matcher.d.ts.map +1 -0
- package/assertion-protocol/thrown-matcher.js +186 -0
- package/assertion-protocol/thrown-matcher.js.map +1 -0
- package/compare/comparison-result.d.ts +25 -0
- package/compare/comparison-result.d.ts.map +1 -0
- package/compare/comparison-state.d.ts +7 -0
- package/compare/comparison-state.d.ts.map +1 -0
- package/compare/comparison-state.js +20 -0
- package/compare/comparison-state.js.map +1 -0
- package/compare/comparison.d.ts +12 -0
- package/compare/comparison.d.ts.map +1 -0
- package/compare/raw-comparison.d.ts +24 -0
- package/compare/raw-comparison.d.ts.map +1 -0
- package/compare/raw-comparison.js +285 -0
- package/compare/raw-comparison.js.map +1 -0
- package/compare/serialized-value-shape.d.ts +143 -0
- package/compare/serialized-value-shape.d.ts.map +1 -0
- package/compare/serialized-value.d.ts +11 -0
- package/compare/serialized-value.d.ts.map +1 -0
- package/compare/value-classification.d.ts +26 -0
- package/compare/value-classification.d.ts.map +1 -0
- package/compare/value-classification.js +110 -0
- package/compare/value-classification.js.map +1 -0
- package/diff/diff-shape.d.ts +117 -0
- package/diff/diff-shape.d.ts.map +1 -0
- package/doubles/disposal-symbol.d.ts +3 -0
- package/doubles/disposal-symbol.d.ts.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.d.ts +21 -0
- package/doubles/double-chronology.d.ts.map +1 -0
- package/doubles/double-chronology.js +78 -0
- package/doubles/double-chronology.js.map +1 -0
- package/doubles/double-history-api.d.ts +33 -0
- package/doubles/double-history-api.d.ts.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.d.ts +9 -0
- package/doubles/double-runtime.d.ts.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.d.ts +27 -0
- package/doubles/double-usage-argument-assertion.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.d.ts +6 -0
- package/doubles/double-usage-count-assertion.d.ts.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.d.ts +7 -0
- package/doubles/double-usage-disposal-assertion.d.ts.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.d.ts +22 -0
- package/doubles/double-usage-inspection.d.ts.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.d.ts +7 -0
- package/doubles/double-usage-iterator-assertion.d.ts.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.d.ts +3 -0
- package/doubles/double-usage-order-assertion.d.ts.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.d.ts +15 -0
- package/doubles/protocol-double-metadata.d.ts.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 +36 -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 +30 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { callsBehavior, constructsBehavior, rejectsBehavior, resolvesBehavior, returnsBehavior, sequenceBehavior, throwsBehavior } from "./double-behavior.js";
|
|
2
|
+
import { callsCallbackAsyncBehavior, callsCallbackBehavior, createAsyncCallbackRuleTerminator, createCallbackRuleTerminator } from "./double-rule-callback.js";
|
|
3
|
+
import { createAsyncYieldingBehavior, createAsyncYieldingFromBehavior, createAsyncYieldingFromRuleTerminator, createAsyncYieldingRuleTerminator, createYieldingBehavior, createYieldingFromBehavior, createYieldingFromRuleTerminator, createYieldingRuleTerminator } from "./double-rule-generator.js";
|
|
4
|
+
function callRule(criterion, behavior) {
|
|
5
|
+
return { behavior, criterion };
|
|
6
|
+
}
|
|
7
|
+
function constructionRule(criterion, behavior) {
|
|
8
|
+
return { behavior, criterion };
|
|
9
|
+
}
|
|
10
|
+
function createCallRuleStarter(criterion) {
|
|
11
|
+
return {
|
|
12
|
+
calls(answer) {
|
|
13
|
+
return callRule(criterion, callsBehavior(answer));
|
|
14
|
+
},
|
|
15
|
+
callsCallback: createCallbackRuleTerminator(criterion),
|
|
16
|
+
callsCallbackAsync: createAsyncCallbackRuleTerminator(criterion),
|
|
17
|
+
rejects(reason) {
|
|
18
|
+
return callRule(criterion, rejectsBehavior(reason));
|
|
19
|
+
},
|
|
20
|
+
resolves(value) {
|
|
21
|
+
return callRule(criterion, resolvesBehavior(value));
|
|
22
|
+
},
|
|
23
|
+
returns(...value) {
|
|
24
|
+
return callRule(criterion, returnsBehavior(value[0]));
|
|
25
|
+
},
|
|
26
|
+
sequence(entries) {
|
|
27
|
+
const behavior = sequenceBehavior(entries);
|
|
28
|
+
return callRule(criterion, behavior);
|
|
29
|
+
},
|
|
30
|
+
throws(thrown) {
|
|
31
|
+
return callRule(criterion, throwsBehavior(thrown));
|
|
32
|
+
},
|
|
33
|
+
yields: createYieldingRuleTerminator(criterion),
|
|
34
|
+
yieldsAsync: createAsyncYieldingRuleTerminator(criterion),
|
|
35
|
+
yieldsAsyncFrom: createAsyncYieldingFromRuleTerminator(criterion),
|
|
36
|
+
yieldsFrom: createYieldingFromRuleTerminator(criterion)
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function createConstructionRuleStarter(criterion) {
|
|
40
|
+
return {
|
|
41
|
+
calls(answer) {
|
|
42
|
+
return constructionRule(criterion, callsBehavior(answer));
|
|
43
|
+
},
|
|
44
|
+
constructs(instance) {
|
|
45
|
+
const behavior = constructsBehavior(instance);
|
|
46
|
+
return constructionRule(criterion, behavior);
|
|
47
|
+
},
|
|
48
|
+
sequence(entries) {
|
|
49
|
+
const behavior = sequenceBehavior(entries);
|
|
50
|
+
return constructionRule(criterion, behavior);
|
|
51
|
+
},
|
|
52
|
+
throws(thrown) {
|
|
53
|
+
return constructionRule(criterion, throwsBehavior(thrown));
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function createCallArgumentRuleStarter(...expectedArguments) {
|
|
58
|
+
return createCallRuleStarter({
|
|
59
|
+
expectedArguments,
|
|
60
|
+
invocationKind: 'call',
|
|
61
|
+
kind: 'arguments'
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function createConstructionArgumentRuleStarter(...expectedArguments) {
|
|
65
|
+
return createConstructionRuleStarter({
|
|
66
|
+
expectedArguments,
|
|
67
|
+
invocationKind: 'construction',
|
|
68
|
+
kind: 'arguments'
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function validRuleIndex(index) {
|
|
72
|
+
if (!Number.isSafeInteger(index) || index < 0) {
|
|
73
|
+
throw new TypeError('ordered double rules require a non-negative integer index.');
|
|
74
|
+
}
|
|
75
|
+
return index;
|
|
76
|
+
}
|
|
77
|
+
function createCallIndexRuleStarter(index) {
|
|
78
|
+
return createCallRuleStarter({
|
|
79
|
+
index: validRuleIndex(index),
|
|
80
|
+
invocationKind: 'call',
|
|
81
|
+
kind: 'index'
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function createConstructionIndexRuleStarter(index) {
|
|
85
|
+
return createConstructionRuleStarter({
|
|
86
|
+
index: validRuleIndex(index),
|
|
87
|
+
invocationKind: 'construction',
|
|
88
|
+
kind: 'index'
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function createReturningBehavior(...value) {
|
|
92
|
+
return returnsBehavior(value[0]);
|
|
93
|
+
}
|
|
94
|
+
export const rule = {
|
|
95
|
+
calls: callsBehavior,
|
|
96
|
+
callsCallback: callsCallbackBehavior,
|
|
97
|
+
callsCallbackAsync: callsCallbackAsyncBehavior,
|
|
98
|
+
constructs: constructsBehavior,
|
|
99
|
+
onCall: createCallIndexRuleStarter,
|
|
100
|
+
onConstruction: createConstructionIndexRuleStarter,
|
|
101
|
+
rejects: rejectsBehavior,
|
|
102
|
+
resolves: resolvesBehavior,
|
|
103
|
+
returns: createReturningBehavior,
|
|
104
|
+
sequence: sequenceBehavior,
|
|
105
|
+
throws: throwsBehavior,
|
|
106
|
+
yields: createYieldingBehavior,
|
|
107
|
+
yieldsAsync: createAsyncYieldingBehavior,
|
|
108
|
+
yieldsAsyncFrom: createAsyncYieldingFromBehavior,
|
|
109
|
+
yieldsFrom: createYieldingFromBehavior,
|
|
110
|
+
when: createCallArgumentRuleStarter,
|
|
111
|
+
whenConstructedWith: createConstructionArgumentRuleStarter
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=double-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-rule.js","sourceRoot":"","sources":["../../../../source/doubles/double-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type CallableSignature, type ConstructorSignature, type InvocationKind, type RuntimeConfiguration } from './double-behavior.ts';
|
|
2
|
+
import { type DoubleHistory } from './double-history.ts';
|
|
3
|
+
import { type ChronologyScope } from './double-chronology.ts';
|
|
4
|
+
export type SupportedModes = ReadonlySet<InvocationKind>;
|
|
5
|
+
type RuntimeTestDouble<Signature> = DoubleHistory<Signature> & Signature;
|
|
6
|
+
export declare function modeSet(...modes: readonly InvocationKind[]): SupportedModes;
|
|
7
|
+
export declare function createDouble<Signature extends CallableSignature | ConstructorSignature>(configuration: RuntimeConfiguration, chronologyScope: ChronologyScope, supportedModes: SupportedModes): RuntimeTestDouble<Signature>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=double-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-runtime.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAQH,KAAK,iBAAiB,EAEtB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EAEnB,KAAK,oBAAoB,EAG5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEH,KAAK,aAAa,EAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,KAAK,eAAe,EAGvB,MAAM,wBAAwB,CAAC;AAiBhC,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AAezD,KAAK,iBAAiB,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;AAEzE,wBAAgB,OAAO,CAAC,GAAG,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,cAAc,CAE3E;AA0ND,wBAAgB,YAAY,CAAC,SAAS,SAAS,iBAAiB,GAAG,oBAAoB,EACnF,aAAa,EAAE,oBAAoB,EACnC,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,GAC/B,iBAAiB,CAAC,SAAS,CAAC,CAqC9B"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { answerFromBehavior, fallbackForInvocation, isConstructorInstance, isUnknownFunction, ruleMatches } from "./double-behavior.js";
|
|
2
|
+
import { createDoubleHistory } from "./double-history.js";
|
|
3
|
+
import { installDoubleChronology } from "./double-chronology.js";
|
|
4
|
+
import { createReturnedResult, createThrownResult } from "./double-history-record.js";
|
|
5
|
+
export function modeSet(...modes) {
|
|
6
|
+
return new Set(modes);
|
|
7
|
+
}
|
|
8
|
+
function assertTestDouble(value) {
|
|
9
|
+
if (!isUnknownFunction(value)) {
|
|
10
|
+
throw new TypeError('Expected double factory to create a function.');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function createSequenceRuntimeState() {
|
|
14
|
+
const sequenceIndexes = new Map();
|
|
15
|
+
return {
|
|
16
|
+
nextSequenceEntry(behavior) {
|
|
17
|
+
const index = sequenceIndexes.get(behavior) ?? 0;
|
|
18
|
+
const entry = behavior.behaviorKind === 'sequence' ? behavior.entries[index] : undefined;
|
|
19
|
+
if (entry !== undefined) {
|
|
20
|
+
sequenceIndexes.set(behavior, index + 1);
|
|
21
|
+
}
|
|
22
|
+
return entry;
|
|
23
|
+
},
|
|
24
|
+
reset() {
|
|
25
|
+
sequenceIndexes.clear();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function answerFromMatchingRules(rules, invocation, runtime) {
|
|
30
|
+
for (const configuredRule of rules) {
|
|
31
|
+
const answer = ruleMatches(configuredRule, invocation)
|
|
32
|
+
? answerFromBehavior(configuredRule.behavior, invocation, runtime)
|
|
33
|
+
: { answered: false };
|
|
34
|
+
if (answer.answered) {
|
|
35
|
+
return answer;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { answered: false };
|
|
39
|
+
}
|
|
40
|
+
function answerFromFallback(fallback, invocation, runtime) {
|
|
41
|
+
if (fallback === null) {
|
|
42
|
+
return { answered: false };
|
|
43
|
+
}
|
|
44
|
+
const fallbackBehavior = fallbackForInvocation(fallback, invocation);
|
|
45
|
+
return fallbackBehavior === null
|
|
46
|
+
? { answered: false }
|
|
47
|
+
: answerFromBehavior(fallbackBehavior, invocation, runtime);
|
|
48
|
+
}
|
|
49
|
+
function answerFromRules(configuration, invocation, runtime) {
|
|
50
|
+
const ruleAnswer = answerFromMatchingRules(configuration.rules, invocation, runtime);
|
|
51
|
+
if (ruleAnswer.answered) {
|
|
52
|
+
return ruleAnswer;
|
|
53
|
+
}
|
|
54
|
+
const fallbackAnswer = answerFromFallback(configuration.fallback, invocation, runtime);
|
|
55
|
+
if (fallbackAnswer.answered || configuration.answer === null) {
|
|
56
|
+
return fallbackAnswer;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
answered: true,
|
|
60
|
+
value: configuration.answer(invocation)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function behaviorInvocationFrom(invocation) {
|
|
64
|
+
return {
|
|
65
|
+
arguments: invocation.arguments,
|
|
66
|
+
index: invocation.index,
|
|
67
|
+
kind: invocation.kind
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function answerForInvocation(context, invocation, missingBehaviorMessage) {
|
|
71
|
+
const answer = answerFromRules(context.configuration, behaviorInvocationFrom(invocation), context.runtime);
|
|
72
|
+
if (!answer.answered) {
|
|
73
|
+
throw new TypeError(missingBehaviorMessage);
|
|
74
|
+
}
|
|
75
|
+
return answer.value;
|
|
76
|
+
}
|
|
77
|
+
function createCallInvocation(chronologyScope, history, argumentList) {
|
|
78
|
+
return {
|
|
79
|
+
arguments: Array.from(argumentList),
|
|
80
|
+
chronologyOrder: chronologyScope.nextOrder(),
|
|
81
|
+
index: history.callIndex(),
|
|
82
|
+
kind: 'call',
|
|
83
|
+
order: history.interactionOrder()
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function createConstructionInvocation(chronologyScope, history, argumentList) {
|
|
87
|
+
return {
|
|
88
|
+
arguments: Array.from(argumentList),
|
|
89
|
+
chronologyOrder: chronologyScope.nextOrder(),
|
|
90
|
+
index: history.constructionIndex(),
|
|
91
|
+
kind: 'construction',
|
|
92
|
+
order: history.interactionOrder()
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function unsupportedCall(context, invocation, thisValue) {
|
|
96
|
+
const error = new TypeError('Class constructor TestDouble cannot be invoked without new.');
|
|
97
|
+
context.history.recordCallResult(invocation, thisValue, createThrownResult(invocation, error));
|
|
98
|
+
context.chronology.record({ kind: invocation.kind, order: invocation.chronologyOrder });
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
function unsupportedConstruction(context, invocation) {
|
|
102
|
+
const error = new TypeError('test double is not a constructor.');
|
|
103
|
+
context.history.recordConstructionResult(invocation, null, createThrownResult(invocation, error));
|
|
104
|
+
context.chronology.record({ kind: invocation.kind, order: invocation.chronologyOrder });
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
function answerCall(context, invocation, thisValue) {
|
|
108
|
+
try {
|
|
109
|
+
const answer = answerForInvocation(context, invocation, 'test double has no configured behavior for this call.');
|
|
110
|
+
context.history.recordCallResult(invocation, thisValue, createReturnedResult(invocation, answer));
|
|
111
|
+
context.chronology.record({ kind: invocation.kind, order: invocation.chronologyOrder });
|
|
112
|
+
return answer;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
context.history.recordCallResult(invocation, thisValue, createThrownResult(invocation, error));
|
|
116
|
+
context.chronology.record({ kind: invocation.kind, order: invocation.chronologyOrder });
|
|
117
|
+
throw error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function answerConstruction(context, invocation) {
|
|
121
|
+
const answer = answerForInvocation(context, invocation, 'test double has no configured behavior for this construction.');
|
|
122
|
+
if (!isConstructorInstance(answer)) {
|
|
123
|
+
throw new TypeError('test double constructor behavior must return an object instance.');
|
|
124
|
+
}
|
|
125
|
+
return answer;
|
|
126
|
+
}
|
|
127
|
+
function constructDouble(context, invocation) {
|
|
128
|
+
try {
|
|
129
|
+
const answer = answerConstruction(context, invocation);
|
|
130
|
+
context.history.recordConstructionResult(invocation, answer, createReturnedResult(invocation, answer));
|
|
131
|
+
context.chronology.record({ kind: invocation.kind, order: invocation.chronologyOrder });
|
|
132
|
+
return answer;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
context.history.recordConstructionResult(invocation, null, createThrownResult(invocation, error));
|
|
136
|
+
context.chronology.record({ kind: invocation.kind, order: invocation.chronologyOrder });
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function createDoubleTarget() {
|
|
141
|
+
return function TestDouble() {
|
|
142
|
+
throw new TypeError('test double target should not be reached.');
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function createDouble(configuration, chronologyScope, supportedModes) {
|
|
146
|
+
const sequenceRuntime = createSequenceRuntimeState();
|
|
147
|
+
const target = createDoubleTarget();
|
|
148
|
+
const chronology = installDoubleChronology(target, chronologyScope);
|
|
149
|
+
const history = createDoubleHistory(function resetDouble() {
|
|
150
|
+
chronology.reset();
|
|
151
|
+
sequenceRuntime.reset();
|
|
152
|
+
});
|
|
153
|
+
const runtime = {
|
|
154
|
+
nextSequenceEntry: sequenceRuntime.nextSequenceEntry,
|
|
155
|
+
trackAsyncIterator: history.trackAsyncIterator,
|
|
156
|
+
trackSyncIterator: history.trackSyncIterator
|
|
157
|
+
};
|
|
158
|
+
const context = { chronology, configuration, history, runtime, supportedModes };
|
|
159
|
+
history.install(target);
|
|
160
|
+
const candidate = new Proxy(target, {
|
|
161
|
+
apply(_target, thisArgument, argumentList) {
|
|
162
|
+
const invocation = createCallInvocation(chronologyScope, history, argumentList);
|
|
163
|
+
return supportedModes.has('call') ? answerCall(context, invocation, thisArgument) : unsupportedCall(context, invocation, thisArgument);
|
|
164
|
+
},
|
|
165
|
+
construct(_target, argumentList) {
|
|
166
|
+
const invocation = createConstructionInvocation(chronologyScope, history, argumentList);
|
|
167
|
+
return supportedModes.has('construction') ? constructDouble(context, invocation) : unsupportedConstruction(context, invocation);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
assertTestDouble(candidate);
|
|
171
|
+
return candidate;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=double-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-runtime.js","sourceRoot":"","sources":["../../../../source/doubles/double-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type CallArguments<Signature> = Signature extends (...arguments_: infer Arguments) => unknown ? Arguments : never;
|
|
2
|
+
export type ConstructionArguments<Signature> = Signature extends new (...arguments_: infer Arguments) => unknown ? Arguments : never;
|
|
3
|
+
export type CallReturn<Signature> = Signature extends (...arguments_: readonly never[]) => infer ReturnValue ? ReturnValue : never;
|
|
4
|
+
export type ConstructionInstance<Signature> = Signature extends new (...arguments_: readonly never[]) => infer Instance ? Instance : never;
|
|
5
|
+
//# sourceMappingURL=double-signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-signature.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-signature.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,CAAC,SAAS,IAAI,SAAS,SAAS,CAAC,GAAG,UAAU,EAAE,MAAM,SAAS,KAAK,OAAO,GAAG,SAAS,GAC1G,KAAK,CAAC;AAEZ,MAAM,MAAM,qBAAqB,CAAC,SAAS,IAAI,SAAS,SAAS,KAAK,GAAG,UAAU,EAAE,MAAM,SAAS,KAAK,OAAO,GAC1G,SAAS,GACT,KAAK,CAAC;AAEZ,MAAM,MAAM,UAAU,CAAC,SAAS,IAAI,SAAS,SAAS,CAAC,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAAK,MAAM,WAAW,GACtG,WAAW,GACX,KAAK,CAAC;AAEZ,MAAM,MAAM,oBAAoB,CAAC,SAAS,IAAI,SAAS,SAAS,KAC5D,GAAG,UAAU,EAAE,SAAS,KAAK,EAAE,KAC9B,MAAM,QAAQ,GAAG,QAAQ,GACxB,KAAK,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type AggregateArguments, type AggregateIndexedArguments, type AggregateIndexedPrefixArguments, type AggregatePrefixArguments, type ArgumentMatch, type AssertionCheck, type UsageAssertionReference, type UsageMode } from './double-usage-contract.ts';
|
|
2
|
+
type ArgumentCheckInput = {
|
|
3
|
+
readonly args: readonly unknown[];
|
|
4
|
+
readonly check: AssertionCheck;
|
|
5
|
+
readonly match: ArgumentMatch;
|
|
6
|
+
readonly mode: UsageMode;
|
|
7
|
+
readonly negative: boolean;
|
|
8
|
+
readonly position: 'any' | 'last' | 'nth' | 'once';
|
|
9
|
+
readonly subject: unknown;
|
|
10
|
+
};
|
|
11
|
+
type ArgumentReferenceConfiguration = {
|
|
12
|
+
readonly match: ArgumentMatch;
|
|
13
|
+
readonly mode: UsageMode;
|
|
14
|
+
readonly negative: boolean;
|
|
15
|
+
readonly position: ArgumentCheckInput['position'];
|
|
16
|
+
};
|
|
17
|
+
type ArgumentPrefixReferenceConfiguration = {
|
|
18
|
+
readonly mode: UsageMode;
|
|
19
|
+
readonly negative: boolean;
|
|
20
|
+
readonly position: ArgumentCheckInput['position'];
|
|
21
|
+
};
|
|
22
|
+
export declare function argumentReference(name: string, configuration: ArgumentReferenceConfiguration): UsageAssertionReference<AggregateArguments>;
|
|
23
|
+
export declare function argumentPrefixReference(name: string, configuration: ArgumentPrefixReferenceConfiguration): UsageAssertionReference<AggregatePrefixArguments>;
|
|
24
|
+
export declare function indexedArgumentReference(name: string, mode: UsageMode, match: ArgumentMatch): UsageAssertionReference<AggregateIndexedArguments>;
|
|
25
|
+
export declare function indexedArgumentPrefixReference(name: string, mode: UsageMode): UsageAssertionReference<AggregateIndexedPrefixArguments>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=double-usage-argument-assertion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-usage-argument-assertion.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-usage-argument-assertion.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,cAAc,EAInB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACjB,MAAM,4BAA4B,CAAC;AAUpC,KAAK,kBAAkB,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,8BAA8B,GAAG;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;CACrD,CAAC;AAEF,KAAK,oCAAoC,GAAG;IACxC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;CACrD,CAAC;AAuOF,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,8BAA8B,GAC9C,uBAAuB,CAAC,kBAAkB,CAAC,CAU7C;AAED,wBAAgB,uBAAuB,CACnC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,oCAAoC,GACpD,uBAAuB,CAAC,wBAAwB,CAAC,CAUnD;AAED,wBAAgB,wBAAwB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,aAAa,GACrB,uBAAuB,CAAC,yBAAyB,CAAC,CAUpD;AAED,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,GAChB,uBAAuB,CAAC,+BAA+B,CAAC,CAU1D"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { defineCompositeAssertion } from "../assert/assertion-extension.js";
|
|
2
|
+
import { compareExactly, comparePartially } from "../compare/raw-comparison.js";
|
|
3
|
+
import { groupChildren, modeNoun } from "./double-usage-contract.js";
|
|
4
|
+
import { inspectedDouble, recordsFor, validNonNegativeInteger } from "./double-usage-inspection.js";
|
|
5
|
+
function partialArgumentsMatch(actual, expected) {
|
|
6
|
+
return actual.length === expected.length &&
|
|
7
|
+
expected.every(function argumentMatches(expectedArgument, index) {
|
|
8
|
+
return comparePartially(actual[index], expectedArgument);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
function prefixArgumentsMatch(actual, expected) {
|
|
12
|
+
return actual.length >= expected.length &&
|
|
13
|
+
expected.every(function argumentMatches(expectedArgument, index) {
|
|
14
|
+
return comparePartially(actual[index], expectedArgument);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function argumentsMatch(actual, expected, match) {
|
|
18
|
+
if (match === 'exact') {
|
|
19
|
+
return compareExactly(actual, expected);
|
|
20
|
+
}
|
|
21
|
+
return match === 'prefix'
|
|
22
|
+
? prefixArgumentsMatch(actual, expected)
|
|
23
|
+
: partialArgumentsMatch(actual, expected);
|
|
24
|
+
}
|
|
25
|
+
function matchingRecords(records, expectedArguments, match) {
|
|
26
|
+
return records.filter(function recordMatches(record) {
|
|
27
|
+
return argumentsMatch(record.arguments, expectedArguments, match);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function sameArityArguments(records, expectedArguments) {
|
|
31
|
+
return records
|
|
32
|
+
.map(function recordArguments(record) {
|
|
33
|
+
return record.arguments;
|
|
34
|
+
})
|
|
35
|
+
.filter(function sameLength(actualArguments) {
|
|
36
|
+
return actualArguments.length === expectedArguments.length;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function positiveArgumentFailure(input) {
|
|
40
|
+
if (input.match === 'prefix') {
|
|
41
|
+
return input.check.annotated(input.label).arrayContainsPartial(input.records.map(function recordArguments(record) {
|
|
42
|
+
return record.arguments;
|
|
43
|
+
}), input.expectedArguments);
|
|
44
|
+
}
|
|
45
|
+
if (input.match === 'partial') {
|
|
46
|
+
return input.check.annotated(input.label).membersPartialDeepEqual(sameArityArguments(input.records, input.expectedArguments), [input.expectedArguments]);
|
|
47
|
+
}
|
|
48
|
+
const firstSameArity = sameArityArguments(input.records, input.expectedArguments)[0];
|
|
49
|
+
return firstSameArity === undefined
|
|
50
|
+
? input.check.annotated(`${input.label} arity`).true(false)
|
|
51
|
+
: input.check.annotated(input.label).deepEqual(firstSameArity, input.expectedArguments);
|
|
52
|
+
}
|
|
53
|
+
function specificArgumentCheck(input) {
|
|
54
|
+
if (input.record === null) {
|
|
55
|
+
return input.check.annotated(input.label).notNull(input.record);
|
|
56
|
+
}
|
|
57
|
+
if (input.match === 'exact') {
|
|
58
|
+
return input.check.annotated(input.label).deepEqual(input.record.arguments, input.expectedArguments);
|
|
59
|
+
}
|
|
60
|
+
return input.match === 'prefix'
|
|
61
|
+
? input.check.annotated(input.label).partialDeepEqual(input.record.arguments, input.expectedArguments)
|
|
62
|
+
: input.check.group([
|
|
63
|
+
input.check.annotated(`${input.label} count`).length(input.record.arguments, input.expectedArguments.length),
|
|
64
|
+
input.check.annotated(input.label).partialDeepEqual(input.record.arguments, input.expectedArguments)
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
function emptyPrefixFailure(check, match, args) {
|
|
68
|
+
return match === 'prefix' && args.length === 0
|
|
69
|
+
? check.fromThrowable('expected argument prefix', function expectedArgumentPrefix() {
|
|
70
|
+
throw new TypeError('Expected argument prefix to contain at least one item.');
|
|
71
|
+
})
|
|
72
|
+
: null;
|
|
73
|
+
}
|
|
74
|
+
function anyArgumentAssertion(input, records) {
|
|
75
|
+
const label = `${modeNoun(input.mode)} arguments`;
|
|
76
|
+
const matched = matchingRecords(records, input.args, input.match).length > 0;
|
|
77
|
+
if (input.negative) {
|
|
78
|
+
return input.check.annotated(label).false(matched);
|
|
79
|
+
}
|
|
80
|
+
return matched
|
|
81
|
+
? input.check.annotated(label).true(true)
|
|
82
|
+
: positiveArgumentFailure({
|
|
83
|
+
check: input.check,
|
|
84
|
+
expectedArguments: input.args,
|
|
85
|
+
label,
|
|
86
|
+
match: input.match,
|
|
87
|
+
records
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function onceArgumentAssertion(input, records) {
|
|
91
|
+
const label = `${modeNoun(input.mode)} arguments`;
|
|
92
|
+
const children = [
|
|
93
|
+
input.check.annotated(`${modeNoun(input.mode)} count`).equal(records.length, 1),
|
|
94
|
+
...records[0] === undefined ? [] : [
|
|
95
|
+
specificArgumentCheck({
|
|
96
|
+
check: input.check,
|
|
97
|
+
expectedArguments: input.args,
|
|
98
|
+
label,
|
|
99
|
+
match: input.match,
|
|
100
|
+
record: records[0]
|
|
101
|
+
})
|
|
102
|
+
]
|
|
103
|
+
];
|
|
104
|
+
return groupChildren(input.check, children, label);
|
|
105
|
+
}
|
|
106
|
+
function lastArgumentAssertion(input, records) {
|
|
107
|
+
return specificArgumentCheck({
|
|
108
|
+
check: input.check,
|
|
109
|
+
expectedArguments: input.args,
|
|
110
|
+
label: `${modeNoun(input.mode)} arguments`,
|
|
111
|
+
match: input.match,
|
|
112
|
+
record: records.at(-1) ?? null
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function unexpectedIndexedPosition(input) {
|
|
116
|
+
return input.check.fromThrowable('indexed double usage assertion', function unexpectedIndexedAssertion() {
|
|
117
|
+
throw new TypeError('Indexed assertions require an index argument.');
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function positionedArgumentAssertion(input, records) {
|
|
121
|
+
if (input.position === 'any') {
|
|
122
|
+
return anyArgumentAssertion(input, records);
|
|
123
|
+
}
|
|
124
|
+
if (input.position === 'last') {
|
|
125
|
+
return lastArgumentAssertion(input, records);
|
|
126
|
+
}
|
|
127
|
+
return input.position === 'once'
|
|
128
|
+
? onceArgumentAssertion(input, records)
|
|
129
|
+
: unexpectedIndexedPosition(input);
|
|
130
|
+
}
|
|
131
|
+
function argumentAssertion(input) {
|
|
132
|
+
const inspected = inspectedDouble(input.check, input.subject);
|
|
133
|
+
const prefixFailure = emptyPrefixFailure(input.check, input.match, input.args);
|
|
134
|
+
if (!inspected.valid) {
|
|
135
|
+
return inspected.failure;
|
|
136
|
+
}
|
|
137
|
+
return prefixFailure ?? positionedArgumentAssertion(input, recordsFor(inspected.history, input.mode));
|
|
138
|
+
}
|
|
139
|
+
function indexedArgumentAssertion(input) {
|
|
140
|
+
const inspected = inspectedDouble(input.check, input.subject);
|
|
141
|
+
const prefixFailure = emptyPrefixFailure(input.check, input.match, input.args);
|
|
142
|
+
if (!inspected.valid) {
|
|
143
|
+
return inspected.failure;
|
|
144
|
+
}
|
|
145
|
+
if (!validNonNegativeInteger(input.index)) {
|
|
146
|
+
return input.check.fromThrowable('expected usage index', function expectedUsageIndex() {
|
|
147
|
+
throw new TypeError('Expected usage index to be a non-negative integer.');
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return prefixFailure ?? specificArgumentCheck({
|
|
151
|
+
check: input.check,
|
|
152
|
+
expectedArguments: input.args,
|
|
153
|
+
label: `${modeNoun(input.mode)} arguments`,
|
|
154
|
+
match: input.match,
|
|
155
|
+
record: recordsFor(inspected.history, input.mode)[input.index] ?? null
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
export function argumentReference(name, configuration) {
|
|
159
|
+
return defineCompositeAssertion({
|
|
160
|
+
assert(check, subject, args) {
|
|
161
|
+
return argumentAssertion({ args, check, ...configuration, subject });
|
|
162
|
+
},
|
|
163
|
+
formatSummary() {
|
|
164
|
+
return `Expected double ${modeNoun(configuration.mode)} arguments to match.`;
|
|
165
|
+
},
|
|
166
|
+
name
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
export function argumentPrefixReference(name, configuration) {
|
|
170
|
+
return defineCompositeAssertion({
|
|
171
|
+
assert(check, subject, args) {
|
|
172
|
+
return argumentAssertion({ args, check, match: 'prefix', ...configuration, subject });
|
|
173
|
+
},
|
|
174
|
+
formatSummary() {
|
|
175
|
+
return `Expected double ${modeNoun(configuration.mode)} arguments to match.`;
|
|
176
|
+
},
|
|
177
|
+
name
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
export function indexedArgumentReference(name, mode, match) {
|
|
181
|
+
return defineCompositeAssertion({
|
|
182
|
+
assert(check, subject, index, args) {
|
|
183
|
+
return indexedArgumentAssertion({ args, check, index, match, mode, subject });
|
|
184
|
+
},
|
|
185
|
+
formatSummary() {
|
|
186
|
+
return `Expected indexed double ${modeNoun(mode)} arguments to match.`;
|
|
187
|
+
},
|
|
188
|
+
name
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
export function indexedArgumentPrefixReference(name, mode) {
|
|
192
|
+
return defineCompositeAssertion({
|
|
193
|
+
assert(check, subject, index, args) {
|
|
194
|
+
return indexedArgumentAssertion({ args, check, index, match: 'prefix', mode, subject });
|
|
195
|
+
},
|
|
196
|
+
formatSummary() {
|
|
197
|
+
return `Expected indexed double ${modeNoun(mode)} arguments to match.`;
|
|
198
|
+
},
|
|
199
|
+
name
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=double-usage-argument-assertion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-usage-argument-assertion.js","sourceRoot":"","sources":["../../../../source/doubles/double-usage-argument-assertion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CompositeCheckBuilder } from '../assert/assertion-extension.ts';
|
|
2
|
+
import type { CompositeAssertionReference, CompositeAssertionReturn } from '../assertion-protocol/assertion-reference.ts';
|
|
3
|
+
import type { CompositeAssertionChildNode } from '../assertion-protocol/assertion-node.ts';
|
|
4
|
+
export type UsageMode = 'call' | 'construction' | 'interaction';
|
|
5
|
+
export type ArgumentMatch = 'exact' | 'partial' | 'prefix';
|
|
6
|
+
export type AssertionCheck = CompositeCheckBuilder<'assert'>;
|
|
7
|
+
export type AssertionChild = CompositeAssertionChildNode<'assert'>;
|
|
8
|
+
export type AssertionGroupItem = Parameters<AssertionCheck['group']>[0][number];
|
|
9
|
+
export type AssertionResult = CompositeAssertionReturn<'assert'>;
|
|
10
|
+
export type UsageAssertionReference<Arguments extends readonly unknown[]> = CompositeAssertionReference<Arguments, AssertionResult>;
|
|
11
|
+
type DoubleList = readonly [unknown, unknown, ...unknown[]];
|
|
12
|
+
type AnyArguments = readonly unknown[];
|
|
13
|
+
type NonEmptyAnyArguments = readonly [unknown, ...unknown[]];
|
|
14
|
+
export type CountArguments = readonly [double: unknown, expectedCount: number];
|
|
15
|
+
export type IteratorValuesArguments = readonly [double: unknown, values: readonly unknown[]];
|
|
16
|
+
export type ValueArguments = readonly [double: unknown];
|
|
17
|
+
export type OrderArguments = readonly [doubles: DoubleList];
|
|
18
|
+
export type AggregateArguments = readonly [double: unknown, args: AnyArguments];
|
|
19
|
+
export type AggregatePrefixArguments = readonly [double: unknown, args: NonEmptyAnyArguments];
|
|
20
|
+
export type AggregateIndexedArguments = readonly [double: unknown, index: number, args: AnyArguments];
|
|
21
|
+
export type AggregateIndexedPrefixArguments = readonly [
|
|
22
|
+
double: unknown,
|
|
23
|
+
index: number,
|
|
24
|
+
args: NonEmptyAnyArguments
|
|
25
|
+
];
|
|
26
|
+
export declare function modeNoun(mode: UsageMode): string;
|
|
27
|
+
export declare function groupChildren(check: AssertionCheck, children: readonly AssertionGroupItem[], passingLabel: string): AssertionResult;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=double-usage-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-usage-contract.d.ts","sourceRoot":"","sources":["../../../../source/doubles/double-usage-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,qBAAqB,EACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACR,2BAA2B,EAC3B,wBAAwB,EAC3B,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EACR,2BAA2B,EAC9B,MAAM,yCAAyC,CAAC;AAEjD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,cAAc,GAAG,aAAa,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,IAAI,2BAA2B,CACnG,SAAS,EACT,eAAe,CAClB,CAAC;AAEF,KAAK,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAC5D,KAAK,YAAY,GAAG,SAAS,OAAO,EAAE,CAAC;AACvC,KAAK,oBAAoB,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAC/E,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;AAC7F,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAChF,MAAM,MAAM,wBAAwB,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC;AAC9F,MAAM,MAAM,yBAAyB,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AACtG,MAAM,MAAM,+BAA+B,GAAG,SAAS;IACnD,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,oBAAoB;CAC7B,CAAC;AAEF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAMhD;AAED,wBAAgB,aAAa,CACzB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,EACvC,YAAY,EAAE,MAAM,GACrB,eAAe,CAIjB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function modeNoun(mode) {
|
|
2
|
+
if (mode === 'call') {
|
|
3
|
+
return 'call';
|
|
4
|
+
}
|
|
5
|
+
return mode === 'construction' ? 'construction' : 'interaction';
|
|
6
|
+
}
|
|
7
|
+
export function groupChildren(check, children, passingLabel) {
|
|
8
|
+
const [first, ...rest] = children;
|
|
9
|
+
return first === undefined ? check.annotated(passingLabel).true(true) : check.group([first, ...rest]);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=double-usage-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"double-usage-contract.js","sourceRoot":"","sources":["../../../../source/doubles/double-usage-contract.ts"],"names":[],"mappings":"AAuCA,MAAM,UAAU,QAAQ,CAAC,IAAe;IACpC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,KAAqB,EACrB,QAAuC,EACvC,YAAoB;IAEpB,MAAM,CAAE,KAAK,EAAE,GAAG,IAAI,CAAE,GAAG,QAAQ,CAAC;IAEpC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAE,KAAK,EAAE,GAAG,IAAI,CAAE,CAAC,CAAC;AAC5G,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type CountArguments, type UsageAssertionReference, type UsageMode, type ValueArguments } from './double-usage-contract.ts';
|
|
2
|
+
export declare function countReference(name: string, mode: UsageMode): UsageAssertionReference<CountArguments>;
|
|
3
|
+
export declare function atLeastOneReference(name: string, mode: UsageMode): UsageAssertionReference<ValueArguments>;
|
|
4
|
+
export declare function noEventsReference(name: string, mode: UsageMode): UsageAssertionReference<ValueArguments>;
|
|
5
|
+
export declare function onceReference(name: string, mode: UsageMode): UsageAssertionReference<ValueArguments>;
|
|
6
|
+
//# sourceMappingURL=double-usage-count-assertion.d.ts.map
|