aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/utils.rs
blob: 63c953f6638054122eaa795337380559351841cd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use crate::panes::PositionAndSize;
use crate::panes::TerminalPane;

pub fn get_output_frame_snapshots(
    output_frames: &[Vec<u8>],
    win_size: &PositionAndSize,
) -> Vec<String> {
    let mut vte_parser = vte::Parser::new();
    let main_pid = 0;
    let mut terminal_output = TerminalPane::new(main_pid, *win_size);

    let mut snapshots = vec![];
    for frame in output_frames.iter() {
        for byte in frame.iter() {
            vte_parser.advance(&mut terminal_output, *byte);
        }
        let output_lines = terminal_output.read_buffer_as_lines();
        let cursor_coordinates = terminal_output.cursor_coordinates();
        let mut snapshot = String::new();
        for (line_index, line) in output_lines.iter().enumerate() {
            for (character_index, terminal_character) in line.iter().enumerate() {
                if let Some((cursor_x, cursor_y)) = cursor_coordinates {
                    if line_index == cursor_y && character_index == cursor_x {
                        snapshot.push('█');
                        continue;
                    }
                }
                snapshot.push(terminal_character.character);
            }
            if line_index != output_lines.len() - 1 {
                snapshot.push('\n');
            }
        }
        snapshots.push(snapshot);
    }
    snapshots
}

pub mod commands {
    /// ctrl-g
    pub const COMMAND_TOGGLE: [u8; 1] = [7];
    /// b
    pub const SPLIT_HORIZONTALLY: [u8; 1] = [98];
    /// n
    pub const SPLIT_VERTICALLY: [u8; 1] = [110];
    /// j
    pub const RESIZE_DOWN: [u8; 1] = [106];
    /// k
    pub const RESIZE_UP: [u8; 1] = [107];
    /// p
    pub const MOVE_FOCUS: [u8; 1] = [112];
    /// h
    pub const RESIZE_LEFT: [u8; 1] = [104];
    /// l
    pub const RESIZE_RIGHT: [u8; 1] = [108];
    /// z
    pub const SPAWN_TERMINAL: [u8; 1] = [122];
    /// q
    pub const QUIT: [u8; 1] = [113];
    /// PgUp
    pub const SCROLL_UP: [u8; 4] = [27, 91, 53, 126];
    /// PgDn
    pub const SCROLL_DOWN: [u8; 4] = [27, 91, 54, 126];
    /// x
    pub const CLOSE_FOCUSED_PANE: [u8; 1] = [120];
    /// e
    pub const TOGGLE_ACTIVE_TERMINAL_FULLSCREEN: [u8; 1] = [101];
    /// y
    pub const MOVE_FOCUS_LEFT: [u8; 1] = [121];
    /// u
    pub const MOVE_FOCUS_DOWN: [u8; 1] = [117];
    /// i
    pub const MOVE_FOCUS_UP: [u8; 1] = [105];
    /// o
    pub const MOVE_FOCUS_RIGHT: [u8; 1] = [111];
    /// 1
    pub const NEW_TAB: [u8; 1] = [49];
    /// 2
    pub const SWITCH_PREV_TAB: [u8; 1] = [50];
    /// 3
    pub const SWITCH_NEXT_TAB: [u8; 1] = [51];
    /// 4
    pub const CLOSE_TAB: [u8; 1] = [52];
}