v2 / vlib / os / signal_test.v
48 lines · 41 sloc · 1.13 KB · 3a3a1085cf7ba2d0bb9f8b60d7bbde5a19404941
Raw
1import os
2
3fn former_handler(signal os.Signal) {
4 println('former_handler')
5 exit(0)
6}
7
8fn default_handler(signal os.Signal) {
9 println('default_handler')
10 exit(0)
11}
12
13fn test_signal_opt() {
14 os.signal_opt(.int, default_handler) or { assert false }
15}
16
17fn test_signal_opt_invalid_argument() {
18 // Can't register a signal on SIGKILL
19 if _ := os.signal_opt(.kill, default_handler) {
20 assert false
21 }
22 os.signal_opt(.kill, default_handler) or {
23 assert err.str() == 'Invalid argument; code: 22'
24 assert err.msg() == 'Invalid argument'
25 assert err.code() == 22
26 }
27}
28
29fn test_signal_opt_return_former_handler() {
30 func1 := os.signal_opt(.term, former_handler) or { panic('unexpected error') }
31 assert isnil(func1)
32 func2 := os.signal_opt(.term, default_handler) or { panic('unexpected error') }
33 assert !isnil(func2)
34 // this should work, but makes the CI fail because of a bug in clang -fsanitize=memory
35 // assert func2 == former_handler
36}
37
38fn signal_ignore_in_background_thread() {
39 os.signal_ignore(.pipe, .urg)
40 assert true
41}
42
43fn test_signal_ignore() {
44 os.signal_ignore(.pipe, .urg)
45 assert true
46 t := spawn signal_ignore_in_background_thread()
47 t.wait()
48}
49