@vibe-validate/extractors 0.16.1 → 0.17.0-rc.6
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/extractor-registry.d.ts +104 -0
- package/dist/extractor-registry.d.ts.map +1 -0
- package/dist/extractor-registry.js +278 -0
- package/dist/extractor-registry.js.map +1 -0
- package/dist/extractors/ava/index.d.ts +23 -0
- package/dist/extractors/ava/index.d.ts.map +1 -0
- package/dist/extractors/ava/index.js +507 -0
- package/dist/extractors/ava/index.js.map +1 -0
- package/dist/extractors/ava/index.test.d.ts +7 -0
- package/dist/extractors/ava/index.test.d.ts.map +1 -0
- package/dist/extractors/ava/index.test.js +408 -0
- package/dist/extractors/ava/index.test.js.map +1 -0
- package/dist/extractors/eslint/index.d.ts +18 -0
- package/dist/extractors/eslint/index.d.ts.map +1 -0
- package/dist/extractors/eslint/index.js +206 -0
- package/dist/extractors/eslint/index.js.map +1 -0
- package/dist/extractors/eslint/index.test.d.ts +9 -0
- package/dist/extractors/eslint/index.test.d.ts.map +1 -0
- package/dist/extractors/eslint/index.test.js +191 -0
- package/dist/extractors/eslint/index.test.js.map +1 -0
- package/dist/extractors/generic/index.d.ts +30 -0
- package/dist/extractors/generic/index.d.ts.map +1 -0
- package/dist/extractors/generic/index.js +140 -0
- package/dist/extractors/generic/index.js.map +1 -0
- package/dist/extractors/generic/index.test.d.ts +7 -0
- package/dist/extractors/generic/index.test.d.ts.map +1 -0
- package/dist/extractors/generic/index.test.js +61 -0
- package/dist/extractors/generic/index.test.js.map +1 -0
- package/dist/extractors/jasmine/index.d.ts +17 -0
- package/dist/extractors/jasmine/index.d.ts.map +1 -0
- package/dist/extractors/jasmine/index.js +242 -0
- package/dist/extractors/jasmine/index.js.map +1 -0
- package/dist/extractors/jasmine/index.test.d.ts +7 -0
- package/dist/extractors/jasmine/index.test.d.ts.map +1 -0
- package/dist/extractors/jasmine/index.test.js +318 -0
- package/dist/extractors/jasmine/index.test.js.map +1 -0
- package/dist/extractors/jest/index.d.ts +17 -0
- package/dist/extractors/jest/index.d.ts.map +1 -0
- package/dist/extractors/jest/index.js +273 -0
- package/dist/extractors/jest/index.js.map +1 -0
- package/dist/extractors/jest/index.test.d.ts +9 -0
- package/dist/extractors/jest/index.test.d.ts.map +1 -0
- package/dist/extractors/jest/index.test.js +338 -0
- package/dist/extractors/jest/index.test.js.map +1 -0
- package/dist/extractors/junit/index.d.ts +18 -0
- package/dist/extractors/junit/index.d.ts.map +1 -0
- package/dist/extractors/junit/index.js +259 -0
- package/dist/extractors/junit/index.js.map +1 -0
- package/dist/extractors/junit/index.test.d.ts +7 -0
- package/dist/extractors/junit/index.test.d.ts.map +1 -0
- package/dist/extractors/junit/index.test.js +341 -0
- package/dist/extractors/junit/index.test.js.map +1 -0
- package/dist/extractors/maven-checkstyle/index.d.ts +23 -0
- package/dist/extractors/maven-checkstyle/index.d.ts.map +1 -0
- package/dist/extractors/maven-checkstyle/index.js +263 -0
- package/dist/extractors/maven-checkstyle/index.js.map +1 -0
- package/dist/extractors/maven-checkstyle/index.test.d.ts +2 -0
- package/dist/extractors/maven-checkstyle/index.test.d.ts.map +1 -0
- package/dist/extractors/maven-checkstyle/index.test.js +197 -0
- package/dist/extractors/maven-checkstyle/index.test.js.map +1 -0
- package/dist/extractors/maven-compiler/index.d.ts +23 -0
- package/dist/extractors/maven-compiler/index.d.ts.map +1 -0
- package/dist/extractors/maven-compiler/index.js +271 -0
- package/dist/extractors/maven-compiler/index.js.map +1 -0
- package/dist/extractors/maven-compiler/index.test.d.ts +2 -0
- package/dist/extractors/maven-compiler/index.test.d.ts.map +1 -0
- package/dist/extractors/maven-compiler/index.test.js +189 -0
- package/dist/extractors/maven-compiler/index.test.js.map +1 -0
- package/dist/extractors/maven-surefire/index.d.ts +23 -0
- package/dist/extractors/maven-surefire/index.d.ts.map +1 -0
- package/dist/extractors/maven-surefire/index.js +292 -0
- package/dist/extractors/maven-surefire/index.js.map +1 -0
- package/dist/extractors/maven-surefire/index.test.d.ts +2 -0
- package/dist/extractors/maven-surefire/index.test.d.ts.map +1 -0
- package/dist/extractors/maven-surefire/index.test.js +163 -0
- package/dist/extractors/maven-surefire/index.test.js.map +1 -0
- package/dist/extractors/mocha/index.d.ts +17 -0
- package/dist/extractors/mocha/index.d.ts.map +1 -0
- package/dist/extractors/mocha/index.js +241 -0
- package/dist/extractors/mocha/index.js.map +1 -0
- package/dist/extractors/mocha/index.test.d.ts +7 -0
- package/dist/extractors/mocha/index.test.d.ts.map +1 -0
- package/dist/extractors/mocha/index.test.js +300 -0
- package/dist/extractors/mocha/index.test.js.map +1 -0
- package/dist/extractors/playwright/index.d.ts +17 -0
- package/dist/extractors/playwright/index.d.ts.map +1 -0
- package/dist/extractors/playwright/index.js +320 -0
- package/dist/extractors/playwright/index.js.map +1 -0
- package/dist/extractors/playwright/index.test.d.ts +7 -0
- package/dist/extractors/playwright/index.test.d.ts.map +1 -0
- package/dist/extractors/playwright/index.test.js +274 -0
- package/dist/extractors/playwright/index.test.js.map +1 -0
- package/dist/extractors/tap/index.d.ts +23 -0
- package/dist/extractors/tap/index.d.ts.map +1 -0
- package/dist/extractors/tap/index.js +352 -0
- package/dist/extractors/tap/index.js.map +1 -0
- package/dist/extractors/tap/index.test.d.ts +7 -0
- package/dist/extractors/tap/index.test.d.ts.map +1 -0
- package/dist/extractors/tap/index.test.js +100 -0
- package/dist/extractors/tap/index.test.js.map +1 -0
- package/dist/extractors/typescript/index.d.ts +17 -0
- package/dist/extractors/typescript/index.d.ts.map +1 -0
- package/dist/extractors/typescript/index.js +150 -0
- package/dist/extractors/typescript/index.js.map +1 -0
- package/dist/extractors/typescript/index.test.d.ts +9 -0
- package/dist/extractors/typescript/index.test.d.ts.map +1 -0
- package/dist/extractors/typescript/index.test.js +177 -0
- package/dist/extractors/typescript/index.test.js.map +1 -0
- package/dist/extractors/vitest/index.d.ts +17 -0
- package/dist/extractors/vitest/index.d.ts.map +1 -0
- package/dist/extractors/vitest/index.js +564 -0
- package/dist/extractors/vitest/index.js.map +1 -0
- package/dist/extractors/vitest/index.test.d.ts +9 -0
- package/dist/extractors/vitest/index.test.d.ts.map +1 -0
- package/dist/extractors/vitest/index.test.js +373 -0
- package/dist/extractors/vitest/index.test.js.map +1 -0
- package/dist/index.d.ts +27 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -11
- package/dist/index.js.map +1 -1
- package/dist/maven-checkstyle-extractor.d.ts +20 -0
- package/dist/maven-checkstyle-extractor.d.ts.map +1 -0
- package/dist/maven-checkstyle-extractor.js +208 -0
- package/dist/maven-checkstyle-extractor.js.map +1 -0
- package/dist/maven-compiler-extractor.d.ts +20 -0
- package/dist/maven-compiler-extractor.d.ts.map +1 -0
- package/dist/maven-compiler-extractor.js +218 -0
- package/dist/maven-compiler-extractor.js.map +1 -0
- package/dist/maven-surefire-extractor.d.ts +20 -0
- package/dist/maven-surefire-extractor.d.ts.map +1 -0
- package/dist/maven-surefire-extractor.js +228 -0
- package/dist/maven-surefire-extractor.js.map +1 -0
- package/dist/maven-utils.d.ts +24 -0
- package/dist/maven-utils.d.ts.map +1 -0
- package/dist/maven-utils.js +36 -0
- package/dist/maven-utils.js.map +1 -0
- package/dist/plugin-loader.d.ts +82 -0
- package/dist/plugin-loader.d.ts.map +1 -0
- package/dist/plugin-loader.js +200 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/sandbox.d.ts +161 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +254 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/sandbox.test.d.ts +8 -0
- package/dist/sandbox.test.d.ts.map +1 -0
- package/dist/sandbox.test.js +395 -0
- package/dist/sandbox.test.js.map +1 -0
- package/dist/sandboxed-extractor.d.ts +46 -0
- package/dist/sandboxed-extractor.d.ts.map +1 -0
- package/dist/sandboxed-extractor.js +172 -0
- package/dist/sandboxed-extractor.js.map +1 -0
- package/dist/sandboxed-extractor.test.d.ts +5 -0
- package/dist/sandboxed-extractor.test.d.ts.map +1 -0
- package/dist/sandboxed-extractor.test.js +346 -0
- package/dist/sandboxed-extractor.test.js.map +1 -0
- package/dist/smart-extractor.d.ts +22 -10
- package/dist/smart-extractor.d.ts.map +1 -1
- package/dist/smart-extractor.js +116 -163
- package/dist/smart-extractor.js.map +1 -1
- package/dist/types.d.ts +94 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maven Surefire/Failsafe Test Extractor Plugin
|
|
3
|
+
*
|
|
4
|
+
* Extracts test failures from Maven Surefire and Failsafe plugin output.
|
|
5
|
+
* Supports JUnit 4, JUnit 5, and AssertJ assertion failures.
|
|
6
|
+
*
|
|
7
|
+
* @package @vibe-validate/extractors
|
|
8
|
+
*/
|
|
9
|
+
import { MAX_ERRORS_IN_ARRAY } from '../../result-schema.js';
|
|
10
|
+
/* eslint-disable sonarjs/slow-regex -- All regexes safe: Maven Surefire output is structured with limited line length */
|
|
11
|
+
const SUREFIRE_PATTERNS = {
|
|
12
|
+
// [ERROR] Tests run: 12, Failures: 8, Errors: 3, Skipped: 1
|
|
13
|
+
testSummary: /^\[ERROR\]\s+Tests run:\s+(\d+),\s+Failures:\s+(\d+),\s+Errors:\s+(\d+)/,
|
|
14
|
+
// [ERROR] com.example.FooTest.testBar:42 Expected 5 but was 3
|
|
15
|
+
errorShort: /^\[ERROR\]\s+([^:]+)\.([^:]+):(\d+)\s+(\w+(?:Error|Exception|Failure))?\s*(.+)$/,
|
|
16
|
+
// [ERROR] com.example.FooTest.testBar -- Time elapsed: 0.123 s <<< FAILURE!
|
|
17
|
+
errorHeader: /^\[ERROR\]\s+([^.]+)\.([^\s]+)\s+.*<<<\s+(FAILURE|ERROR)!/,
|
|
18
|
+
// Exception type line
|
|
19
|
+
exceptionType: /^([\w.]+(?:Error|Exception|AssertionError|AssertionFailedError)):\s*(.*)$/,
|
|
20
|
+
// "at package.Class.method(File.java:123)"
|
|
21
|
+
stackTraceLine: /^\s+at\s+([^(]+)\(([^:]+):(\d+)\)/,
|
|
22
|
+
};
|
|
23
|
+
/* eslint-enable sonarjs/slow-regex */
|
|
24
|
+
/**
|
|
25
|
+
* Detects if output is from Maven Surefire/Failsafe
|
|
26
|
+
*/
|
|
27
|
+
export function detectMavenSurefire(output) {
|
|
28
|
+
const lines = output.split('\n');
|
|
29
|
+
let score = 0;
|
|
30
|
+
const foundPatterns = [];
|
|
31
|
+
for (const line of lines) {
|
|
32
|
+
if (line.includes('maven-surefire-plugin') || line.includes('maven-failsafe-plugin')) {
|
|
33
|
+
score += 40;
|
|
34
|
+
foundPatterns.push('Maven test plugin reference');
|
|
35
|
+
}
|
|
36
|
+
if (SUREFIRE_PATTERNS.testSummary.exec(line)) {
|
|
37
|
+
score += 40;
|
|
38
|
+
foundPatterns.push('Test summary (Tests run, Failures, Errors)');
|
|
39
|
+
}
|
|
40
|
+
if (line.includes('<<< FAILURE!') || line.includes('<<< ERROR!')) {
|
|
41
|
+
score += 20;
|
|
42
|
+
foundPatterns.push('Test failure markers');
|
|
43
|
+
}
|
|
44
|
+
if (line.includes('[ERROR] Failures:') || line.includes('[ERROR] Errors:')) {
|
|
45
|
+
score += 15;
|
|
46
|
+
foundPatterns.push('Test failure section headers');
|
|
47
|
+
}
|
|
48
|
+
if (/AssertionError|AssertionFailedError/.exec(line)) {
|
|
49
|
+
score += 10;
|
|
50
|
+
foundPatterns.push('JUnit assertion errors');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Determine reason based on score
|
|
54
|
+
let reason;
|
|
55
|
+
if (score >= 70) {
|
|
56
|
+
reason = 'Maven Surefire/Failsafe test output detected';
|
|
57
|
+
}
|
|
58
|
+
else if (score >= 40) {
|
|
59
|
+
reason = 'Possible Maven test output';
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
reason = 'Not Maven test output';
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
confidence: Math.min(score, 100),
|
|
66
|
+
patterns: foundPatterns,
|
|
67
|
+
reason,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Extracts test failures from Maven Surefire/Failsafe output
|
|
72
|
+
*/
|
|
73
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity -- Complexity 43 acceptable for Maven Surefire parser (handles multiple test output formats with state machine)
|
|
74
|
+
export function extractMavenSurefire(output, command) {
|
|
75
|
+
const detection = detectMavenSurefire(output);
|
|
76
|
+
if (detection.confidence < 40) {
|
|
77
|
+
return {
|
|
78
|
+
summary: 'Not Maven test output',
|
|
79
|
+
totalErrors: 0,
|
|
80
|
+
errors: [],
|
|
81
|
+
metadata: {
|
|
82
|
+
detection: {
|
|
83
|
+
extractor: 'maven-surefire',
|
|
84
|
+
confidence: detection.confidence,
|
|
85
|
+
patterns: detection.patterns,
|
|
86
|
+
reason: detection.reason,
|
|
87
|
+
},
|
|
88
|
+
confidence: detection.confidence,
|
|
89
|
+
completeness: 100,
|
|
90
|
+
issues: [],
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const failures = [];
|
|
95
|
+
const lines = output.split('\n');
|
|
96
|
+
// Extract test summary for metadata
|
|
97
|
+
let totalFailures = 0;
|
|
98
|
+
let totalErrors = 0;
|
|
99
|
+
for (const line of lines) {
|
|
100
|
+
const summaryMatch = SUREFIRE_PATTERNS.testSummary.exec(line);
|
|
101
|
+
if (summaryMatch) {
|
|
102
|
+
// totalTests would be summaryMatch[1] if needed
|
|
103
|
+
totalFailures = Number.parseInt(summaryMatch[2], 10);
|
|
104
|
+
totalErrors = Number.parseInt(summaryMatch[3], 10);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Parse failure details
|
|
108
|
+
let currentFailure = null;
|
|
109
|
+
let inStackTrace = false;
|
|
110
|
+
for (const line of lines) {
|
|
111
|
+
// Check for error header: [ERROR] Class.method -- Time elapsed: ... <<< FAILURE!
|
|
112
|
+
const headerMatch = SUREFIRE_PATTERNS.errorHeader.exec(line);
|
|
113
|
+
if (headerMatch) {
|
|
114
|
+
// Save previous failure if exists
|
|
115
|
+
if (currentFailure?.testClass && currentFailure?.testMethod) {
|
|
116
|
+
failures.push(currentFailure);
|
|
117
|
+
}
|
|
118
|
+
const [, testClass, testMethod, errorType] = headerMatch;
|
|
119
|
+
currentFailure = {
|
|
120
|
+
testClass: testClass.trim(),
|
|
121
|
+
testMethod: testMethod.trim(),
|
|
122
|
+
errorType: errorType,
|
|
123
|
+
message: '',
|
|
124
|
+
stackTrace: [],
|
|
125
|
+
};
|
|
126
|
+
inStackTrace = false;
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// Check for short error format: [ERROR] Class.method:line Message
|
|
130
|
+
const shortMatch = SUREFIRE_PATTERNS.errorShort.exec(line);
|
|
131
|
+
if (shortMatch && !currentFailure) {
|
|
132
|
+
const [, fullMethod, testMethod, lineStr, exceptionType, message] = shortMatch;
|
|
133
|
+
const testClass = fullMethod.substring(0, fullMethod.lastIndexOf('.'));
|
|
134
|
+
failures.push({
|
|
135
|
+
testClass,
|
|
136
|
+
testMethod,
|
|
137
|
+
line: Number.parseInt(lineStr, 10),
|
|
138
|
+
errorType: 'FAILURE',
|
|
139
|
+
exceptionType: exceptionType ?? undefined,
|
|
140
|
+
message: message.trim(),
|
|
141
|
+
});
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// Parse exception type and message
|
|
145
|
+
if (currentFailure && !currentFailure.message) {
|
|
146
|
+
const exceptionMatch = SUREFIRE_PATTERNS.exceptionType.exec(line);
|
|
147
|
+
if (exceptionMatch) {
|
|
148
|
+
const [, exceptionType, message] = exceptionMatch;
|
|
149
|
+
currentFailure.exceptionType = exceptionType;
|
|
150
|
+
currentFailure.message = message.trim();
|
|
151
|
+
inStackTrace = true;
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Parse stack trace
|
|
156
|
+
if (currentFailure && inStackTrace) {
|
|
157
|
+
const stackMatch = SUREFIRE_PATTERNS.stackTraceLine.exec(line);
|
|
158
|
+
if (stackMatch) {
|
|
159
|
+
const [, method, file, lineStr] = stackMatch;
|
|
160
|
+
// Extract file and line from first stack frame
|
|
161
|
+
if (!currentFailure.file && file.endsWith('.java')) {
|
|
162
|
+
currentFailure.file = file;
|
|
163
|
+
currentFailure.line = Number.parseInt(lineStr, 10);
|
|
164
|
+
}
|
|
165
|
+
currentFailure.stackTrace = currentFailure.stackTrace ?? [];
|
|
166
|
+
currentFailure.stackTrace.push(` at ${method}(${file}:${lineStr})`);
|
|
167
|
+
// Limit stack trace depth
|
|
168
|
+
if (currentFailure.stackTrace.length >= 3) {
|
|
169
|
+
inStackTrace = false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// End of error block
|
|
174
|
+
if (line.trim() === '' && currentFailure) {
|
|
175
|
+
inStackTrace = false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Save last failure
|
|
179
|
+
if (currentFailure?.testClass && currentFailure?.testMethod) {
|
|
180
|
+
failures.push(currentFailure);
|
|
181
|
+
}
|
|
182
|
+
// Convert to FormattedError format
|
|
183
|
+
const errors = failures.slice(0, MAX_ERRORS_IN_ARRAY).map((f) => {
|
|
184
|
+
const testId = `${f.testClass}.${f.testMethod}`;
|
|
185
|
+
let message = f.message ?? 'Test failed';
|
|
186
|
+
// Include exception type if available
|
|
187
|
+
if (f.exceptionType && !message.includes(f.exceptionType)) {
|
|
188
|
+
message = `${f.exceptionType}: ${message}`;
|
|
189
|
+
}
|
|
190
|
+
// Add stack trace preview (first line only)
|
|
191
|
+
if (f.stackTrace && f.stackTrace.length > 0) {
|
|
192
|
+
message += `\n${f.stackTrace[0]}`;
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
file: f.file ?? `${f.testClass.replaceAll('.', '/')}.java`,
|
|
196
|
+
line: f.line,
|
|
197
|
+
message: `Test: ${testId}\n${message}`,
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
const failureCount = totalFailures ?? failures.filter((f) => f.errorType === 'FAILURE').length;
|
|
201
|
+
const errorCount = totalErrors ?? failures.filter((f) => f.errorType === 'ERROR').length;
|
|
202
|
+
const summary = `${failureCount + errorCount} test failure(s): ${failureCount} failures, ${errorCount} errors`;
|
|
203
|
+
// Generate guidance
|
|
204
|
+
const guidance = failures.length > 0
|
|
205
|
+
? `Fix test failures. Run ${command ?? 'mvn test'} to see full details.`
|
|
206
|
+
: undefined;
|
|
207
|
+
// Create error summary
|
|
208
|
+
const errorSummary = errors.length > 0
|
|
209
|
+
? errors.map((e, i) => `[Test ${i + 1}/${errors.length}] ${e.file}:${e.line ?? '?'}\n${e.message}`).join('\n\n')
|
|
210
|
+
: undefined;
|
|
211
|
+
return {
|
|
212
|
+
summary,
|
|
213
|
+
totalErrors: failures.length,
|
|
214
|
+
errors,
|
|
215
|
+
guidance,
|
|
216
|
+
errorSummary,
|
|
217
|
+
metadata: {
|
|
218
|
+
detection: {
|
|
219
|
+
extractor: 'maven-surefire',
|
|
220
|
+
confidence: detection.confidence,
|
|
221
|
+
patterns: detection.patterns,
|
|
222
|
+
reason: detection.reason,
|
|
223
|
+
},
|
|
224
|
+
confidence: 95,
|
|
225
|
+
completeness: 90,
|
|
226
|
+
issues: failures.length > 20 ? ['Many test failures - output may be truncated'] : [],
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Maven Surefire/Failsafe Extractor Plugin
|
|
232
|
+
*/
|
|
233
|
+
const mavenSurefireExtractor = {
|
|
234
|
+
metadata: {
|
|
235
|
+
name: 'maven-surefire',
|
|
236
|
+
version: '1.0.0',
|
|
237
|
+
author: 'Jeff Dutton <jeff@duckcreek.com>',
|
|
238
|
+
description: 'Extracts test failures from Maven Surefire and Failsafe plugin output',
|
|
239
|
+
repository: 'https://github.com/jdutton/vibe-validate',
|
|
240
|
+
tags: ['maven', 'java', 'junit', 'testing', 'surefire', 'failsafe'],
|
|
241
|
+
},
|
|
242
|
+
hints: {
|
|
243
|
+
required: ['[ERROR]', 'Tests run:'],
|
|
244
|
+
anyOf: ['FAILURE!', 'ERROR!', 'maven-surefire-plugin', 'maven-failsafe-plugin'],
|
|
245
|
+
},
|
|
246
|
+
priority: 65,
|
|
247
|
+
detect: detectMavenSurefire,
|
|
248
|
+
extract: extractMavenSurefire,
|
|
249
|
+
samples: [
|
|
250
|
+
{
|
|
251
|
+
name: 'basic-assertion-failure',
|
|
252
|
+
description: 'Simple JUnit assertion failure',
|
|
253
|
+
input: `[ERROR] Tests run: 1, Failures: 1, Errors: 0
|
|
254
|
+
[ERROR] com.example.FooTest.testBar -- Time elapsed: 0.123 s <<< FAILURE!
|
|
255
|
+
java.lang.AssertionError: Expected 5 but was 3
|
|
256
|
+
\tat com.example.FooTest.testBar(FooTest.java:42)
|
|
257
|
+
\tat java.base/java.lang.reflect.Method.invoke(Method.java:565)`,
|
|
258
|
+
expected: {
|
|
259
|
+
totalErrors: 1,
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: 'null-pointer-exception',
|
|
264
|
+
description: 'NullPointerException during test',
|
|
265
|
+
input: `[ERROR] Tests run: 1, Failures: 0, Errors: 1
|
|
266
|
+
[ERROR] com.example.FooTest.testNull -- Time elapsed: 0.01 s <<< ERROR!
|
|
267
|
+
java.lang.NullPointerException: Cannot invoke "String.length()" because "value" is null
|
|
268
|
+
\tat com.example.FooTest.testNull(FooTest.java:77)`,
|
|
269
|
+
expected: {
|
|
270
|
+
totalErrors: 1,
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: 'assertj-failure',
|
|
275
|
+
description: 'AssertJ assertion with multi-line message',
|
|
276
|
+
input: `[ERROR] Tests run: 1, Failures: 1, Errors: 0
|
|
277
|
+
[ERROR] com.example.Test.testAssertJ -- <<< FAILURE!
|
|
278
|
+
java.lang.AssertionError:
|
|
279
|
+
|
|
280
|
+
Expecting actual:
|
|
281
|
+
"Hello World"
|
|
282
|
+
to contain:
|
|
283
|
+
"Goodbye"
|
|
284
|
+
\tat com.example.Test.testAssertJ(Test.java:25)`,
|
|
285
|
+
expected: {
|
|
286
|
+
totalErrors: 1,
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
],
|
|
290
|
+
};
|
|
291
|
+
export default mavenSurefireExtractor;
|
|
292
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extractors/maven-surefire/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/extractors/maven-surefire/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import mavenSurefireExtractor from './index.js';
|
|
3
|
+
describe('Maven Surefire Extractor Plugin', () => {
|
|
4
|
+
describe('metadata', () => {
|
|
5
|
+
it('should have correct plugin metadata', () => {
|
|
6
|
+
expect(mavenSurefireExtractor.metadata.name).toBe('maven-surefire');
|
|
7
|
+
expect(mavenSurefireExtractor.metadata.version).toBe('1.0.0');
|
|
8
|
+
expect(mavenSurefireExtractor.metadata.tags).toContain('maven');
|
|
9
|
+
expect(mavenSurefireExtractor.metadata.tags).toContain('junit');
|
|
10
|
+
});
|
|
11
|
+
it('should have hints for fast filtering', () => {
|
|
12
|
+
expect(mavenSurefireExtractor.hints).toBeDefined();
|
|
13
|
+
expect(mavenSurefireExtractor.hints?.required).toContain('[ERROR]');
|
|
14
|
+
expect(mavenSurefireExtractor.hints?.required).toContain('Tests run:');
|
|
15
|
+
expect(mavenSurefireExtractor.hints?.anyOf).toBeDefined();
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe('detect', () => {
|
|
19
|
+
it('should detect Maven Surefire output with high confidence', () => {
|
|
20
|
+
const output = `[INFO] Running tests...
|
|
21
|
+
[ERROR] Tests run: 10, Failures: 3, Errors: 1, Skipped: 0
|
|
22
|
+
[ERROR] com.example.FooTest.testBar -- Time elapsed: 0.123 s <<< FAILURE!
|
|
23
|
+
java.lang.AssertionError: Expected 5 but was 3`;
|
|
24
|
+
const result = mavenSurefireExtractor.detect(output);
|
|
25
|
+
expect(result.confidence).toBeGreaterThanOrEqual(70);
|
|
26
|
+
expect(result.patterns).toContain('Test summary (Tests run, Failures, Errors)');
|
|
27
|
+
expect(result.patterns).toContain('Test failure markers');
|
|
28
|
+
expect(result.reason).toContain('Maven Surefire');
|
|
29
|
+
});
|
|
30
|
+
it('should detect JUnit assertion errors', () => {
|
|
31
|
+
const output = `[ERROR] Tests run: 5, Failures: 2, Errors: 0
|
|
32
|
+
[ERROR] testFoo -- Time elapsed: 0.1 s <<< FAILURE!
|
|
33
|
+
org.opentest4j.AssertionFailedError: expected: "foo" but was: "bar"`;
|
|
34
|
+
const result = mavenSurefireExtractor.detect(output);
|
|
35
|
+
expect(result.confidence).toBeGreaterThanOrEqual(70);
|
|
36
|
+
expect(result.patterns).toContain('JUnit assertion errors');
|
|
37
|
+
});
|
|
38
|
+
it('should have low confidence for non-Surefire output', () => {
|
|
39
|
+
const output = `Some random output
|
|
40
|
+
No test markers here`;
|
|
41
|
+
const result = mavenSurefireExtractor.detect(output);
|
|
42
|
+
expect(result.confidence).toBeLessThan(40);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('extract', () => {
|
|
46
|
+
it('should extract test summary', () => {
|
|
47
|
+
const output = `[ERROR] Tests run: 10, Failures: 3, Errors: 1, Skipped: 1`;
|
|
48
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
49
|
+
expect(result.summary).toContain('3 failures, 1 errors');
|
|
50
|
+
});
|
|
51
|
+
it('should extract test failures with stack traces', () => {
|
|
52
|
+
const output = `[ERROR] Tests run: 1, Failures: 1, Errors: 0
|
|
53
|
+
[ERROR] com.example.FooTest.testBar -- Time elapsed: 0.123 s <<< FAILURE!
|
|
54
|
+
java.lang.AssertionError: Expected 5 but was 3
|
|
55
|
+
\tat com.example.FooTest.testBar(FooTest.java:42)
|
|
56
|
+
\tat java.base/java.lang.reflect.Method.invoke(Method.java:565)`;
|
|
57
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
58
|
+
expect(result.totalErrors).toBeGreaterThan(0);
|
|
59
|
+
if (result.errors.length > 0) {
|
|
60
|
+
expect(result.errors[0].file).toContain('FooTest.java');
|
|
61
|
+
expect(result.errors[0].message).toContain('testBar');
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
it('should extract NullPointerException errors', () => {
|
|
65
|
+
const output = `[ERROR] Tests run: 1, Failures: 0, Errors: 1
|
|
66
|
+
[ERROR] com.example.FooTest.testNull -- Time elapsed: 0.01 s <<< ERROR!
|
|
67
|
+
java.lang.NullPointerException: Cannot invoke "String.length()" because "value" is null
|
|
68
|
+
\tat com.example.FooTest.testNull(FooTest.java:77)`;
|
|
69
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
70
|
+
expect(result.totalErrors).toBeGreaterThan(0);
|
|
71
|
+
if (result.errors.length > 0) {
|
|
72
|
+
expect(result.errors[0].message).toContain('NullPointerException');
|
|
73
|
+
expect(result.errors[0].line).toBe(77);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
it('should limit errors to MAX_ERRORS_IN_ARRAY', () => {
|
|
77
|
+
// Create 15 test failures
|
|
78
|
+
const failures = Array.from({ length: 15 }, (_, i) => `[ERROR] com.example.Test.test${i} -- Time elapsed: 0.1 s <<< FAILURE!\njava.lang.AssertionError: Test ${i} failed`).join('\n\n');
|
|
79
|
+
const output = `[ERROR] Tests run: 15, Failures: 15, Errors: 0\n${failures}`;
|
|
80
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
81
|
+
expect(result.totalErrors).toBe(15); // All counted
|
|
82
|
+
expect(result.errors.length).toBeLessThanOrEqual(10); // Array limited
|
|
83
|
+
});
|
|
84
|
+
it('should provide guidance', () => {
|
|
85
|
+
const output = `[ERROR] Tests run: 5, Failures: 2, Errors: 0
|
|
86
|
+
[ERROR] com.example.Test.testFoo -- <<< FAILURE!`;
|
|
87
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
88
|
+
expect(result.guidance).toContain('Fix test failures');
|
|
89
|
+
expect(result.guidance).toContain('mvn test');
|
|
90
|
+
});
|
|
91
|
+
it('should extract exception types correctly', () => {
|
|
92
|
+
const output = `[ERROR] Tests run: 1, Failures: 0, Errors: 1
|
|
93
|
+
[ERROR] com.example.Test.testException -- <<< ERROR!
|
|
94
|
+
java.lang.IllegalArgumentException: Invalid format: expected 'XXX' but got 'invalid'
|
|
95
|
+
\tat com.example.Test.testException(Test.java:50)`;
|
|
96
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
97
|
+
expect(result.totalErrors).toBeGreaterThan(0);
|
|
98
|
+
if (result.errors.length > 0) {
|
|
99
|
+
expect(result.errors[0].message).toContain('IllegalArgumentException');
|
|
100
|
+
expect(result.errors[0].message).toContain('Invalid format');
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
it('should handle AssertJ assertion errors', () => {
|
|
104
|
+
const output = `[ERROR] Tests run: 1, Failures: 1, Errors: 0
|
|
105
|
+
[ERROR] com.example.Test.testAssertJ -- <<< FAILURE!
|
|
106
|
+
java.lang.AssertionError:
|
|
107
|
+
|
|
108
|
+
Expecting actual:
|
|
109
|
+
"Hello World"
|
|
110
|
+
to contain:
|
|
111
|
+
"Goodbye"
|
|
112
|
+
\tat com.example.Test.testAssertJ(Test.java:25)`;
|
|
113
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
114
|
+
expect(result.totalErrors).toBeGreaterThan(0);
|
|
115
|
+
if (result.errors.length > 0) {
|
|
116
|
+
expect(result.errors[0].message).toContain('AssertionError');
|
|
117
|
+
// Line number extraction is best-effort from stack traces
|
|
118
|
+
if (result.errors[0].line) {
|
|
119
|
+
expect(result.errors[0].line).toBe(25);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
it('should return low confidence for non-test output', () => {
|
|
124
|
+
const output = `[INFO] Building project...
|
|
125
|
+
[INFO] Success!`;
|
|
126
|
+
const result = mavenSurefireExtractor.extract(output);
|
|
127
|
+
expect(result.totalErrors).toBe(0);
|
|
128
|
+
expect(result.summary).toContain('Not Maven test output');
|
|
129
|
+
expect(result.metadata?.detection?.confidence).toBeLessThan(40);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe('samples', () => {
|
|
133
|
+
it('should have test samples', () => {
|
|
134
|
+
expect(mavenSurefireExtractor.samples).toBeDefined();
|
|
135
|
+
expect(mavenSurefireExtractor.samples.length).toBeGreaterThan(0);
|
|
136
|
+
});
|
|
137
|
+
it('should validate basic-assertion-failure sample', () => {
|
|
138
|
+
const sample = mavenSurefireExtractor.samples?.find((s) => s.name === 'basic-assertion-failure');
|
|
139
|
+
expect(sample).toBeDefined();
|
|
140
|
+
if (sample && 'input' in sample && sample.input) {
|
|
141
|
+
const result = mavenSurefireExtractor.extract(sample.input);
|
|
142
|
+
expect(result.totalErrors).toBe(sample.expected.totalErrors);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
it('should validate null-pointer-exception sample', () => {
|
|
146
|
+
const sample = mavenSurefireExtractor.samples?.find((s) => s.name === 'null-pointer-exception');
|
|
147
|
+
expect(sample).toBeDefined();
|
|
148
|
+
if (sample && 'input' in sample && sample.input) {
|
|
149
|
+
const result = mavenSurefireExtractor.extract(sample.input);
|
|
150
|
+
expect(result.totalErrors).toBe(sample.expected.totalErrors);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
it('should validate assertj-failure sample', () => {
|
|
154
|
+
const sample = mavenSurefireExtractor.samples?.find((s) => s.name === 'assertj-failure');
|
|
155
|
+
expect(sample).toBeDefined();
|
|
156
|
+
if (sample && 'input' in sample && sample.input) {
|
|
157
|
+
const result = mavenSurefireExtractor.extract(sample.input);
|
|
158
|
+
expect(result.totalErrors).toBe(sample.expected.totalErrors);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/extractors/maven-surefire/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,sBAAsB,MAAM,YAAY,CAAC;AAEhD,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpE,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,CAAC,sBAAsB,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,sBAAsB,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACvE,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,MAAM,GAAG;;;+CAG0B,CAAC;YAE1C,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAG;;oEAE+C,CAAC;YAE/D,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,MAAM,GAAG;qBACA,CAAC;YAEhB,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAErD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,2DAA2D,CAAC;YAE3E,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,MAAM,GAAG;;;;gEAI2C,CAAC;YAE3D,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;gBACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG;;;mDAG8B,CAAC;YAE9C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;gBACnE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnD,gCAAgC,CAAC,wEAAwE,CAAC,SAAS,CACpH,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEf,MAAM,MAAM,GAAG,mDAAmD,QAAQ,EAAE,CAAC;YAC7E,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;YACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,MAAM,GAAG;iDAC4B,CAAC;YAE5C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG;;;kDAG6B,CAAC;YAE7C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;gBACvE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG;;;;;;;;gDAQ2B,CAAC;YAE3C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBAC7D,0DAA0D;gBAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,MAAM,GAAG;gBACL,CAAC;YAEX,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,yBAAyB,CAC5C,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,WAAW,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,wBAAwB,CAC3C,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,WAAW,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;YACzF,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAS,CAAC,WAAW,CAAC,CAAC;YAChE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mocha Error Extractor Plugin
|
|
3
|
+
*
|
|
4
|
+
* Parses and formats Mocha test output for LLM consumption.
|
|
5
|
+
*
|
|
6
|
+
* @package @vibe-validate/extractors
|
|
7
|
+
*/
|
|
8
|
+
import type { ExtractorPlugin } from '../../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Mocha Error Extractor Plugin
|
|
11
|
+
*
|
|
12
|
+
* Extracts Mocha test framework errors with 85% confidence.
|
|
13
|
+
* Parses test hierarchies, error types, and stack traces.
|
|
14
|
+
*/
|
|
15
|
+
declare const mochaPlugin: ExtractorPlugin;
|
|
16
|
+
export default mochaPlugin;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extractors/mocha/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,gBAAgB,CAAC;AAgPxB;;;;;GAKG;AACH,QAAA,MAAM,WAAW,EAAE,eAiBlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|