1 use anes::parser::{KeyCode, KeyModifiers, Sequence};
2 
3 use crate::test_sequences;
4 
5 #[test]
esc_o_f_keys()6 fn esc_o_f_keys() {
7     test_sequences!(
8         b"\x1BOP",
9         Sequence::Key(KeyCode::F(1), KeyModifiers::empty()),
10         b"\x1BOQ",
11         Sequence::Key(KeyCode::F(2), KeyModifiers::empty()),
12         b"\x1BOR",
13         Sequence::Key(KeyCode::F(3), KeyModifiers::empty()),
14         b"\x1BOS",
15         Sequence::Key(KeyCode::F(4), KeyModifiers::empty()),
16     );
17 }
18 
19 #[test]
csi_key_codes()20 fn csi_key_codes() {
21     test_sequences!(
22         b"\x1B[A",
23         Sequence::Key(KeyCode::Up, KeyModifiers::empty()),
24         b"\x1B[B",
25         Sequence::Key(KeyCode::Down, KeyModifiers::empty()),
26         b"\x1B[C",
27         Sequence::Key(KeyCode::Right, KeyModifiers::empty()),
28         b"\x1B[D",
29         Sequence::Key(KeyCode::Left, KeyModifiers::empty()),
30         b"\x1B[H",
31         Sequence::Key(KeyCode::Home, KeyModifiers::empty()),
32         b"\x1B[F",
33         Sequence::Key(KeyCode::End, KeyModifiers::empty()),
34         b"\x1B[Z",
35         Sequence::Key(KeyCode::BackTab, KeyModifiers::empty()),
36     );
37 }
38 
39 #[test]
csi_arrow_key_modifiers()40 fn csi_arrow_key_modifiers() {
41     test_sequences!(
42         b"\x1B[50A",
43         Sequence::Key(KeyCode::Up, KeyModifiers::SHIFT),
44         b"\x1B[53A",
45         Sequence::Key(KeyCode::Up, KeyModifiers::CONTROL),
46     );
47 }
48 
49 #[test]
csi_tilde_key_modifiers()50 fn csi_tilde_key_modifiers() {
51     test_sequences!(
52         b"\x1B[1~",
53         Sequence::Key(KeyCode::Home, KeyModifiers::empty()),
54         b"\x1B[1;0~",
55         Sequence::Key(KeyCode::Home, KeyModifiers::empty()),
56         b"\x1B[1;1~",
57         Sequence::Key(KeyCode::Home, KeyModifiers::empty()),
58         b"\x1B[1;2~",
59         Sequence::Key(KeyCode::Home, KeyModifiers::SHIFT),
60         b"\x1B[1;3~",
61         Sequence::Key(KeyCode::Home, KeyModifiers::ALT),
62         b"\x1B[1;4~",
63         Sequence::Key(KeyCode::Home, KeyModifiers::SHIFT | KeyModifiers::ALT),
64         b"\x1B[1;5~",
65         Sequence::Key(KeyCode::Home, KeyModifiers::CONTROL),
66         b"\x1B[1;6~",
67         Sequence::Key(KeyCode::Home, KeyModifiers::SHIFT | KeyModifiers::CONTROL),
68         b"\x1B[1;7~",
69         Sequence::Key(KeyCode::Home, KeyModifiers::ALT | KeyModifiers::CONTROL),
70         b"\x1B[1;8~",
71         Sequence::Key(
72             KeyCode::Home,
73             KeyModifiers::SHIFT | KeyModifiers::ALT | KeyModifiers::CONTROL
74         ),
75         b"\x1B[1;9~",
76         Sequence::Key(KeyCode::Home, KeyModifiers::META),
77         b"\x1B[1;10~",
78         Sequence::Key(KeyCode::Home, KeyModifiers::META | KeyModifiers::SHIFT),
79         b"\x1B[1;11~",
80         Sequence::Key(KeyCode::Home, KeyModifiers::META | KeyModifiers::ALT),
81         b"\x1B[1;12~",
82         Sequence::Key(
83             KeyCode::Home,
84             KeyModifiers::META | KeyModifiers::SHIFT | KeyModifiers::ALT
85         ),
86         b"\x1B[1;13~",
87         Sequence::Key(KeyCode::Home, KeyModifiers::META | KeyModifiers::CONTROL),
88         b"\x1B[1;14~",
89         Sequence::Key(
90             KeyCode::Home,
91             KeyModifiers::META | KeyModifiers::SHIFT | KeyModifiers::CONTROL
92         ),
93         b"\x1B[1;15~",
94         Sequence::Key(
95             KeyCode::Home,
96             KeyModifiers::META | KeyModifiers::ALT | KeyModifiers::CONTROL
97         ),
98         b"\x1B[1;16~",
99         Sequence::Key(
100             KeyCode::Home,
101             KeyModifiers::META | KeyModifiers::SHIFT | KeyModifiers::ALT | KeyModifiers::CONTROL
102         ),
103         b"\x1B[1;17~",
104         Sequence::Key(KeyCode::Home, KeyModifiers::empty()),
105     );
106 }
107 
108 #[test]
csi_tilde_f_keys()109 fn csi_tilde_f_keys() {
110     test_sequences!(
111         b"\x1B[11~",
112         Sequence::Key(KeyCode::F(1), KeyModifiers::empty()),
113         b"\x1B[12~",
114         Sequence::Key(KeyCode::F(2), KeyModifiers::empty()),
115         b"\x1B[13~",
116         Sequence::Key(KeyCode::F(3), KeyModifiers::empty()),
117         b"\x1B[14~",
118         Sequence::Key(KeyCode::F(4), KeyModifiers::empty()),
119         b"\x1B[15~",
120         Sequence::Key(KeyCode::F(5), KeyModifiers::empty()),
121         b"\x1B[17~",
122         Sequence::Key(KeyCode::F(6), KeyModifiers::empty()),
123         b"\x1B[18~",
124         Sequence::Key(KeyCode::F(7), KeyModifiers::empty()),
125         b"\x1B[19~",
126         Sequence::Key(KeyCode::F(8), KeyModifiers::empty()),
127         b"\x1B[20~",
128         Sequence::Key(KeyCode::F(9), KeyModifiers::empty()),
129         b"\x1B[21~",
130         Sequence::Key(KeyCode::F(10), KeyModifiers::empty()),
131         b"\x1B[23~",
132         Sequence::Key(KeyCode::F(11), KeyModifiers::empty()),
133         b"\x1B[24~",
134         Sequence::Key(KeyCode::F(12), KeyModifiers::empty()),
135     );
136 }
137 
138 #[test]
csi_tilde_key_codes()139 fn csi_tilde_key_codes() {
140     test_sequences!(
141         b"\x1B[1~",
142         Sequence::Key(KeyCode::Home, KeyModifiers::empty()),
143         b"\x1B[2~",
144         Sequence::Key(KeyCode::Insert, KeyModifiers::empty()),
145         b"\x1B[3~",
146         Sequence::Key(KeyCode::Delete, KeyModifiers::empty()),
147         b"\x1B[4~",
148         Sequence::Key(KeyCode::End, KeyModifiers::empty()),
149         b"\x1B[5~",
150         Sequence::Key(KeyCode::PageUp, KeyModifiers::empty()),
151         b"\x1B[6~",
152         Sequence::Key(KeyCode::PageDown, KeyModifiers::empty()),
153         b"\x1B[7~",
154         Sequence::Key(KeyCode::Home, KeyModifiers::empty()),
155         b"\x1B[8~",
156         Sequence::Key(KeyCode::End, KeyModifiers::empty()),
157     );
158 }
159