mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
ci: add "Verify v test
works" tasks
This commit is contained in:
74
cmd/tools/test_if_v_test_system_works.v
Normal file
74
cmd/tools/test_if_v_test_system_works.v
Normal file
@ -0,0 +1,74 @@
|
||||
module main
|
||||
|
||||
// This program verifies that `v test` propagates errors
|
||||
// and that it exits with code 1, when at least 1 FAIL happen.
|
||||
import os
|
||||
import rand
|
||||
|
||||
const (
|
||||
vexe = get_vexe_path()
|
||||
vroot = os.dir(vexe)
|
||||
tdir = new_tdir()
|
||||
)
|
||||
|
||||
fn get_vexe_path() string {
|
||||
env_vexe := os.getenv('VEXE')
|
||||
if env_vexe != '' {
|
||||
return env_vexe
|
||||
}
|
||||
me := os.executable()
|
||||
eprintln('me: $me')
|
||||
mut vexe := os.join_path(os.dir(os.dir(os.dir(me))), 'v')
|
||||
if os.user_os() == 'windows' {
|
||||
vexe += '.exe'
|
||||
}
|
||||
return vexe
|
||||
}
|
||||
|
||||
fn new_tdir() string {
|
||||
tdir := os.join_path(os.temp_dir(), rand.ulid())
|
||||
if os.exists(tdir) {
|
||||
os.rmdir(tdir)
|
||||
}
|
||||
os.mkdir(tdir)
|
||||
C.atexit(cleanup_tdir)
|
||||
return tdir
|
||||
}
|
||||
|
||||
fn cleanup_tdir() {
|
||||
println('... removing tdir: $tdir')
|
||||
os.rmdir_all(tdir)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println('> vroot: $vroot | vexe: $vexe | tdir: $tdir')
|
||||
ok_fpath := os.join_path(tdir, 'single_test.v')
|
||||
os.write_file(ok_fpath, 'fn test_ok(){ assert true }')
|
||||
check_ok('"$vexe" $ok_fpath')
|
||||
check_ok('"$vexe" test $ok_fpath')
|
||||
fail_fpath := os.join_path(tdir, 'failing_test.v')
|
||||
os.write_file(fail_fpath, 'fn test_fail(){ assert 1 == 2 }')
|
||||
check_fail('"$vexe" $fail_fpath')
|
||||
check_fail('"$vexe" test $fail_fpath')
|
||||
check_fail('"$vexe" test $tdir')
|
||||
}
|
||||
|
||||
fn check_ok(cmd string) string {
|
||||
println('> check_ok cmd: $cmd')
|
||||
res := os.exec(cmd) or { panic(err) }
|
||||
if res.exit_code != 0 {
|
||||
eprintln('> check_ok failed.\n$res.output')
|
||||
exit(1)
|
||||
}
|
||||
return res.output
|
||||
}
|
||||
|
||||
fn check_fail(cmd string) string {
|
||||
println('> check_fail cmd: $cmd')
|
||||
res := os.exec(cmd) or { panic(err) }
|
||||
if res.exit_code == 0 {
|
||||
eprintln('> check_fail succeeded, but it should have failed.\n$res.output')
|
||||
exit(1)
|
||||
}
|
||||
return res.output
|
||||
}
|
Reference in New Issue
Block a user