v2 / vlib / v / tests / results_test.v
119 lines · 99 sloc · 1.82 KB · 3a3a1085cf7ba2d0bb9f8b60d7bbde5a19404941
Raw
1fn foo() !int {
2 return 1
3}
4
5fn test_return_int() {
6 x := foo() or { 0 }
7 assert x == 1
8}
9
10fn foo_err() !int {
11 return error('throw')
12}
13
14fn test_return_err() {
15 x := foo_err() or { 0 }
16 assert x == 0
17}
18
19fn test_return_err_var() {
20 foo_err() or { assert err.msg() == 'throw' }
21}
22
23fn test_str() {
24 assert '${foo() or { 3 }}' == '1'
25}
26
27fn result_void(err bool) ! {
28 if err {
29 return error('throw')
30 }
31}
32
33fn test_result_void() {
34 result_void(false) or { assert false }
35}
36
37fn test_result_void_err() {
38 mut or_block := false
39 result_void(true) or {
40 assert err.msg() == 'throw'
41 or_block = true
42 }
43 assert or_block
44}
45
46fn propagate() ! {
47 result_void(false)!
48}
49
50fn test_propagation() {
51 propagate() or { assert false }
52}
53
54fn function_that_can_return_error() !int {
55 return error('abc')
56}
57
58fn util_error_propagation() ! {
59 function_that_can_return_error()!
60 assert false
61}
62
63fn test_return_on_error_propagation() {
64 util_error_propagation() or { assert err.msg() == 'abc' }
65}
66
67fn unsafe_return_error() !int {
68 unsafe {
69 return error('abc')
70 }
71}
72
73fn test_unsafe_return_error() {
74 unsafe_return_error() or { assert err.msg() == 'abc' }
75}
76
77fn return_reference_type(path string) !&string {
78 if path == '' {
79 return error('vfopen called with ""')
80 }
81 str := ''
82 return &str
83}
84
85fn read() !string {
86 return ''
87}
88
89fn test_results_if_guard() {
90 if fcontent := read() {
91 assert fcontent == ''
92 assert '${fcontent}' == ''
93 return
94 }
95 assert false
96}
97
98fn res_err_with_code(code int) !string {
99 return error_with_code('hi', code)
100}
101
102fn test_err_with_code() {
103 if w := res_err_with_code(137) {
104 assert false
105 _ := w
106 } else {
107 assert err.str() == 'hi; code: 137'
108 assert err.msg() == 'hi'
109 assert err.code() == 137
110 }
111 v := res_err_with_code(56) or {
112 assert err.str() == 'hi; code: 56'
113 assert err.msg() == 'hi'
114 assert err.code() == 56
115 return
116 }
117 assert false
118 _ := v
119}
120