2021-01-17 17:04:08 +03:00
|
|
|
module main
|
|
|
|
|
|
|
|
import os
|
|
|
|
import term
|
|
|
|
import time
|
|
|
|
|
2021-01-23 12:40:17 +03:00
|
|
|
const (
|
2021-01-29 20:40:39 +03:00
|
|
|
vexe = os.getenv('VEXE')
|
|
|
|
vroot = os.dir(vexe)
|
2021-01-23 12:40:17 +03:00
|
|
|
args_string = os.args[1..].join(' ')
|
2021-01-29 20:40:39 +03:00
|
|
|
vargs = args_string.all_before('test-all')
|
2021-01-23 12:40:17 +03:00
|
|
|
)
|
2021-01-17 17:04:08 +03:00
|
|
|
|
|
|
|
fn main() {
|
2021-01-23 12:40:17 +03:00
|
|
|
mut commands := get_all_commands()
|
|
|
|
// summary
|
|
|
|
sw := time.new_stopwatch({})
|
|
|
|
for mut cmd in commands {
|
|
|
|
cmd.run()
|
|
|
|
}
|
|
|
|
spent := sw.elapsed().milliseconds()
|
|
|
|
oks := commands.filter(it.ecode == 0)
|
|
|
|
fails := commands.filter(it.ecode != 0)
|
|
|
|
println('')
|
|
|
|
println(term.header(term.colorize(term.yellow, term.colorize(term.bold, 'Summary of `v test-all`:')),
|
|
|
|
'-'))
|
|
|
|
println(term.colorize(term.yellow, 'Total runtime: $spent ms'))
|
|
|
|
for ocmd in oks {
|
|
|
|
msg := if ocmd.okmsg != '' { ocmd.okmsg } else { ocmd.line }
|
|
|
|
println(term.colorize(term.green, '> OK: $msg '))
|
|
|
|
}
|
|
|
|
for fcmd in fails {
|
|
|
|
msg := if fcmd.errmsg != '' { fcmd.errmsg } else { fcmd.line }
|
|
|
|
println(term.colorize(term.red, '> Failed: $msg '))
|
|
|
|
}
|
|
|
|
if fails.len > 0 {
|
|
|
|
exit(1)
|
|
|
|
}
|
2021-01-17 17:04:08 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
struct Command {
|
|
|
|
mut:
|
|
|
|
line string
|
|
|
|
label string // when set, the label will be printed *before* cmd.line is executed
|
|
|
|
ecode int
|
|
|
|
okmsg string
|
|
|
|
errmsg string
|
|
|
|
}
|
|
|
|
|
|
|
|
fn get_all_commands() []Command {
|
|
|
|
mut res := []Command{}
|
2021-01-29 20:40:39 +03:00
|
|
|
res << Command{
|
|
|
|
line: '$vexe examples/hello_world.v'
|
|
|
|
okmsg: 'V can compile hello world.'
|
|
|
|
}
|
|
|
|
res << Command{
|
|
|
|
line: '$vexe -o vtmp cmd/v'
|
|
|
|
okmsg: 'V can compile itself.'
|
|
|
|
}
|
2021-01-17 17:04:08 +03:00
|
|
|
res << Command{
|
|
|
|
line: '$vexe $vargs -progress test-cleancode'
|
|
|
|
okmsg: 'All important .v files are invariant when processed with `v fmt`'
|
|
|
|
}
|
|
|
|
res << Command{
|
|
|
|
line: '$vexe $vargs -progress test-fmt'
|
|
|
|
okmsg: 'All .v files can be processed with `v fmt`. NB: the result may not always be compilable, it just means that `v fmt` does not crash.'
|
|
|
|
}
|
|
|
|
res << Command{
|
2021-01-19 11:41:51 +03:00
|
|
|
line: '$vexe $vargs -progress test-self'
|
2021-01-17 17:04:08 +03:00
|
|
|
okmsg: 'There are no _test.v file regressions.'
|
|
|
|
}
|
|
|
|
res << Command{
|
2021-01-31 11:43:49 +03:00
|
|
|
line: '$vexe $vargs -progress -W build-tools'
|
2021-01-17 17:04:08 +03:00
|
|
|
okmsg: 'All tools can be compiled.'
|
|
|
|
}
|
|
|
|
res << Command{
|
2021-01-31 11:43:49 +03:00
|
|
|
line: '$vexe $vargs -progress -W build-examples'
|
2021-01-17 17:04:08 +03:00
|
|
|
okmsg: 'All examples can be compiled.'
|
|
|
|
}
|
|
|
|
res << Command{
|
|
|
|
line: '$vexe run cmd/tools/check-md.v -hide-warnings -all'
|
|
|
|
label: 'Check ```v ``` code examples and formatting of .MD files...'
|
|
|
|
okmsg: 'All .md files look good.'
|
|
|
|
}
|
|
|
|
res << Command{
|
|
|
|
line: '$vexe install nedpals.args'
|
|
|
|
okmsg: '`v install` works.'
|
|
|
|
}
|
2021-01-29 20:40:39 +03:00
|
|
|
// NB: test that a program that depends on thirdparty libraries with its
|
|
|
|
// own #flags (tetris depends on gg, which uses sokol) can be compiled
|
|
|
|
// with -usecache:
|
|
|
|
res << Command{
|
|
|
|
line: '$vexe -usecache examples/tetris/tetris.v'
|
|
|
|
okmsg: '`v -usecache` works.'
|
|
|
|
}
|
2021-01-17 17:04:08 +03:00
|
|
|
$if macos {
|
|
|
|
res << Command{
|
|
|
|
line: '$vexe -o v.c cmd/v && cc -Werror v.c && rm -rf v.c'
|
|
|
|
label: 'v.c should be buildable with no warnings...'
|
|
|
|
okmsg: 'v.c can be compiled without warnings. This is good :)'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
|
|
|
|
fn (mut cmd Command) run() {
|
|
|
|
// Changing the current directory is needed for some of the compiler tests,
|
|
|
|
// vlib/v/tests/local_test.v and vlib/v/tests/repl/repl_test.v
|
|
|
|
os.chdir(vroot)
|
|
|
|
if cmd.label != '' {
|
|
|
|
println(term.header(cmd.label, '*'))
|
|
|
|
}
|
|
|
|
sw := time.new_stopwatch({})
|
|
|
|
cmd.ecode = os.system(cmd.line)
|
|
|
|
spent := sw.elapsed().milliseconds()
|
2021-01-17 20:09:29 +03:00
|
|
|
println(term.colorize(term.yellow, '> Running: "$cmd.line" took: $spent ms.'))
|
2021-01-17 17:04:08 +03:00
|
|
|
println('')
|
|
|
|
}
|