75 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.7 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 { panic(err) }
 | 
						|
}
 | 
						|
 | 
						|
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.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
 | 
						|
}
 |