v/vlib/v/preludes/test_runner_simple.v

85 lines
2.1 KiB
V

module main
// Provide a no-frills implementation of the TestRunner interface:
fn vtest_init() {
change_test_runner(&TestRunner(SimpleTestRunner{}))
}
struct SimpleTestRunner {
mut:
fname string
//
file_test_info VTestFileMetaInfo
fn_test_info VTestFnMetaInfo
fn_assert_passes u64
fn_passes u64
fn_fails u64
//
total_assert_passes u64
total_assert_fails u64
}
fn (mut runner SimpleTestRunner) free() {
unsafe {
runner.fname.free()
runner.fn_test_info.free()
runner.file_test_info.free()
}
}
fn normalise_fname(name string) string {
return 'fn ' + name.replace('__', '.').replace('main.', '')
}
fn (mut runner SimpleTestRunner) start(ntests int) {
eprintln('SimpleTestRunner testing start; expected: $ntests test functions')
}
fn (mut runner SimpleTestRunner) finish() {
eprintln('SimpleTestRunner testing finish; fn:[passes: $runner.fn_passes, fails: $runner.fn_fails], assert:[passes: $runner.total_assert_passes, fails: $runner.total_assert_fails]')
}
fn (mut runner SimpleTestRunner) exit_code() int {
if runner.fn_fails > 0 {
return 1
}
return 0
}
//
fn (mut runner SimpleTestRunner) fn_start() bool {
runner.fn_assert_passes = 0
runner.fname = normalise_fname(runner.fn_test_info.name)
return true
}
fn (mut runner SimpleTestRunner) fn_pass() {
runner.fn_passes++
}
fn (mut runner SimpleTestRunner) fn_fail() {
runner.fn_fails++
eprintln('>>> fail $runner.fname')
}
fn (mut runner SimpleTestRunner) fn_error(line_nr int, file string, mod string, fn_name string, errmsg string) {
eprintln('>>> SimpleTestRunner fn_error $runner.fname, line_nr: $line_nr, file: $file, mod: $mod, fn_name: $fn_name, errmsg: $errmsg')
}
//
fn (mut runner SimpleTestRunner) assert_pass(i &VAssertMetaInfo) {
runner.total_assert_passes++
runner.fn_assert_passes++
unsafe { i.free() }
}
fn (mut runner SimpleTestRunner) assert_fail(i &VAssertMetaInfo) {
runner.total_assert_fails++
eprintln('> failed assert ${runner.fn_assert_passes + 1} in $runner.fname, assert was in ${normalise_fname(i.fn_name)}, line: ${
i.line_nr + 1}')
unsafe { i.free() }
}