v4 / vlib / v3 / tests / ierror_str_codegen_test.v
62 lines · 53 sloc · 1.67 KB · 288feee4702b35beadb4037d02b96b5c8674156b
Raw
1import os
2
3const vexe = @VEXE
4const tests_dir = os.dir(@FILE)
5const v3_dir = os.dir(tests_dir)
6const vlib_dir = os.dir(v3_dir)
7const v3_src = os.join_path(v3_dir, 'v3.v')
8
9fn test_ierror_str_uses_builtin_formatter() {
10 v3_bin := os.join_path(os.temp_dir(), 'v3_ierror_str_codegen_test')
11 build :=
12 os.execute('${vexe} -gc none -path "${vlib_dir}|@vlib|@vmodules" -o ${v3_bin} ${v3_src}')
13 assert build.exit_code == 0, build.output
14
15 src := os.join_path(os.temp_dir(), 'v3_ierror_str_codegen_input.v')
16 os.write_file(src, "fn fail_code(code int) !int {
17 return error_with_code('hi', code)
18}
19
20fn fail_zero() !int {
21 return error_with_code('hi', 0)
22}
23
24fn render(err IError) string {
25 return err.str()
26}
27
28fn main() {
29 fail_code(137) or {
30 assert err.str() == 'hi; code: 137'
31 assert err.msg() == 'hi'
32 assert err.code() == 137
33 assert render(err) == 'hi; code: 137'
34 }
35 fail_zero() or {
36 assert err.str() == 'hi'
37 assert err.msg() == 'hi'
38 assert err.code() == 0
39 assert render(err) == 'hi'
40 }
41 println('ok')
42}
43") or {
44 panic(err)
45 }
46
47 bin := os.join_path(os.temp_dir(), 'v3_ierror_str_codegen_input')
48 compile := os.execute('${v3_bin} ${src} -b c -o ${bin}')
49 assert compile.exit_code == 0, compile.output
50 assert !compile.output.contains('C compilation failed'), compile.output
51
52 c_code := os.read_file(bin + '.c') or { panic(err) }
53 assert c_code.contains('IError__str(err)'), c_code
54 assert c_code.contains('return IError__str(err);'), c_code
55 assert !c_code.contains('string__eq(err.message'), c_code
56 assert c_code.contains('IError__msg(&err)'), c_code
57 assert c_code.contains('err.code'), c_code
58
59 run := os.execute(bin)
60 assert run.exit_code == 0, run.output
61 assert run.output.trim_space() == 'ok'
62}
63