v2 / vlib / v / preludes / test_runner_dump.v
97 lines · 80 sloc · 2.41 KB · 19f080ffb8f8f01976692f6b79d9f857c685e109
Raw
1module main
2
3// This prelude file implements the Dump output producer for V tests.
4// It is not useful by its own, but can verify that -test-runner works
5// as expected. Use it with:
6// `VTEST_RUNNER=dump v run file_test.v`
7// or
8// `v -test-runner dump run file_test.v`
9
10fn vtest_init() {
11 change_test_runner(&TestRunner(DumpTestRunner{}))
12}
13
14struct DumpTestRunner {
15mut:
16 fname string
17 plan_tests int
18 test_counter int
19
20 file_test_info VTestFileMetaInfo
21 fn_test_info VTestFnMetaInfo
22 fn_assert_passes u64
23 fn_passes u64
24 fn_fails u64
25
26 total_assert_passes u64
27 total_assert_fails u64
28}
29
30fn (mut runner DumpTestRunner) free() {
31 unsafe {
32 runner.fname.free()
33 runner.fn_test_info.free()
34 runner.file_test_info.free()
35 }
36}
37
38fn (mut runner DumpTestRunner) start(ntests int) {
39 runner.plan_tests = ntests
40 eprintln('> ${@METHOD} | ntests: ${ntests}')
41}
42
43fn (mut runner DumpTestRunner) finish() {
44 eprintln('> ${@METHOD} , ${runner.plan_tests} tests, ${runner.total_assert_fails +
45 runner.total_assert_passes} assertions, ${runner.total_assert_fails} failures')
46}
47
48fn (mut runner DumpTestRunner) exit_code() int {
49 eprintln('> ${@METHOD}')
50 if runner.fn_fails > 0 {
51 return 1
52 }
53 if runner.total_assert_fails > 0 {
54 return 2
55 }
56 return 0
57}
58
59//
60
61fn (mut runner DumpTestRunner) fn_start() bool {
62 eprintln('> ${@METHOD}')
63 runner.fn_assert_passes = 0
64 runner.test_counter++
65 runner.fname = runner.fn_test_info.name
66 return true
67}
68
69fn (mut runner DumpTestRunner) fn_pass() {
70 runner.fn_passes++
71 eprintln('> ${@METHOD} OK ${runner.test_counter} - ${runner.fname}')
72}
73
74fn (mut runner DumpTestRunner) fn_fail() {
75 eprintln('> ${@METHOD} NOT OK ${runner.test_counter} - ${runner.fname}')
76 runner.fn_fails++
77}
78
79fn (mut runner DumpTestRunner) fn_error(line_nr int, file string, mod string, fn_name string, errmsg string) {
80 eprintln('> ${@METHOD} test function propagated error: ${runner.fname}, line_nr: ${line_nr}, file: ${file}, mod: ${mod}, fn_name: ${fn_name}, errmsg: ${errmsg}')
81}
82
83//
84
85fn (mut runner DumpTestRunner) assert_pass(i &VAssertMetaInfo) {
86 eprintln('> ${@METHOD} ASSERT PASS')
87 runner.total_assert_passes++
88 runner.fn_assert_passes++
89 unsafe { i.free() }
90}
91
92fn (mut runner DumpTestRunner) assert_fail(i &VAssertMetaInfo) {
93 runner.total_assert_fails++
94 eprintln('> ${@METHOD} ASSERT FAIL: ${runner.fn_assert_passes + 1} in ${runner.fname}, assert was in ${i.fn_name}, line: ${
95 i.line_nr + 1}')
96 unsafe { i.free() }
97}
98