Skip to content

Commit 1a55306

Browse files
committed
more fixes
1 parent ddc31f9 commit 1a55306

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

src/lib/decuplicate.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,26 @@ function dedupe_list(ranges: Range[]): Set<Range> {
55

66
outer: for (let range of ranges) {
77
for (let processed_range of new_ranges) {
8+
// Case: an existing range fits within this range -> replace it
89
if (range.start <= processed_range.start && range.end >= processed_range.end) {
910
new_ranges.delete(processed_range)
1011
new_ranges.add(range)
1112
continue outer
1213
}
14+
// Case: this range fits within an existing range -> skip it
15+
if (range.start >= processed_range.start && range.end <= processed_range.end) {
16+
continue outer
17+
}
18+
// Case: ranges partially overlap
19+
// { start: 324, end: 444 },
20+
// { start: 364, end: 485 },
21+
if (range.start < processed_range.end && range.start > processed_range.start && range.end > processed_range.end) {
22+
new_ranges.delete(processed_range)
23+
new_ranges.add({
24+
start: processed_range.start,
25+
end: range.end,
26+
})
27+
}
1328
}
1429
new_ranges.add(range)
1530
}

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,14 @@ test.describe('Wallace mega soverage suite', () => {
238238
expect.soft(result.total_lines).toBe(17)
239239
})
240240

241-
test('Meter has full coverage', async () => {
241+
test('Heading has full coverage', async () => {
242+
let data = coverage.find(({ url }) => url.includes('Heading')) as Coverage
243+
let result = await calculate_coverage([data])
244+
expect.soft(result.line_coverage_ratio).toBe(1)
245+
expect.soft(result.total_lines).toBe(37)
246+
})
247+
248+
test('Meter has partial coverage', async () => {
242249
let data = coverage.find(({ url }) => url.includes('Meter')) as Coverage
243250
let result = await calculate_coverage([data])
244251
expect.soft(result.line_coverage_ratio).not.toBe(1)
@@ -250,4 +257,18 @@ test.describe('Wallace mega soverage suite', () => {
250257
{ is_covered: false, start_line: 23, end_line: 35 },
251258
])
252259
})
260+
261+
test('Container has partial coverage', async () => {
262+
let data = coverage.find(({ url }) => url.includes('Container')) as Coverage
263+
let result = await calculate_coverage([data])
264+
expect.soft(result.line_coverage_ratio).not.toBe(1)
265+
expect.soft(result.total_lines).toBe(44)
266+
267+
let sheet = result.coverage_per_stylesheet.at(0)!
268+
expect.soft(sheet.chunks.map(({ is_covered, start_line, end_line }) => ({ is_covered, start_line, end_line }))).toEqual([
269+
{ is_covered: true, start_line: 1, end_line: 21 },
270+
{ is_covered: false, start_line: 22, end_line: 24 },
271+
{ is_covered: true, start_line: 25, end_line: 44 },
272+
])
273+
})
253274
})

0 commit comments

Comments
 (0)