Skip to content

Commit bff82d9

Browse files
authored
chore: add a bunch of CLI tests (#24)
1 parent 829c13e commit bff82d9

File tree

4 files changed

+169
-5
lines changed

4 files changed

+169
-5
lines changed

src/cli/arguments.test.ts

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import { test, expect } from '@playwright/test'
2+
import { parse_arguments, validate_arguments } from './arguments'
3+
4+
test.describe('--coverage-dir', () => {
5+
let cov = '--min-line-coverage=1'
6+
7+
test('missing --coverage-dir', () => {
8+
expect(() => validate_arguments(parse_arguments([cov]))).toThrowError()
9+
})
10+
11+
test('empty --coverage-dir', () => {
12+
expect(() => validate_arguments(parse_arguments([cov, '--coverage-dir']))).toThrowError()
13+
})
14+
15+
test('valid --coverage-dir=path/to/coverage', () => {
16+
let result = validate_arguments(parse_arguments([cov, '--coverage-dir=/path/to/coverage']))
17+
expect(result['coverage-dir']).toEqual('/path/to/coverage')
18+
})
19+
})
20+
21+
test.describe('--min-line-coverage', () => {
22+
let dir = '--coverage-dir=coverage'
23+
24+
test('missing --min-line-coverage', () => {
25+
expect(() => validate_arguments(parse_arguments([dir]))).toThrowError()
26+
})
27+
28+
test('empty --min-line-coverage', () => {
29+
expect(() => validate_arguments(parse_arguments([dir, '--min-line-coverage']))).toThrowError()
30+
})
31+
32+
test('invalid --min-line-coverage=-1', () => {
33+
expect(() => validate_arguments(parse_arguments([dir, '--min-line-coverage=-1']))).toThrowError()
34+
})
35+
36+
test('valid --min-line-coverage=.8', () => {
37+
let result = validate_arguments(parse_arguments([dir, '--min-line-coverage=.8']))
38+
expect(result['min-line-coverage']).toEqual(0.8)
39+
})
40+
})
41+
42+
test.describe('--min-file-line-coverage', () => {
43+
let args = ['--coverage-dir=coverage', '--min-line-coverage=1']
44+
45+
test('missing --min-file-line-coverage', () => {
46+
expect.soft(() => validate_arguments(parse_arguments([...args]))).not.toThrowError()
47+
expect.soft(validate_arguments(parse_arguments([...args]))['min-file-line-coverage']).toEqual(0)
48+
})
49+
50+
test('empty --min-file-line-coverage', () => {
51+
expect.soft(() => validate_arguments(parse_arguments([...args, '--min-file-line-coverage']))).toThrowError()
52+
})
53+
54+
test('invalid --min-file-line-coverage=-1', () => {
55+
expect(() => validate_arguments(parse_arguments([...args, '--min-file-line-coverage=-1']))).toThrowError()
56+
})
57+
58+
test('valid --min-file-line-coverage=.8', () => {
59+
let result = validate_arguments(parse_arguments([...args, '--min-file-line-coverage=.8']))
60+
expect(result['min-file-line-coverage']).toEqual(0.8)
61+
})
62+
})
63+
64+
test.describe('--reporter', () => {
65+
let args = ['--coverage-dir=coverage', '--min-line-coverage=1']
66+
67+
test('missing --reporter', () => {
68+
expect.soft(() => validate_arguments(parse_arguments([...args]))).not.toThrowError()
69+
expect.soft(validate_arguments(parse_arguments([...args]))['reporter']).toEqual('pretty')
70+
})
71+
72+
test('empty --reporter', () => {
73+
expect.soft(() => validate_arguments(parse_arguments([...args, '--reporter']))).toThrowError()
74+
})
75+
76+
test('invalid --reporter=test', () => {
77+
expect(() => validate_arguments(parse_arguments([...args, '--reporter=test']))).toThrowError()
78+
})
79+
80+
test('valid --reporter=pretty', () => {
81+
let result = validate_arguments(parse_arguments([...args, '--reporter=pretty']))
82+
expect(result['reporter']).toEqual('pretty')
83+
})
84+
85+
test('valid --reporter=tap', () => {
86+
let result = validate_arguments(parse_arguments([...args, '--reporter=tap']))
87+
expect(result['reporter']).toEqual('tap')
88+
})
89+
})
90+
91+
test.describe('--show-uncovered', () => {
92+
let args = ['--coverage-dir=coverage', '--min-line-coverage=1']
93+
94+
test('missing --show-uncovered', () => {
95+
expect.soft(() => validate_arguments(parse_arguments([...args]))).not.toThrowError()
96+
expect.soft(validate_arguments(parse_arguments([...args]))['show-uncovered']).toEqual('violations')
97+
})
98+
99+
test('empty --show-uncovered', () => {
100+
expect.soft(() => validate_arguments(parse_arguments([...args, '--show-uncovered']))).toThrowError()
101+
})
102+
103+
test('invalid --show-uncovered=test', () => {
104+
expect(() => validate_arguments(parse_arguments([...args, '--show-uncovered=test']))).toThrowError()
105+
})
106+
107+
test('valid --show-uncovered=none', () => {
108+
let result = validate_arguments(parse_arguments([...args, '--show-uncovered=none']))
109+
expect(result['show-uncovered']).toEqual('none')
110+
})
111+
112+
test('valid --show-uncovered=violations', () => {
113+
let result = validate_arguments(parse_arguments([...args, '--show-uncovered=violations']))
114+
expect(result['show-uncovered']).toEqual('violations')
115+
})
116+
117+
test('valid --show-uncovered=all', () => {
118+
let result = validate_arguments(parse_arguments([...args, '--show-uncovered=all']))
119+
expect(result['show-uncovered']).toEqual('all')
120+
})
121+
})

src/cli/cli.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import { print as pretty } from './reporters/pretty.js'
77
import { print as tap } from './reporters/tap.js'
88

99
async function cli(cli_args: string[]) {
10-
const args = parse_arguments(cli_args)
11-
let params = validate_arguments(args)
10+
console.log(cli_args)
11+
let params = validate_arguments(parse_arguments(cli_args))
12+
console.log(params)
1213
let coverage_data = await read(params['coverage-dir'])
13-
let report = await program(
14+
let report = program(
1415
{
1516
min_file_coverage: params['min-line-coverage'],
1617
min_file_line_coverage: params['min-file-line-coverage'],

src/cli/program.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { expect, test } from '@playwright/test'
2+
import { program } from './program'
3+
import { Coverage } from '../lib'
4+
5+
// Line coverage: 4 covered, 3 uncovered
6+
let coverage = [
7+
{
8+
url: 'example.com',
9+
text: 'abcdefg { color: red; } abcdefg { color: green; }',
10+
ranges: [{ start: 0, end: 23 }],
11+
},
12+
] satisfies Coverage[]
13+
14+
test('returns context', () => {
15+
let result = program({ min_file_coverage: 0.5 }, coverage)
16+
expect.soft(result.context.coverage.covered_lines).toEqual(4)
17+
expect.soft(result.context.coverage.total_files_found).toEqual(1)
18+
})
19+
20+
test.describe('--min-file-coverage', () => {
21+
test('Success: --min-file-coverage=0.5', () => {
22+
let result = program({ min_file_coverage: 0.5 }, coverage)
23+
expect(result.report.ok).toBeTruthy()
24+
})
25+
26+
test('Failure: --min-file-coverage=1', () => {
27+
let result = program({ min_file_coverage: 1 }, coverage)
28+
expect(result.report.ok).toBeFalsy()
29+
})
30+
})
31+
32+
test.describe('--min-file-line-coverage', () => {
33+
test('Success: --min-file-line-coverage=0.5', () => {
34+
let result = program({ min_file_coverage: 0, min_file_line_coverage: 0.5 }, coverage)
35+
expect(result.report.ok).toBeTruthy()
36+
})
37+
38+
test('Failure: --min-file-line-coverage=1', () => {
39+
let result = program({ min_file_coverage: 0, min_file_line_coverage: 1 }, coverage)
40+
expect(result.report.ok).toBeFalsy()
41+
})
42+
})

src/cli/program.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ function validate_min_file_line_coverage(actual: number, expected: number | unde
4949
}
5050
}
5151

52-
export async function program(
52+
export function program(
5353
{
5454
min_file_coverage,
5555
min_file_line_coverage,
@@ -62,7 +62,7 @@ export async function program(
6262
if (coverage_data.length === 0) {
6363
throw new MissingDataError()
6464
}
65-
let coverage = await calculate_coverage(coverage_data)
65+
let coverage = calculate_coverage(coverage_data)
6666
let min_line_coverage_result = validate_min_line_coverage(coverage.line_coverage_ratio, min_file_coverage)
6767
let min_file_line_coverage_result = validate_min_file_line_coverage(
6868
Math.min(...coverage.coverage_per_stylesheet.map((sheet) => sheet.line_coverage_ratio)),

0 commit comments

Comments
 (0)