@vibe-validate/extractors 0.16.1 → 0.17.0-rc.11
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 +103 -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 +254 -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 +345 -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 +278 -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 +353 -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 +169 -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 +201 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/result-schema.d.ts +59 -9
- package/dist/result-schema.d.ts.map +1 -1
- package/dist/result-schema.js +3 -19
- package/dist/result-schema.js.map +1 -1
- 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 +3 -2
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JUnit XML Error Extractor Plugin Tests
|
|
3
|
+
*
|
|
4
|
+
* @package @vibe-validate/extractors
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import junitPlugin from './index.js';
|
|
8
|
+
const { detect, extract } = junitPlugin;
|
|
9
|
+
describe('JUnit Plugin', () => {
|
|
10
|
+
describe('Detection', () => {
|
|
11
|
+
it('should detect JUnit XML with failures (high confidence)', () => {
|
|
12
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
13
|
+
<testsuites>
|
|
14
|
+
<testsuite name="test.ts">
|
|
15
|
+
<testcase name="test">
|
|
16
|
+
<failure message="error" type="Error">
|
|
17
|
+
❯ test.ts:10:20
|
|
18
|
+
</failure>
|
|
19
|
+
</testcase>
|
|
20
|
+
</testsuite>
|
|
21
|
+
</testsuites>`;
|
|
22
|
+
const result = detect(input);
|
|
23
|
+
expect(result.confidence).toBe(90);
|
|
24
|
+
expect(result.patterns).toContain('<testsuite>');
|
|
25
|
+
expect(result.patterns).toContain('<failure>');
|
|
26
|
+
expect(result.reason).toContain('JUnit XML format with test failures detected');
|
|
27
|
+
});
|
|
28
|
+
it('should detect JUnit XML without failures (lower confidence)', () => {
|
|
29
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
30
|
+
<testsuites tests="5" failures="0">
|
|
31
|
+
<testsuite name="test.ts" tests="5" failures="0">
|
|
32
|
+
<testcase name="test 1" time="0.001"></testcase>
|
|
33
|
+
</testsuite>
|
|
34
|
+
</testsuites>`;
|
|
35
|
+
const result = detect(input);
|
|
36
|
+
expect(result.confidence).toBe(85);
|
|
37
|
+
expect(result.patterns).toContain('<testsuite>');
|
|
38
|
+
});
|
|
39
|
+
it('should not detect non-JUnit output', () => {
|
|
40
|
+
const input = 'Regular test output without XML';
|
|
41
|
+
const result = detect(input);
|
|
42
|
+
expect(result.confidence).toBe(0);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('Basic Extraction', () => {
|
|
46
|
+
it('should extract single test failure from JUnit XML', () => {
|
|
47
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
48
|
+
<testsuites name="vitest tests" tests="1" failures="1" errors="0" time="0.002">
|
|
49
|
+
<testsuite name="test/calculator.test.ts" tests="1" failures="1" errors="0" skipped="0" time="0.002">
|
|
50
|
+
<testcase classname="test/calculator.test.ts" name="Calculator > should add numbers" time="0.001">
|
|
51
|
+
<failure message="expected 4 to be 5 // Object.is equality" type="AssertionError">
|
|
52
|
+
AssertionError: expected 4 to be 5 // Object.is equality
|
|
53
|
+
|
|
54
|
+
- Expected
|
|
55
|
+
+ Received
|
|
56
|
+
|
|
57
|
+
- 5
|
|
58
|
+
+ 4
|
|
59
|
+
|
|
60
|
+
❯ test/calculator.test.ts:10:21
|
|
61
|
+
</failure>
|
|
62
|
+
</testcase>
|
|
63
|
+
</testsuite>
|
|
64
|
+
</testsuites>`;
|
|
65
|
+
const result = extract(input);
|
|
66
|
+
expect(result.summary).toBe('1 test(s) failed');
|
|
67
|
+
expect(result.errors).toHaveLength(1);
|
|
68
|
+
expect(result.errors[0]).toMatchObject({
|
|
69
|
+
file: 'test/calculator.test.ts',
|
|
70
|
+
line: 10,
|
|
71
|
+
message: 'expected 4 to be 5 // Object.is equality',
|
|
72
|
+
});
|
|
73
|
+
// Context should contain test hierarchy
|
|
74
|
+
expect(result.errors[0].context).toBeTruthy();
|
|
75
|
+
});
|
|
76
|
+
it('should extract multiple test failures', () => {
|
|
77
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
78
|
+
<testsuites name="vitest tests" tests="3" failures="2" errors="0" time="0.006">
|
|
79
|
+
<testsuite name="test/math.test.ts" tests="3" failures="2" errors="0" skipped="0" time="0.006">
|
|
80
|
+
<testcase classname="test/math.test.ts" name="Math > should multiply" time="0.002">
|
|
81
|
+
<failure message="expected 6 to be 8 // Object.is equality" type="AssertionError">
|
|
82
|
+
AssertionError: expected 6 to be 8 // Object.is equality
|
|
83
|
+
❯ test/math.test.ts:15:20
|
|
84
|
+
</failure>
|
|
85
|
+
</testcase>
|
|
86
|
+
<testcase classname="test/math.test.ts" name="Math > should divide" time="0.001">
|
|
87
|
+
</testcase>
|
|
88
|
+
<testcase classname="test/math.test.ts" name="Math > should subtract" time="0.003">
|
|
89
|
+
<failure message="expected -1 to be 0 // Object.is equality" type="AssertionError">
|
|
90
|
+
AssertionError: expected -1 to be 0 // Object.is equality
|
|
91
|
+
❯ test/math.test.ts:25:22
|
|
92
|
+
</failure>
|
|
93
|
+
</testcase>
|
|
94
|
+
</testsuite>
|
|
95
|
+
</testsuites>`;
|
|
96
|
+
const result = extract(input);
|
|
97
|
+
expect(result.summary).toBe('2 test(s) failed');
|
|
98
|
+
expect(result.errors).toHaveLength(2);
|
|
99
|
+
expect(result.errors[0].file).toBe('test/math.test.ts');
|
|
100
|
+
expect(result.errors[1].file).toBe('test/math.test.ts');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('Error Type Detection', () => {
|
|
104
|
+
it('should detect AssertionError', () => {
|
|
105
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
106
|
+
<testsuites>
|
|
107
|
+
<testsuite name="test.ts">
|
|
108
|
+
<testcase name="test">
|
|
109
|
+
<failure message="assertion failed" type="AssertionError">
|
|
110
|
+
❯ test.ts:10:20
|
|
111
|
+
</failure>
|
|
112
|
+
</testcase>
|
|
113
|
+
</testsuite>
|
|
114
|
+
</testsuites>`;
|
|
115
|
+
const result = extract(input);
|
|
116
|
+
expect(result.errors[0].message).toContain('assertion failed');
|
|
117
|
+
expect(result.guidance).toContain('assertion');
|
|
118
|
+
});
|
|
119
|
+
it('should detect TypeError', () => {
|
|
120
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
121
|
+
<testsuites>
|
|
122
|
+
<testsuite name="test.ts">
|
|
123
|
+
<testcase name="test">
|
|
124
|
+
<failure message="Cannot read properties of null" type="TypeError">
|
|
125
|
+
TypeError: Cannot read properties of null (reading 'foo')
|
|
126
|
+
❯ test.ts:38:18
|
|
127
|
+
</failure>
|
|
128
|
+
</testcase>
|
|
129
|
+
</testsuite>
|
|
130
|
+
</testsuites>`;
|
|
131
|
+
const result = extract(input);
|
|
132
|
+
expect(result.errors[0].message).toContain('Cannot read properties of null');
|
|
133
|
+
expect(result.guidance).toContain('null/undefined');
|
|
134
|
+
});
|
|
135
|
+
it('should detect ENOENT errors', () => {
|
|
136
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
137
|
+
<testsuites>
|
|
138
|
+
<testsuite name="test.ts">
|
|
139
|
+
<testcase name="test">
|
|
140
|
+
<failure message="ENOENT: no such file or directory" type="Error">
|
|
141
|
+
Error: ENOENT: no such file or directory, open '/nonexistent/file.txt'
|
|
142
|
+
❯ test.ts:30:7
|
|
143
|
+
</failure>
|
|
144
|
+
</testcase>
|
|
145
|
+
</testsuite>
|
|
146
|
+
</testsuites>`;
|
|
147
|
+
const result = extract(input);
|
|
148
|
+
expect(result.errors[0].message).toContain('ENOENT');
|
|
149
|
+
expect(result.guidance).toContain('file paths');
|
|
150
|
+
});
|
|
151
|
+
it('should detect timeout errors', () => {
|
|
152
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
153
|
+
<testsuites>
|
|
154
|
+
<testsuite name="test.ts">
|
|
155
|
+
<testcase name="test">
|
|
156
|
+
<failure message="Test timed out in 100ms." type="Error">
|
|
157
|
+
Error: Test timed out in 100ms.
|
|
158
|
+
If this is a long-running test, pass a timeout value as the last argument or configure it globally with "testTimeout".
|
|
159
|
+
❯ test.ts:43:5
|
|
160
|
+
</failure>
|
|
161
|
+
</testcase>
|
|
162
|
+
</testsuite>
|
|
163
|
+
</testsuites>`;
|
|
164
|
+
const result = extract(input);
|
|
165
|
+
expect(result.errors[0].message).toContain('Test timed out');
|
|
166
|
+
expect(result.guidance).toContain('timeout');
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
describe('Location Extraction', () => {
|
|
170
|
+
it('should extract file:line format', () => {
|
|
171
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
172
|
+
<testsuites>
|
|
173
|
+
<testsuite name="src/utils.test.ts">
|
|
174
|
+
<testcase classname="src/utils.test.ts" name="test">
|
|
175
|
+
<failure message="error" type="Error">
|
|
176
|
+
❯ src/utils.test.ts:42:15
|
|
177
|
+
</failure>
|
|
178
|
+
</testcase>
|
|
179
|
+
</testsuite>
|
|
180
|
+
</testsuites>`;
|
|
181
|
+
const result = extract(input);
|
|
182
|
+
expect(result.errors[0].file).toBe('src/utils.test.ts');
|
|
183
|
+
expect(result.errors[0].line).toBe(42);
|
|
184
|
+
});
|
|
185
|
+
it('should handle file:line:column format', () => {
|
|
186
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
187
|
+
<testsuites>
|
|
188
|
+
<testsuite name="test.ts">
|
|
189
|
+
<testcase classname="test.ts" name="test">
|
|
190
|
+
<failure message="error" type="Error">
|
|
191
|
+
❯ packages/core/test/runner.test.ts:128:30
|
|
192
|
+
</failure>
|
|
193
|
+
</testcase>
|
|
194
|
+
</testsuite>
|
|
195
|
+
</testsuites>`;
|
|
196
|
+
const result = extract(input);
|
|
197
|
+
expect(result.errors[0].file).toBe('packages/core/test/runner.test.ts');
|
|
198
|
+
expect(result.errors[0].line).toBe(128);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe('Test Hierarchy', () => {
|
|
202
|
+
it('should preserve test hierarchy in context', () => {
|
|
203
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
204
|
+
<testsuites>
|
|
205
|
+
<testsuite name="test.ts">
|
|
206
|
+
<testcase name="Suite > Nested > Deep > test name">
|
|
207
|
+
<failure message="error" type="Error">
|
|
208
|
+
❯ test.ts:10:20
|
|
209
|
+
</failure>
|
|
210
|
+
</testcase>
|
|
211
|
+
</testsuite>
|
|
212
|
+
</testsuites>`;
|
|
213
|
+
const result = extract(input);
|
|
214
|
+
expect(result.errors[0].context).toContain('Suite > Nested > Deep > test name');
|
|
215
|
+
});
|
|
216
|
+
it('should decode HTML entities in test names', () => {
|
|
217
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
218
|
+
<testsuites>
|
|
219
|
+
<testsuite name="test.ts">
|
|
220
|
+
<testcase name="Test with "quotes" & symbols > nested">
|
|
221
|
+
<failure message="error" type="Error">
|
|
222
|
+
❯ test.ts:10:20
|
|
223
|
+
</failure>
|
|
224
|
+
</testcase>
|
|
225
|
+
</testsuite>
|
|
226
|
+
</testsuites>`;
|
|
227
|
+
const result = extract(input);
|
|
228
|
+
expect(result.errors[0].context).toContain('"quotes"');
|
|
229
|
+
expect(result.errors[0].context).toContain('& symbols >');
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
describe('Edge Cases', () => {
|
|
233
|
+
it('should handle empty JUnit XML', () => {
|
|
234
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
235
|
+
<testsuites></testsuites>`;
|
|
236
|
+
const result = extract(input);
|
|
237
|
+
expect(result.summary).toBe('0 test(s) failed');
|
|
238
|
+
expect(result.errors).toHaveLength(0);
|
|
239
|
+
});
|
|
240
|
+
it('should handle all passing tests', () => {
|
|
241
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
242
|
+
<testsuites tests="5" failures="0">
|
|
243
|
+
<testsuite name="test.ts" tests="5" failures="0">
|
|
244
|
+
<testcase name="test 1" time="0.001"></testcase>
|
|
245
|
+
<testcase name="test 2" time="0.001"></testcase>
|
|
246
|
+
</testsuite>
|
|
247
|
+
</testsuites>`;
|
|
248
|
+
const result = extract(input);
|
|
249
|
+
expect(result.summary).toBe('0 test(s) failed');
|
|
250
|
+
expect(result.errors).toHaveLength(0);
|
|
251
|
+
});
|
|
252
|
+
it('should handle invalid XML gracefully', () => {
|
|
253
|
+
const input = 'Not valid XML';
|
|
254
|
+
const result = extract(input);
|
|
255
|
+
expect(result.summary).toContain('Unable to parse JUnit XML');
|
|
256
|
+
expect(result.errors).toHaveLength(0);
|
|
257
|
+
});
|
|
258
|
+
it('should handle missing location in failure', () => {
|
|
259
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
260
|
+
<testsuites>
|
|
261
|
+
<testsuite name="test.ts">
|
|
262
|
+
<testcase classname="test.ts" name="test">
|
|
263
|
+
<failure message="error without location" type="Error">
|
|
264
|
+
Error: Something went wrong
|
|
265
|
+
</failure>
|
|
266
|
+
</testcase>
|
|
267
|
+
</testsuite>
|
|
268
|
+
</testsuites>`;
|
|
269
|
+
const result = extract(input);
|
|
270
|
+
expect(result.errors[0].file).toBe('test.ts');
|
|
271
|
+
expect(result.errors[0].message).toContain('error without location');
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
describe('Guidance Generation', () => {
|
|
275
|
+
it('should provide assertion error guidance', () => {
|
|
276
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
277
|
+
<testsuites>
|
|
278
|
+
<testsuite name="test.ts">
|
|
279
|
+
<testcase name="test">
|
|
280
|
+
<failure message="expected 4 to be 5" type="AssertionError">
|
|
281
|
+
❯ test.ts:10:20
|
|
282
|
+
</failure>
|
|
283
|
+
</testcase>
|
|
284
|
+
</testsuite>
|
|
285
|
+
</testsuites>`;
|
|
286
|
+
const result = extract(input);
|
|
287
|
+
expect(result.guidance).toContain('assertion');
|
|
288
|
+
});
|
|
289
|
+
it('should provide timeout guidance', () => {
|
|
290
|
+
const input = `<?xml version="1.0" encoding="UTF-8" ?>
|
|
291
|
+
<testsuites>
|
|
292
|
+
<testsuite name="test.ts">
|
|
293
|
+
<testcase name="test">
|
|
294
|
+
<failure message="Test timed out" type="Error">
|
|
295
|
+
❯ test.ts:10:20
|
|
296
|
+
</failure>
|
|
297
|
+
</testcase>
|
|
298
|
+
</testsuite>
|
|
299
|
+
</testsuites>`;
|
|
300
|
+
const result = extract(input);
|
|
301
|
+
expect(result.guidance).toContain('timeout');
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
describe('Sample Test Cases', () => {
|
|
305
|
+
it('should include samples that validate the plugin', () => {
|
|
306
|
+
expect(junitPlugin.samples).toBeDefined();
|
|
307
|
+
expect(junitPlugin.samples).toHaveLength(2);
|
|
308
|
+
// Validate single failure sample
|
|
309
|
+
const singleFailureSample = junitPlugin.samples[0];
|
|
310
|
+
if (!singleFailureSample.input) {
|
|
311
|
+
throw new Error('Sample input is required');
|
|
312
|
+
}
|
|
313
|
+
const singleResult = extract(singleFailureSample.input);
|
|
314
|
+
expect(singleResult.totalErrors).toBe(singleFailureSample.expected.totalErrors);
|
|
315
|
+
// Validate multiple failures sample
|
|
316
|
+
const multipleFailureSample = junitPlugin.samples[1];
|
|
317
|
+
if (!multipleFailureSample.input) {
|
|
318
|
+
throw new Error('Sample input is required');
|
|
319
|
+
}
|
|
320
|
+
const multipleResult = extract(multipleFailureSample.input);
|
|
321
|
+
expect(multipleResult.totalErrors).toBe(multipleFailureSample.expected.totalErrors);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
describe('Plugin Metadata', () => {
|
|
325
|
+
it('should have correct metadata', () => {
|
|
326
|
+
expect(junitPlugin.metadata.name).toBe('junit');
|
|
327
|
+
expect(junitPlugin.metadata.version).toBe('1.0.0');
|
|
328
|
+
expect(junitPlugin.metadata.tags).toBeDefined();
|
|
329
|
+
expect(junitPlugin.metadata.tags).toContain('junit');
|
|
330
|
+
expect(junitPlugin.metadata.tags).toContain('vitest');
|
|
331
|
+
});
|
|
332
|
+
it('should have correct priority', () => {
|
|
333
|
+
expect(junitPlugin.priority).toBe(90);
|
|
334
|
+
});
|
|
335
|
+
it('should have correct hints', () => {
|
|
336
|
+
expect(junitPlugin.hints).toBeDefined();
|
|
337
|
+
expect(junitPlugin.hints?.required).toContain('<testsuite');
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/extractors/junit/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maven Checkstyle Extractor Plugin
|
|
3
|
+
*
|
|
4
|
+
* Extracts style violations from Maven Checkstyle plugin output.
|
|
5
|
+
* Supports both output formats generated by maven-checkstyle-plugin.
|
|
6
|
+
*
|
|
7
|
+
* @package @vibe-validate/extractors
|
|
8
|
+
*/
|
|
9
|
+
import type { ExtractorPlugin, DetectionResult, ErrorExtractorResult } from '../../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Detects if output is from Maven Checkstyle
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectMavenCheckstyle(output: string): DetectionResult;
|
|
14
|
+
/**
|
|
15
|
+
* Extracts Checkstyle violations from Maven output
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractMavenCheckstyle(output: string, command?: string): ErrorExtractorResult;
|
|
18
|
+
/**
|
|
19
|
+
* Maven Checkstyle Extractor Plugin
|
|
20
|
+
*/
|
|
21
|
+
declare const mavenCheckstyleExtractor: ExtractorPlugin;
|
|
22
|
+
export default mavenCheckstyleExtractor;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extractors/maven-checkstyle/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EAErB,MAAM,gBAAgB,CAAC;AAoCxB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CA+CrE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,oBAAoB,CAmGtB;AAwCD;;GAEG;AACH,QAAA,MAAM,wBAAwB,EAAE,eAoE/B,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maven Checkstyle Extractor Plugin
|
|
3
|
+
*
|
|
4
|
+
* Extracts style violations from Maven Checkstyle plugin output.
|
|
5
|
+
* Supports both output formats generated by maven-checkstyle-plugin.
|
|
6
|
+
*
|
|
7
|
+
* @package @vibe-validate/extractors
|
|
8
|
+
*/
|
|
9
|
+
import { MAX_ERRORS_IN_ARRAY } from '../../result-schema.js';
|
|
10
|
+
import { extractRelativePath } from '../../maven-utils.js';
|
|
11
|
+
const CHECKSTYLE_PATTERNS = {
|
|
12
|
+
// Format 1: [WARN] /absolute/path:line:col: message [Rule]
|
|
13
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: Maven Checkstyle output is structured, limited line length
|
|
14
|
+
warnFormat: /^\[WARN\]\s+([^:]+):(\d+):(\d+):\s+(.+?)\s+\[(\w+)\]$/,
|
|
15
|
+
// Format 2: [WARNING] relative/path:[line,col] (category) Rule: message
|
|
16
|
+
// eslint-disable-next-line sonarjs/slow-regex -- Safe: Maven Checkstyle output is structured, limited line length
|
|
17
|
+
warningFormat: /^\[WARNING\]\s+([^:]+):\[(\d+)(?:,(\d+))?\]\s+\((\w+)\)\s+(\w+):\s+(.+)$/,
|
|
18
|
+
// Summary line: "You have N Checkstyle violations"
|
|
19
|
+
summary: /You have (\d+) Checkstyle violations/,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Detects if output is from Maven Checkstyle
|
|
23
|
+
*/
|
|
24
|
+
export function detectMavenCheckstyle(output) {
|
|
25
|
+
const lines = output.split('\n');
|
|
26
|
+
let score = 0;
|
|
27
|
+
const foundPatterns = [];
|
|
28
|
+
// Look for Checkstyle-specific markers
|
|
29
|
+
let hasViolationFormat = false;
|
|
30
|
+
for (const line of lines) {
|
|
31
|
+
if (line.includes('maven-checkstyle-plugin')) {
|
|
32
|
+
score += 40;
|
|
33
|
+
foundPatterns.push('maven-checkstyle-plugin reference');
|
|
34
|
+
}
|
|
35
|
+
if (line.includes('Starting audit')) {
|
|
36
|
+
score += 20;
|
|
37
|
+
foundPatterns.push('Checkstyle audit start marker');
|
|
38
|
+
}
|
|
39
|
+
if (line.includes('Audit done')) {
|
|
40
|
+
score += 20;
|
|
41
|
+
foundPatterns.push('Checkstyle audit complete marker');
|
|
42
|
+
}
|
|
43
|
+
if (CHECKSTYLE_PATTERNS.summary.test(line)) {
|
|
44
|
+
score += 30;
|
|
45
|
+
foundPatterns.push('Checkstyle violation summary');
|
|
46
|
+
}
|
|
47
|
+
if (!hasViolationFormat && (CHECKSTYLE_PATTERNS.warnFormat.test(line) || CHECKSTYLE_PATTERNS.warningFormat.test(line))) {
|
|
48
|
+
score += 10;
|
|
49
|
+
foundPatterns.push('Checkstyle violation format');
|
|
50
|
+
hasViolationFormat = true; // Only count once, but don't break - keep looking for other markers
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Determine reason based on score
|
|
54
|
+
let reason;
|
|
55
|
+
if (score >= 70) {
|
|
56
|
+
reason = 'Maven Checkstyle plugin output detected';
|
|
57
|
+
}
|
|
58
|
+
else if (score >= 40) {
|
|
59
|
+
reason = 'Possible Maven Checkstyle output';
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
reason = 'Not Maven Checkstyle output';
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
confidence: Math.min(score, 100),
|
|
66
|
+
patterns: foundPatterns,
|
|
67
|
+
reason,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Extracts Checkstyle violations from Maven output
|
|
72
|
+
*/
|
|
73
|
+
export function extractMavenCheckstyle(output, command) {
|
|
74
|
+
const detection = detectMavenCheckstyle(output);
|
|
75
|
+
if (detection.confidence < 40) {
|
|
76
|
+
return {
|
|
77
|
+
summary: 'Not Maven Checkstyle output',
|
|
78
|
+
totalErrors: 0,
|
|
79
|
+
errors: [],
|
|
80
|
+
metadata: {
|
|
81
|
+
detection: {
|
|
82
|
+
extractor: 'maven-checkstyle',
|
|
83
|
+
confidence: detection.confidence,
|
|
84
|
+
patterns: detection.patterns,
|
|
85
|
+
reason: detection.reason,
|
|
86
|
+
},
|
|
87
|
+
confidence: detection.confidence,
|
|
88
|
+
completeness: 100,
|
|
89
|
+
issues: [],
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const violations = [];
|
|
94
|
+
const lines = output.split('\n');
|
|
95
|
+
for (const line of lines) {
|
|
96
|
+
// Try Format 1: [WARN] /path:line:col: message [Rule]
|
|
97
|
+
const warnMatch = CHECKSTYLE_PATTERNS.warnFormat.exec(line);
|
|
98
|
+
if (warnMatch) {
|
|
99
|
+
const [, filePath, lineStr, colStr, message, rule] = warnMatch;
|
|
100
|
+
violations.push({
|
|
101
|
+
file: extractRelativePath(filePath),
|
|
102
|
+
line: Number.parseInt(lineStr, 10),
|
|
103
|
+
column: Number.parseInt(colStr, 10),
|
|
104
|
+
message: message.trim(),
|
|
105
|
+
rule: rule.trim(),
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
// Try Format 2: [WARNING] path:[line,col] (category) Rule: message
|
|
110
|
+
const warningMatch = CHECKSTYLE_PATTERNS.warningFormat.exec(line);
|
|
111
|
+
if (warningMatch) {
|
|
112
|
+
const [, filePath, lineStr, colStr, category, rule, message] = warningMatch;
|
|
113
|
+
violations.push({
|
|
114
|
+
file: filePath.trim(),
|
|
115
|
+
line: Number.parseInt(lineStr, 10),
|
|
116
|
+
column: colStr ? Number.parseInt(colStr, 10) : undefined,
|
|
117
|
+
message: message.trim(),
|
|
118
|
+
rule: rule.trim(),
|
|
119
|
+
category: category.trim(),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Remove duplicates (both formats report same violations)
|
|
124
|
+
const uniqueViolations = deduplicateViolations(violations);
|
|
125
|
+
// Convert to FormattedError format
|
|
126
|
+
const errors = uniqueViolations.slice(0, MAX_ERRORS_IN_ARRAY).map((v) => ({
|
|
127
|
+
file: v.file,
|
|
128
|
+
line: v.line,
|
|
129
|
+
column: v.column,
|
|
130
|
+
message: `${v.message} [${v.rule}]`,
|
|
131
|
+
}));
|
|
132
|
+
// Group by file for summary
|
|
133
|
+
const fileGroups = groupByFile(uniqueViolations);
|
|
134
|
+
const summary = `${uniqueViolations.length} Checkstyle violation(s) in ${fileGroups.size} file(s)`;
|
|
135
|
+
// Generate guidance
|
|
136
|
+
const guidance = uniqueViolations.length > 0
|
|
137
|
+
? `Fix Checkstyle violations. Run ${command ?? 'mvn checkstyle:check'} to see all details.`
|
|
138
|
+
: undefined;
|
|
139
|
+
// Create error summary
|
|
140
|
+
const errorSummary = errors.length > 0
|
|
141
|
+
? errors.map((e, i) => `[Error ${i + 1}/${errors.length}] ${e.file}:${e.line}\n${e.message}`).join('\n\n')
|
|
142
|
+
: undefined;
|
|
143
|
+
return {
|
|
144
|
+
summary,
|
|
145
|
+
totalErrors: uniqueViolations.length,
|
|
146
|
+
errors,
|
|
147
|
+
guidance,
|
|
148
|
+
errorSummary,
|
|
149
|
+
metadata: {
|
|
150
|
+
detection: {
|
|
151
|
+
extractor: 'maven-checkstyle',
|
|
152
|
+
confidence: detection.confidence,
|
|
153
|
+
patterns: detection.patterns,
|
|
154
|
+
reason: detection.reason,
|
|
155
|
+
},
|
|
156
|
+
confidence: 100,
|
|
157
|
+
completeness: 100,
|
|
158
|
+
issues: [],
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Deduplicate violations (both formats report same violations)
|
|
164
|
+
*/
|
|
165
|
+
function deduplicateViolations(violations) {
|
|
166
|
+
const seen = new Set();
|
|
167
|
+
const unique = [];
|
|
168
|
+
for (const v of violations) {
|
|
169
|
+
const key = `${v.file}:${v.line}:${v.column}:${v.rule}`;
|
|
170
|
+
if (!seen.has(key)) {
|
|
171
|
+
seen.add(key);
|
|
172
|
+
unique.push(v);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return unique;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Group violations by file
|
|
179
|
+
*/
|
|
180
|
+
function groupByFile(violations) {
|
|
181
|
+
const groups = new Map();
|
|
182
|
+
for (const violation of violations) {
|
|
183
|
+
const file = violation.file || 'unknown';
|
|
184
|
+
if (!groups.has(file)) {
|
|
185
|
+
groups.set(file, []);
|
|
186
|
+
}
|
|
187
|
+
const group = groups.get(file);
|
|
188
|
+
if (group) {
|
|
189
|
+
group.push(violation);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return groups;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Maven Checkstyle Extractor Plugin
|
|
196
|
+
*/
|
|
197
|
+
const mavenCheckstyleExtractor = {
|
|
198
|
+
metadata: {
|
|
199
|
+
name: 'maven-checkstyle',
|
|
200
|
+
version: '1.0.0',
|
|
201
|
+
author: 'Jeff Dutton <jeff@duckcreek.com>',
|
|
202
|
+
description: 'Extracts style violations from Maven Checkstyle plugin output',
|
|
203
|
+
repository: 'https://github.com/jdutton/vibe-validate',
|
|
204
|
+
tags: ['maven', 'java', 'checkstyle', 'style', 'linting'],
|
|
205
|
+
},
|
|
206
|
+
hints: {
|
|
207
|
+
required: ['[WARN]', '[INFO]'],
|
|
208
|
+
anyOf: ['maven-checkstyle-plugin', 'Starting audit', 'Checkstyle violations'],
|
|
209
|
+
},
|
|
210
|
+
priority: 60,
|
|
211
|
+
detect: detectMavenCheckstyle,
|
|
212
|
+
extract: extractMavenCheckstyle,
|
|
213
|
+
samples: [
|
|
214
|
+
{
|
|
215
|
+
name: 'basic-warn-format',
|
|
216
|
+
description: 'Format 1 violations with absolute paths',
|
|
217
|
+
input: `[INFO] Starting audit...
|
|
218
|
+
[WARN] /project/src/main/java/com/example/Foo.java:10:5: Missing Javadoc comment. [JavadocVariable]
|
|
219
|
+
[WARN] /project/src/main/java/com/example/Foo.java:15:1: '{' should be on previous line. [LeftCurly]
|
|
220
|
+
Audit done.`,
|
|
221
|
+
expected: {
|
|
222
|
+
totalErrors: 2,
|
|
223
|
+
errors: [
|
|
224
|
+
{
|
|
225
|
+
file: 'src/main/java/com/example/Foo.java',
|
|
226
|
+
line: 10,
|
|
227
|
+
column: 5,
|
|
228
|
+
message: 'Missing Javadoc comment. [JavadocVariable]',
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'basic-warning-format',
|
|
235
|
+
description: 'Format 2 violations with relative paths',
|
|
236
|
+
input: `[INFO] Starting audit...
|
|
237
|
+
[WARNING] src/main/java/com/example/Foo.java:[10,5] (javadoc) JavadocVariable: Missing a Javadoc comment.
|
|
238
|
+
[WARNING] src/main/java/com/example/Foo.java:[15,1] (blocks) LeftCurly: '{' at column 1 should be on the previous line.
|
|
239
|
+
Audit done.`,
|
|
240
|
+
expected: {
|
|
241
|
+
totalErrors: 2,
|
|
242
|
+
errors: [
|
|
243
|
+
{
|
|
244
|
+
message: 'Missing a Javadoc comment. [JavadocVariable]',
|
|
245
|
+
file: 'src/main/java/com/example/Foo.java',
|
|
246
|
+
line: 10,
|
|
247
|
+
column: 5,
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
name: 'real-world-output',
|
|
254
|
+
description: 'Real Maven Checkstyle output from test data',
|
|
255
|
+
inputFile: './samples/maven-checkstyle-violations.txt',
|
|
256
|
+
expected: {
|
|
257
|
+
totalErrors: 16,
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
};
|
|
262
|
+
export default mavenCheckstyleExtractor;
|
|
263
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extractors/maven-checkstyle/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/extractors/maven-checkstyle/index.test.ts"],"names":[],"mappings":""}
|