module main import ( os testing benchmark filepath ) pub const ( v_modules_path = os.home_dir() + '.vmodules' ) fn main() { args := os.args args_string := args[1..].join(' ') v_test_compiler(args_string.all_before('test-compiler')) } fn v_test_compiler(vargs string){ v_test_compiler2(vargs) //make_sure_vfmt_was_run() } fn v_test_compiler2(vargs string){ vexe := testing.vexe_path() parent_dir := os.dir(vexe) testing.vlib_should_be_present( parent_dir ) // Changing the current directory is needed for some of the compiler tests, // compiler/tests/local_test.v and compiler/tests/repl/repl_test.v os.chdir( parent_dir ) /* if !os.exists(parent_dir + '/v.v') { eprintln('v.v is missing, it must be next to the V executable') exit(1) } */ // Make sure v.c can be compiled without warnings $if macos { if os.exists('/v.v') { os.system('$vexe -o v.c v.v') if os.system('cc -Werror v.c') != 0 { eprintln('cc failed to build v.c without warnings') exit(1) } eprintln('v.c can be compiled without warnings. This is good :)') } } building_tools_failed := testing.v_build_failing(vargs, 'tools') eprintln('\nTesting all _test.v files...') mut compiler_test_session := testing.new_test_session( vargs ) compiler_test_session.files << os.walk_ext(parent_dir, '_test.v') compiler_test_session.test() eprintln( compiler_test_session.benchmark.total_message('running V tests') ) eprintln('') building_examples_failed := testing.v_build_failing(vargs, 'examples') eprintln('') building_live_failed := testing.v_build_failing(vargs + '-live', filepath.join( 'examples', 'hot_reload')) eprintln('') v_module_install_cmd := '$vexe install nedpals.args' eprintln('\nInstalling a v module with: $v_module_install_cmd ') mut vmark := benchmark.new_benchmark() ret := os.system(v_module_install_cmd) if ret != 0 { eprintln('failed to run v install') } if !os.exists(v_modules_path + '/nedpals/args') { eprintln('v failed to install a test module') } vmark.stop() eprintln( 'Installing a v module took: ' + vmark.total_duration().str() + 'ms') make_sure_vfmt_was_run() if building_tools_failed || compiler_test_session.failed || building_examples_failed || building_live_failed { exit(1) } } fn make_sure_vfmt_was_run() { files := os.walk_ext('.', '_test.v') for file in files { println(file) os.exec('./vfmt $file') or { println('$file failed') } } }