modestbench 0.3.2 → 0.5.0
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/CHANGELOG.md +37 -0
- package/README.md +45 -2
- package/dist/adapters/ava-adapter.cjs +421 -0
- package/dist/adapters/ava-adapter.cjs.map +1 -0
- package/dist/adapters/ava-adapter.d.cts +39 -0
- package/dist/adapters/ava-adapter.d.cts.map +1 -0
- package/dist/adapters/ava-adapter.d.ts +39 -0
- package/dist/adapters/ava-adapter.d.ts.map +1 -0
- package/dist/adapters/ava-adapter.js +384 -0
- package/dist/adapters/ava-adapter.js.map +1 -0
- package/dist/adapters/ava-hooks.cjs +66 -0
- package/dist/adapters/ava-hooks.cjs.map +1 -0
- package/dist/adapters/ava-hooks.d.cts +24 -0
- package/dist/adapters/ava-hooks.d.cts.map +1 -0
- package/dist/adapters/ava-hooks.d.ts +24 -0
- package/dist/adapters/ava-hooks.d.ts.map +1 -0
- package/dist/adapters/ava-hooks.js +61 -0
- package/dist/adapters/ava-hooks.js.map +1 -0
- package/dist/adapters/ava-register.cjs +16 -0
- package/dist/adapters/ava-register.cjs.map +1 -0
- package/dist/adapters/ava-register.d.cts +11 -0
- package/dist/adapters/ava-register.d.cts.map +1 -0
- package/dist/adapters/ava-register.d.ts +11 -0
- package/dist/adapters/ava-register.d.ts.map +1 -0
- package/dist/adapters/ava-register.js +14 -0
- package/dist/adapters/ava-register.js.map +1 -0
- package/dist/adapters/mocha-adapter.cjs +254 -0
- package/dist/adapters/mocha-adapter.cjs.map +1 -0
- package/dist/adapters/mocha-adapter.d.cts +26 -0
- package/dist/adapters/mocha-adapter.d.cts.map +1 -0
- package/dist/adapters/mocha-adapter.d.ts +26 -0
- package/dist/adapters/mocha-adapter.d.ts.map +1 -0
- package/dist/adapters/mocha-adapter.js +217 -0
- package/dist/adapters/mocha-adapter.js.map +1 -0
- package/dist/adapters/node-test-adapter.cjs +335 -0
- package/dist/adapters/node-test-adapter.cjs.map +1 -0
- package/dist/adapters/node-test-adapter.d.cts +41 -0
- package/dist/adapters/node-test-adapter.d.cts.map +1 -0
- package/dist/adapters/node-test-adapter.d.ts +41 -0
- package/dist/adapters/node-test-adapter.d.ts.map +1 -0
- package/dist/adapters/node-test-adapter.js +298 -0
- package/dist/adapters/node-test-adapter.js.map +1 -0
- package/dist/adapters/node-test-hooks.cjs +72 -0
- package/dist/adapters/node-test-hooks.cjs.map +1 -0
- package/dist/adapters/node-test-hooks.d.cts +24 -0
- package/dist/adapters/node-test-hooks.d.cts.map +1 -0
- package/dist/adapters/node-test-hooks.d.ts +24 -0
- package/dist/adapters/node-test-hooks.d.ts.map +1 -0
- package/dist/adapters/node-test-hooks.js +67 -0
- package/dist/adapters/node-test-hooks.js.map +1 -0
- package/dist/adapters/node-test-register.cjs +7 -0
- package/dist/adapters/node-test-register.cjs.map +1 -0
- package/dist/adapters/node-test-register.d.cts +2 -0
- package/dist/adapters/node-test-register.d.cts.map +1 -0
- package/dist/adapters/node-test-register.d.ts +2 -0
- package/dist/adapters/node-test-register.d.ts.map +1 -0
- package/dist/adapters/node-test-register.js +5 -0
- package/dist/adapters/node-test-register.js.map +1 -0
- package/dist/adapters/types.cjs +152 -0
- package/dist/adapters/types.cjs.map +1 -0
- package/dist/adapters/types.d.cts +112 -0
- package/dist/adapters/types.d.cts.map +1 -0
- package/dist/adapters/types.d.ts +112 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +148 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli/commands/init.cjs +21 -17
- package/dist/cli/commands/init.cjs.map +1 -1
- package/dist/cli/commands/init.d.cts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +21 -17
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.cjs +6 -2
- package/dist/cli/commands/run.cjs.map +1 -1
- package/dist/cli/commands/run.js +6 -2
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/test.cjs +392 -0
- package/dist/cli/commands/test.cjs.map +1 -0
- package/dist/cli/commands/test.d.cts +38 -0
- package/dist/cli/commands/test.d.cts.map +1 -0
- package/dist/cli/commands/test.d.ts +38 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +388 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/index.cjs +72 -1
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +73 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/constants.cjs +13 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +12 -0
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.ts +12 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/engine.cjs +4 -0
- package/dist/core/engine.cjs.map +1 -1
- package/dist/core/engine.d.cts.map +1 -1
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +4 -0
- package/dist/core/engine.js.map +1 -1
- package/dist/core/engines/tinybench-engine.cjs +163 -131
- package/dist/core/engines/tinybench-engine.cjs.map +1 -1
- package/dist/core/engines/tinybench-engine.d.cts +6 -0
- package/dist/core/engines/tinybench-engine.d.cts.map +1 -1
- package/dist/core/engines/tinybench-engine.d.ts +6 -0
- package/dist/core/engines/tinybench-engine.d.ts.map +1 -1
- package/dist/core/engines/tinybench-engine.js +163 -131
- package/dist/core/engines/tinybench-engine.js.map +1 -1
- package/dist/errors/base.cjs +2 -1
- package/dist/errors/base.cjs.map +1 -1
- package/dist/errors/base.d.cts.map +1 -1
- package/dist/errors/base.d.ts.map +1 -1
- package/dist/errors/base.js +2 -1
- package/dist/errors/base.js.map +1 -1
- package/dist/reporters/human.cjs +83 -27
- package/dist/reporters/human.cjs.map +1 -1
- package/dist/reporters/human.d.cts +1 -0
- package/dist/reporters/human.d.cts.map +1 -1
- package/dist/reporters/human.d.ts +1 -0
- package/dist/reporters/human.d.ts.map +1 -1
- package/dist/reporters/human.js +83 -27
- package/dist/reporters/human.js.map +1 -1
- package/dist/reporters/simple.cjs +68 -21
- package/dist/reporters/simple.cjs.map +1 -1
- package/dist/reporters/simple.d.cts +1 -0
- package/dist/reporters/simple.d.cts.map +1 -1
- package/dist/reporters/simple.d.ts +1 -0
- package/dist/reporters/simple.d.ts.map +1 -1
- package/dist/reporters/simple.js +68 -21
- package/dist/reporters/simple.js.map +1 -1
- package/dist/services/config-manager.cjs +1 -1
- package/dist/services/config-manager.cjs.map +1 -1
- package/dist/services/config-manager.js +2 -2
- package/dist/services/config-manager.js.map +1 -1
- package/package.json +60 -31
- package/src/adapters/ava-adapter.ts +553 -0
- package/src/adapters/ava-hooks.ts +65 -0
- package/src/adapters/ava-register.ts +15 -0
- package/src/adapters/mocha-adapter.ts +284 -0
- package/src/adapters/node-test-adapter.ts +391 -0
- package/src/adapters/node-test-hooks.ts +71 -0
- package/src/adapters/node-test-register.ts +5 -0
- package/src/adapters/types.ts +281 -0
- package/src/cli/commands/init.ts +25 -17
- package/src/cli/commands/run.ts +9 -2
- package/src/cli/commands/test.ts +546 -0
- package/src/cli/index.ts +81 -1
- package/src/constants.ts +15 -0
- package/src/core/engine.ts +5 -0
- package/src/core/engines/tinybench-engine.ts +213 -141
- package/src/errors/base.ts +3 -2
- package/src/reporters/human.ts +107 -36
- package/src/reporters/simple.ts +81 -22
- package/src/services/config-manager.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.4.0...modestbench-v0.5.0) (2025-12-09)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **adapters:** add test framework adapters for node:test, Mocha, and AVA ([#157](https://github.com/boneskull/modestbench/issues/157)) ([f4f00e7](https://github.com/boneskull/modestbench/commit/f4f00e7a0d356455eba08840ad8b01ec4e155822))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **deps:** update dependency tinybench to v6 ([0d40694](https://github.com/boneskull/modestbench/commit/0d406941a587f393de033e923fccca22a097eb40))
|
|
14
|
+
* **deps:** update tinybench-engine for tinybench v6 ([d19fcd9](https://github.com/boneskull/modestbench/commit/d19fcd98fde626257707919817a6e1be3ec97e34))
|
|
15
|
+
|
|
16
|
+
## [0.4.0](https://github.com/boneskull/modestbench/compare/modestbench-v0.3.3...modestbench-v0.4.0) (2025-12-05)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* **reporters:** display iteration counts inline with low-count warnings ([e1bf06a](https://github.com/boneskull/modestbench/commit/e1bf06a99f6d8e488fb1c69c6ae983e2bfa2a641))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
* **deps:** update dependency glob to v11.1.0 [security] ([#125](https://github.com/boneskull/modestbench/issues/125)) ([7e14a8b](https://github.com/boneskull/modestbench/commit/7e14a8bd27e72849766b9e84a9bf178764265b11))
|
|
27
|
+
* **deps:** update dependency glob to v13 ([#138](https://github.com/boneskull/modestbench/issues/138)) ([b63ab6a](https://github.com/boneskull/modestbench/commit/b63ab6a9979296d9fa32ce5f8774fe53a3f777dc))
|
|
28
|
+
* **deps:** update dependency zod to v4.1.13 ([#143](https://github.com/boneskull/modestbench/issues/143)) ([538ccf2](https://github.com/boneskull/modestbench/commit/538ccf241f870e78fe02bc89d791e558ba0b61e3))
|
|
29
|
+
* **init:** init templates now use proper default .modestbench/ dir for output ([a393236](https://github.com/boneskull/modestbench/commit/a393236e71c87502275e3e68f74bb1fdae4f8fd2))
|
|
30
|
+
* **README:** fix wrong options and path in README.md ([ea7caa4](https://github.com/boneskull/modestbench/commit/ea7caa46c53bd2bb70d67ecefec999ea0e14c425)), closes [#104](https://github.com/boneskull/modestbench/issues/104) [#109](https://github.com/boneskull/modestbench/issues/109)
|
|
31
|
+
* **run:** suite-level errors now caught properly and return non-zero exit code ([fba7a8a](https://github.com/boneskull/modestbench/commit/fba7a8a568b3863b40b04ca05469935c5db32ec7))
|
|
32
|
+
|
|
33
|
+
## [0.3.3](https://github.com/boneskull/modestbench/compare/modestbench-v0.3.2...modestbench-v0.3.3) (2025-11-03)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Bug Fixes
|
|
37
|
+
|
|
38
|
+
* **deps:** update dependency minimatch to v10.1.1 ([#90](https://github.com/boneskull/modestbench/issues/90)) ([a3b77df](https://github.com/boneskull/modestbench/commit/a3b77df4f5b8464734a24df8eafae02365035ae1))
|
|
39
|
+
|
|
3
40
|
## [0.3.2](https://github.com/boneskull/modestbench/compare/modestbench-v0.3.1...modestbench-v0.3.2) (2025-10-30)
|
|
4
41
|
|
|
5
42
|
|
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
- **Multiple Output Formats**: Human-readable, JSON, and CSV reports (at the same time!!)
|
|
15
15
|
- **Historical Tracking**: Store and compare benchmark results over time
|
|
16
16
|
- **Code Profiling & Analysis**: Identify hot code paths that need benchmarking using V8's built-in profiler
|
|
17
|
+
- **Run Tests as Benchmarks**: Use your existing Mocha, AVA, or node:test tests as benchmarks
|
|
17
18
|
- **Performance Budgets**: Enforce performance standards and prevent regressions
|
|
18
19
|
- **CLI & API**: Command-line interface and programmatic API
|
|
19
20
|
- **TypeScript Support**: Full type safety
|
|
@@ -403,6 +404,48 @@ The profile command uses Node.js's built-in V8 profiler to identify functions th
|
|
|
403
404
|
|
|
404
405
|
Functions that appear at the top of the profile report are good candidates for benchmarking, as optimizing them will have the most impact on overall performance.
|
|
405
406
|
|
|
407
|
+
### Run Tests as Benchmarks
|
|
408
|
+
|
|
409
|
+
Already have test files? Run them as benchmarks without writing any new code:
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
# Run Mocha tests as benchmarks
|
|
413
|
+
modestbench test mocha "test/*.spec.js"
|
|
414
|
+
|
|
415
|
+
# Run node:test files as benchmarks
|
|
416
|
+
modestbench test node-test "test/*.test.js"
|
|
417
|
+
|
|
418
|
+
# Run AVA tests as benchmarks
|
|
419
|
+
modestbench test ava "test/*.js"
|
|
420
|
+
|
|
421
|
+
# With options
|
|
422
|
+
modestbench test mocha "test/unit/*.spec.js" --iterations 500 --json
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Supported Frameworks:**
|
|
426
|
+
|
|
427
|
+
- `mocha` - Mocha test files with `describe`/`it` syntax
|
|
428
|
+
- `node-test` - Node.js built-in test runner (`node:test`)
|
|
429
|
+
- `ava` - AVA test files
|
|
430
|
+
|
|
431
|
+
**How It Works:**
|
|
432
|
+
|
|
433
|
+
The `test` command captures test definitions from your test files and runs each test as a benchmark task. Test suites map to benchmark suites, and individual tests become benchmark tasks. Setup/teardown hooks (`beforeEach`/`afterEach`) are preserved and run with each iteration.
|
|
434
|
+
|
|
435
|
+
This is useful for:
|
|
436
|
+
|
|
437
|
+
- **Quick performance checks** - See how fast your tests actually run
|
|
438
|
+
- **Regression detection** - Identify tests that have become slower
|
|
439
|
+
- **Optimization targets** - Find slow tests that might benefit from optimization
|
|
440
|
+
|
|
441
|
+
**Test Command Options:**
|
|
442
|
+
|
|
443
|
+
- `--iterations`, `-i` - Number of iterations per test (default: 100)
|
|
444
|
+
- `--warmup`, `-w` - Number of warmup iterations (default: 5)
|
|
445
|
+
- `--bail`, `-b` - Stop on first failure
|
|
446
|
+
- `--json` - Output results as JSON
|
|
447
|
+
- `--quiet`, `-q` - Minimal output
|
|
448
|
+
|
|
406
449
|
## Configuration
|
|
407
450
|
|
|
408
451
|
### Project Configuration
|
|
@@ -417,7 +460,7 @@ Create `modestbench.config.json`:
|
|
|
417
460
|
"iterations": 1000, // Number of samples per benchmark
|
|
418
461
|
"limitBy": "iterations", // Limit mode: 'iterations', 'time', 'any', 'all'
|
|
419
462
|
"outputDir": "./benchmark-results", // Directory for results and reports
|
|
420
|
-
"pattern": "
|
|
463
|
+
"pattern": "bench/**/*.bench.{js,ts}", // Glob pattern to discover benchmark files
|
|
421
464
|
"quiet": false, // Minimal output mode
|
|
422
465
|
"reporters": ["human", "json"], // Output reporters to use
|
|
423
466
|
"tags": ["fast", "critical"], // Tags to include (if empty, all benchmarks run)
|
|
@@ -618,7 +661,7 @@ modestbench run --tag string --tag array
|
|
|
618
661
|
modestbench run -t fast -t optimized
|
|
619
662
|
```
|
|
620
663
|
|
|
621
|
-
Use `--exclude-tag` (or `-
|
|
664
|
+
Use `--exclude-tag` (or `-T`) to skip benchmarks with specific tags:
|
|
622
665
|
|
|
623
666
|
```bash
|
|
624
667
|
# Exclude slow benchmarks
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModestBench AVA Adapter
|
|
4
|
+
*
|
|
5
|
+
* Captures test definitions from AVA test files using ES module loader hooks.
|
|
6
|
+
*
|
|
7
|
+
* AVA differs from Mocha and node:test:
|
|
8
|
+
*
|
|
9
|
+
* - No describe blocks - tests are flat
|
|
10
|
+
* - Tests receive an execution context `t` with assertions
|
|
11
|
+
* - Supports test.before/after/beforeEach/afterEach at file level
|
|
12
|
+
* - Each test file is isolated (we don't need to handle that)
|
|
13
|
+
*
|
|
14
|
+
* Architecture:
|
|
15
|
+
*
|
|
16
|
+
* 1. Install mock on globalThis
|
|
17
|
+
* 2. Loader intercepts 'ava' imports and returns the mock
|
|
18
|
+
* 3. Import test file to capture test definitions
|
|
19
|
+
*/
|
|
20
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(o, k2, desc);
|
|
27
|
+
}) : (function(o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
}));
|
|
31
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
32
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
33
|
+
}) : function(o, v) {
|
|
34
|
+
o["default"] = v;
|
|
35
|
+
});
|
|
36
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
37
|
+
var ownKeys = function(o) {
|
|
38
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
39
|
+
var ar = [];
|
|
40
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
41
|
+
return ar;
|
|
42
|
+
};
|
|
43
|
+
return ownKeys(o);
|
|
44
|
+
};
|
|
45
|
+
return function (mod) {
|
|
46
|
+
if (mod && mod.__esModule) return mod;
|
|
47
|
+
var result = {};
|
|
48
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
49
|
+
__setModuleDefault(result, mod);
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
})();
|
|
53
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
54
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
55
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
56
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return path;
|
|
60
|
+
};
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.AvaAdapter = void 0;
|
|
63
|
+
const node_url_1 = require("node:url");
|
|
64
|
+
/**
|
|
65
|
+
* Global capture state key
|
|
66
|
+
*/
|
|
67
|
+
const CAPTURE_STATE_KEY = '__MODESTBENCH_AVA_CAPTURE__';
|
|
68
|
+
/**
|
|
69
|
+
* Check if a value is an AVA macro object (has exec property)
|
|
70
|
+
*/
|
|
71
|
+
const isMacroObject = (value) => {
|
|
72
|
+
return (typeof value === 'object' &&
|
|
73
|
+
value !== null &&
|
|
74
|
+
'exec' in value &&
|
|
75
|
+
typeof value.exec === 'function');
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Check if a value is a function (macro or test function)
|
|
79
|
+
*/
|
|
80
|
+
const isFunction = (value) => {
|
|
81
|
+
return typeof value === 'function';
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* AVA test framework adapter
|
|
85
|
+
*
|
|
86
|
+
* Captures test definitions by installing mock implementations before importing
|
|
87
|
+
* the test file.
|
|
88
|
+
*
|
|
89
|
+
* IMPORTANT: For this to work with actual AVA imports, you must run Node.js
|
|
90
|
+
* with our loader: node --import modestbench/ava your-test.js
|
|
91
|
+
*/
|
|
92
|
+
class AvaAdapter {
|
|
93
|
+
framework = 'ava';
|
|
94
|
+
/**
|
|
95
|
+
* Capture test definitions from an AVA test file
|
|
96
|
+
*
|
|
97
|
+
* @param filePath - Absolute path to the test file
|
|
98
|
+
* @returns Captured test structure
|
|
99
|
+
*/
|
|
100
|
+
async capture(filePath) {
|
|
101
|
+
// Initialize capture state
|
|
102
|
+
const state = initCaptureState();
|
|
103
|
+
// Install mocks
|
|
104
|
+
installAvaMocks(state);
|
|
105
|
+
try {
|
|
106
|
+
// Import the test file
|
|
107
|
+
// The loader hook will intercept 'ava' and use our mocks
|
|
108
|
+
const fileUrl = (0, node_url_1.pathToFileURL)(filePath).href;
|
|
109
|
+
const bustCache = `?t=${Date.now()}`;
|
|
110
|
+
await Promise.resolve(`${__rewriteRelativeImportExtension(fileUrl + bustCache)}`).then(s => __importStar(require(s)));
|
|
111
|
+
// Return captured structure
|
|
112
|
+
return toCapturedTestFile(state, filePath);
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
// Clean up
|
|
116
|
+
uninstallAvaMocks();
|
|
117
|
+
clearCaptureState();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.AvaAdapter = AvaAdapter;
|
|
122
|
+
/**
|
|
123
|
+
* Clear capture state from globalThis
|
|
124
|
+
*/
|
|
125
|
+
const clearCaptureState = () => {
|
|
126
|
+
// @ts-expect-error - intentionally using globalThis
|
|
127
|
+
delete globalThis[CAPTURE_STATE_KEY];
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Create a mock AVA execution context
|
|
131
|
+
*
|
|
132
|
+
* This allows test functions to call t.is(), t.pass(), etc. without errors
|
|
133
|
+
* during benchmarking. We're measuring performance, not correctness.
|
|
134
|
+
*/
|
|
135
|
+
const createMockContext = () => {
|
|
136
|
+
const noop = () => { };
|
|
137
|
+
const noopAsync = () => Promise.resolve();
|
|
138
|
+
return {
|
|
139
|
+
assert: noop,
|
|
140
|
+
context: {},
|
|
141
|
+
deepEqual: noop,
|
|
142
|
+
fail: noop,
|
|
143
|
+
false: noop,
|
|
144
|
+
falsy: noop,
|
|
145
|
+
is: noop,
|
|
146
|
+
like: noop,
|
|
147
|
+
log: noop,
|
|
148
|
+
not: noop,
|
|
149
|
+
notDeepEqual: noop,
|
|
150
|
+
notRegex: noop,
|
|
151
|
+
notThrows: noop,
|
|
152
|
+
notThrowsAsync: noopAsync,
|
|
153
|
+
pass: noop,
|
|
154
|
+
plan: noop,
|
|
155
|
+
regex: noop,
|
|
156
|
+
snapshot: noop,
|
|
157
|
+
teardown: noop,
|
|
158
|
+
throws: () => undefined,
|
|
159
|
+
throwsAsync: noopAsync,
|
|
160
|
+
timeout: noop,
|
|
161
|
+
true: noop,
|
|
162
|
+
truthy: noop,
|
|
163
|
+
try: async () => ({ commit: noop, discard: noop, passed: true }),
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Initialize capture state on globalThis
|
|
168
|
+
*/
|
|
169
|
+
const initCaptureState = () => {
|
|
170
|
+
const state = {
|
|
171
|
+
hooks: {
|
|
172
|
+
after: [],
|
|
173
|
+
afterAlways: [],
|
|
174
|
+
afterEach: [],
|
|
175
|
+
afterEachAlways: [],
|
|
176
|
+
before: [],
|
|
177
|
+
beforeEach: [],
|
|
178
|
+
},
|
|
179
|
+
tests: [],
|
|
180
|
+
};
|
|
181
|
+
// @ts-expect-error - intentionally using globalThis for cross-module state
|
|
182
|
+
globalThis[CAPTURE_STATE_KEY] = state;
|
|
183
|
+
return state;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Install AVA mocks on globalThis for module interception
|
|
187
|
+
*/
|
|
188
|
+
const installAvaMocks = (state) => {
|
|
189
|
+
/**
|
|
190
|
+
* Parse test arguments and return name + wrapped function Used by
|
|
191
|
+
* registerTest and test variants (only, serial, skip)
|
|
192
|
+
*/
|
|
193
|
+
const parseTestArgs = (titleOrMacroOrFn, rest) => {
|
|
194
|
+
let name;
|
|
195
|
+
let fn;
|
|
196
|
+
let args = [];
|
|
197
|
+
if (typeof titleOrMacroOrFn === 'string') {
|
|
198
|
+
name = titleOrMacroOrFn;
|
|
199
|
+
const [macroOrFn, ...restArgs] = rest;
|
|
200
|
+
if (isMacroObject(macroOrFn)) {
|
|
201
|
+
fn = macroOrFn.exec;
|
|
202
|
+
args = restArgs;
|
|
203
|
+
if (macroOrFn.title) {
|
|
204
|
+
name = macroOrFn.title(titleOrMacroOrFn, ...restArgs);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else if (isFunction(macroOrFn)) {
|
|
208
|
+
fn = macroOrFn;
|
|
209
|
+
args = restArgs;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
fn = () => { };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else if (isMacroObject(titleOrMacroOrFn)) {
|
|
216
|
+
fn = titleOrMacroOrFn.exec;
|
|
217
|
+
args = rest;
|
|
218
|
+
name = titleOrMacroOrFn.title
|
|
219
|
+
? titleOrMacroOrFn.title(undefined, ...rest)
|
|
220
|
+
: fn.name || 'unnamed test';
|
|
221
|
+
}
|
|
222
|
+
else if (isFunction(titleOrMacroOrFn)) {
|
|
223
|
+
fn = titleOrMacroOrFn;
|
|
224
|
+
args = rest;
|
|
225
|
+
name = fn.name || 'unnamed test';
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
name = 'unnamed test';
|
|
229
|
+
fn = () => { };
|
|
230
|
+
}
|
|
231
|
+
const wrappedFn = async () => {
|
|
232
|
+
const ctx = createMockContext();
|
|
233
|
+
await fn(ctx, ...args);
|
|
234
|
+
};
|
|
235
|
+
return { name, wrappedFn };
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* Process a test registration, handling all AVA calling conventions:
|
|
239
|
+
*
|
|
240
|
+
* - Test('title', fn)
|
|
241
|
+
* - Test('title', macro, ...args)
|
|
242
|
+
* - Test(macro, ...args)
|
|
243
|
+
* - Test(fn)
|
|
244
|
+
*/
|
|
245
|
+
const registerTest = (titleOrMacroOrFn, ...rest) => {
|
|
246
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
247
|
+
state.tests.push({
|
|
248
|
+
fn: wrappedFn,
|
|
249
|
+
name,
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
// Create mock test function
|
|
253
|
+
const mockTest = Object.assign(registerTest, {
|
|
254
|
+
// test.after() - runs once after all tests
|
|
255
|
+
after: Object.assign((fn) => {
|
|
256
|
+
const wrappedFn = async () => {
|
|
257
|
+
const ctx = createMockContext();
|
|
258
|
+
await fn(ctx);
|
|
259
|
+
};
|
|
260
|
+
state.hooks.after.push(wrappedFn);
|
|
261
|
+
}, {
|
|
262
|
+
// test.after.always() - runs even if tests fail
|
|
263
|
+
always: function always(fn) {
|
|
264
|
+
const wrappedFn = async () => {
|
|
265
|
+
const ctx = createMockContext();
|
|
266
|
+
await fn(ctx);
|
|
267
|
+
};
|
|
268
|
+
state.hooks.afterAlways.push(wrappedFn);
|
|
269
|
+
},
|
|
270
|
+
}),
|
|
271
|
+
// test.afterEach() - runs after each test
|
|
272
|
+
afterEach: Object.assign((fn) => {
|
|
273
|
+
const wrappedFn = async () => {
|
|
274
|
+
const ctx = createMockContext();
|
|
275
|
+
await fn(ctx);
|
|
276
|
+
};
|
|
277
|
+
state.hooks.afterEach.push(wrappedFn);
|
|
278
|
+
}, {
|
|
279
|
+
// test.afterEach.always() - runs even if test fails
|
|
280
|
+
always: function always(fn) {
|
|
281
|
+
const wrappedFn = async () => {
|
|
282
|
+
const ctx = createMockContext();
|
|
283
|
+
await fn(ctx);
|
|
284
|
+
};
|
|
285
|
+
state.hooks.afterEachAlways.push(wrappedFn);
|
|
286
|
+
},
|
|
287
|
+
}),
|
|
288
|
+
// test.before() - runs once before all tests
|
|
289
|
+
before: function before(fn) {
|
|
290
|
+
const wrappedFn = async () => {
|
|
291
|
+
const ctx = createMockContext();
|
|
292
|
+
await fn(ctx);
|
|
293
|
+
};
|
|
294
|
+
state.hooks.before.push(wrappedFn);
|
|
295
|
+
},
|
|
296
|
+
// test.beforeEach() - runs before each test
|
|
297
|
+
beforeEach: function beforeEach(fn) {
|
|
298
|
+
const wrappedFn = async () => {
|
|
299
|
+
const ctx = createMockContext();
|
|
300
|
+
await fn(ctx);
|
|
301
|
+
};
|
|
302
|
+
state.hooks.beforeEach.push(wrappedFn);
|
|
303
|
+
},
|
|
304
|
+
// test.failing() - expected to fail (treat as regular for benchmarks)
|
|
305
|
+
failing: function failing(titleOrMacro, implementation) {
|
|
306
|
+
mockTest(titleOrMacro, implementation);
|
|
307
|
+
},
|
|
308
|
+
// test.macro() - create reusable test macro
|
|
309
|
+
// Accepts either a function or an object with exec/title
|
|
310
|
+
macro: function macro(fnOrObject) {
|
|
311
|
+
if (typeof fnOrObject === 'function') {
|
|
312
|
+
// Simple function macro - return as-is
|
|
313
|
+
return fnOrObject;
|
|
314
|
+
}
|
|
315
|
+
// Object macro with exec/title - return as AvaMacro
|
|
316
|
+
return {
|
|
317
|
+
exec: fnOrObject.exec,
|
|
318
|
+
title: fnOrObject.title,
|
|
319
|
+
};
|
|
320
|
+
},
|
|
321
|
+
// test.only() - marks test as exclusive
|
|
322
|
+
only: function only(titleOrMacroOrFn, ...rest) {
|
|
323
|
+
// Reuse registerTest logic but add only flag
|
|
324
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
325
|
+
state.tests.push({
|
|
326
|
+
fn: wrappedFn,
|
|
327
|
+
name,
|
|
328
|
+
only: true,
|
|
329
|
+
});
|
|
330
|
+
},
|
|
331
|
+
// test.serial() - run serially (we capture but ignore serial flag for benchmarks)
|
|
332
|
+
serial: function serial(titleOrMacroOrFn, ...rest) {
|
|
333
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
334
|
+
state.tests.push({
|
|
335
|
+
fn: wrappedFn,
|
|
336
|
+
name,
|
|
337
|
+
serial: true,
|
|
338
|
+
});
|
|
339
|
+
},
|
|
340
|
+
// test.skip() - marks test as skipped
|
|
341
|
+
skip: function skip(titleOrMacroOrFn, ...rest) {
|
|
342
|
+
const { name, wrappedFn } = parseTestArgs(titleOrMacroOrFn, rest);
|
|
343
|
+
state.tests.push({
|
|
344
|
+
fn: wrappedFn,
|
|
345
|
+
name,
|
|
346
|
+
skip: true,
|
|
347
|
+
});
|
|
348
|
+
},
|
|
349
|
+
// test.todo() - placeholder test
|
|
350
|
+
todo: function todo(title) {
|
|
351
|
+
state.tests.push({
|
|
352
|
+
fn: () => { },
|
|
353
|
+
name: title,
|
|
354
|
+
skip: true,
|
|
355
|
+
});
|
|
356
|
+
},
|
|
357
|
+
});
|
|
358
|
+
// Install on globalThis for the loader to access
|
|
359
|
+
// @ts-expect-error - intentionally using globalThis
|
|
360
|
+
globalThis.__MODESTBENCH_AVA_MOCK__ = {
|
|
361
|
+
default: mockTest,
|
|
362
|
+
test: mockTest,
|
|
363
|
+
};
|
|
364
|
+
};
|
|
365
|
+
/**
|
|
366
|
+
* Convert capture state to CapturedTestFile
|
|
367
|
+
*
|
|
368
|
+
* Since AVA doesn't have suites, we create a synthetic "default" suite to hold
|
|
369
|
+
* the file-level hooks and tests.
|
|
370
|
+
*/
|
|
371
|
+
const toCapturedTestFile = (state, filePath) => {
|
|
372
|
+
// Combine after and afterAlways, afterEach and afterEachAlways
|
|
373
|
+
const combinedHooks = {
|
|
374
|
+
after: [...state.hooks.after, ...state.hooks.afterAlways],
|
|
375
|
+
afterEach: [...state.hooks.afterEach, ...state.hooks.afterEachAlways],
|
|
376
|
+
before: state.hooks.before,
|
|
377
|
+
beforeEach: state.hooks.beforeEach,
|
|
378
|
+
};
|
|
379
|
+
// Convert tests
|
|
380
|
+
const tests = state.tests.map((t) => ({
|
|
381
|
+
fn: t.fn,
|
|
382
|
+
name: t.name,
|
|
383
|
+
only: t.only,
|
|
384
|
+
skip: t.skip,
|
|
385
|
+
}));
|
|
386
|
+
// If there are hooks, wrap them in a synthetic suite
|
|
387
|
+
const hasHooks = combinedHooks.before.length > 0 ||
|
|
388
|
+
combinedHooks.after.length > 0 ||
|
|
389
|
+
combinedHooks.beforeEach.length > 0 ||
|
|
390
|
+
combinedHooks.afterEach.length > 0;
|
|
391
|
+
if (hasHooks) {
|
|
392
|
+
// Create a synthetic suite to hold hooks
|
|
393
|
+
const suite = {
|
|
394
|
+
children: [],
|
|
395
|
+
hooks: combinedHooks,
|
|
396
|
+
name: 'default',
|
|
397
|
+
tests,
|
|
398
|
+
};
|
|
399
|
+
return {
|
|
400
|
+
filePath,
|
|
401
|
+
framework: 'ava',
|
|
402
|
+
rootSuites: [suite],
|
|
403
|
+
rootTests: [],
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
// No hooks - just return flat tests
|
|
407
|
+
return {
|
|
408
|
+
filePath,
|
|
409
|
+
framework: 'ava',
|
|
410
|
+
rootSuites: [],
|
|
411
|
+
rootTests: tests,
|
|
412
|
+
};
|
|
413
|
+
};
|
|
414
|
+
/**
|
|
415
|
+
* Uninstall AVA mocks
|
|
416
|
+
*/
|
|
417
|
+
const uninstallAvaMocks = () => {
|
|
418
|
+
// @ts-expect-error - cleaning up globalThis
|
|
419
|
+
delete globalThis.__MODESTBENCH_AVA_MOCK__;
|
|
420
|
+
};
|
|
421
|
+
//# sourceMappingURL=ava-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-adapter.js","sourceRoot":"","sources":["../../src/adapters/ava-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Adapter
|
|
3
|
+
*
|
|
4
|
+
* Captures test definitions from AVA test files using ES module loader hooks.
|
|
5
|
+
*
|
|
6
|
+
* AVA differs from Mocha and node:test:
|
|
7
|
+
*
|
|
8
|
+
* - No describe blocks - tests are flat
|
|
9
|
+
* - Tests receive an execution context `t` with assertions
|
|
10
|
+
* - Supports test.before/after/beforeEach/afterEach at file level
|
|
11
|
+
* - Each test file is isolated (we don't need to handle that)
|
|
12
|
+
*
|
|
13
|
+
* Architecture:
|
|
14
|
+
*
|
|
15
|
+
* 1. Install mock on globalThis
|
|
16
|
+
* 2. Loader intercepts 'ava' imports and returns the mock
|
|
17
|
+
* 3. Import test file to capture test definitions
|
|
18
|
+
*/
|
|
19
|
+
import type { CapturedTestFile, TestFrameworkAdapter } from "./types.cjs";
|
|
20
|
+
/**
|
|
21
|
+
* AVA test framework adapter
|
|
22
|
+
*
|
|
23
|
+
* Captures test definitions by installing mock implementations before importing
|
|
24
|
+
* the test file.
|
|
25
|
+
*
|
|
26
|
+
* IMPORTANT: For this to work with actual AVA imports, you must run Node.js
|
|
27
|
+
* with our loader: node --import modestbench/ava your-test.js
|
|
28
|
+
*/
|
|
29
|
+
export declare class AvaAdapter implements TestFrameworkAdapter {
|
|
30
|
+
readonly framework: "ava";
|
|
31
|
+
/**
|
|
32
|
+
* Capture test definitions from an AVA test file
|
|
33
|
+
*
|
|
34
|
+
* @param filePath - Absolute path to the test file
|
|
35
|
+
* @returns Captured test structure
|
|
36
|
+
*/
|
|
37
|
+
capture(filePath: string): Promise<CapturedTestFile>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ava-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAGV,gBAAgB,EAEhB,oBAAoB,EACrB,oBAAmB;AAsHpB;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,oBAAoB;IACrD,QAAQ,CAAC,SAAS,EAAG,KAAK,CAAU;IAEpC;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsB3D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModestBench AVA Adapter
|
|
3
|
+
*
|
|
4
|
+
* Captures test definitions from AVA test files using ES module loader hooks.
|
|
5
|
+
*
|
|
6
|
+
* AVA differs from Mocha and node:test:
|
|
7
|
+
*
|
|
8
|
+
* - No describe blocks - tests are flat
|
|
9
|
+
* - Tests receive an execution context `t` with assertions
|
|
10
|
+
* - Supports test.before/after/beforeEach/afterEach at file level
|
|
11
|
+
* - Each test file is isolated (we don't need to handle that)
|
|
12
|
+
*
|
|
13
|
+
* Architecture:
|
|
14
|
+
*
|
|
15
|
+
* 1. Install mock on globalThis
|
|
16
|
+
* 2. Loader intercepts 'ava' imports and returns the mock
|
|
17
|
+
* 3. Import test file to capture test definitions
|
|
18
|
+
*/
|
|
19
|
+
import type { CapturedTestFile, TestFrameworkAdapter } from "./types.js";
|
|
20
|
+
/**
|
|
21
|
+
* AVA test framework adapter
|
|
22
|
+
*
|
|
23
|
+
* Captures test definitions by installing mock implementations before importing
|
|
24
|
+
* the test file.
|
|
25
|
+
*
|
|
26
|
+
* IMPORTANT: For this to work with actual AVA imports, you must run Node.js
|
|
27
|
+
* with our loader: node --import modestbench/ava your-test.js
|
|
28
|
+
*/
|
|
29
|
+
export declare class AvaAdapter implements TestFrameworkAdapter {
|
|
30
|
+
readonly framework: "ava";
|
|
31
|
+
/**
|
|
32
|
+
* Capture test definitions from an AVA test file
|
|
33
|
+
*
|
|
34
|
+
* @param filePath - Absolute path to the test file
|
|
35
|
+
* @returns Captured test structure
|
|
36
|
+
*/
|
|
37
|
+
capture(filePath: string): Promise<CapturedTestFile>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ava-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ava-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ava-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAGV,gBAAgB,EAEhB,oBAAoB,EACrB,mBAAmB;AAsHpB;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,oBAAoB;IACrD,QAAQ,CAAC,SAAS,EAAG,KAAK,CAAU;IAEpC;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsB3D"}
|