ppef 1.0.0 → 1.1.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/README.md +172 -0
- package/bin/ppef.mjs +20 -0
- package/dist/__tests__/framework-pipeline.integration.test.d.ts +7 -0
- package/dist/__tests__/framework-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/framework-pipeline.integration.test.js +415 -0
- package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -0
- package/dist/__tests__/index-exports.unit.test.d.ts +8 -0
- package/dist/__tests__/index-exports.unit.test.d.ts.map +1 -0
- package/dist/__tests__/index-exports.unit.test.js +127 -0
- package/dist/__tests__/index-exports.unit.test.js.map +1 -0
- package/dist/__tests__/registry-executor.integration.test.d.ts +5 -0
- package/dist/__tests__/registry-executor.integration.test.d.ts.map +1 -0
- package/dist/__tests__/registry-executor.integration.test.js +352 -0
- package/dist/__tests__/registry-executor.integration.test.js.map +1 -0
- package/dist/__tests__/test-helpers.d.ts +94 -0
- package/dist/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/__tests__/test-helpers.js +271 -0
- package/dist/__tests__/test-helpers.js.map +1 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.d.ts +7 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.d.ts.map +1 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.js +350 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.js.map +1 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.d.ts +7 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.d.ts.map +1 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.js +213 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.js.map +1 -0
- package/dist/aggregation/aggregators.d.ts +63 -0
- package/dist/aggregation/aggregators.d.ts.map +1 -0
- package/dist/aggregation/aggregators.js +228 -0
- package/dist/aggregation/aggregators.js.map +1 -0
- package/dist/aggregation/index.d.ts +8 -0
- package/dist/aggregation/index.d.ts.map +1 -0
- package/dist/aggregation/index.js +8 -0
- package/dist/aggregation/index.js.map +1 -0
- package/dist/aggregation/pipeline.d.ts +38 -0
- package/dist/aggregation/pipeline.d.ts.map +1 -0
- package/dist/aggregation/pipeline.js +198 -0
- package/dist/aggregation/pipeline.js.map +1 -0
- package/dist/claims/__tests__/evaluator.unit.test.d.ts +12 -0
- package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +1 -0
- package/dist/claims/__tests__/evaluator.unit.test.js +801 -0
- package/dist/claims/__tests__/evaluator.unit.test.js.map +1 -0
- package/dist/claims/evaluator.d.ts +33 -0
- package/dist/claims/evaluator.d.ts.map +1 -0
- package/dist/claims/evaluator.js +174 -0
- package/dist/claims/evaluator.js.map +1 -0
- package/dist/claims/index.d.ts +7 -0
- package/dist/claims/index.d.ts.map +1 -0
- package/dist/claims/index.js +7 -0
- package/dist/claims/index.js.map +1 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.js +396 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/commands.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/commands.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/commands.unit.test.js +217 -0
- package/dist/cli/__tests__/commands.unit.test.js.map +1 -0
- package/dist/cli/__tests__/index.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/index.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/index.unit.test.js +65 -0
- package/dist/cli/__tests__/index.unit.test.js.map +1 -0
- package/dist/cli/__tests__/logger.unit.test.d.ts +11 -0
- package/dist/cli/__tests__/logger.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/logger.unit.test.js +180 -0
- package/dist/cli/__tests__/logger.unit.test.js.map +1 -0
- package/dist/cli/__tests__/module-loader.unit.test.d.ts +11 -0
- package/dist/cli/__tests__/module-loader.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/module-loader.unit.test.js +262 -0
- package/dist/cli/__tests__/module-loader.unit.test.js.map +1 -0
- package/dist/cli/__tests__/output-writer.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/output-writer.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/output-writer.unit.test.js +216 -0
- package/dist/cli/__tests__/output-writer.unit.test.js.map +1 -0
- package/dist/cli/__tests__/plan.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/plan.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/plan.command.unit.test.js +289 -0
- package/dist/cli/__tests__/plan.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/run.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/run.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/run.command.unit.test.js +422 -0
- package/dist/cli/__tests__/run.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/validate.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/validate.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/validate.command.unit.test.js +226 -0
- package/dist/cli/__tests__/validate.command.unit.test.js.map +1 -0
- package/dist/cli/command-deps.d.ts +125 -0
- package/dist/cli/command-deps.d.ts.map +1 -0
- package/dist/cli/command-deps.js +7 -0
- package/dist/cli/command-deps.js.map +1 -0
- package/dist/cli/commands/aggregate.d.ts +35 -0
- package/dist/cli/commands/aggregate.d.ts.map +1 -0
- package/dist/cli/commands/aggregate.js +121 -0
- package/dist/cli/commands/aggregate.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +36 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +109 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/run.d.ts +33 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +185 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +27 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +88 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/config-loader.d.ts +30 -0
- package/dist/cli/config-loader.d.ts.map +1 -0
- package/dist/cli/config-loader.js +181 -0
- package/dist/cli/config-loader.js.map +1 -0
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +58 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/logger.d.ts +75 -0
- package/dist/cli/logger.d.ts.map +1 -0
- package/dist/cli/logger.js +131 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/cli/module-loader.d.ts +46 -0
- package/dist/cli/module-loader.d.ts.map +1 -0
- package/dist/cli/module-loader.js +116 -0
- package/dist/cli/module-loader.js.map +1 -0
- package/dist/cli/output-writer.d.ts +51 -0
- package/dist/cli/output-writer.d.ts.map +1 -0
- package/dist/cli/output-writer.js +65 -0
- package/dist/cli/output-writer.js.map +1 -0
- package/dist/cli/types.d.ts +174 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +7 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/collector/__tests__/result-collector.unit.test.d.ts +7 -0
- package/dist/collector/__tests__/result-collector.unit.test.d.ts.map +1 -0
- package/dist/collector/__tests__/result-collector.unit.test.js +1021 -0
- package/dist/collector/__tests__/result-collector.unit.test.js.map +1 -0
- package/dist/collector/__tests__/schema.unit.test.d.ts +7 -0
- package/dist/collector/__tests__/schema.unit.test.d.ts.map +1 -0
- package/dist/collector/__tests__/schema.unit.test.js +360 -0
- package/dist/collector/__tests__/schema.unit.test.js.map +1 -0
- package/dist/collector/index.d.ts +8 -0
- package/dist/collector/index.d.ts.map +1 -0
- package/dist/collector/index.js +8 -0
- package/dist/collector/index.js.map +1 -0
- package/dist/collector/result-collector.d.ts +159 -0
- package/dist/collector/result-collector.d.ts.map +1 -0
- package/dist/collector/result-collector.js +213 -0
- package/dist/collector/result-collector.js.map +1 -0
- package/dist/collector/schema.d.ts +34 -0
- package/dist/collector/schema.d.ts.map +1 -0
- package/dist/collector/schema.js +145 -0
- package/dist/collector/schema.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts +10 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js +122 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.js +330 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js +531 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +8 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +493 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js +164 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js +490 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -0
- package/dist/executor/__tests__/executor.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/executor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/executor.unit.test.js +202 -0
- package/dist/executor/__tests__/executor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.js +285 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts +12 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js +196 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.d.ts +7 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.js +249 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.js +473 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/run-id.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/run-id.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/run-id.unit.test.js +156 -0
- package/dist/executor/__tests__/run-id.unit.test.js.map +1 -0
- package/dist/executor/__tests__/worker-entry.integration.test.d.ts +24 -0
- package/dist/executor/__tests__/worker-entry.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/worker-entry.integration.test.js +82 -0
- package/dist/executor/__tests__/worker-entry.integration.test.js.map +1 -0
- package/dist/executor/__tests__/worker-entry.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/worker-entry.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/worker-entry.unit.test.js +364 -0
- package/dist/executor/__tests__/worker-entry.unit.test.js.map +1 -0
- package/dist/executor/checkpoint-manager.d.ts +231 -0
- package/dist/executor/checkpoint-manager.d.ts.map +1 -0
- package/dist/executor/checkpoint-manager.js +395 -0
- package/dist/executor/checkpoint-manager.js.map +1 -0
- package/dist/executor/checkpoint-storage.d.ts +230 -0
- package/dist/executor/checkpoint-storage.d.ts.map +1 -0
- package/dist/executor/checkpoint-storage.js +370 -0
- package/dist/executor/checkpoint-storage.js.map +1 -0
- package/dist/executor/checkpoint-types.d.ts +48 -0
- package/dist/executor/checkpoint-types.d.ts.map +1 -0
- package/dist/executor/checkpoint-types.js +8 -0
- package/dist/executor/checkpoint-types.js.map +1 -0
- package/dist/executor/executor.d.ts +164 -0
- package/dist/executor/executor.d.ts.map +1 -0
- package/dist/executor/executor.js +408 -0
- package/dist/executor/executor.js.map +1 -0
- package/dist/executor/index.d.ts +11 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +11 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/memory-monitor.d.ts +115 -0
- package/dist/executor/memory-monitor.d.ts.map +1 -0
- package/dist/executor/memory-monitor.js +168 -0
- package/dist/executor/memory-monitor.js.map +1 -0
- package/dist/executor/parallel-executor.d.ts +239 -0
- package/dist/executor/parallel-executor.d.ts.map +1 -0
- package/dist/executor/parallel-executor.js +329 -0
- package/dist/executor/parallel-executor.js.map +1 -0
- package/dist/executor/run-id.d.ts +71 -0
- package/dist/executor/run-id.d.ts.map +1 -0
- package/dist/executor/run-id.js +74 -0
- package/dist/executor/run-id.js.map +1 -0
- package/dist/executor/worker-entry.d.ts +10 -0
- package/dist/executor/worker-entry.d.ts.map +1 -0
- package/dist/executor/worker-entry.js +42 -0
- package/dist/executor/worker-entry.js.map +1 -0
- package/dist/executor/worker-executor.d.ts +156 -0
- package/dist/executor/worker-executor.d.ts.map +1 -0
- package/dist/executor/worker-executor.js +88 -0
- package/dist/executor/worker-executor.js.map +1 -0
- package/dist/index.cjs +11 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/case-registry.d.ts +113 -0
- package/dist/registry/case-registry.d.ts.map +1 -0
- package/dist/registry/case-registry.js +160 -0
- package/dist/registry/case-registry.js.map +1 -0
- package/dist/registry/index.d.ts +8 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/sut-registry.d.ts +96 -0
- package/dist/registry/sut-registry.d.ts.map +1 -0
- package/dist/registry/sut-registry.js +126 -0
- package/dist/registry/sut-registry.js.map +1 -0
- package/dist/renderers/index.d.ts +10 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +9 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/latex-renderer.d.ts +84 -0
- package/dist/renderers/latex-renderer.d.ts.map +1 -0
- package/dist/renderers/latex-renderer.js +208 -0
- package/dist/renderers/latex-renderer.js.map +1 -0
- package/dist/renderers/types.d.ts +106 -0
- package/dist/renderers/types.d.ts.map +1 -0
- package/dist/renderers/types.js +23 -0
- package/dist/renderers/types.js.map +1 -0
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts +11 -0
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +1 -0
- package/dist/robustness/__tests__/analyzer.unit.test.js +455 -0
- package/dist/robustness/__tests__/analyzer.unit.test.js.map +1 -0
- package/dist/robustness/__tests__/perturbations.unit.test.d.ts +11 -0
- package/dist/robustness/__tests__/perturbations.unit.test.d.ts.map +1 -0
- package/dist/robustness/__tests__/perturbations.unit.test.js +284 -0
- package/dist/robustness/__tests__/perturbations.unit.test.js.map +1 -0
- package/dist/robustness/analyzer.d.ts +61 -0
- package/dist/robustness/analyzer.d.ts.map +1 -0
- package/dist/robustness/analyzer.js +191 -0
- package/dist/robustness/analyzer.js.map +1 -0
- package/dist/robustness/index.d.ts +8 -0
- package/dist/robustness/index.d.ts.map +1 -0
- package/dist/robustness/index.js +8 -0
- package/dist/robustness/index.js.map +1 -0
- package/dist/robustness/perturbations.d.ts +46 -0
- package/dist/robustness/perturbations.d.ts.map +1 -0
- package/dist/robustness/perturbations.js +184 -0
- package/dist/robustness/perturbations.js.map +1 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts +7 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts.map +1 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.js +185 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.js.map +1 -0
- package/dist/statistical/index.d.ts +8 -0
- package/dist/statistical/index.d.ts.map +1 -0
- package/dist/statistical/index.js +8 -0
- package/dist/statistical/index.js.map +1 -0
- package/dist/statistical/mann-whitney-u.d.ts +62 -0
- package/dist/statistical/mann-whitney-u.d.ts.map +1 -0
- package/dist/statistical/mann-whitney-u.js +127 -0
- package/dist/statistical/mann-whitney-u.js.map +1 -0
- package/dist/types/aggregate.d.ts +124 -0
- package/dist/types/aggregate.d.ts.map +1 -0
- package/dist/types/aggregate.js +9 -0
- package/dist/types/aggregate.js.map +1 -0
- package/dist/types/case.d.ts +105 -0
- package/dist/types/case.d.ts.map +1 -0
- package/dist/types/case.js +10 -0
- package/dist/types/case.js.map +1 -0
- package/dist/types/claims.d.ts +122 -0
- package/dist/types/claims.d.ts.map +1 -0
- package/dist/types/claims.js +14 -0
- package/dist/types/claims.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/perturbation.d.ts +105 -0
- package/dist/types/perturbation.d.ts.map +1 -0
- package/dist/types/perturbation.js +9 -0
- package/dist/types/perturbation.js.map +1 -0
- package/dist/types/result.d.ts +150 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +12 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/sut.d.ts +128 -0
- package/dist/types/sut.d.ts.map +1 -0
- package/dist/types/sut.js +12 -0
- package/dist/types/sut.js.map +1 -0
- package/package.json +290 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/index.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CLI Index
|
|
3
|
+
*
|
|
4
|
+
* Tests CLI entry point functionality including:
|
|
5
|
+
* - createCliProgram function
|
|
6
|
+
* - command registration
|
|
7
|
+
* - program configuration
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it } from "node:test";
|
|
10
|
+
import { strict as assert } from "node:assert";
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
import { createCliProgram } from "../index.js";
|
|
13
|
+
describe("CLI index", () => {
|
|
14
|
+
describe("createCliProgram", () => {
|
|
15
|
+
it("should create and configure commander program", () => {
|
|
16
|
+
const program = createCliProgram();
|
|
17
|
+
assert.ok(program instanceof Command);
|
|
18
|
+
assert.strictEqual(program.name(), "ppef");
|
|
19
|
+
});
|
|
20
|
+
it("should register all commands", () => {
|
|
21
|
+
const program = createCliProgram();
|
|
22
|
+
const commandNames = program.commands.map((cmd) => cmd.name());
|
|
23
|
+
assert.ok(commandNames.includes("run"));
|
|
24
|
+
assert.ok(commandNames.includes("validate"));
|
|
25
|
+
assert.ok(commandNames.includes("plan"));
|
|
26
|
+
assert.ok(commandNames.includes("aggregate"));
|
|
27
|
+
});
|
|
28
|
+
it("should have correct program description", () => {
|
|
29
|
+
const program = createCliProgram();
|
|
30
|
+
// The program should have a description
|
|
31
|
+
assert.ok(program.description());
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe("command options", () => {
|
|
35
|
+
it("run command should have expected options", () => {
|
|
36
|
+
const program = createCliProgram();
|
|
37
|
+
const runCommand = program.commands.find((cmd) => cmd.name() === "run");
|
|
38
|
+
assert.ok(runCommand, "run command should be registered");
|
|
39
|
+
const options = runCommand.options;
|
|
40
|
+
// Check for expected options (Commander returns flags like --output, -f, etc.)
|
|
41
|
+
const optionFlags = options.map((opt) => {
|
|
42
|
+
const option = opt;
|
|
43
|
+
return option.long ?? option.short ?? "";
|
|
44
|
+
});
|
|
45
|
+
assert.ok(optionFlags.some((flag) => flag.includes("output")));
|
|
46
|
+
assert.ok(optionFlags.some((flag) => flag.includes("format") || flag.includes("f")));
|
|
47
|
+
});
|
|
48
|
+
it("validate command should be registered", () => {
|
|
49
|
+
const program = createCliProgram();
|
|
50
|
+
const validateCommand = program.commands.find((cmd) => cmd.name() === "validate");
|
|
51
|
+
assert.ok(validateCommand, "validate command should be registered");
|
|
52
|
+
});
|
|
53
|
+
it("plan command should be registered", () => {
|
|
54
|
+
const program = createCliProgram();
|
|
55
|
+
const planCommand = program.commands.find((cmd) => cmd.name() === "plan");
|
|
56
|
+
assert.ok(planCommand, "plan command should be registered");
|
|
57
|
+
});
|
|
58
|
+
it("aggregate command should be registered", () => {
|
|
59
|
+
const program = createCliProgram();
|
|
60
|
+
const aggregateCommand = program.commands.find((cmd) => cmd.name() === "aggregate");
|
|
61
|
+
assert.ok(aggregateCommand, "aggregate command should be registered");
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=index.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/index.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CLI Logger
|
|
3
|
+
*
|
|
4
|
+
* Tests logger functionality including:
|
|
5
|
+
* - Header and subheader output
|
|
6
|
+
* - Info, error, and warning messages
|
|
7
|
+
* - Progress reporter integration
|
|
8
|
+
* - Verbosity control
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=logger.unit.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.unit.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/logger.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CLI Logger
|
|
3
|
+
*
|
|
4
|
+
* Tests logger functionality including:
|
|
5
|
+
* - Header and subheader output
|
|
6
|
+
* - Info, error, and warning messages
|
|
7
|
+
* - Progress reporter integration
|
|
8
|
+
* - Verbosity control
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, mock } from "node:test";
|
|
11
|
+
import { strict as assert } from "node:assert";
|
|
12
|
+
import { CliLogger, createLogger } from "../logger.js";
|
|
13
|
+
describe("CliLogger", () => {
|
|
14
|
+
describe("constructor", () => {
|
|
15
|
+
it("should create logger with default options", () => {
|
|
16
|
+
const logger = new CliLogger({});
|
|
17
|
+
assert.ok(logger instanceof CliLogger);
|
|
18
|
+
});
|
|
19
|
+
it("should create logger with verbose enabled", () => {
|
|
20
|
+
const logger = new CliLogger({ verbose: true });
|
|
21
|
+
assert.ok(logger instanceof CliLogger);
|
|
22
|
+
});
|
|
23
|
+
it("should create logger with quiet mode", () => {
|
|
24
|
+
const logger = new CliLogger({ quiet: true });
|
|
25
|
+
assert.ok(logger instanceof CliLogger);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
describe("header", () => {
|
|
29
|
+
it("should print header with default styling", () => {
|
|
30
|
+
const logger = new CliLogger({});
|
|
31
|
+
const consoleSpy = mock.method(console, "log");
|
|
32
|
+
logger.header("Test Header");
|
|
33
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 2);
|
|
34
|
+
assert.strictEqual(consoleSpy.mock.calls[0].arguments[0], "");
|
|
35
|
+
assert.strictEqual(consoleSpy.mock.calls[1].arguments[0], "=== Test Header ===");
|
|
36
|
+
consoleSpy.mock.restore();
|
|
37
|
+
});
|
|
38
|
+
it("should suppress header in quiet mode", () => {
|
|
39
|
+
const logger = new CliLogger({ quiet: true });
|
|
40
|
+
const consoleSpy = mock.method(console, "log");
|
|
41
|
+
logger.header("Test Header");
|
|
42
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 0);
|
|
43
|
+
consoleSpy.mock.restore();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("subheader", () => {
|
|
47
|
+
it("should print subheader with styling", () => {
|
|
48
|
+
const logger = new CliLogger({});
|
|
49
|
+
const consoleSpy = mock.method(console, "log");
|
|
50
|
+
logger.subheader("Test Subheader");
|
|
51
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 1);
|
|
52
|
+
assert.strictEqual(consoleSpy.mock.calls[0].arguments[0], "--- Test Subheader");
|
|
53
|
+
consoleSpy.mock.restore();
|
|
54
|
+
});
|
|
55
|
+
it("should suppress subheader in quiet mode", () => {
|
|
56
|
+
const logger = new CliLogger({ quiet: true });
|
|
57
|
+
const consoleSpy = mock.method(console, "log");
|
|
58
|
+
logger.subheader("Test Subheader");
|
|
59
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 0);
|
|
60
|
+
consoleSpy.mock.restore();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe("info", () => {
|
|
64
|
+
it("should print info message", () => {
|
|
65
|
+
const logger = new CliLogger({});
|
|
66
|
+
const consoleSpy = mock.method(console, "log");
|
|
67
|
+
logger.info("Test info");
|
|
68
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 1);
|
|
69
|
+
assert.strictEqual(consoleSpy.mock.calls[0].arguments[0], "Test info");
|
|
70
|
+
consoleSpy.mock.restore();
|
|
71
|
+
});
|
|
72
|
+
it("should suppress info in quiet mode", () => {
|
|
73
|
+
const logger = new CliLogger({ quiet: true });
|
|
74
|
+
const consoleSpy = mock.method(console, "log");
|
|
75
|
+
logger.info("Test info");
|
|
76
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 0);
|
|
77
|
+
consoleSpy.mock.restore();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe("debug", () => {
|
|
81
|
+
it("should not print debug messages when verbose is false", () => {
|
|
82
|
+
const logger = new CliLogger({ verbose: false });
|
|
83
|
+
const consoleSpy = mock.method(console, "log");
|
|
84
|
+
logger.debug("Debug message");
|
|
85
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 0);
|
|
86
|
+
consoleSpy.mock.restore();
|
|
87
|
+
});
|
|
88
|
+
it("should print debug messages when verbose is true", () => {
|
|
89
|
+
const logger = new CliLogger({ verbose: true });
|
|
90
|
+
const consoleSpy = mock.method(console, "log");
|
|
91
|
+
logger.debug("Debug message");
|
|
92
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 1);
|
|
93
|
+
assert.strictEqual(consoleSpy.mock.calls[0].arguments[0], "[DEBUG] Debug message");
|
|
94
|
+
consoleSpy.mock.restore();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe("error", () => {
|
|
98
|
+
it("should print error message", () => {
|
|
99
|
+
const logger = new CliLogger({});
|
|
100
|
+
const consoleSpy = mock.method(console, "log");
|
|
101
|
+
logger.error("Test error");
|
|
102
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 1);
|
|
103
|
+
assert.strictEqual(consoleSpy.mock.calls[0].arguments[0], "Error: Test error");
|
|
104
|
+
consoleSpy.mock.restore();
|
|
105
|
+
});
|
|
106
|
+
it("should suppress errors in quiet mode", () => {
|
|
107
|
+
const logger = new CliLogger({ quiet: true });
|
|
108
|
+
const consoleSpy = mock.method(console, "log");
|
|
109
|
+
logger.error("Test error");
|
|
110
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 0);
|
|
111
|
+
consoleSpy.mock.restore();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe("warn", () => {
|
|
115
|
+
it("should print warning message", () => {
|
|
116
|
+
const logger = new CliLogger({});
|
|
117
|
+
const consoleSpy = mock.method(console, "log");
|
|
118
|
+
logger.warn("Test warning");
|
|
119
|
+
assert.strictEqual(consoleSpy.mock.calls.length, 1);
|
|
120
|
+
assert.strictEqual(consoleSpy.mock.calls[0].arguments[0], "Warning: Test warning");
|
|
121
|
+
consoleSpy.mock.restore();
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
describe("progress", () => {
|
|
125
|
+
it("should handle progress updates", () => {
|
|
126
|
+
const logger = new CliLogger({});
|
|
127
|
+
logger.setProgress(true);
|
|
128
|
+
// Just ensure it doesn't throw
|
|
129
|
+
logger.progress({
|
|
130
|
+
completed: 5,
|
|
131
|
+
total: 10,
|
|
132
|
+
failed: 0,
|
|
133
|
+
currentSut: "test-sut",
|
|
134
|
+
currentCase: "test-case",
|
|
135
|
+
currentRepetition: 0,
|
|
136
|
+
elapsedMs: 1000,
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
it("should not show progress when disabled", () => {
|
|
140
|
+
const logger = new CliLogger({});
|
|
141
|
+
logger.setProgress(false);
|
|
142
|
+
const writeSpy = mock.method(process.stdout, "write");
|
|
143
|
+
logger.progress({
|
|
144
|
+
completed: 5,
|
|
145
|
+
total: 10,
|
|
146
|
+
failed: 0,
|
|
147
|
+
elapsedMs: 1000,
|
|
148
|
+
});
|
|
149
|
+
// Should not call write when progress is disabled
|
|
150
|
+
const calls = writeSpy.mock.calls;
|
|
151
|
+
assert.strictEqual(calls.length, 0);
|
|
152
|
+
writeSpy.mock.restore();
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe("createProgressReporter", () => {
|
|
156
|
+
it("should create progress reporter function", () => {
|
|
157
|
+
const logger = new CliLogger({});
|
|
158
|
+
const reporter = logger.createProgressReporter();
|
|
159
|
+
assert.strictEqual(typeof reporter, "function");
|
|
160
|
+
// Ensure it doesn't throw
|
|
161
|
+
reporter({
|
|
162
|
+
completed: 1,
|
|
163
|
+
total: 10,
|
|
164
|
+
failed: 0,
|
|
165
|
+
elapsedMs: 100,
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe("createLogger", () => {
|
|
171
|
+
it("should create default logger", () => {
|
|
172
|
+
const logger = createLogger();
|
|
173
|
+
assert.ok(logger instanceof CliLogger);
|
|
174
|
+
});
|
|
175
|
+
it("should create logger with options", () => {
|
|
176
|
+
const logger = createLogger({ verbose: true });
|
|
177
|
+
assert.ok(logger instanceof CliLogger);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=logger.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.unit.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/logger.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CLI Module Loader
|
|
3
|
+
*
|
|
4
|
+
* Tests module loading functionality including:
|
|
5
|
+
* - Loading SUT factories
|
|
6
|
+
* - Loading case definitions
|
|
7
|
+
* - Loading metrics extractors
|
|
8
|
+
* - Error handling for invalid modules
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=module-loader.unit.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-loader.unit.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/module-loader.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CLI Module Loader
|
|
3
|
+
*
|
|
4
|
+
* Tests module loading functionality including:
|
|
5
|
+
* - Loading SUT factories
|
|
6
|
+
* - Loading case definitions
|
|
7
|
+
* - Loading metrics extractors
|
|
8
|
+
* - Error handling for invalid modules
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it } from "node:test";
|
|
11
|
+
import { strict as assert } from "node:assert";
|
|
12
|
+
import { writeFile } from "node:fs/promises";
|
|
13
|
+
import { unlink } from "node:fs/promises";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { mkdtemp, rmdir } from "node:fs/promises";
|
|
16
|
+
import { tmpdir } from "node:os";
|
|
17
|
+
import { loadSutFactory, loadCaseDefinition, loadMetricsExtractor } from "../module-loader.js";
|
|
18
|
+
describe("module-loader", () => {
|
|
19
|
+
describe("loadSutFactory", () => {
|
|
20
|
+
it("should load SUT factory from module", async () => {
|
|
21
|
+
// Create a temporary module file
|
|
22
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
23
|
+
const modulePath = join(tempDir, "test-sut.js");
|
|
24
|
+
const moduleContent = `
|
|
25
|
+
export function createSUT(config) {
|
|
26
|
+
return {
|
|
27
|
+
id: 'test-sut-v1.0.0',
|
|
28
|
+
config: config || {},
|
|
29
|
+
run: async (inputs) => ({ result: 'test' })
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
34
|
+
const sut = await loadSutFactory("./test-sut.js", "createSUT", tempDir, {
|
|
35
|
+
id: "test-sut",
|
|
36
|
+
name: "Test SUT",
|
|
37
|
+
version: "1.0.0",
|
|
38
|
+
role: "primary",
|
|
39
|
+
config: {},
|
|
40
|
+
tags: [],
|
|
41
|
+
});
|
|
42
|
+
assert.strictEqual(sut.registration.id, "test-sut");
|
|
43
|
+
assert.strictEqual(typeof sut.factory, "function");
|
|
44
|
+
const instance = sut.factory({ testOption: true });
|
|
45
|
+
assert.strictEqual(instance.id, "test-sut");
|
|
46
|
+
assert.strictEqual(instance.config.testOption, true);
|
|
47
|
+
// Cleanup
|
|
48
|
+
await unlink(modulePath);
|
|
49
|
+
await rmdir(tempDir);
|
|
50
|
+
});
|
|
51
|
+
it("should merge configs correctly", async () => {
|
|
52
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
53
|
+
const modulePath = join(tempDir, "test-sut.js");
|
|
54
|
+
const moduleContent = `
|
|
55
|
+
export function createSUT(config) {
|
|
56
|
+
return {
|
|
57
|
+
id: 'test-sut-v1.0.0',
|
|
58
|
+
config: { internalOption: 'internal', ...config },
|
|
59
|
+
run: async (inputs) => ({ result: 'test' })
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
`;
|
|
63
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
64
|
+
const sut = await loadSutFactory("./test-sut.js", "createSUT", tempDir, {
|
|
65
|
+
id: "test-sut",
|
|
66
|
+
name: "Test SUT",
|
|
67
|
+
version: "1.0.0",
|
|
68
|
+
role: "primary",
|
|
69
|
+
config: { baseOption: "base" },
|
|
70
|
+
tags: [],
|
|
71
|
+
}, { userOption: "user" });
|
|
72
|
+
const instance = sut.factory();
|
|
73
|
+
// The factory merges: { baseOption, userOption, internalOption } from instance.config
|
|
74
|
+
assert.strictEqual(instance.config.internalOption, "internal");
|
|
75
|
+
assert.strictEqual(instance.config.userOption, "user");
|
|
76
|
+
// Cleanup
|
|
77
|
+
await unlink(modulePath);
|
|
78
|
+
await rmdir(tempDir);
|
|
79
|
+
});
|
|
80
|
+
it("should throw error for non-function export", async () => {
|
|
81
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
82
|
+
const modulePath = join(tempDir, "test-sut.js");
|
|
83
|
+
const moduleContent = `
|
|
84
|
+
export const createSUT = "not a function";
|
|
85
|
+
`;
|
|
86
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
87
|
+
await assert.rejects(async () => loadSutFactory("./test-sut.js", "createSUT", tempDir, {
|
|
88
|
+
id: "test-sut",
|
|
89
|
+
name: "Test SUT",
|
|
90
|
+
version: "1.0.0",
|
|
91
|
+
role: "primary",
|
|
92
|
+
config: {},
|
|
93
|
+
tags: [],
|
|
94
|
+
}), /is not a function/);
|
|
95
|
+
// Cleanup
|
|
96
|
+
await unlink(modulePath);
|
|
97
|
+
await rmdir(tempDir);
|
|
98
|
+
});
|
|
99
|
+
it("should throw error for missing export", async () => {
|
|
100
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
101
|
+
const modulePath = join(tempDir, "test-sut.js");
|
|
102
|
+
const moduleContent = `
|
|
103
|
+
export const somethingElse = "value";
|
|
104
|
+
`;
|
|
105
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
106
|
+
await assert.rejects(async () => loadSutFactory("./test-sut.js", "missingExport", tempDir, {
|
|
107
|
+
id: "test-sut",
|
|
108
|
+
name: "Test SUT",
|
|
109
|
+
version: "1.0.0",
|
|
110
|
+
role: "primary",
|
|
111
|
+
config: {},
|
|
112
|
+
tags: [],
|
|
113
|
+
}), /is not a function/);
|
|
114
|
+
// Cleanup
|
|
115
|
+
await unlink(modulePath);
|
|
116
|
+
await rmdir(tempDir);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe("loadCaseDefinition", () => {
|
|
120
|
+
it("should load case definition from module", async () => {
|
|
121
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
122
|
+
const modulePath = join(tempDir, "test-case.js");
|
|
123
|
+
const moduleContent = `
|
|
124
|
+
export function createCase() {
|
|
125
|
+
return {
|
|
126
|
+
case: {
|
|
127
|
+
caseId: 'test-case-001',
|
|
128
|
+
name: 'Test Case',
|
|
129
|
+
inputs: {}
|
|
130
|
+
},
|
|
131
|
+
getInput: async () => ({ test: 'input' }),
|
|
132
|
+
getInputs: () => ({ seed: 42 })
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
`;
|
|
136
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
137
|
+
const caseDef = await loadCaseDefinition("./test-case.js", "createCase", tempDir);
|
|
138
|
+
assert.strictEqual(caseDef.case.caseId, "test-case-001");
|
|
139
|
+
assert.strictEqual(typeof caseDef.getInput, "function");
|
|
140
|
+
assert.strictEqual(typeof caseDef.getInputs, "function");
|
|
141
|
+
// Cleanup
|
|
142
|
+
await unlink(modulePath);
|
|
143
|
+
await rmdir(tempDir);
|
|
144
|
+
});
|
|
145
|
+
it("should throw error for invalid case definition", async () => {
|
|
146
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
147
|
+
const modulePath = join(tempDir, "test-case.js");
|
|
148
|
+
const moduleContent = `
|
|
149
|
+
export function createCase() {
|
|
150
|
+
return { invalid: 'structure' };
|
|
151
|
+
}
|
|
152
|
+
`;
|
|
153
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
154
|
+
await assert.rejects(async () => loadCaseDefinition("./test-case.js", "createCase", tempDir), /does not return a valid case definition/);
|
|
155
|
+
// Cleanup
|
|
156
|
+
await unlink(modulePath);
|
|
157
|
+
await rmdir(tempDir);
|
|
158
|
+
});
|
|
159
|
+
it("should throw error for non-function export", async () => {
|
|
160
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
161
|
+
const modulePath = join(tempDir, "test-case.js");
|
|
162
|
+
const moduleContent = `
|
|
163
|
+
export const createCase = "not a function";
|
|
164
|
+
`;
|
|
165
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
166
|
+
await assert.rejects(async () => loadCaseDefinition("./test-case.js", "createCase", tempDir), /is not a function/);
|
|
167
|
+
// Cleanup
|
|
168
|
+
await unlink(modulePath);
|
|
169
|
+
await rmdir(tempDir);
|
|
170
|
+
});
|
|
171
|
+
it("should throw error when getInput is missing", async () => {
|
|
172
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
173
|
+
const modulePath = join(tempDir, "test-case.js");
|
|
174
|
+
const moduleContent = `
|
|
175
|
+
export function createCase() {
|
|
176
|
+
return {
|
|
177
|
+
case: { caseId: 'test-case-001' },
|
|
178
|
+
getInputs: () => ({})
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
`;
|
|
182
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
183
|
+
await assert.rejects(async () => loadCaseDefinition("./test-case.js", "createCase", tempDir), /Missing getInput function/);
|
|
184
|
+
// Cleanup
|
|
185
|
+
await unlink(modulePath);
|
|
186
|
+
await rmdir(tempDir);
|
|
187
|
+
});
|
|
188
|
+
it("should throw error when getInputs is missing", async () => {
|
|
189
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
190
|
+
const modulePath = join(tempDir, "test-case.js");
|
|
191
|
+
const moduleContent = `
|
|
192
|
+
export function createCase() {
|
|
193
|
+
return {
|
|
194
|
+
case: { caseId: 'test-case-001' },
|
|
195
|
+
getInput: async () => ({})
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
`;
|
|
199
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
200
|
+
await assert.rejects(async () => loadCaseDefinition("./test-case.js", "createCase", tempDir), /Missing getInputs function/);
|
|
201
|
+
// Cleanup
|
|
202
|
+
await unlink(modulePath);
|
|
203
|
+
await rmdir(tempDir);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
describe("loadMetricsExtractor", () => {
|
|
207
|
+
it("should load metrics extractor from module", async () => {
|
|
208
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
209
|
+
const modulePath = join(tempDir, "test-extractor.js");
|
|
210
|
+
const moduleContent = `
|
|
211
|
+
export function extractMetrics(result) {
|
|
212
|
+
return {
|
|
213
|
+
accuracy: result.accuracy || 0.5,
|
|
214
|
+
count: result.items?.length || 0
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
`;
|
|
218
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
219
|
+
const extractor = await loadMetricsExtractor("./test-extractor.js", "extractMetrics", tempDir);
|
|
220
|
+
assert.strictEqual(typeof extractor, "function");
|
|
221
|
+
const metrics = extractor({ accuracy: 0.85, items: [1, 2, 3] });
|
|
222
|
+
assert.strictEqual(metrics.accuracy, 0.85);
|
|
223
|
+
assert.strictEqual(metrics.count, 3);
|
|
224
|
+
// Cleanup
|
|
225
|
+
await unlink(modulePath);
|
|
226
|
+
await rmdir(tempDir);
|
|
227
|
+
});
|
|
228
|
+
it("should handle missing result fields gracefully", async () => {
|
|
229
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
230
|
+
const modulePath = join(tempDir, "test-extractor.js");
|
|
231
|
+
const moduleContent = `
|
|
232
|
+
export function extractMetrics(result) {
|
|
233
|
+
return {
|
|
234
|
+
accuracy: result.accuracy || 0.5,
|
|
235
|
+
count: result.items?.length || 0
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
`;
|
|
239
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
240
|
+
const extractor = await loadMetricsExtractor("./test-extractor.js", "extractMetrics", tempDir);
|
|
241
|
+
const metrics = extractor({});
|
|
242
|
+
assert.strictEqual(metrics.accuracy, 0.5);
|
|
243
|
+
assert.strictEqual(metrics.count, 0);
|
|
244
|
+
// Cleanup
|
|
245
|
+
await unlink(modulePath);
|
|
246
|
+
await rmdir(tempDir);
|
|
247
|
+
});
|
|
248
|
+
it("should throw error for non-function export", async () => {
|
|
249
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
250
|
+
const modulePath = join(tempDir, "test-extractor.js");
|
|
251
|
+
const moduleContent = `
|
|
252
|
+
export const extractMetrics = "not a function";
|
|
253
|
+
`;
|
|
254
|
+
await writeFile(modulePath, moduleContent, "utf-8");
|
|
255
|
+
await assert.rejects(async () => loadMetricsExtractor("./test-extractor.js", "extractMetrics", tempDir), /is not a function/);
|
|
256
|
+
// Cleanup
|
|
257
|
+
await unlink(modulePath);
|
|
258
|
+
await rmdir(tempDir);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=module-loader.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-loader.unit.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/module-loader.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACpD,iCAAiC;YACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG;;;;;;;;CAQxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE;gBACvE,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAkB;gBACxB,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE;aACR,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACpD,MAAM,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEnD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAErD,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG;;;;;;;;CAQxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,GAAG,GAAG,MAAM,cAAc,CAC/B,eAAe,EACf,WAAW,EACX,OAAO,EACP;gBACC,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAkB;gBACxB,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;gBAC9B,IAAI,EAAE,EAAE;aACR,EACD,EAAE,UAAU,EAAE,MAAM,EAAE,CACtB,CAAC;YAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;YAC/B,sFAAsF;YACtF,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAEvD,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG;;CAExB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CACnB,KAAK,IAAI,EAAE,CACV,cAAc,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE;gBACrD,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAkB;gBACxB,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE;aACR,CAAC,EACH,mBAAmB,CACnB,CAAC;YAEF,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG;;CAExB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CACnB,KAAK,IAAI,EAAE,CACV,cAAc,CAAC,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE;gBACzD,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAkB;gBACxB,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE;aACR,CAAC,EACH,mBAAmB,CACnB,CAAC;YAEF,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG;;;;;;;;;;;;CAYxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YAElF,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YACzD,MAAM,CAAC,WAAW,CAAC,OAAO,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,OAAO,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAEzD,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG;;;;CAIxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CACnB,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,CAAC,EACvE,yCAAyC,CACzC,CAAC;YAEF,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG;;CAExB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CACnB,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,CAAC,EACvE,mBAAmB,CACnB,CAAC;YAEF,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG;;;;;;;CAOxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CACnB,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,CAAC,EACvE,2BAA2B,CAC3B,CAAC;YAEF,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG;;;;;;;CAOxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CACnB,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,CAAC,EACvE,4BAA4B,CAC5B,CAAC;YAEF,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG;;;;;;;CAOxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC3C,qBAAqB,EACrB,gBAAgB,EAChB,OAAO,CACP,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,OAAO,SAAS,EAAE,UAAU,CAAC,CAAC;YAEjD,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAErC,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG;;;;;;;CAOxB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC3C,qBAAqB,EACrB,gBAAgB,EAChB,OAAO,CACP,CAAC;YAEF,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAErC,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG;;CAExB,CAAC;YACC,MAAM,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CACnB,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAClF,mBAAmB,CACnB,CAAC;YAEF,UAAU;YACV,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-writer.unit.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/output-writer.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|