v2 / vlib / v / preludes / test_runner_simple.v
87 lines · 69 sloc · 2.13 KB · 19f080ffb8f8f01976692f6b79d9f857c685e109
Raw
1module main
2
3// Provide a no-frills implementation of the TestRunner interface:
4
5fn vtest_init() {
6 change_test_runner(&TestRunner(SimpleTestRunner{}))
7}
8
9struct SimpleTestRunner {
10mut:
11 fname string
12
13 file_test_info VTestFileMetaInfo
14 fn_test_info VTestFnMetaInfo
15 fn_assert_passes u64
16 fn_passes u64
17 fn_fails u64
18
19 total_assert_passes u64
20 total_assert_fails u64
21}
22
23fn (mut runner SimpleTestRunner) free() {
24 unsafe {
25 runner.fname.free()
26 runner.fn_test_info.free()
27 runner.file_test_info.free()
28 }
29}
30
31fn normalise_fname(name string) string {
32 return 'fn ' + name.replace('__', '.').replace('main.', '')
33}
34
35fn (mut runner SimpleTestRunner) start(ntests int) {
36 eprintln('SimpleTestRunner testing start; expected: ${ntests} test functions')
37}
38
39fn (mut runner SimpleTestRunner) finish() {
40 eprintln('SimpleTestRunner testing finish; fn:[passes: ${runner.fn_passes}, fails: ${runner.fn_fails}], assert:[passes: ${runner.total_assert_passes}, fails: ${runner.total_assert_fails}]')
41}
42
43fn (mut runner SimpleTestRunner) exit_code() int {
44 if runner.fn_fails > 0 {
45 return 1
46 }
47 if runner.total_assert_fails > 0 {
48 return 2
49 }
50 return 0
51}
52
53//
54
55fn (mut runner SimpleTestRunner) fn_start() bool {
56 runner.fn_assert_passes = 0
57 runner.fname = normalise_fname(runner.fn_test_info.name)
58 return true
59}
60
61fn (mut runner SimpleTestRunner) fn_pass() {
62 runner.fn_passes++
63}
64
65fn (mut runner SimpleTestRunner) fn_fail() {
66 runner.fn_fails++
67 eprintln('>>> fail ${runner.fname}')
68}
69
70fn (mut runner SimpleTestRunner) fn_error(line_nr int, file string, mod string, fn_name string, errmsg string) {
71 eprintln('>>> SimpleTestRunner fn_error ${runner.fname}, line_nr: ${line_nr}, file: ${file}, mod: ${mod}, fn_name: ${fn_name}, errmsg: ${errmsg}')
72}
73
74//
75
76fn (mut runner SimpleTestRunner) assert_pass(i &VAssertMetaInfo) {
77 runner.total_assert_passes++
78 runner.fn_assert_passes++
79 unsafe { i.free() }
80}
81
82fn (mut runner SimpleTestRunner) assert_fail(i &VAssertMetaInfo) {
83 runner.total_assert_fails++
84 eprintln('> failed assert ${runner.fn_assert_passes + 1} in ${runner.fname}, assert was in ${normalise_fname(i.fn_name)}, line: ${
85 i.line_nr + 1}')
86 unsafe { i.free() }
87}
88