@rhost/testkit 0.1.1 → 1.3.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/README.md +393 -5
- package/ROADMAP.md +241 -0
- package/dist/benchmark.d.ts +44 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +118 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cli/deploy.d.ts +2 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +120 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/fmt.d.ts +2 -0
- package/dist/cli/fmt.d.ts.map +1 -0
- package/dist/cli/fmt.js +119 -0
- package/dist/cli/fmt.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +81 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +210 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/validate.d.ts +2 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +126 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/cli/watch.d.ts +2 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +136 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/client.d.ts +56 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +117 -30
- package/dist/client.js.map +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +1 -1
- package/dist/container.js.map +1 -1
- package/dist/deployer.d.ts +86 -0
- package/dist/deployer.d.ts.map +1 -0
- package/dist/deployer.js +154 -0
- package/dist/deployer.js.map +1 -0
- package/dist/expect.d.ts +27 -1
- package/dist/expect.d.ts.map +1 -1
- package/dist/expect.js +47 -2
- package/dist/expect.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -1
- package/dist/index.js.map +1 -1
- package/dist/preflight.d.ts +70 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +121 -0
- package/dist/preflight.js.map +1 -0
- package/dist/reporter.d.ts +2 -0
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +24 -1
- package/dist/reporter.js.map +1 -1
- package/dist/runner.d.ts +83 -2
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +137 -8
- package/dist/runner.js.map +1 -1
- package/dist/snapshots.d.ts +84 -0
- package/dist/snapshots.d.ts.map +1 -0
- package/dist/snapshots.js +230 -0
- package/dist/snapshots.js.map +1 -0
- package/dist/validator/builtins.d.ts +18 -0
- package/dist/validator/builtins.d.ts.map +1 -0
- package/dist/validator/builtins.js +265 -0
- package/dist/validator/builtins.js.map +1 -0
- package/dist/validator/checker.d.ts +13 -0
- package/dist/validator/checker.d.ts.map +1 -0
- package/dist/validator/checker.js +111 -0
- package/dist/validator/checker.js.map +1 -0
- package/dist/validator/clobber.d.ts +7 -0
- package/dist/validator/clobber.d.ts.map +1 -0
- package/dist/validator/clobber.js +102 -0
- package/dist/validator/clobber.js.map +1 -0
- package/dist/validator/compat.d.ts +19 -0
- package/dist/validator/compat.d.ts.map +1 -0
- package/dist/validator/compat.js +58 -0
- package/dist/validator/compat.js.map +1 -0
- package/dist/validator/formatter.d.ts +21 -0
- package/dist/validator/formatter.d.ts.map +1 -0
- package/dist/validator/formatter.js +120 -0
- package/dist/validator/formatter.js.map +1 -0
- package/dist/validator/index.d.ts +57 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +133 -0
- package/dist/validator/index.js.map +1 -0
- package/dist/validator/parser.d.ts +16 -0
- package/dist/validator/parser.d.ts.map +1 -0
- package/dist/validator/parser.js +260 -0
- package/dist/validator/parser.js.map +1 -0
- package/dist/validator/tokenizer.d.ts +28 -0
- package/dist/validator/tokenizer.d.ts.map +1 -0
- package/dist/validator/tokenizer.js +174 -0
- package/dist/validator/tokenizer.js.map +1 -0
- package/dist/validator/types.d.ts +55 -0
- package/dist/validator/types.d.ts.map +1 -0
- package/dist/validator/types.js +6 -0
- package/dist/validator/types.js.map +1 -0
- package/dist/watcher.d.ts +44 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +297 -0
- package/dist/watcher.js.map +1 -0
- package/dist/world.d.ts +79 -0
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +167 -1
- package/dist/world.js.map +1 -1
- package/package.json +19 -3
package/dist/expect.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RhostClient } from './client';
|
|
2
|
+
import { SnapshotManager } from './snapshots';
|
|
2
3
|
export { isRhostError } from './assertions';
|
|
3
4
|
export declare class RhostExpectError extends Error {
|
|
4
5
|
readonly expression: string;
|
|
@@ -8,6 +9,11 @@ export declare class RhostExpectError extends Error {
|
|
|
8
9
|
readonly negated: boolean;
|
|
9
10
|
constructor(expression: string, matcherName: string, actual: string, expectedDesc: string, negated: boolean);
|
|
10
11
|
}
|
|
12
|
+
export interface SnapshotContext {
|
|
13
|
+
manager: SnapshotManager;
|
|
14
|
+
/** Full test name path, e.g. "Suite > Sub > Test Name" */
|
|
15
|
+
testName: string;
|
|
16
|
+
}
|
|
11
17
|
/**
|
|
12
18
|
* Jest-style expect wrapper for RhostMUSH softcode evaluation.
|
|
13
19
|
*
|
|
@@ -15,13 +21,17 @@ export declare class RhostExpectError extends Error {
|
|
|
15
21
|
* const ex = new RhostExpect(client, 'add(2,3)');
|
|
16
22
|
* await ex.toBe('5');
|
|
17
23
|
* await ex.not.toBe('42');
|
|
24
|
+
*
|
|
25
|
+
* @example Snapshot testing (requires runner context)
|
|
26
|
+
* await expect('iter(lnum(1,10),##)').toMatchSnapshot();
|
|
18
27
|
*/
|
|
19
28
|
export declare class RhostExpect {
|
|
20
29
|
private readonly client;
|
|
21
30
|
private readonly expression;
|
|
22
31
|
private readonly negated;
|
|
32
|
+
private readonly snapshotCtx?;
|
|
23
33
|
private _cached;
|
|
24
|
-
constructor(client: RhostClient, expression: string, negated?: boolean);
|
|
34
|
+
constructor(client: RhostClient, expression: string, negated?: boolean, snapshotCtx?: SnapshotContext | undefined);
|
|
25
35
|
/** Negation accessor — returns a new RhostExpect with negation flipped. */
|
|
26
36
|
get not(): RhostExpect;
|
|
27
37
|
private resolve;
|
|
@@ -70,5 +80,21 @@ export declare class RhostExpect {
|
|
|
70
80
|
* List has exactly n words (space-delimited by default).
|
|
71
81
|
*/
|
|
72
82
|
toHaveWordCount(n: number, sep?: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Compare the evaluated result against a stored snapshot.
|
|
85
|
+
*
|
|
86
|
+
* **First run**: the value is written to the snapshot file and the test passes.
|
|
87
|
+
* **Subsequent runs**: the value is compared to the stored snapshot. A mismatch
|
|
88
|
+
* fails the test and shows a diff.
|
|
89
|
+
* **Update mode**: pass `updateSnapshots: true` in `RunnerOptions`, or set the
|
|
90
|
+
* `RHOST_UPDATE_SNAPSHOTS=1` environment variable, to overwrite stored values.
|
|
91
|
+
*
|
|
92
|
+
* `.not.toMatchSnapshot()` is not supported and will throw.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* await expect('iter(lnum(1,10),##)').toMatchSnapshot();
|
|
96
|
+
* await expect('table(name,age,role)').toMatchSnapshot();
|
|
97
|
+
*/
|
|
98
|
+
toMatchSnapshot(): Promise<void>;
|
|
73
99
|
}
|
|
74
100
|
//# sourceMappingURL=expect.d.ts.map
|
package/dist/expect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAsB,MAAM,aAAa,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,qBAAa,gBAAiB,SAAQ,KAAK;aAEnB,UAAU,EAAE,MAAM;aAClB,WAAW,EAAE,MAAM;aACnB,MAAM,EAAE,MAAM;aACd,YAAY,EAAE,MAAM;aACpB,OAAO,EAAE,OAAO;gBAJhB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO;CAWvC;AAMD,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IAIhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IANjC,OAAO,CAAC,OAAO,CAAiC;gBAG3B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,UAAQ,EACf,WAAW,CAAC,EAAE,eAAe,YAAA;IAGlD,2EAA2E;IAC3E,IAAI,GAAG,IAAI,WAAW,CAErB;YAMa,OAAO;IAOrB,OAAO,CAAC,IAAI;IAYZ,gCAAgC;IAC1B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,gCAAgC;IAC1B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,iCAAiC;IAC3B,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,iCAAiC;IAC3B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,+BAA+B;IACzB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;;OAGG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;OAEG;IACG,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D;;;;;;;;;;;;;;OAcG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAgCzC"}
|
package/dist/expect.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RhostExpect = exports.RhostExpectError = exports.isRhostError = void 0;
|
|
4
|
+
const snapshots_1 = require("./snapshots");
|
|
4
5
|
var assertions_1 = require("./assertions");
|
|
5
6
|
Object.defineProperty(exports, "isRhostError", { enumerable: true, get: function () { return assertions_1.isRhostError; } });
|
|
6
7
|
const assertions_2 = require("./assertions");
|
|
@@ -33,17 +34,21 @@ exports.RhostExpectError = RhostExpectError;
|
|
|
33
34
|
* const ex = new RhostExpect(client, 'add(2,3)');
|
|
34
35
|
* await ex.toBe('5');
|
|
35
36
|
* await ex.not.toBe('42');
|
|
37
|
+
*
|
|
38
|
+
* @example Snapshot testing (requires runner context)
|
|
39
|
+
* await expect('iter(lnum(1,10),##)').toMatchSnapshot();
|
|
36
40
|
*/
|
|
37
41
|
class RhostExpect {
|
|
38
|
-
constructor(client, expression, negated = false) {
|
|
42
|
+
constructor(client, expression, negated = false, snapshotCtx) {
|
|
39
43
|
this.client = client;
|
|
40
44
|
this.expression = expression;
|
|
41
45
|
this.negated = negated;
|
|
46
|
+
this.snapshotCtx = snapshotCtx;
|
|
42
47
|
this._cached = undefined;
|
|
43
48
|
}
|
|
44
49
|
/** Negation accessor — returns a new RhostExpect with negation flipped. */
|
|
45
50
|
get not() {
|
|
46
|
-
return new RhostExpect(this.client, this.expression, !this.negated);
|
|
51
|
+
return new RhostExpect(this.client, this.expression, !this.negated, this.snapshotCtx);
|
|
47
52
|
}
|
|
48
53
|
// -------------------------------------------------------------------------
|
|
49
54
|
// Internal helpers
|
|
@@ -159,6 +164,46 @@ class RhostExpect {
|
|
|
159
164
|
const words = actual === '' ? [] : actual.split(sep).map((w) => w.trim()).filter(Boolean);
|
|
160
165
|
this.pass(words.length === n, 'toHaveWordCount', actual, `list with ${n} word(s) (got ${words.length})`);
|
|
161
166
|
}
|
|
167
|
+
// -------------------------------------------------------------------------
|
|
168
|
+
// Snapshot matcher
|
|
169
|
+
// -------------------------------------------------------------------------
|
|
170
|
+
/**
|
|
171
|
+
* Compare the evaluated result against a stored snapshot.
|
|
172
|
+
*
|
|
173
|
+
* **First run**: the value is written to the snapshot file and the test passes.
|
|
174
|
+
* **Subsequent runs**: the value is compared to the stored snapshot. A mismatch
|
|
175
|
+
* fails the test and shows a diff.
|
|
176
|
+
* **Update mode**: pass `updateSnapshots: true` in `RunnerOptions`, or set the
|
|
177
|
+
* `RHOST_UPDATE_SNAPSHOTS=1` environment variable, to overwrite stored values.
|
|
178
|
+
*
|
|
179
|
+
* `.not.toMatchSnapshot()` is not supported and will throw.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* await expect('iter(lnum(1,10),##)').toMatchSnapshot();
|
|
183
|
+
* await expect('table(name,age,role)').toMatchSnapshot();
|
|
184
|
+
*/
|
|
185
|
+
async toMatchSnapshot() {
|
|
186
|
+
if (this.negated) {
|
|
187
|
+
throw new Error('expect().not.toMatchSnapshot() is not supported. ' +
|
|
188
|
+
'Snapshots are for locking in specific values, not for asserting inequality.');
|
|
189
|
+
}
|
|
190
|
+
if (!this.snapshotCtx) {
|
|
191
|
+
throw new Error('toMatchSnapshot() requires snapshot context. ' +
|
|
192
|
+
'Use runner.run() to run tests — do not call toMatchSnapshot() on a standalone RhostExpect.');
|
|
193
|
+
}
|
|
194
|
+
const actual = await this.resolve();
|
|
195
|
+
const key = this.snapshotCtx.manager.nextKey(this.snapshotCtx.testName);
|
|
196
|
+
const result = this.snapshotCtx.manager.check(key, actual);
|
|
197
|
+
if (result.status === 'mismatch') {
|
|
198
|
+
const diff = (0, snapshots_1.formatSnapshotDiff)(result.expected, actual);
|
|
199
|
+
throw new Error(`Snapshot mismatch for "${key}"\n\n` +
|
|
200
|
+
` - Snapshot (stored)\n` +
|
|
201
|
+
` + Received (actual)\n\n` +
|
|
202
|
+
`${diff}\n\n` +
|
|
203
|
+
`Run with RHOST_UPDATE_SNAPSHOTS=1 to update the stored snapshot.`);
|
|
204
|
+
}
|
|
205
|
+
// 'written', 'matched', 'updated' — all pass silently
|
|
206
|
+
}
|
|
162
207
|
}
|
|
163
208
|
exports.RhostExpect = RhostExpect;
|
|
164
209
|
//# sourceMappingURL=expect.js.map
|
package/dist/expect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expect.js","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"expect.js","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
export { RhostClient, RhostClientOptions, stripAnsi } from './client';
|
|
1
|
+
export { RhostClient, RhostClientOptions, PreviewOptions, stripAnsi } from './client';
|
|
2
2
|
export { MushConnection } from './connection';
|
|
3
3
|
export { RhostContainer, ContainerConnectionInfo } from './container';
|
|
4
4
|
export { RhostAssert, RhostAssertionError, AssertionResult, isRhostError } from './assertions';
|
|
5
5
|
export { RhostExpect, RhostExpectError } from './expect';
|
|
6
|
-
export { RhostWorld } from './world';
|
|
6
|
+
export { RhostWorld, WorldSnapshot, WorldDiff, WorldObjectDiff, WorldSideEffectError } from './world';
|
|
7
|
+
export { preflight, preflightCheck, assertFunctionExists, assertFunctionMissing, assertConfigEquals, PreflightCheck, PreflightResult, PreflightOptions, PreflightError, } from './preflight';
|
|
7
8
|
export { Reporter } from './reporter';
|
|
8
|
-
export { RhostRunner, RunnerOptions, RunResult, TestContext, TestFn, HookFn, SuiteContext, ItFn, DescribeFn, } from './runner';
|
|
9
|
+
export { RhostRunner, RunnerOptions, RunResult, TestContext, TestFn, HookFn, PersonaTestFn, PersonaCredentials, SuiteContext, ItFn, DescribeFn, PersonasFn, } from './runner';
|
|
10
|
+
export { validate, validateFile, compatibilityReport, ValidationResult, Diagnostic, Severity, FunctionSignature, BUILTIN_FUNCTIONS, Platform, CompatibilityReport, CompatibilityEntry, } from './validator';
|
|
11
|
+
export { format, FormatOptions, FormatResult } from './validator/formatter';
|
|
12
|
+
export { RhostBenchmark, runBench, formatBenchResults, BenchOptions, BenchmarkResult } from './benchmark';
|
|
13
|
+
export { deploy, parseDeployFile, snapshotObjects, restoreSnapshot, DeployCommand, DeploySnapshot, DeployOptions, DeployResult, } from './deployer';
|
|
14
|
+
export { SnapshotManager, SnapshotStats, SnapshotStatus, SnapshotCheckResult, formatSnapshotDiff } from './snapshots';
|
|
15
|
+
export { RhostWatcher, WatchOptions, discoverTestFiles } from './watcher';
|
|
9
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG/F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAGtG,OAAO,EACH,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EACH,WAAW,EACX,aAAa,EACb,SAAS,EACT,WAAW,EACX,MAAM,EACN,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,UAAU,GACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1G,OAAO,EACH,MAAM,EACN,eAAe,EACf,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RhostRunner = exports.Reporter = exports.RhostWorld = exports.RhostExpectError = exports.RhostExpect = exports.isRhostError = exports.RhostAssertionError = exports.RhostAssert = exports.RhostContainer = exports.MushConnection = exports.stripAnsi = exports.RhostClient = void 0;
|
|
3
|
+
exports.discoverTestFiles = exports.RhostWatcher = exports.formatSnapshotDiff = exports.SnapshotManager = exports.restoreSnapshot = exports.snapshotObjects = exports.parseDeployFile = exports.deploy = exports.formatBenchResults = exports.runBench = exports.RhostBenchmark = exports.format = exports.BUILTIN_FUNCTIONS = exports.compatibilityReport = exports.validateFile = exports.validate = exports.RhostRunner = exports.Reporter = exports.PreflightError = exports.assertConfigEquals = exports.assertFunctionMissing = exports.assertFunctionExists = exports.preflightCheck = exports.preflight = exports.WorldSideEffectError = exports.WorldSnapshot = exports.RhostWorld = exports.RhostExpectError = exports.RhostExpect = exports.isRhostError = exports.RhostAssertionError = exports.RhostAssert = exports.RhostContainer = exports.MushConnection = exports.stripAnsi = exports.RhostClient = void 0;
|
|
4
4
|
// Core client
|
|
5
5
|
var client_1 = require("./client");
|
|
6
6
|
Object.defineProperty(exports, "RhostClient", { enumerable: true, get: function () { return client_1.RhostClient; } });
|
|
@@ -23,10 +23,48 @@ Object.defineProperty(exports, "RhostExpectError", { enumerable: true, get: func
|
|
|
23
23
|
// World fixture manager
|
|
24
24
|
var world_1 = require("./world");
|
|
25
25
|
Object.defineProperty(exports, "RhostWorld", { enumerable: true, get: function () { return world_1.RhostWorld; } });
|
|
26
|
+
Object.defineProperty(exports, "WorldSnapshot", { enumerable: true, get: function () { return world_1.WorldSnapshot; } });
|
|
27
|
+
Object.defineProperty(exports, "WorldSideEffectError", { enumerable: true, get: function () { return world_1.WorldSideEffectError; } });
|
|
28
|
+
// Pre-flight assertions
|
|
29
|
+
var preflight_1 = require("./preflight");
|
|
30
|
+
Object.defineProperty(exports, "preflight", { enumerable: true, get: function () { return preflight_1.preflight; } });
|
|
31
|
+
Object.defineProperty(exports, "preflightCheck", { enumerable: true, get: function () { return preflight_1.preflightCheck; } });
|
|
32
|
+
Object.defineProperty(exports, "assertFunctionExists", { enumerable: true, get: function () { return preflight_1.assertFunctionExists; } });
|
|
33
|
+
Object.defineProperty(exports, "assertFunctionMissing", { enumerable: true, get: function () { return preflight_1.assertFunctionMissing; } });
|
|
34
|
+
Object.defineProperty(exports, "assertConfigEquals", { enumerable: true, get: function () { return preflight_1.assertConfigEquals; } });
|
|
35
|
+
Object.defineProperty(exports, "PreflightError", { enumerable: true, get: function () { return preflight_1.PreflightError; } });
|
|
26
36
|
// Reporter
|
|
27
37
|
var reporter_1 = require("./reporter");
|
|
28
38
|
Object.defineProperty(exports, "Reporter", { enumerable: true, get: function () { return reporter_1.Reporter; } });
|
|
29
39
|
// Runner + types
|
|
30
40
|
var runner_1 = require("./runner");
|
|
31
41
|
Object.defineProperty(exports, "RhostRunner", { enumerable: true, get: function () { return runner_1.RhostRunner; } });
|
|
42
|
+
// Offline softcode validator + compat report
|
|
43
|
+
var validator_1 = require("./validator");
|
|
44
|
+
Object.defineProperty(exports, "validate", { enumerable: true, get: function () { return validator_1.validate; } });
|
|
45
|
+
Object.defineProperty(exports, "validateFile", { enumerable: true, get: function () { return validator_1.validateFile; } });
|
|
46
|
+
Object.defineProperty(exports, "compatibilityReport", { enumerable: true, get: function () { return validator_1.compatibilityReport; } });
|
|
47
|
+
Object.defineProperty(exports, "BUILTIN_FUNCTIONS", { enumerable: true, get: function () { return validator_1.BUILTIN_FUNCTIONS; } });
|
|
48
|
+
// Softcode formatter
|
|
49
|
+
var formatter_1 = require("./validator/formatter");
|
|
50
|
+
Object.defineProperty(exports, "format", { enumerable: true, get: function () { return formatter_1.format; } });
|
|
51
|
+
// Benchmark mode
|
|
52
|
+
var benchmark_1 = require("./benchmark");
|
|
53
|
+
Object.defineProperty(exports, "RhostBenchmark", { enumerable: true, get: function () { return benchmark_1.RhostBenchmark; } });
|
|
54
|
+
Object.defineProperty(exports, "runBench", { enumerable: true, get: function () { return benchmark_1.runBench; } });
|
|
55
|
+
Object.defineProperty(exports, "formatBenchResults", { enumerable: true, get: function () { return benchmark_1.formatBenchResults; } });
|
|
56
|
+
// Deploy pipeline
|
|
57
|
+
var deployer_1 = require("./deployer");
|
|
58
|
+
Object.defineProperty(exports, "deploy", { enumerable: true, get: function () { return deployer_1.deploy; } });
|
|
59
|
+
Object.defineProperty(exports, "parseDeployFile", { enumerable: true, get: function () { return deployer_1.parseDeployFile; } });
|
|
60
|
+
Object.defineProperty(exports, "snapshotObjects", { enumerable: true, get: function () { return deployer_1.snapshotObjects; } });
|
|
61
|
+
Object.defineProperty(exports, "restoreSnapshot", { enumerable: true, get: function () { return deployer_1.restoreSnapshot; } });
|
|
62
|
+
// Snapshot manager
|
|
63
|
+
var snapshots_1 = require("./snapshots");
|
|
64
|
+
Object.defineProperty(exports, "SnapshotManager", { enumerable: true, get: function () { return snapshots_1.SnapshotManager; } });
|
|
65
|
+
Object.defineProperty(exports, "formatSnapshotDiff", { enumerable: true, get: function () { return snapshots_1.formatSnapshotDiff; } });
|
|
66
|
+
// Watch mode
|
|
67
|
+
var watcher_1 = require("./watcher");
|
|
68
|
+
Object.defineProperty(exports, "RhostWatcher", { enumerable: true, get: function () { return watcher_1.RhostWatcher; } });
|
|
69
|
+
Object.defineProperty(exports, "discoverTestFiles", { enumerable: true, get: function () { return watcher_1.discoverTestFiles; } });
|
|
32
70
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,mCAAsF;AAA7E,qGAAA,WAAW,OAAA;AAAsC,mGAAA,SAAS,OAAA;AAEnE,aAAa;AACb,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,YAAY;AACZ,yCAAsE;AAA7D,2GAAA,cAAc,OAAA;AAEvB,+BAA+B;AAC/B,2CAA+F;AAAtF,yGAAA,WAAW,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAAmB,0GAAA,YAAY,OAAA;AAExE,iBAAiB;AACjB,mCAAyD;AAAhD,qGAAA,WAAW,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEtC,wBAAwB;AACxB,iCAAsG;AAA7F,mGAAA,UAAU,OAAA;AAAE,sGAAA,aAAa,OAAA;AAA8B,6GAAA,oBAAoB,OAAA;AAEpF,wBAAwB;AACxB,yCAUqB;AATjB,sGAAA,SAAS,OAAA;AACT,2GAAA,cAAc,OAAA;AACd,iHAAA,oBAAoB,OAAA;AACpB,kHAAA,qBAAqB,OAAA;AACrB,+GAAA,kBAAkB,OAAA;AAIlB,2GAAA,cAAc,OAAA;AAGlB,WAAW;AACX,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,iBAAiB;AACjB,mCAakB;AAZd,qGAAA,WAAW,OAAA;AAcf,6CAA6C;AAC7C,yCAYqB;AAXjB,qGAAA,QAAQ,OAAA;AACR,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AAKnB,8GAAA,iBAAiB,OAAA;AAMrB,qBAAqB;AACrB,mDAA4E;AAAnE,mGAAA,MAAM,OAAA;AAEf,iBAAiB;AACjB,yCAA0G;AAAjG,2GAAA,cAAc,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAErD,kBAAkB;AAClB,uCASoB;AARhB,kGAAA,MAAM,OAAA;AACN,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AAOnB,mBAAmB;AACnB,yCAAsH;AAA7G,4GAAA,eAAe,OAAA;AAAsD,+GAAA,kBAAkB,OAAA;AAEhG,aAAa;AACb,qCAA0E;AAAjE,uGAAA,YAAY,OAAA;AAAgB,4GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { RhostClient } from './client';
|
|
2
|
+
export interface PreflightCheckResult {
|
|
3
|
+
name: string;
|
|
4
|
+
passed: boolean;
|
|
5
|
+
message?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PreflightResult {
|
|
8
|
+
passed: number;
|
|
9
|
+
failed: number;
|
|
10
|
+
checks: PreflightCheckResult[];
|
|
11
|
+
}
|
|
12
|
+
export interface PreflightCheck {
|
|
13
|
+
name: string;
|
|
14
|
+
run(client: RhostClient): Promise<{
|
|
15
|
+
passed: boolean;
|
|
16
|
+
message?: string;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
export interface PreflightOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Throw a PreflightError if any check fails. Default: true.
|
|
22
|
+
* Set false to collect all results without throwing.
|
|
23
|
+
*/
|
|
24
|
+
throwOnFailure?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare class PreflightError extends Error {
|
|
27
|
+
readonly result: PreflightResult;
|
|
28
|
+
constructor(result: PreflightResult);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Run a set of pre-flight checks against a live server before tests start.
|
|
32
|
+
*
|
|
33
|
+
* By default throws `PreflightError` if any check fails. Pass
|
|
34
|
+
* `{ throwOnFailure: false }` to collect results without throwing.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* await preflight(client, [
|
|
38
|
+
* assertFunctionExists('json'),
|
|
39
|
+
* assertFunctionExists('localize'),
|
|
40
|
+
* assertConfigEquals('attr_limit', '500'),
|
|
41
|
+
* ]);
|
|
42
|
+
*/
|
|
43
|
+
export declare function preflight(client: RhostClient, checks: PreflightCheck[], options?: PreflightOptions): Promise<PreflightResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Factory for a custom preflight check with an arbitrary async predicate.
|
|
46
|
+
*/
|
|
47
|
+
export declare function preflightCheck(name: string, fn: (client: RhostClient) => Promise<{
|
|
48
|
+
passed: boolean;
|
|
49
|
+
message?: string;
|
|
50
|
+
}>): PreflightCheck;
|
|
51
|
+
/**
|
|
52
|
+
* Assert that a softcode function is available on the server.
|
|
53
|
+
*
|
|
54
|
+
* Evals `funcname()` and checks that the response does not include "NOT FOUND".
|
|
55
|
+
* A "wrong number of arguments" error means the function exists.
|
|
56
|
+
*/
|
|
57
|
+
export declare function assertFunctionExists(name: string): PreflightCheck;
|
|
58
|
+
/**
|
|
59
|
+
* Assert that a softcode function is NOT available on the server.
|
|
60
|
+
*
|
|
61
|
+
* Useful to confirm a restricted or removed function is absent.
|
|
62
|
+
*/
|
|
63
|
+
export declare function assertFunctionMissing(name: string): PreflightCheck;
|
|
64
|
+
/**
|
|
65
|
+
* Assert that a server config key equals an expected value.
|
|
66
|
+
*
|
|
67
|
+
* Evals `config(key)` and compares the trimmed result to `expected`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function assertConfigEquals(key: string, expected: string): PreflightCheck;
|
|
70
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAMvC,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAe,SAAQ,KAAK;aACT,MAAM,EAAE,eAAe;gBAAvB,MAAM,EAAE,eAAe;CAQtD;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC3B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAyB1B;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAC1B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5E,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAWjE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAWlE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAWhF"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PreflightError = void 0;
|
|
4
|
+
exports.preflight = preflight;
|
|
5
|
+
exports.preflightCheck = preflightCheck;
|
|
6
|
+
exports.assertFunctionExists = assertFunctionExists;
|
|
7
|
+
exports.assertFunctionMissing = assertFunctionMissing;
|
|
8
|
+
exports.assertConfigEquals = assertConfigEquals;
|
|
9
|
+
class PreflightError extends Error {
|
|
10
|
+
constructor(result) {
|
|
11
|
+
const failedNames = result.checks
|
|
12
|
+
.filter((c) => !c.passed)
|
|
13
|
+
.map((c) => ` ✗ ${c.name}${c.message ? ': ' + c.message : ''}`)
|
|
14
|
+
.join('\n');
|
|
15
|
+
super(`preflight: ${result.failed} check(s) failed\n${failedNames}`);
|
|
16
|
+
this.result = result;
|
|
17
|
+
this.name = 'PreflightError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.PreflightError = PreflightError;
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Runner
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Run a set of pre-flight checks against a live server before tests start.
|
|
26
|
+
*
|
|
27
|
+
* By default throws `PreflightError` if any check fails. Pass
|
|
28
|
+
* `{ throwOnFailure: false }` to collect results without throwing.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* await preflight(client, [
|
|
32
|
+
* assertFunctionExists('json'),
|
|
33
|
+
* assertFunctionExists('localize'),
|
|
34
|
+
* assertConfigEquals('attr_limit', '500'),
|
|
35
|
+
* ]);
|
|
36
|
+
*/
|
|
37
|
+
async function preflight(client, checks, options = {}) {
|
|
38
|
+
const throwOnFailure = options.throwOnFailure !== false;
|
|
39
|
+
const results = [];
|
|
40
|
+
for (const check of checks) {
|
|
41
|
+
let checkResult;
|
|
42
|
+
try {
|
|
43
|
+
const outcome = await check.run(client);
|
|
44
|
+
checkResult = { name: check.name, passed: outcome.passed, message: outcome.message };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
48
|
+
checkResult = { name: check.name, passed: false, message };
|
|
49
|
+
}
|
|
50
|
+
results.push(checkResult);
|
|
51
|
+
}
|
|
52
|
+
const passed = results.filter((r) => r.passed).length;
|
|
53
|
+
const failed = results.filter((r) => !r.passed).length;
|
|
54
|
+
const result = { passed, failed, checks: results };
|
|
55
|
+
if (throwOnFailure && failed > 0) {
|
|
56
|
+
throw new PreflightError(result);
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Built-in check factories
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
/**
|
|
64
|
+
* Factory for a custom preflight check with an arbitrary async predicate.
|
|
65
|
+
*/
|
|
66
|
+
function preflightCheck(name, fn) {
|
|
67
|
+
return { name, run: fn };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Assert that a softcode function is available on the server.
|
|
71
|
+
*
|
|
72
|
+
* Evals `funcname()` and checks that the response does not include "NOT FOUND".
|
|
73
|
+
* A "wrong number of arguments" error means the function exists.
|
|
74
|
+
*/
|
|
75
|
+
function assertFunctionExists(name) {
|
|
76
|
+
return {
|
|
77
|
+
name: `function exists: ${name}`,
|
|
78
|
+
async run(client) {
|
|
79
|
+
const result = await client.eval(`${name}()`);
|
|
80
|
+
const passed = !result.toUpperCase().includes('NOT FOUND');
|
|
81
|
+
return passed
|
|
82
|
+
? { passed: true }
|
|
83
|
+
: { passed: false, message: `function '${name}' is not available on this server` };
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Assert that a softcode function is NOT available on the server.
|
|
89
|
+
*
|
|
90
|
+
* Useful to confirm a restricted or removed function is absent.
|
|
91
|
+
*/
|
|
92
|
+
function assertFunctionMissing(name) {
|
|
93
|
+
return {
|
|
94
|
+
name: `function absent: ${name}`,
|
|
95
|
+
async run(client) {
|
|
96
|
+
const result = await client.eval(`${name}()`);
|
|
97
|
+
const passed = result.toUpperCase().includes('NOT FOUND');
|
|
98
|
+
return passed
|
|
99
|
+
? { passed: true }
|
|
100
|
+
: { passed: false, message: `function '${name}' exists but was expected to be absent` };
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Assert that a server config key equals an expected value.
|
|
106
|
+
*
|
|
107
|
+
* Evals `config(key)` and compares the trimmed result to `expected`.
|
|
108
|
+
*/
|
|
109
|
+
function assertConfigEquals(key, expected) {
|
|
110
|
+
return {
|
|
111
|
+
name: `config: ${key} = ${expected}`,
|
|
112
|
+
async run(client) {
|
|
113
|
+
const actual = (await client.eval(`config(${key})`)).trim();
|
|
114
|
+
const passed = actual === expected;
|
|
115
|
+
return passed
|
|
116
|
+
? { passed: true }
|
|
117
|
+
: { passed: false, message: `config(${key}): expected '${expected}', got '${actual}'` };
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/reporter.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RunResult } from './runner';
|
|
2
|
+
import { SnapshotStats } from './snapshots';
|
|
2
3
|
export declare class Reporter {
|
|
3
4
|
private readonly verbose;
|
|
4
5
|
constructor(verbose: boolean);
|
|
@@ -7,5 +8,6 @@ export declare class Reporter {
|
|
|
7
8
|
testFail(name: string, ms: number, depth: number, error: Error): void;
|
|
8
9
|
testSkip(name: string, depth: number): void;
|
|
9
10
|
summary(result: RunResult): void;
|
|
11
|
+
snapshotSummary(stats: SnapshotStats): void;
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=reporter.d.ts.map
|
package/dist/reporter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAuB5C,qBAAa,QAAQ;IACL,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAE7C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAWrE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM3C,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAWhC,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAoB9C"}
|
package/dist/reporter.js
CHANGED
|
@@ -11,6 +11,7 @@ function colorize(code, text) {
|
|
|
11
11
|
const green = (s) => colorize('32', s);
|
|
12
12
|
const red = (s) => colorize('31', s);
|
|
13
13
|
const yellow = (s) => colorize('33', s);
|
|
14
|
+
const cyan = (s) => colorize('36', s);
|
|
14
15
|
const gray = (s) => colorize('90', s);
|
|
15
16
|
const bold = (s) => colorize('1', s);
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
@@ -60,7 +61,29 @@ class Reporter {
|
|
|
60
61
|
if (result.skipped > 0)
|
|
61
62
|
parts.push(yellow(`${result.skipped} skipped`));
|
|
62
63
|
parts.push(`${result.total} total`);
|
|
63
|
-
process.stdout.write(`\nTests:
|
|
64
|
+
process.stdout.write(`\nTests: ${parts.join(', ')} ${gray(`(${result.duration}ms)`)}\n`);
|
|
65
|
+
this.snapshotSummary(result.snapshots);
|
|
66
|
+
}
|
|
67
|
+
snapshotSummary(stats) {
|
|
68
|
+
if (!this.verbose)
|
|
69
|
+
return;
|
|
70
|
+
const { matched, written, updated, obsolete } = stats;
|
|
71
|
+
const total = matched + written + updated;
|
|
72
|
+
if (total === 0 && obsolete === 0)
|
|
73
|
+
return;
|
|
74
|
+
const parts = [];
|
|
75
|
+
if (matched > 0)
|
|
76
|
+
parts.push(green(`${matched} passed`));
|
|
77
|
+
if (written > 0)
|
|
78
|
+
parts.push(cyan(`${written} written`));
|
|
79
|
+
if (updated > 0)
|
|
80
|
+
parts.push(yellow(`${updated} updated`));
|
|
81
|
+
if (obsolete > 0)
|
|
82
|
+
parts.push(gray(`${obsolete} obsolete`));
|
|
83
|
+
process.stdout.write(`Snapshots: ${parts.join(', ')}\n`);
|
|
84
|
+
if (obsolete > 0) {
|
|
85
|
+
process.stdout.write(gray(` Run with RHOST_UPDATE_SNAPSHOTS=1 to remove obsolete snapshots.\n`));
|
|
86
|
+
}
|
|
64
87
|
}
|
|
65
88
|
}
|
|
66
89
|
exports.Reporter = Reporter;
|
package/dist/reporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
|