mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
110 lines
5.1 KiB
V
110 lines
5.1 KiB
V
import os
|
|
|
|
const vexe = @VEXE
|
|
const vroot = os.dir(vexe)
|
|
const tfolder = os.join_path(os.vtmp_dir(), 'cover_test')
|
|
|
|
const t1 = np(os.join_path(tfolder, 't1'))
|
|
const t2 = np(os.join_path(tfolder, 't2'))
|
|
const t3 = np(os.join_path(tfolder, 't3'))
|
|
|
|
fn testsuite_begin() {
|
|
os.setenv('VCOLORS', 'never', true)
|
|
os.chdir(vroot)!
|
|
os.rmdir_all(tfolder) or {}
|
|
os.mkdir(tfolder) or {}
|
|
}
|
|
|
|
fn testsuite_end() {
|
|
os.rmdir_all(tfolder) or {}
|
|
}
|
|
|
|
fn test_help() {
|
|
res := execute('${os.quoted_path(vexe)} cover -h')
|
|
assert res.exit_code == 0
|
|
assert res.output.contains('Usage: v cover')
|
|
assert res.output.contains('Description: Analyze & make reports')
|
|
assert res.output.contains('Options:')
|
|
assert res.output.contains('-h, --help Show this help text.')
|
|
assert res.output.contains('-v, --verbose Be more verbose while processing the coverages.')
|
|
assert res.output.contains('-H, --hotspots Show most frequently executed covered lines.')
|
|
assert res.output.contains('-P, --percentages Show coverage percentage per file.')
|
|
assert res.output.contains('-S, --show_test_files Show `_test.v` files as well (normally filtered).')
|
|
assert res.output.contains('-A, --absolute Use absolute paths for all files')
|
|
}
|
|
|
|
fn np(path string) string {
|
|
return path.replace('\\', '/')
|
|
}
|
|
|
|
fn test_simple() {
|
|
assert !os.exists(t1), t1
|
|
assert !os.exists(t2), t2
|
|
assert !os.exists(t3), t3
|
|
|
|
r1 := execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t1)} cmd/tools/vcover/testdata/simple/t1_test.v')
|
|
assert r1.exit_code == 0, r1.str()
|
|
assert r1.output.trim_space() == '10', r1.str()
|
|
assert os.exists(t1), t1
|
|
cmd := '${os.quoted_path(vexe)} cover ${os.quoted_path(t1)} --filter vcover/testdata/simple/'
|
|
filter1 := execute(cmd)
|
|
assert filter1.exit_code == 0, filter1.output
|
|
assert filter1.output.contains('cmd/tools/vcover/testdata/simple/simple.v'), filter1.output
|
|
assert filter1.output.trim_space().ends_with('| 4 | 9 | 44.44%'), filter1.output
|
|
hfilter1 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t1)} --filter vcover/testdata/simple/ -H -P false')
|
|
assert hfilter1.exit_code == 0, hfilter1.output
|
|
assert !hfilter1.output.contains('%'), hfilter1.output
|
|
houtput1 := hfilter1.output.trim_space().split_into_lines()
|
|
zeros1 := houtput1.filter(it.starts_with('0 '))
|
|
nzeros1 := houtput1.filter(!it.starts_with('0 '))
|
|
assert zeros1.len > 0
|
|
assert zeros1.any(it.contains('simple.v:12')), zeros1.str()
|
|
assert zeros1.any(it.contains('simple.v:14')), zeros1.str()
|
|
assert zeros1.any(it.contains('simple.v:17')), zeros1.str()
|
|
assert zeros1.any(it.contains('simple.v:18')), zeros1.str()
|
|
assert zeros1.any(it.contains('simple.v:19')), zeros1.str()
|
|
assert nzeros1.len > 0
|
|
assert nzeros1.any(it.contains('simple.v:4')), nzeros1.str()
|
|
assert nzeros1.any(it.contains('simple.v:6')), nzeros1.str()
|
|
assert nzeros1.any(it.contains('simple.v:8')), nzeros1.str()
|
|
assert nzeros1.any(it.contains('simple.v:25')), nzeros1.str()
|
|
|
|
r2 := execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t2)} cmd/tools/vcover/testdata/simple/t2_test.v')
|
|
assert r2.exit_code == 0, r2.str()
|
|
assert r2.output.trim_space() == '24', r2.str()
|
|
assert os.exists(t2), t2
|
|
filter2 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t2)} --filter vcover/testdata/simple')
|
|
assert filter2.exit_code == 0, filter2.output
|
|
assert filter2.output.contains('cmd/tools/vcover/testdata/simple/simple.v')
|
|
assert filter2.output.trim_space().ends_with('| 6 | 9 | 66.67%'), filter2.output
|
|
hfilter2 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t2)} --filter testdata/simple -H -P false')
|
|
assert hfilter2.exit_code == 0, hfilter2.output
|
|
assert !hfilter2.output.contains('%'), hfilter2.output
|
|
houtput2 := hfilter2.output.trim_space().split_into_lines()
|
|
zeros2 := houtput2.filter(it.starts_with('0 '))
|
|
nzeros2 := houtput2.filter(!it.starts_with('0 '))
|
|
assert zeros2.len > 0
|
|
assert zeros2.any(it.contains('simple.v:4')), zeros2.str()
|
|
assert zeros2.any(it.contains('simple.v:6')), zeros2.str()
|
|
assert zeros2.any(it.contains('simple.v:8')), zeros2.str()
|
|
assert nzeros2.len > 0
|
|
assert nzeros2.any(it.contains('simple.v:17')), nzeros2.str()
|
|
assert nzeros2.any(it.contains('simple.v:18')), nzeros2.str()
|
|
assert nzeros2.any(it.contains('simple.v:19')), nzeros2.str()
|
|
assert nzeros2.any(it.contains('simple.v:25')), nzeros2.str()
|
|
|
|
// Run both tests. The coverage should be combined and == 100%
|
|
r3 := execute('${os.quoted_path(vexe)} -no-skip-unused -coverage ${os.quoted_path(t3)} test cmd/tools/vcover/testdata/simple/')
|
|
assert r3.exit_code == 0, r3.str()
|
|
assert r3.output.trim_space().contains('Summary for all V _test.v files: '), r3.str()
|
|
assert os.exists(t3), t3
|
|
filter3 := execute('${os.quoted_path(vexe)} cover ${os.quoted_path(t3)} --filter simple/')
|
|
assert filter3.exit_code == 0, filter3.str()
|
|
assert filter3.output.contains('cmd/tools/vcover/testdata/simple/simple.v'), filter3.str()
|
|
assert filter3.output.trim_space().match_glob('*cmd/tools/vcover/testdata/simple/simple.v *| 9 | 9 | 100.00%'), filter3.str()
|
|
}
|
|
|
|
fn execute(cmd string) os.Result {
|
|
eprintln('Executing: ${cmd}')
|
|
return os.execute(cmd)
|
|
}
|