@supernal/interface 1.0.9 → 1.0.12
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/dist/cjs/src/background/navigation/NavigationGraph.js +48 -0
- package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -1
- package/dist/cjs/src/browser.js +42 -1
- package/dist/cjs/src/browser.js.map +1 -1
- package/dist/cjs/src/decorators/ContainerHelpers.js +16 -1
- package/dist/cjs/src/decorators/ContainerHelpers.js.map +1 -1
- package/dist/cjs/src/decorators/Tool.js +2 -3
- package/dist/cjs/src/decorators/Tool.js.map +1 -1
- package/dist/cjs/src/testing/graph-tester/core/GraphTester.js +339 -0
- package/dist/cjs/src/testing/graph-tester/core/GraphTester.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/core/TestFunction.js +189 -0
- package/dist/cjs/src/testing/graph-tester/core/TestFunction.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/core/types.js +24 -0
- package/dist/cjs/src/testing/graph-tester/core/types.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/index.js +13 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/portPool.js +184 -0
- package/dist/cjs/src/testing/graph-tester/fixtures/portPool.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/index.js +98 -0
- package/dist/cjs/src/testing/graph-tester/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/AccessibilityMode.js +230 -0
- package/dist/cjs/src/testing/graph-tester/modes/AccessibilityMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/PerformanceMode.js +168 -0
- package/dist/cjs/src/testing/graph-tester/modes/PerformanceMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/SEOMode.js +264 -0
- package/dist/cjs/src/testing/graph-tester/modes/SEOMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/VisualRegressionMode.js +199 -0
- package/dist/cjs/src/testing/graph-tester/modes/VisualRegressionMode.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/modes/index.js +17 -0
- package/dist/cjs/src/testing/graph-tester/modes/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/HTMLReporter.js +411 -0
- package/dist/cjs/src/testing/graph-tester/reporters/HTMLReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/JSONReporter.js +127 -0
- package/dist/cjs/src/testing/graph-tester/reporters/JSONReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/MarkdownReporter.js +169 -0
- package/dist/cjs/src/testing/graph-tester/reporters/MarkdownReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/UnifiedReporter.js +118 -0
- package/dist/cjs/src/testing/graph-tester/reporters/UnifiedReporter.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/reporters/index.js +17 -0
- package/dist/cjs/src/testing/graph-tester/reporters/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js +47 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js +584 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js +376 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/index.js +15 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/index.js.map +1 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/types.js +11 -0
- package/dist/cjs/src/testing/graph-tester/screenshot/types.js.map +1 -0
- package/dist/cjs/src/testing/selectors.js +1 -1
- package/dist/esm/src/background/navigation/INavigationGraph.d.ts +15 -0
- package/dist/esm/src/background/navigation/INavigationGraph.d.ts.map +1 -1
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts +32 -0
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -1
- package/dist/esm/src/background/navigation/NavigationGraph.js +48 -0
- package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -1
- package/dist/esm/src/browser.d.ts +9 -0
- package/dist/esm/src/browser.d.ts.map +1 -1
- package/dist/esm/src/browser.js +14 -0
- package/dist/esm/src/browser.js.map +1 -1
- package/dist/esm/src/decorators/ContainerHelpers.d.ts +2 -1
- package/dist/esm/src/decorators/ContainerHelpers.d.ts.map +1 -1
- package/dist/esm/src/decorators/ContainerHelpers.js +16 -1
- package/dist/esm/src/decorators/ContainerHelpers.js.map +1 -1
- package/dist/esm/src/decorators/Tool.d.ts.map +1 -1
- package/dist/esm/src/decorators/Tool.js +2 -3
- package/dist/esm/src/decorators/Tool.js.map +1 -1
- package/dist/esm/src/testing/graph-tester/core/GraphTester.d.ts +110 -0
- package/dist/esm/src/testing/graph-tester/core/GraphTester.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/GraphTester.js +335 -0
- package/dist/esm/src/testing/graph-tester/core/GraphTester.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.d.ts +120 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.js +184 -0
- package/dist/esm/src/testing/graph-tester/core/TestFunction.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/types.d.ts +331 -0
- package/dist/esm/src/testing/graph-tester/core/types.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/core/types.js +21 -0
- package/dist/esm/src/testing/graph-tester/core/types.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.d.ts +8 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.js +7 -0
- package/dist/esm/src/testing/graph-tester/fixtures/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.d.ts +40 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.js +147 -0
- package/dist/esm/src/testing/graph-tester/fixtures/portPool.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/index.d.ts +84 -0
- package/dist/esm/src/testing/graph-tester/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/index.js +77 -0
- package/dist/esm/src/testing/graph-tester/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.d.ts +40 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.js +193 -0
- package/dist/esm/src/testing/graph-tester/modes/AccessibilityMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.d.ts +42 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.js +131 -0
- package/dist/esm/src/testing/graph-tester/modes/PerformanceMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.d.ts +39 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.js +227 -0
- package/dist/esm/src/testing/graph-tester/modes/SEOMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.d.ts +83 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.js +162 -0
- package/dist/esm/src/testing/graph-tester/modes/VisualRegressionMode.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/index.d.ts +14 -0
- package/dist/esm/src/testing/graph-tester/modes/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/modes/index.js +10 -0
- package/dist/esm/src/testing/graph-tester/modes/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.d.ts +38 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.js +374 -0
- package/dist/esm/src/testing/graph-tester/reporters/HTMLReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.d.ts +50 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.js +90 -0
- package/dist/esm/src/testing/graph-tester/reporters/JSONReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.d.ts +33 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.js +132 -0
- package/dist/esm/src/testing/graph-tester/reporters/MarkdownReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.d.ts +30 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.js +81 -0
- package/dist/esm/src/testing/graph-tester/reporters/UnifiedReporter.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.d.ts +14 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.js +10 -0
- package/dist/esm/src/testing/graph-tester/reporters/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.d.ts +33 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js +43 -0
- package/dist/esm/src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.d.ts +70 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js +547 -0
- package/dist/esm/src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.d.ts +83 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js +339 -0
- package/dist/esm/src/testing/graph-tester/screenshot/ScreenshotAnnotator.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.d.ts +11 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.js +9 -0
- package/dist/esm/src/testing/graph-tester/screenshot/index.js.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.d.ts +331 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.d.ts.map +1 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.js +10 -0
- package/dist/esm/src/testing/graph-tester/screenshot/types.js.map +1 -0
- package/dist/esm/src/testing/selectors.d.ts +1 -1
- package/dist/esm/src/testing/selectors.js +1 -1
- package/package.json +19 -6
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown reporter (stub - to be implemented in Phase 2).
|
|
3
|
+
*
|
|
4
|
+
* Will generate GitHub-friendly markdown reports.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Markdown reporter (stub).
|
|
10
|
+
*/
|
|
11
|
+
export class MarkdownReporter {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.name = 'Markdown Reporter';
|
|
14
|
+
this.config = config;
|
|
15
|
+
}
|
|
16
|
+
async generate(results) {
|
|
17
|
+
const markdown = this.generateMarkdown(results);
|
|
18
|
+
const outputPath = `${this.config.outputDir}/${this.config.filename || 'TEST_RESULTS.md'}`;
|
|
19
|
+
await this.ensureDirectory(this.config.outputDir);
|
|
20
|
+
await this.writeFile(outputPath, markdown);
|
|
21
|
+
console.log(`📝 Markdown report generated: ${outputPath}`);
|
|
22
|
+
}
|
|
23
|
+
generateMarkdown(results) {
|
|
24
|
+
const sections = [];
|
|
25
|
+
// Header
|
|
26
|
+
sections.push('# Graph-Based Testing Report\n');
|
|
27
|
+
sections.push(`> Generated on ${new Date().toLocaleString()}\n`);
|
|
28
|
+
// Summary
|
|
29
|
+
sections.push('## Summary\n');
|
|
30
|
+
sections.push('| Metric | Value |');
|
|
31
|
+
sections.push('|--------|-------|');
|
|
32
|
+
sections.push(`| Routes Tested | ${results.routeCount} |`);
|
|
33
|
+
sections.push(`| Total Tests | ${results.testCount} |`);
|
|
34
|
+
sections.push(`| Passed | ${results.passedCount} ✅ |`);
|
|
35
|
+
sections.push(`| Failed | ${results.failedCount} ❌ |`);
|
|
36
|
+
sections.push(`| Pass Rate | ${results.passRate}% |`);
|
|
37
|
+
sections.push(`| Total Duration | ${(results.totalDuration / 1000).toFixed(2)}s |`);
|
|
38
|
+
sections.push('');
|
|
39
|
+
// Status badge
|
|
40
|
+
const status = results.passRate === 100 ? '✅ All tests passed' : `⚠️ ${results.failedCount} test(s) failed`;
|
|
41
|
+
sections.push(`**Status:** ${status}\n`);
|
|
42
|
+
// Results by mode
|
|
43
|
+
sections.push('## Results by Test Mode\n');
|
|
44
|
+
for (const [mode, modeResults] of results.resultsByMode) {
|
|
45
|
+
const passed = modeResults.filter((r) => r.passed).length;
|
|
46
|
+
const failed = modeResults.filter((r) => !r.passed).length;
|
|
47
|
+
const icon = this.getModeIcon(mode);
|
|
48
|
+
sections.push(`### ${icon} ${mode.toUpperCase()}\n`);
|
|
49
|
+
sections.push(`- **Passed:** ${passed} ✅`);
|
|
50
|
+
sections.push(`- **Failed:** ${failed} ❌`);
|
|
51
|
+
sections.push(`- **Total:** ${modeResults.length}`);
|
|
52
|
+
sections.push('');
|
|
53
|
+
}
|
|
54
|
+
// Results by route
|
|
55
|
+
sections.push('## Test Results by Route\n');
|
|
56
|
+
for (const [route, routeResults] of results.resultsByRoute) {
|
|
57
|
+
sections.push(`### \`${route}\`\n`);
|
|
58
|
+
sections.push('| Mode | Status | Duration | Errors |');
|
|
59
|
+
sections.push('|------|--------|----------|--------|');
|
|
60
|
+
for (const result of routeResults) {
|
|
61
|
+
const status = result.passed ? '✅ PASS' : '❌ FAIL';
|
|
62
|
+
const errors = result.errors.length > 0 ? result.errors.length : '-';
|
|
63
|
+
sections.push(`| ${result.mode} | ${status} | ${result.duration}ms | ${errors} |`);
|
|
64
|
+
}
|
|
65
|
+
// Show errors if any
|
|
66
|
+
const failedResults = routeResults.filter((r) => !r.passed);
|
|
67
|
+
if (failedResults.length > 0) {
|
|
68
|
+
sections.push('\n**Errors:**\n');
|
|
69
|
+
for (const result of failedResults) {
|
|
70
|
+
if (result.errors.length > 0) {
|
|
71
|
+
sections.push(`<details>`);
|
|
72
|
+
sections.push(`<summary><strong>${result.mode}</strong> - ${result.errors.length} error(s)</summary>\n`);
|
|
73
|
+
sections.push('```');
|
|
74
|
+
result.errors.forEach((err) => sections.push(typeof err === 'string' ? err : err.message));
|
|
75
|
+
sections.push('```');
|
|
76
|
+
sections.push('</details>\n');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
sections.push('');
|
|
81
|
+
}
|
|
82
|
+
// Detailed mode breakdown
|
|
83
|
+
sections.push('## Detailed Mode Analysis\n');
|
|
84
|
+
for (const [mode, modeResults] of results.resultsByMode) {
|
|
85
|
+
const icon = this.getModeIcon(mode);
|
|
86
|
+
sections.push(`### ${icon} ${mode.toUpperCase()} Mode\n`);
|
|
87
|
+
const passed = modeResults.filter((r) => r.passed).length;
|
|
88
|
+
const failed = modeResults.filter((r) => !r.passed).length;
|
|
89
|
+
const avgDuration = modeResults.reduce((sum, r) => sum + r.duration, 0) / modeResults.length;
|
|
90
|
+
sections.push(`**Performance:**`);
|
|
91
|
+
sections.push(`- Average Duration: ${avgDuration.toFixed(2)}ms`);
|
|
92
|
+
sections.push(`- Success Rate: ${((passed / modeResults.length) * 100).toFixed(1)}%`);
|
|
93
|
+
sections.push('');
|
|
94
|
+
// Show failed routes for this mode
|
|
95
|
+
const failures = modeResults.filter((r) => !r.passed);
|
|
96
|
+
if (failures.length > 0) {
|
|
97
|
+
sections.push('**Failed Routes:**\n');
|
|
98
|
+
for (const result of failures) {
|
|
99
|
+
sections.push(`- \`${result.route || 'unknown'}\``);
|
|
100
|
+
if (this.config.includeErrorStacks && result.errors.length > 0) {
|
|
101
|
+
sections.push(' ```');
|
|
102
|
+
result.errors.forEach((err) => sections.push(` ${typeof err === 'string' ? err : err.message}`));
|
|
103
|
+
sections.push(' ```');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
sections.push('');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Footer
|
|
110
|
+
sections.push('---\n');
|
|
111
|
+
sections.push('_Generated by Supernal Interface Graph-Based Testing Framework_');
|
|
112
|
+
return sections.join('\n');
|
|
113
|
+
}
|
|
114
|
+
getModeIcon(mode) {
|
|
115
|
+
const icons = {
|
|
116
|
+
visual: '👁️',
|
|
117
|
+
performance: '⚡',
|
|
118
|
+
accessibility: '♿',
|
|
119
|
+
seo: '🔍',
|
|
120
|
+
};
|
|
121
|
+
return icons[mode] || '📊';
|
|
122
|
+
}
|
|
123
|
+
async ensureDirectory(dir) {
|
|
124
|
+
const fs = await import('fs/promises');
|
|
125
|
+
await fs.mkdir(dir, { recursive: true });
|
|
126
|
+
}
|
|
127
|
+
async writeFile(path, content) {
|
|
128
|
+
const fs = await import('fs/promises');
|
|
129
|
+
await fs.writeFile(path, content, 'utf-8');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=MarkdownReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownReporter.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/reporters/MarkdownReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified reporter - orchestrates multiple reporters and correlates results across modes.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import type { AggregatedTestResults, Reporter } from '../core/types';
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for unified reporter.
|
|
9
|
+
*/
|
|
10
|
+
export interface UnifiedReporterConfig {
|
|
11
|
+
/** Output directory */
|
|
12
|
+
outputDir: string;
|
|
13
|
+
/** Report formats to generate */
|
|
14
|
+
formats: ('json' | 'html' | 'markdown' | 'csv')[];
|
|
15
|
+
/** Whether to include detailed logs */
|
|
16
|
+
includeDetailedLogs?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Unified reporter (stub).
|
|
20
|
+
*/
|
|
21
|
+
export declare class UnifiedReporter implements Reporter {
|
|
22
|
+
readonly name = "Unified Reporter";
|
|
23
|
+
private config;
|
|
24
|
+
constructor(config: UnifiedReporterConfig);
|
|
25
|
+
generate(results: AggregatedTestResults): Promise<void>;
|
|
26
|
+
private generateCSV;
|
|
27
|
+
private ensureDirectory;
|
|
28
|
+
private writeFile;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=UnifiedReporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnifiedReporter.d.ts","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/reporters/UnifiedReporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKrE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAElB,iCAAiC;IACjC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC;IAElD,uCAAuC;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,QAAQ,CAAC,IAAI,sBAAsB;IAEnC,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,EAAE,qBAAqB;IAInC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;YAmD/C,WAAW;YAwBX,eAAe;YAKf,SAAS;CAIxB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified reporter - orchestrates multiple reporters and correlates results across modes.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import { JSONReporter } from './JSONReporter.js';
|
|
7
|
+
import { HTMLReporter } from './HTMLReporter.js';
|
|
8
|
+
import { MarkdownReporter } from './MarkdownReporter.js';
|
|
9
|
+
/**
|
|
10
|
+
* Unified reporter (stub).
|
|
11
|
+
*/
|
|
12
|
+
export class UnifiedReporter {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.name = 'Unified Reporter';
|
|
15
|
+
this.config = config;
|
|
16
|
+
}
|
|
17
|
+
async generate(results) {
|
|
18
|
+
console.log(`\n📊 Generating unified reports in ${this.config.formats.length} format(s)...\n`);
|
|
19
|
+
const reporters = [];
|
|
20
|
+
// Create reporters based on requested formats
|
|
21
|
+
if (this.config.formats.includes('json')) {
|
|
22
|
+
reporters.push(new JSONReporter({
|
|
23
|
+
outputDir: this.config.outputDir,
|
|
24
|
+
filename: 'results.json',
|
|
25
|
+
pretty: true,
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
if (this.config.formats.includes('html')) {
|
|
29
|
+
reporters.push(new HTMLReporter({
|
|
30
|
+
outputDir: this.config.outputDir,
|
|
31
|
+
filename: 'index.html',
|
|
32
|
+
includeCharts: true,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
if (this.config.formats.includes('markdown')) {
|
|
36
|
+
reporters.push(new MarkdownReporter({
|
|
37
|
+
outputDir: this.config.outputDir,
|
|
38
|
+
filename: 'TEST_RESULTS.md',
|
|
39
|
+
includeErrorStacks: this.config.includeDetailedLogs,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
if (this.config.formats.includes('csv')) {
|
|
43
|
+
reporters.push({
|
|
44
|
+
name: 'CSV Reporter',
|
|
45
|
+
generate: async (results) => {
|
|
46
|
+
await this.generateCSV(results);
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Generate all reports in parallel
|
|
51
|
+
await Promise.all(reporters.map((reporter) => reporter.generate(results)));
|
|
52
|
+
console.log(`✅ Unified report generation complete\n`);
|
|
53
|
+
}
|
|
54
|
+
async generateCSV(results) {
|
|
55
|
+
const rows = [];
|
|
56
|
+
// CSV header
|
|
57
|
+
rows.push('Route,Mode,Status,Duration (ms),Errors');
|
|
58
|
+
// CSV data
|
|
59
|
+
for (const [route, routeResults] of results.resultsByRoute) {
|
|
60
|
+
for (const result of routeResults) {
|
|
61
|
+
const status = result.passed ? 'PASS' : 'FAIL';
|
|
62
|
+
const errors = result.errors.length > 0 ? `"${result.errors.join('; ')}"` : '';
|
|
63
|
+
rows.push(`"${route}",${result.mode},${status},${result.duration},${errors}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const csv = rows.join('\n');
|
|
67
|
+
const outputPath = `${this.config.outputDir}/results.csv`;
|
|
68
|
+
await this.ensureDirectory(this.config.outputDir);
|
|
69
|
+
await this.writeFile(outputPath, csv);
|
|
70
|
+
console.log(`📊 CSV report generated: ${outputPath}`);
|
|
71
|
+
}
|
|
72
|
+
async ensureDirectory(dir) {
|
|
73
|
+
const fs = await import('fs/promises');
|
|
74
|
+
await fs.mkdir(dir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
async writeFile(path, content) {
|
|
77
|
+
const fs = await import('fs/promises');
|
|
78
|
+
await fs.writeFile(path, content, 'utf-8');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=UnifiedReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnifiedReporter.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/reporters/UnifiedReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporters exports.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export { UnifiedReporter } from './UnifiedReporter';
|
|
7
|
+
export type { UnifiedReporterConfig } from './UnifiedReporter';
|
|
8
|
+
export { JSONReporter } from './JSONReporter';
|
|
9
|
+
export type { JSONReporterConfig } from './JSONReporter';
|
|
10
|
+
export { HTMLReporter } from './HTMLReporter';
|
|
11
|
+
export type { HTMLReporterConfig } from './HTMLReporter';
|
|
12
|
+
export { MarkdownReporter } from './MarkdownReporter';
|
|
13
|
+
export type { MarkdownReporterConfig } from './MarkdownReporter';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/reporters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporters exports.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export { UnifiedReporter } from './UnifiedReporter.js';
|
|
7
|
+
export { JSONReporter } from './JSONReporter.js';
|
|
8
|
+
export { HTMLReporter } from './HTMLReporter.js';
|
|
9
|
+
export { MarkdownReporter } from './MarkdownReporter.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/reporters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas annotation renderer (stub - to be implemented in Phase 3).
|
|
3
|
+
*
|
|
4
|
+
* Will render bounding boxes directly on screenshot canvas.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import type { AnnotatedScreenshot, CanvasRendererConfig, AnnotationRenderResult } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Canvas annotation renderer (stub).
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const renderer = new CanvasAnnotationRenderer({
|
|
15
|
+
* drawLabels: true,
|
|
16
|
+
* outputPath: './screenshots/dashboard-annotated.png'
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* const result = await renderer.render(annotatedScreenshot);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class CanvasAnnotationRenderer {
|
|
23
|
+
private config;
|
|
24
|
+
constructor(config: CanvasRendererConfig);
|
|
25
|
+
/**
|
|
26
|
+
* Render annotated screenshot with canvas overlay.
|
|
27
|
+
*
|
|
28
|
+
* @param screenshot - Annotated screenshot
|
|
29
|
+
* @returns Render result
|
|
30
|
+
*/
|
|
31
|
+
render(screenshot: AnnotatedScreenshot): Promise<AnnotationRenderResult>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=CanvasAnnotationRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasAnnotationRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,oBAAoB;IAUxC;;;;;OAKG;IACG,MAAM,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAK/E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas annotation renderer (stub - to be implemented in Phase 3).
|
|
3
|
+
*
|
|
4
|
+
* Will render bounding boxes directly on screenshot canvas.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Canvas annotation renderer (stub).
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const renderer = new CanvasAnnotationRenderer({
|
|
14
|
+
* drawLabels: true,
|
|
15
|
+
* outputPath: './screenshots/dashboard-annotated.png'
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const result = await renderer.render(annotatedScreenshot);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class CanvasAnnotationRenderer {
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.config = {
|
|
24
|
+
drawLabels: true,
|
|
25
|
+
labelFontSize: 12,
|
|
26
|
+
boundingBoxColor: '#00ff00',
|
|
27
|
+
boundingBoxWidth: 2,
|
|
28
|
+
...config,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Render annotated screenshot with canvas overlay.
|
|
33
|
+
*
|
|
34
|
+
* @param screenshot - Annotated screenshot
|
|
35
|
+
* @returns Render result
|
|
36
|
+
*/
|
|
37
|
+
async render(screenshot) {
|
|
38
|
+
// TODO: Implement in Phase 3
|
|
39
|
+
// Will use canvas/sharp to draw bounding boxes on screenshot
|
|
40
|
+
throw new Error('CanvasAnnotationRenderer not yet implemented (Phase 3)');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=CanvasAnnotationRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CanvasAnnotationRenderer.js","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/screenshot/CanvasAnnotationRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,wBAAwB;IAGnC,YAAY,MAA4B;QACtC,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,EAAE;YACjB,gBAAgB,EAAE,SAAS;YAC3B,gBAAgB,EAAE,CAAC;YACnB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,UAA+B;QAC1C,6BAA6B;QAC7B,6DAA6D;QAC7D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML annotation renderer.
|
|
3
|
+
*
|
|
4
|
+
* Generates interactive HTML overlay with:
|
|
5
|
+
* - Hoverable bounding boxes
|
|
6
|
+
* - Sidebar with annotation details
|
|
7
|
+
* - Click-to-highlight functionality
|
|
8
|
+
* - Search/filter capabilities
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
import type { AnnotatedScreenshot, HTMLRendererConfig, AnnotationRenderResult } from './types';
|
|
13
|
+
/**
|
|
14
|
+
* HTML annotation renderer.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const renderer = new HTMLAnnotationRenderer({
|
|
19
|
+
* includeSidebar: true,
|
|
20
|
+
* enableHover: true,
|
|
21
|
+
* outputPath: './screenshots/dashboard.html'
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* const result = await renderer.render(annotatedScreenshot);
|
|
25
|
+
* console.log(`HTML rendered: ${result.outputPath}`);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare class HTMLAnnotationRenderer {
|
|
29
|
+
private config;
|
|
30
|
+
constructor(config: HTMLRendererConfig);
|
|
31
|
+
/**
|
|
32
|
+
* Render annotated screenshot as interactive HTML.
|
|
33
|
+
*
|
|
34
|
+
* @param screenshot - Annotated screenshot
|
|
35
|
+
* @returns Render result
|
|
36
|
+
*/
|
|
37
|
+
render(screenshot: AnnotatedScreenshot): Promise<AnnotationRenderResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Generate complete HTML document.
|
|
40
|
+
*
|
|
41
|
+
* @param screenshot - Annotated screenshot
|
|
42
|
+
* @returns HTML string
|
|
43
|
+
*/
|
|
44
|
+
private generateHTML;
|
|
45
|
+
/**
|
|
46
|
+
* Get sidebar CSS styles.
|
|
47
|
+
*/
|
|
48
|
+
private getSidebarStyles;
|
|
49
|
+
/**
|
|
50
|
+
* Render annotation bounding boxes.
|
|
51
|
+
*/
|
|
52
|
+
private renderAnnotationBoxes;
|
|
53
|
+
/**
|
|
54
|
+
* Render sidebar with annotation list.
|
|
55
|
+
*/
|
|
56
|
+
private renderSidebar;
|
|
57
|
+
/**
|
|
58
|
+
* Render annotation item for sidebar.
|
|
59
|
+
*/
|
|
60
|
+
private renderAnnotationItem;
|
|
61
|
+
/**
|
|
62
|
+
* Generate JavaScript for interactivity.
|
|
63
|
+
*/
|
|
64
|
+
private generateJavaScript;
|
|
65
|
+
/**
|
|
66
|
+
* Escape HTML entities.
|
|
67
|
+
*/
|
|
68
|
+
private escapeHtml;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=HTMLAnnotationRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HTMLAnnotationRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/testing/graph-tester/screenshot/HTMLAnnotationRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,mBAAmB,EAEnB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;GAcG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,kBAAkB;IAWtC;;;;;OAKG;IACG,MAAM,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAmB9E;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA8GpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+JxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkG1B;;OAEG;IACH,OAAO,CAAC,UAAU;CAUnB"}
|