blob: ac846a4ad10e205850314350bd6d1ef41f8dd3e2 [file] [log] [blame]
Bram Moolenaar905dd902019-04-07 14:21:47 +02001" Tests for decoding escape sequences sent by the terminal.
2
3" This only works for Unix in a terminal
4if has('gui_running') || !has('unix')
5 finish
6endif
7
8func Test_xterm_mouse_click()
9 new
10 let save_mouse = &mouse
11 let save_term = &term
12 let save_ttymouse = &ttymouse
13 set mouse=a
14 set term=xterm
15 call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer'])
16 redraw
17
18 " Xterm mouse click
19 set ttymouse=xterm
20 let button = 0x20 " left down
21 let row = 2 + 32
22 let col = 6 + 32
23 call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
24
25 let button = 0x23 " release
26 call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
27
28 call assert_equal([0, 2, 6, 0], getpos('.'))
29
30 " SGR mouse click
31 set ttymouse=sgr
32 let button = 0 " left down
33 let row = 3
34 let col = 9
35 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
36
37 let button = 3 " release
38 call feedkeys(printf("\<Esc>[<%d;%d;%dm", button, col, row), 'Lx!')
39
40 call assert_equal([0, 3, 9, 0], getpos('.'))
41
42 let &mouse = save_mouse
43 let &term = save_term
44 let &ttymouse = save_ttymouse
45 bwipe!
46endfunc
47
Bram Moolenaar049736f2019-04-07 21:55:07 +020048func Test_xterm_mouse_wheel()
49 new
50 let save_mouse = &mouse
51 let save_term = &term
52 let save_ttymouse = &ttymouse
53 set mouse=a
54 set term=xterm
55 call setline(1, range(1, 100))
56
57 " Test Xterm mouse wheel.
58 set ttymouse=xterm
59 let button = 0x41 " wheel down.
60 let row = 1 + 32 " cursor position for mouse wheel is not relevant.
61 let col = 1 + 32
62
63 call assert_equal(1, line('w0'))
64 call assert_equal([0, 1, 1, 0], getpos('.'))
65 call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
66 call assert_equal(4, line('w0'))
67 call assert_equal([0, 4, 1, 0], getpos('.'))
68 call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
69 call assert_equal(7, line('w0'))
70 call assert_equal([0, 7, 1, 0], getpos('.'))
71
72 let button = 0x40 " wheel up.
73
74 call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
75 call assert_equal(4, line('w0'))
76 call assert_equal([0, 7, 1, 0], getpos('.'))
77 call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
78 call assert_equal(1, line('w0'))
79 call assert_equal([0, 7, 1, 0], getpos('.'))
80
81 " Test SGR mouse wheel.
82 set ttymouse=sgr
83 go
84 let button = 0x41 " wheel down.
85 let row = 1 " cursor position for mouse wheel is not relevant.
86 let col = 1
87
88 call assert_equal(1, line('w0'))
89 call assert_equal([0, 1, 1, 0], getpos('.'))
90 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
91 call assert_equal(4, line('w0'))
92 call assert_equal([0, 4, 1, 0], getpos('.'))
93 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
94 call assert_equal(7, line('w0'))
95 call assert_equal([0, 7, 1, 0], getpos('.'))
96
97 let button = 0x40 " wheel up.
98
99 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
100 call assert_equal(4, line('w0'))
101 call assert_equal([0, 7, 1, 0], getpos('.'))
102 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
103 call assert_equal(1, line('w0'))
104 call assert_equal([0, 7, 1, 0], getpos('.'))
105 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
106 call assert_equal(1, line('w0'))
107 call assert_equal([0, 7, 1, 0], getpos('.'))
108
109 let &mouse = save_mouse
110 let &term = save_term
111 let &ttymouse = save_ttymouse
112 bwipe!
113endfunc
Bram Moolenaar3fb01a52019-04-09 21:52:02 +0200114
115func Test_xterm_mouse_drag_window_separator()
116 let save_mouse = &mouse
117 let save_term = &term
118 let save_ttymouse = &ttymouse
119 set mouse=a
120 set term=xterm
121 set ttymouse=sgr
122
123 " Split horizontally and test dragging the horizontal window separator.
124 split
125 let rowseparator = winheight(0) + 1
126
127 let button = 0 " left down.
128 let row = rowseparator
129 let col = 1
130 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
131
132 let drag = 32
133 let row -= 1
134 call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
135 call assert_equal(rowseparator - 1, winheight(0) + 1)
136 let row += 1
137 call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
138 call assert_equal(rowseparator, winheight(0) + 1)
139
140 let release = 3
141 call feedkeys(printf("\<Esc>[<%d;%d;%dm", release, col, row), 'Lx!')
142 call assert_equal(rowseparator, winheight(0) + 1)
143
144 bwipe!
145
146 " Split vertically and test dragging the vertical window separator.
147 vsplit
148 let colseparator = winwidth(0) + 1
149
150 let button = 0
151 let row = 1
152 let col = colseparator
153 call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
154
155 let drag = 32
156 let col -= 1
157 call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
158 call assert_equal(colseparator - 1, winwidth(0) + 1)
159 let col += 1
160 call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
161 call assert_equal(colseparator, winwidth(0) + 1)
162
163 let release = 3
164 call feedkeys(printf("\<Esc>[<%d;%d;%dm", release, col, row), 'Lx!')
165 call assert_equal(colseparator, winwidth(0) + 1)
166
167 bwipe!
168 let &mouse = save_mouse
169 let &term = save_term
170 let &ttymouse = save_ttymouse
171endfunc