1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

ensure that v fmt can be run over most .v files on each PR

This commit is contained in:
vitalyster
2019-12-25 15:54:48 +03:00
committed by Alexander Medvednikov
parent ccb041c831
commit 1d86f4b5d1
9 changed files with 101 additions and 41 deletions

View File

@@ -17,21 +17,13 @@ fn main() {
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){
fn v_test_compiler(vargs string) {
vexe := testing.vexe_path()
parent_dir := filepath.dir(vexe)
testing.vlib_should_be_present( parent_dir )
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 )
os.chdir(parent_dir)
/*
if !os.exists(parent_dir + '/v.v') {
eprintln('v.v is missing, it must be next to the V executable')
@@ -50,22 +42,16 @@ fn v_test_compiler2(vargs string){
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 )
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(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'))
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 ')
@@ -78,25 +64,8 @@ fn v_test_compiler2(vargs string){
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 {
eprintln('Installing a v module took: ' + vmark.total_duration().str() + 'ms')
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')
}
}
}

66
tools/vtest-fmt.v Normal file
View File

@@ -0,0 +1,66 @@
module main
import (
os
testing
benchmark
)
fn main() {
args := os.args
args_string := args[1..].join(' ')
v_test_formatting(args_string.all_before('test-fmt'))
}
fn v_test_formatting(vargs string) {
// NB: vfmt have to be build with '-d vfmt' . V itself knows about this,
// and v will rebuild tools/vfmt, if it is missing.
// Removing the binaries below is needed, since the building tools step
// rebuilds all the tools without the special option needed by vfmt
// by simply compiling each of them with `v tools/{toolname}.v`
// os.rm('tools/vfmt')
// os.rm('tools/vfmt.exe')
mut files_able_to_be_formatted := []string
all_test_files := os.walk_ext('.', '.v')
known_failing_exceptions := ['./examples/vweb/vweb_example.v',
'./tools/gen_vc.v',
'./tutorials/code/blog/article.v',
'./tutorials/code/blog/blog.v',
'./vlib/arrays/arrays.v',
'./vlib/arrays/arrays_test.v',
'./vlib/builtin/js/hashmap.v',
'./vlib/compiler/tests/fn_variadic_test.v',
'./vlib/compiler/tests/generic_test.v',
'./vlib/compiler/preludes/live_main.v',
'./vlib/compiler/preludes/live_shared.v',
'./vlib/compiler/preludes/tests_assertions.v',
'./vlib/compiler/preludes/tests_with_stats.v',
'./vlib/crypto/aes/aes.v',
'./vlib/crypto/aes/aes_cbc.v',
'./vlib/crypto/aes/block_generic.v',
'./vlib/crypto/aes/const.v',
'./vlib/crypto/aes/cypher_generic.v',
'./vlib/crypto/rc4/rc4.v',
'./vlib/eventbus/eventbus_test.v',
'./vlib/flag/flag.v',
'./vlib/os/bare/bare_example_linux.v',
'./vlib/szip/szip.v',
'./vlib/ui/examples/users_gui/users.v',
'./vlib/vweb/assets/assets.v',
'./vlib/vweb/vweb.v',
]
for tfile in all_test_files {
if tfile in known_failing_exceptions {
continue
}
files_able_to_be_formatted << tfile
}
eprintln('Run "v fmt" over all .v files')
mut vfmt_test_session := testing.new_test_session('$vargs fmt')
vfmt_test_session.files << files_able_to_be_formatted
vfmt_test_session.test()
eprintln(vfmt_test_session.benchmark.total_message('running vfmt over V test files'))
if vfmt_test_session.benchmark.nfail > 0 {
panic('\nWARNING: v fmt failed ${vfmt_test_session.benchmark.nfail} times.\n')
}
}