@grest-ts/testkit 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +413 -0
- package/dist/src/GGBundleTest.d.ts +8 -0
- package/dist/src/GGBundleTest.d.ts.map +1 -0
- package/dist/src/GGBundleTest.js +75 -0
- package/dist/src/GGBundleTest.js.map +1 -0
- package/dist/src/GGTest.d.ts +131 -0
- package/dist/src/GGTest.d.ts.map +1 -0
- package/dist/src/GGTest.js +245 -0
- package/dist/src/GGTest.js.map +1 -0
- package/dist/src/GGTestContext.d.ts +36 -0
- package/dist/src/GGTestContext.d.ts.map +1 -0
- package/dist/src/GGTestContext.js +63 -0
- package/dist/src/GGTestContext.js.map +1 -0
- package/dist/src/GGTestRunner.d.ts +108 -0
- package/dist/src/GGTestRunner.d.ts.map +1 -0
- package/dist/src/GGTestRunner.js +242 -0
- package/dist/src/GGTestRunner.js.map +1 -0
- package/dist/src/GGTestRuntime.d.ts +103 -0
- package/dist/src/GGTestRuntime.d.ts.map +1 -0
- package/dist/src/GGTestRuntime.js +219 -0
- package/dist/src/GGTestRuntime.js.map +1 -0
- package/dist/src/GGTestRuntimeWorker.d.ts +41 -0
- package/dist/src/GGTestRuntimeWorker.d.ts.map +1 -0
- package/dist/src/GGTestRuntimeWorker.js +136 -0
- package/dist/src/GGTestRuntimeWorker.js.map +1 -0
- package/dist/src/GGTestSharedRef.d.ts +35 -0
- package/dist/src/GGTestSharedRef.d.ts.map +1 -0
- package/dist/src/GGTestSharedRef.js +126 -0
- package/dist/src/GGTestSharedRef.js.map +1 -0
- package/dist/src/GGTestkitExtensionsDiscovery.d.ts +21 -0
- package/dist/src/GGTestkitExtensionsDiscovery.d.ts.map +1 -0
- package/dist/src/GGTestkitExtensionsDiscovery.js +24 -0
- package/dist/src/GGTestkitExtensionsDiscovery.js.map +1 -0
- package/dist/src/IGGLocalDiscoveryServer.d.ts +16 -0
- package/dist/src/IGGLocalDiscoveryServer.d.ts.map +1 -0
- package/dist/src/IGGLocalDiscoveryServer.js +2 -0
- package/dist/src/IGGLocalDiscoveryServer.js.map +1 -0
- package/dist/src/callOn/GGCallOnSelector.d.ts +42 -0
- package/dist/src/callOn/GGCallOnSelector.d.ts.map +1 -0
- package/dist/src/callOn/GGCallOnSelector.js +35 -0
- package/dist/src/callOn/GGCallOnSelector.js.map +1 -0
- package/dist/src/callOn/GGContractClass.implement.d.ts +8 -0
- package/dist/src/callOn/GGContractClass.implement.d.ts.map +1 -0
- package/dist/src/callOn/GGContractClass.implement.js +31 -0
- package/dist/src/callOn/GGContractClass.implement.js.map +1 -0
- package/dist/src/callOn/GGTestActionForLocatorOnCall.d.ts +28 -0
- package/dist/src/callOn/GGTestActionForLocatorOnCall.d.ts.map +1 -0
- package/dist/src/callOn/GGTestActionForLocatorOnCall.js +118 -0
- package/dist/src/callOn/GGTestActionForLocatorOnCall.js.map +1 -0
- package/dist/src/callOn/TestableIPC.d.ts +72 -0
- package/dist/src/callOn/TestableIPC.d.ts.map +1 -0
- package/dist/src/callOn/TestableIPC.js +34 -0
- package/dist/src/callOn/TestableIPC.js.map +1 -0
- package/dist/src/callOn/callOn.d.ts +113 -0
- package/dist/src/callOn/callOn.d.ts.map +1 -0
- package/dist/src/callOn/callOn.js +122 -0
- package/dist/src/callOn/callOn.js.map +1 -0
- package/dist/src/callOn/registerOnCallHandler.d.ts +13 -0
- package/dist/src/callOn/registerOnCallHandler.d.ts.map +1 -0
- package/dist/src/callOn/registerOnCallHandler.js +111 -0
- package/dist/src/callOn/registerOnCallHandler.js.map +1 -0
- package/dist/src/index-node.d.ts +35 -0
- package/dist/src/index-node.d.ts.map +1 -0
- package/dist/src/index-node.js +50 -0
- package/dist/src/index-node.js.map +1 -0
- package/dist/src/mockable/GGMockable.d.ts +19 -0
- package/dist/src/mockable/GGMockable.d.ts.map +1 -0
- package/dist/src/mockable/GGMockable.js +2 -0
- package/dist/src/mockable/GGMockable.js.map +1 -0
- package/dist/src/mockable/GGMockableCall.d.ts +2 -0
- package/dist/src/mockable/GGMockableCall.d.ts.map +1 -0
- package/dist/src/mockable/GGMockableCall.js +41 -0
- package/dist/src/mockable/GGMockableCall.js.map +1 -0
- package/dist/src/mockable/GGMockableIPC.d.ts +17 -0
- package/dist/src/mockable/GGMockableIPC.d.ts.map +1 -0
- package/dist/src/mockable/GGMockableIPC.js +8 -0
- package/dist/src/mockable/GGMockableIPC.js.map +1 -0
- package/dist/src/mockable/GGMockableInterceptor.d.ts +24 -0
- package/dist/src/mockable/GGMockableInterceptor.d.ts.map +1 -0
- package/dist/src/mockable/GGMockableInterceptor.js +32 -0
- package/dist/src/mockable/GGMockableInterceptor.js.map +1 -0
- package/dist/src/mockable/GGMockableInterceptorsServer.d.ts +12 -0
- package/dist/src/mockable/GGMockableInterceptorsServer.d.ts.map +1 -0
- package/dist/src/mockable/GGMockableInterceptorsServer.js +55 -0
- package/dist/src/mockable/GGMockableInterceptorsServer.js.map +1 -0
- package/dist/src/mockable/mockable.d.ts +46 -0
- package/dist/src/mockable/mockable.d.ts.map +1 -0
- package/dist/src/mockable/mockable.js +47 -0
- package/dist/src/mockable/mockable.js.map +1 -0
- package/dist/src/runner/InlineRunner.d.ts +12 -0
- package/dist/src/runner/InlineRunner.d.ts.map +1 -0
- package/dist/src/runner/InlineRunner.js +42 -0
- package/dist/src/runner/InlineRunner.js.map +1 -0
- package/dist/src/runner/IsolatedRunner.d.ts +17 -0
- package/dist/src/runner/IsolatedRunner.d.ts.map +1 -0
- package/dist/src/runner/IsolatedRunner.js +155 -0
- package/dist/src/runner/IsolatedRunner.js.map +1 -0
- package/dist/src/runner/RuntimeRunner.d.ts +14 -0
- package/dist/src/runner/RuntimeRunner.d.ts.map +1 -0
- package/dist/src/runner/RuntimeRunner.js +2 -0
- package/dist/src/runner/RuntimeRunner.js.map +1 -0
- package/dist/src/runner/WorkerRunner.d.ts +17 -0
- package/dist/src/runner/WorkerRunner.d.ts.map +1 -0
- package/dist/src/runner/WorkerRunner.js +155 -0
- package/dist/src/runner/WorkerRunner.js.map +1 -0
- package/dist/src/runner/isolated-loader.mjs +91 -0
- package/dist/src/runner/worker-loader.mjs +49 -0
- package/dist/src/testers/GGCallInterceptor.d.ts +71 -0
- package/dist/src/testers/GGCallInterceptor.d.ts.map +1 -0
- package/dist/src/testers/GGCallInterceptor.js +170 -0
- package/dist/src/testers/GGCallInterceptor.js.map +1 -0
- package/dist/src/testers/GGMockWith.d.ts +30 -0
- package/dist/src/testers/GGMockWith.d.ts.map +1 -0
- package/dist/src/testers/GGMockWith.js +70 -0
- package/dist/src/testers/GGMockWith.js.map +1 -0
- package/dist/src/testers/GGSpyWith.d.ts +40 -0
- package/dist/src/testers/GGSpyWith.d.ts.map +1 -0
- package/dist/src/testers/GGSpyWith.js +90 -0
- package/dist/src/testers/GGSpyWith.js.map +1 -0
- package/dist/src/testers/GGTestAction.d.ts +126 -0
- package/dist/src/testers/GGTestAction.d.ts.map +1 -0
- package/dist/src/testers/GGTestAction.js +245 -0
- package/dist/src/testers/GGTestAction.js.map +1 -0
- package/dist/src/testers/GGTestComponent.d.ts +15 -0
- package/dist/src/testers/GGTestComponent.d.ts.map +1 -0
- package/dist/src/testers/GGTestComponent.js +2 -0
- package/dist/src/testers/GGTestComponent.js.map +1 -0
- package/dist/src/testers/GGTestSelector.d.ts +54 -0
- package/dist/src/testers/GGTestSelector.d.ts.map +1 -0
- package/dist/src/testers/GGTestSelector.js +179 -0
- package/dist/src/testers/GGTestSelector.js.map +1 -0
- package/dist/src/testers/IGGTestInterceptor.d.ts +8 -0
- package/dist/src/testers/IGGTestInterceptor.d.ts.map +1 -0
- package/dist/src/testers/IGGTestInterceptor.js +2 -0
- package/dist/src/testers/IGGTestInterceptor.js.map +1 -0
- package/dist/src/testers/IGGTestWith.d.ts +13 -0
- package/dist/src/testers/IGGTestWith.d.ts.map +1 -0
- package/dist/src/testers/IGGTestWith.js +2 -0
- package/dist/src/testers/IGGTestWith.js.map +1 -0
- package/dist/src/testers/RuntimeSelector.d.ts +117 -0
- package/dist/src/testers/RuntimeSelector.d.ts.map +1 -0
- package/dist/src/testers/RuntimeSelector.js +2 -0
- package/dist/src/testers/RuntimeSelector.js.map +1 -0
- package/dist/src/tsconfig.json +17 -0
- package/dist/src/utils/GGExpectations.d.ts +18 -0
- package/dist/src/utils/GGExpectations.d.ts.map +1 -0
- package/dist/src/utils/GGExpectations.js +59 -0
- package/dist/src/utils/GGExpectations.js.map +1 -0
- package/dist/src/utils/GGTestError.d.ts +13 -0
- package/dist/src/utils/GGTestError.d.ts.map +1 -0
- package/dist/src/utils/GGTestError.js +26 -0
- package/dist/src/utils/GGTestError.js.map +1 -0
- package/dist/src/utils/captureStack.d.ts +9 -0
- package/dist/src/utils/captureStack.d.ts.map +1 -0
- package/dist/src/utils/captureStack.js +51 -0
- package/dist/src/utils/captureStack.js.map +1 -0
- package/dist/tsconfig.publish.tsbuildinfo +1 -0
- package/package.json +66 -0
- package/src/GGBundleTest.ts +89 -0
- package/src/GGTest.ts +318 -0
- package/src/GGTestContext.ts +74 -0
- package/src/GGTestRunner.ts +308 -0
- package/src/GGTestRuntime.ts +265 -0
- package/src/GGTestRuntimeWorker.ts +159 -0
- package/src/GGTestSharedRef.ts +116 -0
- package/src/GGTestkitExtensionsDiscovery.ts +26 -0
- package/src/IGGLocalDiscoveryServer.ts +16 -0
- package/src/callOn/GGCallOnSelector.ts +61 -0
- package/src/callOn/GGContractClass.implement.ts +43 -0
- package/src/callOn/GGTestActionForLocatorOnCall.ts +134 -0
- package/src/callOn/TestableIPC.ts +81 -0
- package/src/callOn/callOn.ts +224 -0
- package/src/callOn/registerOnCallHandler.ts +123 -0
- package/src/index-node.ts +64 -0
- package/src/mockable/GGMockable.ts +22 -0
- package/src/mockable/GGMockableCall.ts +45 -0
- package/src/mockable/GGMockableIPC.ts +20 -0
- package/src/mockable/GGMockableInterceptor.ts +44 -0
- package/src/mockable/GGMockableInterceptorsServer.ts +69 -0
- package/src/mockable/mockable.ts +71 -0
- package/src/runner/InlineRunner.ts +47 -0
- package/src/runner/IsolatedRunner.ts +179 -0
- package/src/runner/RuntimeRunner.ts +15 -0
- package/src/runner/WorkerRunner.ts +179 -0
- package/src/runner/isolated-loader.mjs +91 -0
- package/src/runner/worker-loader.mjs +49 -0
- package/src/testers/GGCallInterceptor.ts +224 -0
- package/src/testers/GGMockWith.ts +92 -0
- package/src/testers/GGSpyWith.ts +115 -0
- package/src/testers/GGTestAction.ts +333 -0
- package/src/testers/GGTestComponent.ts +16 -0
- package/src/testers/GGTestSelector.ts +223 -0
- package/src/testers/IGGTestInterceptor.ts +11 -0
- package/src/testers/IGGTestWith.ts +15 -0
- package/src/testers/RuntimeSelector.ts +151 -0
- package/src/tsconfig.json +17 -0
- package/src/utils/GGExpectations.ts +78 -0
- package/src/utils/GGTestError.ts +37 -0
- package/src/utils/captureStack.ts +54 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { GGLog } from "@grest-ts/logger";
|
|
2
|
+
import { LOG_COLORS } from "@grest-ts/logger-console";
|
|
3
|
+
import { captureStackSourceFile } from "../utils/captureStack.js";
|
|
4
|
+
import { GGContext } from "@grest-ts/context";
|
|
5
|
+
import { GG_TRACE } from "@grest-ts/trace";
|
|
6
|
+
import { GGExpectations } from "../utils/GGExpectations.js";
|
|
7
|
+
/**
|
|
8
|
+
* Base class for test actions that can be awaited and chained with expectations.
|
|
9
|
+
*
|
|
10
|
+
* Test actions are PromiseLike objects that execute when awaited. They support
|
|
11
|
+
* attaching interceptors (mocks, log expectations, spies) that are validated
|
|
12
|
+
* during execution.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // Simple action - just await to execute
|
|
16
|
+
* const user = await client.getUser(123);
|
|
17
|
+
*
|
|
18
|
+
* // With sync expectation - mock must be called during the action
|
|
19
|
+
* await client.createUser({name: "Alice"})
|
|
20
|
+
* .with(mockEmailService.sendWelcome.toBeCalledOnce());
|
|
21
|
+
*
|
|
22
|
+
* // With async expectation - waits for event after action completes
|
|
23
|
+
* await client.triggerAsyncJob()
|
|
24
|
+
* .waitFor(t.logs.expect("Job completed"), 10000);
|
|
25
|
+
*
|
|
26
|
+
* @typeParam T - The type returned when the action completes
|
|
27
|
+
*/
|
|
28
|
+
export class GGTestAction {
|
|
29
|
+
[Symbol.toStringTag] = "GGTestAction";
|
|
30
|
+
ctx;
|
|
31
|
+
config;
|
|
32
|
+
interceptors = [];
|
|
33
|
+
_waitForInterceptors = [];
|
|
34
|
+
definedInSourceFile;
|
|
35
|
+
responseExpectations = new GGExpectations();
|
|
36
|
+
constructor(ctx, config) {
|
|
37
|
+
if (ctx === undefined)
|
|
38
|
+
throw new Error("No ctx provided!");
|
|
39
|
+
this.ctx = ctx;
|
|
40
|
+
this.config = config;
|
|
41
|
+
this.definedInSourceFile = captureStackSourceFile();
|
|
42
|
+
new GGContext("Test").run(() => {
|
|
43
|
+
GG_TRACE.init();
|
|
44
|
+
const separator = "-".repeat(100);
|
|
45
|
+
GGLog.info(this, separator);
|
|
46
|
+
GGLog.info(this, this.logMsg("new", this.config.logData.message)
|
|
47
|
+
+ (this.config.logData.context ? "\n" + LOG_COLORS.bgOrange + LOG_COLORS.black
|
|
48
|
+
+ "Context: " + LOG_COLORS.reset + LOG_COLORS.orange + JSON.stringify(this.config.logData.context) + LOG_COLORS.reset : "")
|
|
49
|
+
+ "\n" + this.definedInSourceFile);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
toEqual(expectedData) {
|
|
53
|
+
this.responseExpectations.toEqual(expectedData);
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
toMatchObject(expectedData) {
|
|
57
|
+
this.responseExpectations.toMatchObject(expectedData);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
toBeUndefined() {
|
|
61
|
+
this.responseExpectations.toBeUndefined();
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
toHaveLength(length) {
|
|
65
|
+
this.responseExpectations.toHaveLength(length);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
arrayToContain(...items) {
|
|
69
|
+
this.responseExpectations.arrayToContain(...items);
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
arrayToContainEqual(...items) {
|
|
73
|
+
this.responseExpectations.arrayToContainEqual(...items);
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Attach expectations that must be satisfied during action execution.
|
|
78
|
+
*
|
|
79
|
+
* Interceptors are registered before the action runs and validated immediately after.
|
|
80
|
+
* If an expectation fails (e.g., mock not called), the test fails before checking
|
|
81
|
+
* the action's response - this surfaces the root cause of failures first.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* await client.createOrder({items: [...]})
|
|
85
|
+
* .with(mockInventory.reserve.toBeCalledOnce())
|
|
86
|
+
* .with(mockPayment.charge.toMatchObject({amount: 100}));
|
|
87
|
+
*/
|
|
88
|
+
with(...expectations) {
|
|
89
|
+
for (const expectation of expectations) {
|
|
90
|
+
// Check if this expectation requires async processing
|
|
91
|
+
if (expectation.requiresWaitFor?.()) {
|
|
92
|
+
throw new Error(`This interceptor cannot be used with .with() because it handles async events ` +
|
|
93
|
+
`that occur after the HTTP response.\n\n` +
|
|
94
|
+
`SQS message processing happens asynchronously - the message is delivered to the ` +
|
|
95
|
+
`subscriber queue after the HTTP request completes.\n\n` +
|
|
96
|
+
`To verify SQS events, use one of these approaches:\n` +
|
|
97
|
+
` 1. Use .waitFor() with log verification:\n` +
|
|
98
|
+
` .waitFor(t.worker.logs.expect(/expected log message/))\n\n` +
|
|
99
|
+
` 2. Use .waitFor() with the SQS interceptor (waits for async processing):\n` +
|
|
100
|
+
` .waitFor(SqsResource.spy.toMatchObject({...}))\n`);
|
|
101
|
+
}
|
|
102
|
+
this.interceptors.push(expectation.createInterceptor());
|
|
103
|
+
}
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Attach an expectation that may be satisfied after the action completes.
|
|
108
|
+
*
|
|
109
|
+
* Use this for async side effects - when the action triggers something that
|
|
110
|
+
* happens later (e.g., background job, delayed log, async notification).
|
|
111
|
+
* The test will poll until the expectation is satisfied or timeout is reached.
|
|
112
|
+
*
|
|
113
|
+
* @param expectation - The expectation to wait for
|
|
114
|
+
* @param timeout - Max time to wait in ms (default: 5000)
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* // Action returns immediately, but logs after 100ms
|
|
118
|
+
* await client.triggerBackgroundJob({id: 123})
|
|
119
|
+
* .waitFor(t.logs.expect("Job 123 completed"), 10000);
|
|
120
|
+
*/
|
|
121
|
+
waitFor(expectation, timeout = 5000) {
|
|
122
|
+
const interceptor = expectation.createInterceptor();
|
|
123
|
+
this.interceptors.push(interceptor);
|
|
124
|
+
this._waitForInterceptors.push({
|
|
125
|
+
interceptor,
|
|
126
|
+
timeout
|
|
127
|
+
});
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
then(onfulfilled, onrejected) {
|
|
131
|
+
return this.execute().then(onfulfilled, onrejected);
|
|
132
|
+
}
|
|
133
|
+
catch(onrejected) {
|
|
134
|
+
return this.execute().catch(onrejected);
|
|
135
|
+
}
|
|
136
|
+
finally(onfinally) {
|
|
137
|
+
return this.execute().finally(onfinally);
|
|
138
|
+
}
|
|
139
|
+
async execute() {
|
|
140
|
+
return this.ctx.run(async () => {
|
|
141
|
+
GG_TRACE.init();
|
|
142
|
+
GGLog.info(this, this.logMsg("execute", this.config.logData.message), this.config.logData.request);
|
|
143
|
+
let rawResult = undefined;
|
|
144
|
+
try {
|
|
145
|
+
await Promise.all(this.interceptors.map(i => i.register()));
|
|
146
|
+
rawResult = await this.executeAction();
|
|
147
|
+
await new Promise(resolve => setTimeout(resolve, 25));
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
await Promise.all(this.interceptors.map(i => i.unregister()));
|
|
151
|
+
}
|
|
152
|
+
const waitForSet = new Set(this._waitForInterceptors.map(w => w.interceptor));
|
|
153
|
+
// Validate non-wait interceptors immediately
|
|
154
|
+
for (const interceptor of this.interceptors) {
|
|
155
|
+
if (!waitForSet.has(interceptor)) {
|
|
156
|
+
await interceptor.validate();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Check for validation errors from non-wait interceptors
|
|
160
|
+
for (const interceptor of this.interceptors) {
|
|
161
|
+
if (!waitForSet.has(interceptor)) {
|
|
162
|
+
const error = interceptor.getMockValidationError();
|
|
163
|
+
if (error) {
|
|
164
|
+
throw error;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
let result = undefined;
|
|
169
|
+
if (!this.config.noResponse) {
|
|
170
|
+
result = await this.processRawResponse(rawResult);
|
|
171
|
+
this.responseExpectations.check(result);
|
|
172
|
+
}
|
|
173
|
+
if (this._waitForInterceptors.length > 0) {
|
|
174
|
+
await this._waitForAllInterceptors();
|
|
175
|
+
}
|
|
176
|
+
// Validate wait interceptors after waiting
|
|
177
|
+
for (const { interceptor } of this._waitForInterceptors) {
|
|
178
|
+
await interceptor.validate();
|
|
179
|
+
const error = interceptor.getMockValidationError();
|
|
180
|
+
if (error) {
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
GGLog.info(this, this.logMsg("finished", this.config.logData.message), this.config.noResponse ? "Result: (void)" : rawResult);
|
|
185
|
+
return result;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Process and validate the raw response from executeAction().
|
|
190
|
+
* Called AFTER mock validation, so mock errors surface first.
|
|
191
|
+
*
|
|
192
|
+
* Subclasses implement this to:
|
|
193
|
+
* - Parse the raw response into the expected type T
|
|
194
|
+
* - Check response expectations (e.g., toMatchObject, toEqual)
|
|
195
|
+
*
|
|
196
|
+
* @param result - Raw response from executeAction()
|
|
197
|
+
* @returns The parsed/validated result of type T
|
|
198
|
+
*/
|
|
199
|
+
processRawResponse(result) {
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
async _waitForAllInterceptors() {
|
|
203
|
+
const pending = new Map(this._waitForInterceptors.map(w => [w.interceptor, w.timeout]));
|
|
204
|
+
const checkInterval = 20;
|
|
205
|
+
const actionEndTime = Date.now();
|
|
206
|
+
return new Promise((resolve, reject) => {
|
|
207
|
+
const check = () => {
|
|
208
|
+
const elapsed = Date.now() - actionEndTime;
|
|
209
|
+
for (const [interceptor, timeout] of pending) {
|
|
210
|
+
if (interceptor.isCalled()) {
|
|
211
|
+
pending.delete(interceptor);
|
|
212
|
+
}
|
|
213
|
+
else if (elapsed > timeout) {
|
|
214
|
+
reject(new Error(`[Test Failed] Timeout waiting for interceptor after ${timeout}ms`));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (pending.size === 0) {
|
|
219
|
+
resolve();
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
setTimeout(check, checkInterval);
|
|
223
|
+
};
|
|
224
|
+
check();
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
logMsg(type, msg) {
|
|
228
|
+
let pref = "";
|
|
229
|
+
let color = "";
|
|
230
|
+
if (type === "new") {
|
|
231
|
+
pref = "New test action ";
|
|
232
|
+
color = LOG_COLORS.reset + LOG_COLORS.bgBlack + LOG_COLORS.white;
|
|
233
|
+
}
|
|
234
|
+
else if (type === "execute") {
|
|
235
|
+
pref = "Executing test action to ";
|
|
236
|
+
color = LOG_COLORS.reset + LOG_COLORS.bgGray + LOG_COLORS.black;
|
|
237
|
+
}
|
|
238
|
+
else if (type === "finished") {
|
|
239
|
+
pref = "Finished test action to ";
|
|
240
|
+
color = LOG_COLORS.reset + LOG_COLORS.bgGray + LOG_COLORS.black;
|
|
241
|
+
}
|
|
242
|
+
return color + pref + msg + LOG_COLORS.reset;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=GGTestAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGTestAction.js","sourceRoot":"","sources":["../../../src/testers/GGTestAction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { GGTestRunner } from "../GGTestRunner";
|
|
2
|
+
/**
|
|
3
|
+
* Interface for test components that can be registered with GGTestRunner.
|
|
4
|
+
* Components must accept GGTestRunner as their constructor argument.
|
|
5
|
+
*/
|
|
6
|
+
export interface GGTestComponent {
|
|
7
|
+
start?(): Promise<void>;
|
|
8
|
+
afterEach?(): Promise<void>;
|
|
9
|
+
teardown?(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Constructor type for components. All components must accept GGTestRunner as constructor argument.
|
|
13
|
+
*/
|
|
14
|
+
export type GGTestComponentType<T extends GGTestComponent> = new (runner: GGTestRunner) => T;
|
|
15
|
+
//# sourceMappingURL=GGTestComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGTestComponent.d.ts","sourceRoot":"","sources":["../../../src/testers/GGTestComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,eAAe,IAAI,KAAK,MAAM,EAAE,YAAY,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGTestComponent.js","sourceRoot":"","sources":["../../../src/testers/GGTestComponent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { RuntimeConstructor, RuntimeResult, Selector, SelectorExtensions, StartResult, RuntimeInput } from "./RuntimeSelector";
|
|
2
|
+
import { GGTestRuntime } from "../GGTestRuntime";
|
|
3
|
+
import type { GGTestRunner } from "../GGTestRunner";
|
|
4
|
+
/**
|
|
5
|
+
* Internal implementation class for Selector.
|
|
6
|
+
* Works with GGTestRuntime instances directly.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GGTestSelector<T extends RuntimeConstructor[]> {
|
|
9
|
+
private static readonly extensions;
|
|
10
|
+
readonly runtimes: GGTestRuntime[];
|
|
11
|
+
private readonly extensionCache;
|
|
12
|
+
constructor(runtimes: GGTestRuntime[]);
|
|
13
|
+
get length(): number;
|
|
14
|
+
static addExtension(factory: typeof GGTestSelectorExtension & {
|
|
15
|
+
PROPERTY_NAME: string;
|
|
16
|
+
}): void;
|
|
17
|
+
static hasExtension(name: string): boolean;
|
|
18
|
+
getExtension<K extends keyof SelectorExtensions<T>>(name: K): SelectorExtensions<T>[K];
|
|
19
|
+
/**
|
|
20
|
+
* Stop all runtimes in this selector.
|
|
21
|
+
*/
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Shutdown all runtimes in this selector.
|
|
25
|
+
*/
|
|
26
|
+
shutdown(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export declare class GGTestSelectorExtension {
|
|
29
|
+
protected readonly runtimes: GGTestRuntime[];
|
|
30
|
+
protected readonly runner: GGTestRunner;
|
|
31
|
+
constructor(runtimes: GGTestRuntime[]);
|
|
32
|
+
protected forEachParallel(callback: (runtime: GGTestRuntime) => Promise<void>): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a proxied Selector that supports:
|
|
36
|
+
* - Indexed access: selector[0]
|
|
37
|
+
* - Extension access: selector.config, selector.logs
|
|
38
|
+
* - Lifecycle methods: selector.stop(), selector.shutdown()
|
|
39
|
+
* - Standard properties: selector.runtimes, selector.length
|
|
40
|
+
*/
|
|
41
|
+
export declare function createSelector<T extends RuntimeConstructor[]>(runtimes: GGTestRuntime[]): Selector<T>;
|
|
42
|
+
/**
|
|
43
|
+
* Create result based on input shape.
|
|
44
|
+
* - Single runtime → Selector
|
|
45
|
+
* - Array of runtimes → Selector
|
|
46
|
+
* - Object → ObjectResult with named selectors
|
|
47
|
+
*/
|
|
48
|
+
export declare function createStartResult<T extends RuntimeInput>(input: T, runtimes: GGTestRuntime[]): StartResult<T>;
|
|
49
|
+
/**
|
|
50
|
+
* @deprecated Use createStartResult instead.
|
|
51
|
+
* Create a RuntimeResult for accessing runtimes via get() method.
|
|
52
|
+
*/
|
|
53
|
+
export declare function createRuntimeSelector<T extends RuntimeConstructor[]>(runtimes: GGTestRuntime[]): RuntimeResult<T>;
|
|
54
|
+
//# sourceMappingURL=GGTestSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGTestSelector.d.ts","sourceRoot":"","sources":["../../../src/testers/GGTestSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAE,QAAQ,EAAE,kBAAkB,EAAgB,WAAW,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAC3I,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,kBAAkB,EAAE;IAEtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAqD;IAEvF,SAAgB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;gBAEjD,QAAQ,EAAE,aAAa,EAAE;IAIrC,IAAW,MAAM,IAAI,MAAM,CAE1B;WAEa,YAAY,CAAC,OAAO,EAAE,OAAO,uBAAuB,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;WAOvF,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1C,YAAY,CAAC,CAAC,SAAS,MAAM,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAiB7F;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKzC;AAED,qBAAa,uBAAuB;IAIpB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE;IAFxD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;gBAER,QAAQ,EAAE,aAAa,EAAE;cAIxC,eAAe,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAYtG;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,kBAAkB,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAyBrG;AAMD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,EACpD,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,EAAE,GAC1B,WAAW,CAAC,CAAC,CAAC,CAQhB;AA+CD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,kBAAkB,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAwBjH"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal implementation class for Selector.
|
|
3
|
+
* Works with GGTestRuntime instances directly.
|
|
4
|
+
*/
|
|
5
|
+
export class GGTestSelector {
|
|
6
|
+
static extensions = new Map();
|
|
7
|
+
runtimes;
|
|
8
|
+
extensionCache = new Map();
|
|
9
|
+
constructor(runtimes) {
|
|
10
|
+
this.runtimes = runtimes;
|
|
11
|
+
}
|
|
12
|
+
get length() {
|
|
13
|
+
return this.runtimes.length;
|
|
14
|
+
}
|
|
15
|
+
static addExtension(factory) {
|
|
16
|
+
if (this.extensions.has(factory.PROPERTY_NAME)) {
|
|
17
|
+
throw new Error("Extension with name '" + factory.PROPERTY_NAME + "' is already registered!");
|
|
18
|
+
}
|
|
19
|
+
this.extensions.set(factory.PROPERTY_NAME, factory);
|
|
20
|
+
}
|
|
21
|
+
static hasExtension(name) {
|
|
22
|
+
return this.extensions.has(name);
|
|
23
|
+
}
|
|
24
|
+
getExtension(name) {
|
|
25
|
+
const cached = this.extensionCache.get(name);
|
|
26
|
+
if (cached !== undefined) {
|
|
27
|
+
return cached;
|
|
28
|
+
}
|
|
29
|
+
const extension = GGTestSelector.extensions.get(name);
|
|
30
|
+
if (!extension) {
|
|
31
|
+
throw new Error(`Extension '${String(name)}' is not registered. ` +
|
|
32
|
+
`Make sure the module providing this extension is imported.`);
|
|
33
|
+
}
|
|
34
|
+
const extensionInstance = new extension(this.runtimes);
|
|
35
|
+
this.extensionCache.set(name, extensionInstance);
|
|
36
|
+
return extensionInstance;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Stop all runtimes in this selector.
|
|
40
|
+
*/
|
|
41
|
+
async stop() {
|
|
42
|
+
for (const runtime of this.runtimes) {
|
|
43
|
+
await runtime.stop();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Shutdown all runtimes in this selector.
|
|
48
|
+
*/
|
|
49
|
+
async shutdown() {
|
|
50
|
+
for (const runtime of this.runtimes) {
|
|
51
|
+
await runtime.shutdown();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class GGTestSelectorExtension {
|
|
56
|
+
runtimes;
|
|
57
|
+
runner;
|
|
58
|
+
constructor(runtimes) {
|
|
59
|
+
this.runtimes = runtimes;
|
|
60
|
+
this.runner = this.runtimes[0]?.runner;
|
|
61
|
+
}
|
|
62
|
+
async forEachParallel(callback) {
|
|
63
|
+
const results = await Promise.allSettled(this.runtimes.map(runtime => callback(runtime)));
|
|
64
|
+
const errors = results
|
|
65
|
+
.filter((r) => r.status === 'rejected')
|
|
66
|
+
.map(r => r.reason);
|
|
67
|
+
if (errors.length > 0) {
|
|
68
|
+
throw new AggregateError(errors, `${errors.length} runtime(s) failed`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a proxied Selector that supports:
|
|
74
|
+
* - Indexed access: selector[0]
|
|
75
|
+
* - Extension access: selector.config, selector.logs
|
|
76
|
+
* - Lifecycle methods: selector.stop(), selector.shutdown()
|
|
77
|
+
* - Standard properties: selector.runtimes, selector.length
|
|
78
|
+
*/
|
|
79
|
+
export function createSelector(runtimes) {
|
|
80
|
+
const impl = new GGTestSelector(runtimes);
|
|
81
|
+
return new Proxy(impl, {
|
|
82
|
+
get(target, prop) {
|
|
83
|
+
const implTarget = target;
|
|
84
|
+
// Handle numeric index access: selector[0]
|
|
85
|
+
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
86
|
+
const index = parseInt(prop, 10);
|
|
87
|
+
if (index >= 0 && index < implTarget.runtimes.length) {
|
|
88
|
+
return createSelector([implTarget.runtimes[index]]);
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
// Handle extension access: selector.config, selector.logs, etc.
|
|
93
|
+
if (typeof prop === 'string' && GGTestSelector.hasExtension(prop)) {
|
|
94
|
+
return implTarget.getExtension(prop);
|
|
95
|
+
}
|
|
96
|
+
// Handle methods and properties from impl
|
|
97
|
+
return Reflect.get(implTarget, prop);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// ============================================================================
|
|
102
|
+
// Factory functions for different input shapes
|
|
103
|
+
// ============================================================================
|
|
104
|
+
/**
|
|
105
|
+
* Create result based on input shape.
|
|
106
|
+
* - Single runtime → Selector
|
|
107
|
+
* - Array of runtimes → Selector
|
|
108
|
+
* - Object → ObjectResult with named selectors
|
|
109
|
+
*/
|
|
110
|
+
export function createStartResult(input, runtimes) {
|
|
111
|
+
// Object input: { main: MainRuntime, sub: SubRuntime }
|
|
112
|
+
if (isObjectInput(input)) {
|
|
113
|
+
return createObjectResult(input, runtimes);
|
|
114
|
+
}
|
|
115
|
+
// Array or single runtime → Selector
|
|
116
|
+
return createSelector(runtimes);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check if input is an object (not a constructor or array).
|
|
120
|
+
*/
|
|
121
|
+
function isObjectInput(input) {
|
|
122
|
+
return typeof input === 'object' && !Array.isArray(input) && !('NAME' in input);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create ObjectResult for object input.
|
|
126
|
+
*/
|
|
127
|
+
function createObjectResult(input, runtimes) {
|
|
128
|
+
const result = {};
|
|
129
|
+
// Group runtimes by the key they were registered under
|
|
130
|
+
// We need to track which runtimes belong to which key
|
|
131
|
+
for (const [key, value] of Object.entries(input)) {
|
|
132
|
+
const constructors = Array.isArray(value) ? value : [value];
|
|
133
|
+
const names = constructors.map(c => c.NAME);
|
|
134
|
+
const keyRuntimes = runtimes.filter(r => names.includes(r.name));
|
|
135
|
+
result[key] = createSelector(keyRuntimes);
|
|
136
|
+
}
|
|
137
|
+
// Add stop/shutdown that affects all runtimes
|
|
138
|
+
result.stop = async () => {
|
|
139
|
+
for (const runtime of runtimes) {
|
|
140
|
+
await runtime.stop();
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
result.shutdown = async () => {
|
|
144
|
+
for (const runtime of runtimes) {
|
|
145
|
+
await runtime.shutdown();
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
// ============================================================================
|
|
151
|
+
// Legacy factory (for backwards compatibility)
|
|
152
|
+
// ============================================================================
|
|
153
|
+
/**
|
|
154
|
+
* @deprecated Use createStartResult instead.
|
|
155
|
+
* Create a RuntimeResult for accessing runtimes via get() method.
|
|
156
|
+
*/
|
|
157
|
+
export function createRuntimeSelector(runtimes) {
|
|
158
|
+
return {
|
|
159
|
+
get(runtimeConstructor) {
|
|
160
|
+
const name = runtimeConstructor.NAME;
|
|
161
|
+
const filtered = runtimes.filter(r => r.name === name);
|
|
162
|
+
return createSelector(filtered);
|
|
163
|
+
},
|
|
164
|
+
all() {
|
|
165
|
+
return createSelector(runtimes);
|
|
166
|
+
},
|
|
167
|
+
async stop() {
|
|
168
|
+
for (const runtime of runtimes) {
|
|
169
|
+
await runtime.stop();
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
async shutdown() {
|
|
173
|
+
for (const runtime of runtimes) {
|
|
174
|
+
await runtime.shutdown();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=GGTestSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GGTestSelector.js","sourceRoot":"","sources":["../../../src/testers/GGTestSelector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface IGGTestInterceptor {
|
|
2
|
+
register(): void | Promise<void>;
|
|
3
|
+
unregister(): void | Promise<void>;
|
|
4
|
+
validate(): void | Promise<void>;
|
|
5
|
+
getMockValidationError(): Error | undefined;
|
|
6
|
+
isCalled(): boolean;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=IGGTestInterceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IGGTestInterceptor.d.ts","sourceRoot":"","sources":["../../../src/testers/IGGTestInterceptor.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,UAAU,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,sBAAsB,IAAI,KAAK,GAAG,SAAS,CAAC;IAE5C,QAAQ,IAAI,OAAO,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IGGTestInterceptor.js","sourceRoot":"","sources":["../../../src/testers/IGGTestInterceptor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IGGTestInterceptor } from "./IGGTestInterceptor";
|
|
2
|
+
export interface IGGTestWith {
|
|
3
|
+
createInterceptor(): IGGTestInterceptor;
|
|
4
|
+
/**
|
|
5
|
+
* Returns true if this expectation requires async processing and must be used with `.waitFor()`.
|
|
6
|
+
* When true, using with `.with()` will throw an error guiding the developer to use `.waitFor()`.
|
|
7
|
+
*
|
|
8
|
+
* Example: SQS message processing is async (happens after HTTP response), so SQS
|
|
9
|
+
* interceptors require `.waitFor()`.
|
|
10
|
+
*/
|
|
11
|
+
requiresWaitFor?(): boolean;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=IGGTestWith.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IGGTestWith.d.ts","sourceRoot":"","sources":["../../../src/testers/IGGTestWith.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,WAAW;IACxB,iBAAiB,IAAI,kBAAkB,CAAC;IAExC;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,OAAO,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IGGTestWith.js","sourceRoot":"","sources":["../../../src/testers/IGGTestWith.ts"],"names":[],"mappings":""}
|