Skip to content

Commit d69f1cb

Browse files
committed
test(validation): add comprehensive json-parser tests
Increase json-parser coverage from 34.54% to 100% by adding 107 new tests covering: - Schema validation with Zod (success/failure cases, nested objects, arrays) - parseJsonWithResult discriminated union handling - createJsonParser factory with default options and overrides - parseNdjson newline-delimited JSON parsing with line-specific errors - streamNdjson generator-based streaming with early termination Also improve coverage configuration: - Simplify exclude patterns in vitest.config.mts - Add excludeAfterRemap flag for post-source-map exclusions - Create filter-coverage.mjs script for post-processing coverage data Test suite now has 5,336 passing tests (up from 5,289). Overall coverage increased from 36.68% to 36.79%.
1 parent 8e0eb52 commit d69f1cb

File tree

3 files changed

+407
-4
lines changed

3 files changed

+407
-4
lines changed

.config/vitest.config.mts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,14 @@ export default defineConfig({
132132
'test/**',
133133
'packages/**',
134134
'perf/**',
135-
'dist',
136-
'dist/**/*',
137135
'**/dist/**',
138-
'src/external',
139-
'src/external/**/*',
136+
'dist/**',
137+
'src/external/**',
140138
'src/types.ts',
141139
'scripts/**',
142140
],
143141
include: ['src/**/*.{ts,mts,cts}'],
142+
excludeAfterRemap: true,
144143
all: true,
145144
clean: true,
146145
skipFull: false,

scripts/filter-coverage.mjs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* @fileoverview Filter coverage data to exclude dist/ files
3+
*
4+
* This script post-processes V8 coverage data to remove dist/ files,
5+
* ensuring coverage reports only show src/ TypeScript files.
6+
*/
7+
8+
import fs from 'node:fs'
9+
import path from 'node:path'
10+
import { fileURLToPath } from 'node:url'
11+
12+
const __dirname = path.dirname(fileURLToPath(import.meta.url))
13+
const projectRoot = path.resolve(__dirname, '..')
14+
const coveragePath = path.join(projectRoot, 'coverage/coverage-final.json')
15+
16+
if (!fs.existsSync(coveragePath)) {
17+
console.error('Coverage file not found:', coveragePath)
18+
process.exit(1)
19+
}
20+
21+
const coverage = JSON.parse(fs.readFileSync(coveragePath, 'utf-8'))
22+
23+
// Filter out dist/ files
24+
const filtered = {}
25+
let distCount = 0
26+
let srcCount = 0
27+
28+
for (const [file, data] of Object.entries(coverage)) {
29+
// Keep only src/ files, exclude dist/
30+
if (file.includes('/src/') && !file.includes('/dist/')) {
31+
filtered[file] = data
32+
srcCount++
33+
} else if (file.includes('/dist/')) {
34+
distCount++
35+
}
36+
}
37+
38+
console.log(`Filtered ${distCount} dist/ files`)
39+
console.log(`Kept ${srcCount} src/ files`)
40+
console.log(`Total files: ${Object.keys(coverage).length}`)
41+
42+
fs.writeFileSync(coveragePath, JSON.stringify(filtered, null, 2))
43+
console.log('Coverage data filtered successfully')

0 commit comments

Comments
 (0)