Skip to content

Commit ddc31f9

Browse files
committed
more tests and fixes
1 parent 54bd4de commit ddc31f9

File tree

3 files changed

+1875
-5
lines changed

3 files changed

+1875
-5
lines changed

src/lib/decuplicate.ts

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,22 @@
11
import type { Coverage, Range } from './parse-coverage.js'
2+
3+
function dedupe_list(ranges: Range[]): Set<Range> {
4+
let new_ranges: Set<Range> = new Set()
5+
6+
outer: for (let range of ranges) {
7+
for (let processed_range of new_ranges) {
8+
if (range.start <= processed_range.start && range.end >= processed_range.end) {
9+
new_ranges.delete(processed_range)
10+
new_ranges.add(range)
11+
continue outer
12+
}
13+
}
14+
new_ranges.add(range)
15+
}
16+
17+
return new_ranges
18+
}
19+
220
/**
321
* @description
422
* prerequisites
@@ -7,7 +25,7 @@ import type { Coverage, Range } from './parse-coverage.js'
725
* - only bytes of deduplicated stylesheets are counted
826
*/
927
export function deduplicate_entries(entries: Coverage[]): Coverage[] {
10-
let checked_stylesheets = new Map<string, { url: string; ranges: Range[] }>()
28+
let checked_stylesheets = new Map<string, { url: string; ranges: Set<Range> }>()
1129

1230
for (let entry of entries) {
1331
let text = entry.text
@@ -18,23 +36,30 @@ export function deduplicate_entries(entries: Coverage[]): Coverage[] {
1836
// If not, add them
1937
for (let range of entry.ranges) {
2038
let found = false
39+
2140
for (let checked_range of ranges) {
41+
// find exact range
2242
if (checked_range.start === range.start && checked_range.end === range.end) {
2343
found = true
2444
break
2545
}
2646
}
47+
2748
if (!found) {
28-
ranges.push(range)
49+
ranges.add(range)
2950
}
3051
}
3152
} else {
3253
checked_stylesheets.set(text, {
3354
url: entry.url,
34-
ranges: entry.ranges,
55+
ranges: dedupe_list(entry.ranges),
3556
})
3657
}
3758
}
3859

39-
return Array.from(checked_stylesheets, ([text, { url, ranges }]) => ({ text, url, ranges: ranges.sort((a, b) => a.start - b.start) }))
60+
return Array.from(checked_stylesheets, ([text, { url, ranges }]) => ({
61+
text,
62+
url,
63+
ranges: Array.from(ranges).sort((a, b) => a.start - b.start),
64+
}))
4065
}

src/lib/test/kitchen-sink.test.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { test, expect } from '@playwright/test'
2-
import { calculate_coverage, type Coverage } from '../index.js'
2+
import { calculate_coverage, type Coverage, type CoverageResult } from '../index.js'
33
import { generate_coverage } from './generate-coverage.js'
44
import { format } from '@projectwallace/format-css'
5+
import * as fs from 'node:fs/promises'
6+
import * as path from 'node:path'
57

68
test('project wallace Container component', async () => {
79
// Coverage:
@@ -220,3 +222,32 @@ test.describe('@rules', () => {
220222
])
221223
})
222224
})
225+
226+
test.describe('Wallace mega soverage suite', () => {
227+
let coverage: Coverage[]
228+
229+
test.beforeAll(async () => {
230+
let file_contents = await fs.readFile(path.resolve('./src/lib/test/wallace.json'), 'utf-8')
231+
coverage = JSON.parse(file_contents)
232+
})
233+
234+
test('CopyButton has full coverage', async () => {
235+
let data = coverage.find(({ url }) => url.includes('CopyButton')) as Coverage
236+
let result = await calculate_coverage([data])
237+
expect.soft(result.line_coverage_ratio).toBe(1)
238+
expect.soft(result.total_lines).toBe(17)
239+
})
240+
241+
test('Meter has full coverage', async () => {
242+
let data = coverage.find(({ url }) => url.includes('Meter')) as Coverage
243+
let result = await calculate_coverage([data])
244+
expect.soft(result.line_coverage_ratio).not.toBe(1)
245+
expect.soft(result.total_lines).toBe(35)
246+
247+
let sheet = result.coverage_per_stylesheet.at(0)!
248+
expect.soft(sheet.chunks.map(({ is_covered, start_line, end_line }) => ({ is_covered, start_line, end_line }))).toEqual([
249+
{ is_covered: true, start_line: 1, end_line: 22 },
250+
{ is_covered: false, start_line: 23, end_line: 35 },
251+
])
252+
})
253+
})

0 commit comments

Comments
 (0)