89 lines
2.1 KiB
V
89 lines
2.1 KiB
V
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_) or { panic(err) }
|
|
}
|
|
os.mkdir(tdir_) or { panic(err) }
|
|
C.atexit(cleanup_tdir)
|
|
return tdir_
|
|
}
|
|
|
|
fn cleanup_tdir() {
|
|
println('... removing tdir: $tdir')
|
|
os.rmdir_all(tdir) or { eprintln(err) }
|
|
}
|
|
|
|
fn create_test(tname string, tcontent string) ?string {
|
|
tpath := os.join_path(tdir, tname)
|
|
os.write_file(tpath, tcontent)?
|
|
eprintln('>>>>>>>> tpath: $tpath | tcontent: $tcontent')
|
|
return tpath
|
|
}
|
|
|
|
fn main() {
|
|
defer {
|
|
os.chdir(os.wd_at_startup) or {}
|
|
}
|
|
println('> vroot: $vroot | vexe: $vexe | tdir: $tdir')
|
|
ok_fpath := create_test('a_single_ok_test.v', 'fn test_ok(){ assert true }')?
|
|
check_ok('"$vexe" "$ok_fpath"')
|
|
check_ok('"$vexe" test "$ok_fpath"')
|
|
check_ok('"$vexe" test "$tdir"')
|
|
fail_fpath := create_test('a_single_failing_test.v', 'fn test_fail(){ assert 1 == 2 }')?
|
|
check_fail('"$vexe" "$fail_fpath"')
|
|
check_fail('"$vexe" test "$fail_fpath"')
|
|
check_fail('"$vexe" test "$tdir"')
|
|
rel_dir := os.join_path(tdir, rand.ulid())
|
|
os.mkdir(rel_dir)?
|
|
os.chdir(rel_dir)?
|
|
check_ok('"$vexe" test "..${os.path_separator + os.base(ok_fpath)}"')
|
|
println('> all done')
|
|
}
|
|
|
|
fn check_ok(cmd string) string {
|
|
println('> check_ok cmd: $cmd')
|
|
res := os.execute(cmd)
|
|
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.execute(cmd)
|
|
if res.exit_code == 0 {
|
|
eprintln('> check_fail succeeded, but it should have failed.\n$res.output')
|
|
exit(1)
|
|
}
|
|
return res.output
|
|
}
|