v2 / vlib / v / tests / error_void_test.v
66 lines · 57 sloc · 1006 bytes · e1e3d31917b3252d49161f5597c8b873999ba71b
Raw
1fn foo() ! {
2 return error('something')
3}
4
5fn test_option_void() {
6 foo() or {
7 println(err)
8 assert err.msg() == 'something'
9 return
10 }
11}
12
13fn bar() ! {
14 return error('bar error')
15}
16
17fn test_option_void_only_question() {
18 bar() or {
19 println(err)
20 assert err.msg() == 'bar error'
21 return
22 }
23}
24
25fn test_option_void_with_empty_or() {
26 foo() or {}
27 assert true
28}
29
30fn option_void(a int) ! {
31 if a != 0 {
32 return
33 } else {
34 return error('zero error')
35 }
36}
37
38fn test_option_void_with_return() {
39 option_void(0) or {
40 println(err)
41 assert err.msg() == 'zero error'
42 return
43 }
44 option_void(-1) or {
45 println(err)
46 assert err.msg() == 'zero error'
47 return
48 }
49 assert true
50}
51
52fn must_error_for_generic_result() ! {
53 return error('boom')
54}
55
56fn never_returns_normally[T](value T) !T {
57 must_error_for_generic_result()!
58}
59
60fn test_generic_result_propagation_from_always_error_fn_does_not_need_placeholder_return() {
61 never_returns_normally(42) or {
62 assert err.msg() == 'boom'
63 return
64 }
65 assert false
66}
67