ppef 1.0.1 → 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/bin/ppef.mjs +20 -0
- package/dist/__tests__/framework-pipeline.integration.test.js +13 -11
- package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -1
- 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.js +12 -9
- package/dist/__tests__/registry-executor.integration.test.js.map +1 -1
- 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 +9 -0
- package/dist/aggregation/aggregators.d.ts.map +1 -1
- package/dist/aggregation/aggregators.js +1 -1
- package/dist/aggregation/aggregators.js.map +1 -1
- package/dist/aggregation/index.d.ts +1 -1
- package/dist/aggregation/index.d.ts.map +1 -1
- package/dist/aggregation/index.js +1 -1
- package/dist/aggregation/index.js.map +1 -1
- 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/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/executor/__tests__/checkpoint-manager.unit.test.js +83 -1
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -1
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +3 -6
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -1
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +428 -159
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -1
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js +105 -1
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -1
- package/dist/executor/__tests__/executor.unit.test.js +69 -1
- package/dist/executor/__tests__/executor.unit.test.js.map +1 -1
- 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-executor.unit.test.d.ts +2 -1
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -1
- package/dist/executor/__tests__/parallel-executor.unit.test.js +426 -156
- package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -1
- 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/parallel-executor.d.ts +186 -0
- package/dist/executor/parallel-executor.d.ts.map +1 -1
- package/dist/executor/parallel-executor.js +218 -83
- package/dist/executor/parallel-executor.js.map +1 -1
- package/dist/executor/run-id.d.ts.map +1 -1
- package/dist/executor/run-id.js +8 -1
- package/dist/executor/run-id.js.map +1 -1
- package/dist/executor/worker-entry.d.ts +2 -0
- package/dist/executor/worker-entry.d.ts.map +1 -1
- package/dist/executor/worker-entry.js +29 -54
- package/dist/executor/worker-entry.js.map +1 -1
- 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/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/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/package.json +8 -1
|
@@ -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":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for CLI Output Writer
|
|
3
|
+
*
|
|
4
|
+
* Tests output writing functionality including:
|
|
5
|
+
* - writeResults
|
|
6
|
+
* - writeAggregates
|
|
7
|
+
* - generateOutputFilename
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it } from "node:test";
|
|
10
|
+
import { strict as assert } from "node:assert";
|
|
11
|
+
import { readFile } from "node:fs/promises";
|
|
12
|
+
import { unlink } from "node:fs/promises";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { mkdtemp, rmdir } from "node:fs/promises";
|
|
15
|
+
import { tmpdir } from "node:os";
|
|
16
|
+
import { writeResults, writeAggregates, generateOutputFilename } from "../output-writer.js";
|
|
17
|
+
describe("output-writer", () => {
|
|
18
|
+
describe("generateOutputFilename", () => {
|
|
19
|
+
it("should generate filename with timestamp", () => {
|
|
20
|
+
const filename = generateOutputFilename("experiment", "results");
|
|
21
|
+
// Format: experiment-results-YYYY-MM-DDTHH-MM-SS.json (ISO format with colons replaced)
|
|
22
|
+
assert.match(filename, /experiment-results-\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}\.json/);
|
|
23
|
+
});
|
|
24
|
+
it("should generate aggregates filename", () => {
|
|
25
|
+
const filename = generateOutputFilename("test-exp", "aggregates");
|
|
26
|
+
assert.ok(filename.includes("aggregates"));
|
|
27
|
+
assert.ok(filename.endsWith(".json"));
|
|
28
|
+
});
|
|
29
|
+
it("should sanitize special characters in experiment name", () => {
|
|
30
|
+
const filename = generateOutputFilename("Test Experiment!", "results");
|
|
31
|
+
assert.ok(!filename.includes("!"));
|
|
32
|
+
assert.ok(filename.includes("test-experiment"));
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("writeResults", () => {
|
|
36
|
+
it("should write results to JSON file", async () => {
|
|
37
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
38
|
+
const results = [
|
|
39
|
+
{
|
|
40
|
+
run: {
|
|
41
|
+
runId: "test-run-id",
|
|
42
|
+
sut: "test-sut",
|
|
43
|
+
sutRole: "primary",
|
|
44
|
+
caseId: "test-case",
|
|
45
|
+
caseClass: "test-class",
|
|
46
|
+
repetition: 0,
|
|
47
|
+
seed: 42,
|
|
48
|
+
},
|
|
49
|
+
correctness: {
|
|
50
|
+
expectedExists: true,
|
|
51
|
+
producedOutput: true,
|
|
52
|
+
valid: true,
|
|
53
|
+
matchesExpected: true,
|
|
54
|
+
},
|
|
55
|
+
outputs: {
|
|
56
|
+
summary: {},
|
|
57
|
+
},
|
|
58
|
+
metrics: { numeric: { accuracy: 0.85 } },
|
|
59
|
+
provenance: {
|
|
60
|
+
runtime: {
|
|
61
|
+
platform: "test",
|
|
62
|
+
arch: "x64",
|
|
63
|
+
nodeVersion: "20.0.0",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
const outputPath = join(tempDir, "results.json");
|
|
69
|
+
await writeResults(results, outputPath, "json");
|
|
70
|
+
// Verify file was written
|
|
71
|
+
const written = await readFile(outputPath, "utf-8");
|
|
72
|
+
const data = JSON.parse(written);
|
|
73
|
+
assert.ok(data.results);
|
|
74
|
+
assert.strictEqual(data.results.length, 1);
|
|
75
|
+
assert.strictEqual(data.results[0].run.sut, "test-sut");
|
|
76
|
+
await unlink(outputPath);
|
|
77
|
+
await rmdir(tempDir);
|
|
78
|
+
});
|
|
79
|
+
it("should write results in pretty format", async () => {
|
|
80
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
81
|
+
const results = [
|
|
82
|
+
{
|
|
83
|
+
run: {
|
|
84
|
+
runId: "test-run-id",
|
|
85
|
+
sut: "test-sut",
|
|
86
|
+
sutRole: "primary",
|
|
87
|
+
sutVersion: "1.0.0",
|
|
88
|
+
caseId: "test-case",
|
|
89
|
+
caseClass: "test-class",
|
|
90
|
+
repetition: 0,
|
|
91
|
+
seed: 42,
|
|
92
|
+
},
|
|
93
|
+
correctness: {
|
|
94
|
+
expectedExists: true,
|
|
95
|
+
producedOutput: true,
|
|
96
|
+
valid: true,
|
|
97
|
+
matchesExpected: true,
|
|
98
|
+
},
|
|
99
|
+
outputs: {
|
|
100
|
+
summary: {},
|
|
101
|
+
},
|
|
102
|
+
metrics: { numeric: { accuracy: 0.85 } },
|
|
103
|
+
provenance: {
|
|
104
|
+
runtime: {
|
|
105
|
+
platform: "test",
|
|
106
|
+
arch: "x64",
|
|
107
|
+
nodeVersion: "20.0.0",
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
const outputPath = join(tempDir, "results.json");
|
|
113
|
+
await writeResults(results, outputPath, "json-pretty");
|
|
114
|
+
// Verify file was written with formatting
|
|
115
|
+
const written = await readFile(outputPath, "utf-8");
|
|
116
|
+
assert.ok(written.includes("\n")); // Pretty format has newlines
|
|
117
|
+
await unlink(outputPath);
|
|
118
|
+
await rmdir(tempDir);
|
|
119
|
+
});
|
|
120
|
+
it("should create output directory if it does not exist", async () => {
|
|
121
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
122
|
+
const nestedPath = join(tempDir, "nested", "dir", "results.json");
|
|
123
|
+
const results = [];
|
|
124
|
+
await writeResults(results, nestedPath, "json");
|
|
125
|
+
// Verify file was created in nested directory
|
|
126
|
+
const written = await readFile(nestedPath, "utf-8");
|
|
127
|
+
const data = JSON.parse(written);
|
|
128
|
+
assert.strictEqual(data.count, 0);
|
|
129
|
+
// Cleanup
|
|
130
|
+
await unlink(nestedPath);
|
|
131
|
+
await rmdir(join(tempDir, "nested", "dir"));
|
|
132
|
+
await rmdir(join(tempDir, "nested"));
|
|
133
|
+
await rmdir(tempDir);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe("writeAggregates", () => {
|
|
137
|
+
it("should write aggregates to JSON file", async () => {
|
|
138
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
139
|
+
const aggregates = {
|
|
140
|
+
version: "1.0.0",
|
|
141
|
+
timestamp: new Date().toISOString(),
|
|
142
|
+
aggregates: [
|
|
143
|
+
{
|
|
144
|
+
sut: "test-sut",
|
|
145
|
+
sutRole: "primary",
|
|
146
|
+
caseClass: undefined,
|
|
147
|
+
group: {
|
|
148
|
+
runCount: 10,
|
|
149
|
+
caseCount: 5,
|
|
150
|
+
},
|
|
151
|
+
correctness: {
|
|
152
|
+
validRate: 1.0,
|
|
153
|
+
producedOutputRate: 1.0,
|
|
154
|
+
},
|
|
155
|
+
metrics: {
|
|
156
|
+
accuracy: {
|
|
157
|
+
n: 10,
|
|
158
|
+
mean: 0.85,
|
|
159
|
+
median: 0.86,
|
|
160
|
+
min: 0.75,
|
|
161
|
+
max: 0.95,
|
|
162
|
+
std: 0.05,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
};
|
|
168
|
+
const outputPath = join(tempDir, "aggregates.json");
|
|
169
|
+
await writeAggregates(aggregates, outputPath, "json");
|
|
170
|
+
// Verify file was written
|
|
171
|
+
const written = await readFile(outputPath, "utf-8");
|
|
172
|
+
const data = JSON.parse(written);
|
|
173
|
+
assert.ok(data.aggregates);
|
|
174
|
+
assert.strictEqual(data.aggregates.length, 1);
|
|
175
|
+
assert.strictEqual(data.aggregates[0].sut, "test-sut");
|
|
176
|
+
await unlink(outputPath);
|
|
177
|
+
await rmdir(tempDir);
|
|
178
|
+
});
|
|
179
|
+
it("should write aggregates in pretty format", async () => {
|
|
180
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
181
|
+
const aggregates = {
|
|
182
|
+
version: "1.0.0",
|
|
183
|
+
timestamp: new Date().toISOString(),
|
|
184
|
+
aggregates: [],
|
|
185
|
+
};
|
|
186
|
+
const outputPath = join(tempDir, "aggregates.json");
|
|
187
|
+
await writeAggregates(aggregates, outputPath, "json-pretty");
|
|
188
|
+
// Verify file was written with formatting
|
|
189
|
+
const written = await readFile(outputPath, "utf-8");
|
|
190
|
+
assert.ok(written.includes("\n")); // Pretty format has newlines
|
|
191
|
+
await unlink(outputPath);
|
|
192
|
+
await rmdir(tempDir);
|
|
193
|
+
});
|
|
194
|
+
it("should handle directory creation errors gracefully", async () => {
|
|
195
|
+
const tempDir = await mkdtemp(join(tmpdir(), "ppef-test-"));
|
|
196
|
+
const aggregates = {
|
|
197
|
+
version: "1.0.0",
|
|
198
|
+
timestamp: new Date().toISOString(),
|
|
199
|
+
aggregates: [],
|
|
200
|
+
};
|
|
201
|
+
const outputPath = join(tempDir, "aggregates.json");
|
|
202
|
+
// First write creates directory successfully
|
|
203
|
+
await writeAggregates(aggregates, outputPath, "json");
|
|
204
|
+
// Second write hits the catch block in ensureDir (directory already exists)
|
|
205
|
+
await writeAggregates(aggregates, outputPath, "json");
|
|
206
|
+
// Verify file was written
|
|
207
|
+
const written = await readFile(outputPath, "utf-8");
|
|
208
|
+
const data = JSON.parse(written);
|
|
209
|
+
assert.strictEqual(data.version, "1.0.0");
|
|
210
|
+
// Cleanup
|
|
211
|
+
await unlink(outputPath);
|
|
212
|
+
await rmdir(tempDir);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=output-writer.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-writer.unit.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/output-writer.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.command.unit.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/plan.command.unit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|