v2 / vlib / term / ui / termios_nix_test.v
75 lines · 60 sloc · 1.87 KB · 960264bdeb16ff056287d2869a388d3d5931a60c
Raw
1module ui
2
3import os
4
5fn test_terminal_capabilities_disable_xterm_features_for_linux_console() {
6 caps := terminal_capabilities_for('linux')
7 assert !caps.enable_ansi256
8 assert !caps.supports_alternate_buffer
9 assert !caps.supports_sgr_mouse
10 assert !caps.supports_sync_updates
11 assert !caps.supports_window_title
12}
13
14fn test_terminal_capabilities_keep_xterm_defaults() {
15 caps := terminal_capabilities_for('xterm-256color')
16 assert caps.enable_ansi256
17 assert caps.supports_alternate_buffer
18 assert caps.supports_sgr_mouse
19 assert caps.supports_sync_updates
20 assert caps.supports_window_title
21}
22
23fn test_get_cursor_position_reads_valid_row_column_data() ! {
24 mut original_stdin_fd := -1
25 unsafe {
26 mut pipe := os.pipe()!
27
28 fake_cursor_pos_data := '\033[45;70R'
29 written_bytes := pipe.write_string(fake_cursor_pos_data)!
30 if written_bytes == -1 {
31 pipe.close()
32 return error('error writing into pipe: ${C.strerror(C.errno)}')
33 }
34
35 C.close(pipe.write_fd)
36
37 if C.dup2(pipe.read_fd, C.STDIN_FILENO) == -1 {
38 C.close(pipe.read_fd)
39 return error('error redirecting stdin with dup2: ${C.strerror(C.errno)}')
40 }
41
42 C.close(pipe.read_fd)
43
44 cursor_pos_x, cursor_pos_y := get_cursor_position()
45 assert cursor_pos_x == 45
46 assert cursor_pos_y == 70
47 }
48}
49
50fn test_get_cursor_position_reads_empty_position_data() ! {
51 mut original_stdin_fd := -1
52 unsafe {
53 mut pipe := os.pipe()!
54
55 fake_cursor_pos_data := ''
56 written_bytes := pipe.write_string(fake_cursor_pos_data)!
57 if written_bytes == -1 {
58 pipe.close()
59 return error('error writing into pipe: ${C.strerror(C.errno)}')
60 }
61
62 C.close(pipe.write_fd)
63
64 if C.dup2(pipe.read_fd, C.STDIN_FILENO) == -1 {
65 C.close(pipe.read_fd)
66 return error('error redirecting stdin with dup2: ${C.strerror(C.errno)}')
67 }
68
69 C.close(pipe.read_fd)
70
71 cursor_pos_x, cursor_pos_y := get_cursor_position()
72 assert cursor_pos_x == -1
73 assert cursor_pos_y == -1
74 }
75}
76