Skip to content

Commit 2c42d42

Browse files
committed
add a bunch of tests
1 parent 68b7b0c commit 2c42d42

File tree

7 files changed

+65
-25
lines changed

7 files changed

+65
-25
lines changed

src/decuplicate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export function deduplicate_entries(entries: Coverage[]): Map<NonNullable<Covera
1010
let checked_stylesheets = new Map<string, { url: string; ranges: Range[] }>()
1111

1212
for (let entry of entries) {
13-
let text = entry.text || ''
13+
let text = entry.text
1414
if (checked_stylesheets.has(text)) {
1515
let sheet = checked_stylesheets.get(text)!
1616
let ranges = sheet.ranges

src/filter-entries.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export function filter_coverage(coverage: Coverage[], parse_html?: Parser): Cove
1111
let result = []
1212

1313
for (let entry of coverage) {
14-
if (!entry.text) continue
1514
let extension = ext(entry.url).toLowerCase()
1615
if (extension === 'js') continue
1716

src/kitchen-sink.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { test, expect } from '@playwright/test'
2+
import { calculate_coverage } from '.'
3+
import { DOMParser } from 'linkedom'
4+
5+
function parse_html(html: string) {
6+
return new DOMParser().parseFromString(html, 'text/html')
7+
}
8+
9+
test('proejctw wallace Container', () => {
10+
const coverage = [
11+
{
12+
url: 'http://localhost:4173/_app/immutable/assets/Container.n-2BXq6O.css',
13+
text: '.container.svelte-1ginl5v{margin-inline:auto;padding-inline:var(--space-2)}@media (min-width: 44rem){.container.svelte-1ginl5v{padding-inline:var(--space-4)}}@media (min-width: 66rem){.container.svelte-1ginl5v{padding-inline:var(--space-8)}}.size-auto.svelte-1ginl5v{max-width:120rem}.size-sm.svelte-1ginl5v{max-width:28rem}.size-md.svelte-1ginl5v{max-width:32rem}.size-lg.svelte-1ginl5v{max-width:36rem}.size-xl.svelte-1ginl5v{max-width:48rem}.size-2xl.svelte-1ginl5v{max-width:64rem}.size-3xl.svelte-1ginl5v{max-width:80rem}\n',
14+
ranges: [
15+
{ start: 0, end: 75 },
16+
{ start: 82, end: 157 },
17+
{ start: 165, end: 240 },
18+
{ start: 241, end: 284 },
19+
{ start: 485, end: 526 },
20+
],
21+
},
22+
]
23+
let result = calculate_coverage(coverage, parse_html)
24+
let sheet = result.coverage_per_stylesheet.at(0)!
25+
26+
expect.soft(sheet.total_lines).toBe(44)
27+
expect.soft(sheet.chunks).toHaveLength(3)
28+
29+
let [chunk1, chunk2, chunk3] = sheet.chunks
30+
31+
expect.soft(chunk1?.start_line).toEqual(1)
32+
expect.soft(chunk1?.end_line).toEqual(21)
33+
expect.soft(chunk1?.total_lines).toEqual(21)
34+
35+
expect.soft(chunk2?.start_line).toEqual(22)
36+
expect.soft(chunk2?.end_line).toEqual(40)
37+
expect.soft(chunk2?.total_lines).toEqual(19)
38+
39+
expect.soft(chunk3?.start_line).toEqual(41)
40+
expect.soft(chunk3?.end_line).toEqual(44)
41+
expect.soft(chunk3?.total_lines).toEqual(4)
42+
})

src/parse-coverage.test.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ test('parses valid JSON', () => {
2323
])
2424
})
2525

26-
test('allows entries without text', () => {
26+
test('does not allow entries without text', () => {
2727
let input = `
2828
[
2929
{
@@ -35,12 +35,7 @@ test('allows entries without text', () => {
3535
]
3636
`
3737
let result = parse_coverage(input)
38-
expect(result).toEqual([
39-
{
40-
url: 'example.com',
41-
ranges: [{ start: 0, end: 13 }],
42-
},
43-
])
38+
expect(result).toEqual([])
4439
})
4540

4641
test('returns empty array for invalid JSON', () => {

src/parse-coverage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ export type Range = {
77

88
export type Coverage = {
99
url: string
10-
text?: string
10+
text: string
1111
ranges: Range[]
1212
}
1313

1414
let CoverageSchema = v.array(
1515
v.object({
16-
text: v.optional(v.string()),
16+
text: v.string(),
1717
url: v.string(),
1818
ranges: v.array(
1919
v.object({

src/prettify.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,21 @@ test('atrule prettification', () => {
5454
]
5555
expect(prettify(entries)).toEqual(prettified)
5656
})
57+
58+
test('prettify url()', () => {
59+
let entries = [
60+
{
61+
url: 'example.com',
62+
text: `a{ background-image: "example.com/test.gif"; background-image: url('example.com/test.jpg'); background-image: url("example.com/test.png"); }`,
63+
ranges: [{ start: 0, end: 140 }],
64+
},
65+
]
66+
let prettified = [
67+
{
68+
url: 'example.com',
69+
text: `a {\n\tbackground-image: "example.com/test.gif";\n\tbackground-image: url("example.com/test.jpg");\n\tbackground-image: url("example.com/test.png");\n}`,
70+
ranges: [{ start: 0, end: 151 - 7 }],
71+
},
72+
]
73+
expect(prettify(entries)).toEqual(prettified)
74+
})

src/prettify.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import { tokenize, tokenTypes } from 'css-tree/tokenizer'
55

66
export function prettify(coverage: Coverage[]): Coverage[] {
77
return coverage.map(({ url, text, ranges }) => {
8-
if (!text) {
9-
return { url, text, ranges }
10-
}
118
let formatted = format(text)
129
let irrelevant_tokens: Set<number> = new Set([
1310
tokenTypes.EOF,
@@ -40,11 +37,6 @@ export function prettify(coverage: Coverage[]): Coverage[] {
4037
if (irrelevant_tokens.has(type)) return
4138
index++
4239

43-
// format-css changes the Url token to a Function,String,RightParenthesis token sequence
44-
if (type === tokenTypes.Url) {
45-
index += 2
46-
}
47-
4840
let range_index = is_in_range(start, end)
4941
if (range_index !== -1) {
5042
ext_ranges[range_index]!.tokens.push(index)
@@ -57,12 +49,6 @@ export function prettify(coverage: Coverage[]): Coverage[] {
5749
tokenize(formatted, (type, start, end) => {
5850
if (irrelevant_tokens.has(type)) return
5951
index++
60-
61-
// format-css changes the Url token to a Function,String,RightParenthesis token sequence
62-
if (type === tokenTypes.Url) {
63-
index += 2
64-
}
65-
6652
new_tokens.set(index, { start, end })
6753
})
6854

0 commit comments

Comments
 (0)