1 | import os |
2 | |
3 | fn former_handler(signal os.Signal) { |
4 | println('former_handler') |
5 | exit(0) |
6 | } |
7 | |
8 | fn default_handler(signal os.Signal) { |
9 | println('default_handler') |
10 | exit(0) |
11 | } |
12 | |
13 | fn test_signal_opt() { |
14 | os.signal_opt(.int, default_handler) or { assert false } |
15 | } |
16 | |
17 | fn 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.msg() == 'Invalid argument; code: 22' |
24 | assert err.code() == 22 |
25 | } |
26 | } |
27 | |
28 | fn test_signal_opt_return_former_handler() { |
29 | func1 := os.signal_opt(.term, former_handler) or { panic('unexpected error') } |
30 | assert isnil(func1) |
31 | func2 := os.signal_opt(.term, default_handler) or { panic('unexpected error') } |
32 | assert !isnil(func2) |
33 | // this should work, but makes the CI fail because of a bug in clang -fsanitize=memory |
34 | // assert func2 == former_handler |
35 | } |