1905dd905SBram Moolenaar" Tests for decoding escape sequences sent by the terminal.
2905dd905SBram Moolenaar
3905dd905SBram Moolenaar" This only works for Unix in a terminal
4905dd905SBram Moolenaarif has('gui_running') || !has('unix')
5905dd905SBram Moolenaar  finish
6905dd905SBram Moolenaarendif
7905dd905SBram Moolenaar
83fbd2d7cSBram Moolenaar" Helper function to emit a terminal escape code.
93fbd2d7cSBram Moolenaarfunc TerminalEscapeCode(code_xterm, code_sgr, row, col, m)
103fbd2d7cSBram Moolenaar  if &ttymouse ==# 'xterm'
113fbd2d7cSBram Moolenaar    " need to use byte encoding here.
123fbd2d7cSBram Moolenaar    let str = list2str([a:code_xterm, a:col + 0x20, a:row + 0x20])
133fbd2d7cSBram Moolenaar    if has('iconv')
143fbd2d7cSBram Moolenaar      let bytes = iconv(str, 'utf-8', 'latin1')
153fbd2d7cSBram Moolenaar    else
163fbd2d7cSBram Moolenaar      " Hopefully the numbers are not too big.
173fbd2d7cSBram Moolenaar      let bytes = str
183fbd2d7cSBram Moolenaar    endif
193fbd2d7cSBram Moolenaar    call feedkeys("\<Esc>[M" .. bytes, 'Lx!')
203fbd2d7cSBram Moolenaar  elseif &ttymouse ==# 'sgr'
213fbd2d7cSBram Moolenaar    call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code_sgr, a:col, a:row, a:m), 'Lx!')
223fbd2d7cSBram Moolenaar  endif
233fbd2d7cSBram Moolenaarendfunc
243fbd2d7cSBram Moolenaar
253fbd2d7cSBram Moolenaarfunc MouseLeftClick(row, col)
263fbd2d7cSBram Moolenaar  call TerminalEscapeCode(0x20, 0, a:row, a:col, 'M')
273fbd2d7cSBram Moolenaarendfunc
283fbd2d7cSBram Moolenaar
293fbd2d7cSBram Moolenaarfunc MouseLeftRelease(row, col)
303fbd2d7cSBram Moolenaar  call TerminalEscapeCode(0x23, 3, a:row, a:col, 'm')
313fbd2d7cSBram Moolenaarendfunc
323fbd2d7cSBram Moolenaar
333fbd2d7cSBram Moolenaarfunc MouseLeftDrag(row, col)
343fbd2d7cSBram Moolenaar  call TerminalEscapeCode(0x43, 0x20, a:row, a:col, 'M')
353fbd2d7cSBram Moolenaarendfunc
363fbd2d7cSBram Moolenaar
373fbd2d7cSBram Moolenaarfunc MouseWheelUp(row, col)
383fbd2d7cSBram Moolenaar  call TerminalEscapeCode(0x40, 0x40, a:row, a:col, 'M')
393fbd2d7cSBram Moolenaarendfunc
403fbd2d7cSBram Moolenaar
413fbd2d7cSBram Moolenaarfunc MouseWheelDown(row, col)
423fbd2d7cSBram Moolenaar  call TerminalEscapeCode(0x41, 0x41, a:row, a:col, 'M')
433fbd2d7cSBram Moolenaarendfunc
443fbd2d7cSBram Moolenaar
45905dd905SBram Moolenaarfunc Test_xterm_mouse_click()
46905dd905SBram Moolenaar  new
47905dd905SBram Moolenaar  let save_mouse = &mouse
48905dd905SBram Moolenaar  let save_term = &term
49905dd905SBram Moolenaar  let save_ttymouse = &ttymouse
503fbd2d7cSBram Moolenaar  set mouse=a term=xterm
51905dd905SBram Moolenaar  call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer'])
52905dd905SBram Moolenaar
533fbd2d7cSBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
543fbd2d7cSBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
553fbd2d7cSBram Moolenaar    go
563fbd2d7cSBram Moolenaar    call assert_equal([0, 1, 1, 0], getpos('.'))
573fbd2d7cSBram Moolenaar    let row = 2
583fbd2d7cSBram Moolenaar    let col = 6
593fbd2d7cSBram Moolenaar    call MouseLeftClick(row, col)
603fbd2d7cSBram Moolenaar    call MouseLeftRelease(row, col)
61905dd905SBram Moolenaar    call assert_equal([0, 2, 6, 0], getpos('.'))
623fbd2d7cSBram Moolenaar  endfor
63905dd905SBram Moolenaar
64905dd905SBram Moolenaar  let &mouse = save_mouse
65905dd905SBram Moolenaar  let &term = save_term
66905dd905SBram Moolenaar  let &ttymouse = save_ttymouse
67905dd905SBram Moolenaar  bwipe!
68905dd905SBram Moolenaarendfunc
69905dd905SBram Moolenaar
70049736faSBram Moolenaarfunc Test_xterm_mouse_wheel()
71049736faSBram Moolenaar  new
72049736faSBram Moolenaar  let save_mouse = &mouse
73049736faSBram Moolenaar  let save_term = &term
74049736faSBram Moolenaar  let save_ttymouse = &ttymouse
753fbd2d7cSBram Moolenaar  set mouse=a term=xterm
76049736faSBram Moolenaar  call setline(1, range(1, 100))
77049736faSBram Moolenaar
783fbd2d7cSBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
793fbd2d7cSBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
80049736faSBram Moolenaar    go
81049736faSBram Moolenaar    call assert_equal(1, line('w0'))
82049736faSBram Moolenaar    call assert_equal([0, 1, 1, 0], getpos('.'))
833fbd2d7cSBram Moolenaar
843fbd2d7cSBram Moolenaar    call MouseWheelDown(1, 1)
85049736faSBram Moolenaar    call assert_equal(4, line('w0'))
86049736faSBram Moolenaar    call assert_equal([0, 4, 1, 0], getpos('.'))
873fbd2d7cSBram Moolenaar
883fbd2d7cSBram Moolenaar    call MouseWheelDown(1, 1)
89049736faSBram Moolenaar    call assert_equal(7, line('w0'))
90049736faSBram Moolenaar    call assert_equal([0, 7, 1, 0], getpos('.'))
91049736faSBram Moolenaar
923fbd2d7cSBram Moolenaar    call MouseWheelUp(1, 1)
93049736faSBram Moolenaar    call assert_equal(4, line('w0'))
94049736faSBram Moolenaar    call assert_equal([0, 7, 1, 0], getpos('.'))
953fbd2d7cSBram Moolenaar
963fbd2d7cSBram Moolenaar    call MouseWheelUp(1, 1)
97049736faSBram Moolenaar    call assert_equal(1, line('w0'))
98049736faSBram Moolenaar    call assert_equal([0, 7, 1, 0], getpos('.'))
993fbd2d7cSBram Moolenaar  endfor
100049736faSBram Moolenaar
101049736faSBram Moolenaar  let &mouse = save_mouse
102049736faSBram Moolenaar  let &term = save_term
103049736faSBram Moolenaar  let &ttymouse = save_ttymouse
104049736faSBram Moolenaar  bwipe!
105049736faSBram Moolenaarendfunc
1063fb01a53SBram Moolenaar
1073fb01a53SBram Moolenaarfunc Test_xterm_mouse_drag_window_separator()
1083fb01a53SBram Moolenaar  let save_mouse = &mouse
1093fb01a53SBram Moolenaar  let save_term = &term
1103fb01a53SBram Moolenaar  let save_ttymouse = &ttymouse
1113fbd2d7cSBram Moolenaar  set mouse=a term=xterm
1123fbd2d7cSBram Moolenaar
1133fbd2d7cSBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
1143fbd2d7cSBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
1153fb01a53SBram Moolenaar
1163fb01a53SBram Moolenaar    " Split horizontally and test dragging the horizontal window separator.
1173fb01a53SBram Moolenaar    split
1183fb01a53SBram Moolenaar    let rowseparator = winheight(0) + 1
1193fb01a53SBram Moolenaar    let row = rowseparator
1203fb01a53SBram Moolenaar    let col = 1
121c8b3ddabSBram Moolenaar
122c8b3ddabSBram Moolenaar    " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported.
12339f76c6aSBram Moolenaar    if ttymouse_val !=# 'xterm' || row <= 223
1243fbd2d7cSBram Moolenaar      call MouseLeftClick(row, col)
1253fb01a53SBram Moolenaar      let row -= 1
1263fbd2d7cSBram Moolenaar      call MouseLeftDrag(row, col)
1273fb01a53SBram Moolenaar      call assert_equal(rowseparator - 1, winheight(0) + 1)
1283fb01a53SBram Moolenaar      let row += 1
1293fbd2d7cSBram Moolenaar      call MouseLeftDrag(row, col)
1303fb01a53SBram Moolenaar      call assert_equal(rowseparator, winheight(0) + 1)
1313fbd2d7cSBram Moolenaar      call MouseLeftRelease(row, col)
1323fb01a53SBram Moolenaar      call assert_equal(rowseparator, winheight(0) + 1)
13339f76c6aSBram Moolenaar    endif
1343fb01a53SBram Moolenaar    bwipe!
1353fb01a53SBram Moolenaar
1363fb01a53SBram Moolenaar    " Split vertically and test dragging the vertical window separator.
1373fb01a53SBram Moolenaar    vsplit
1383fb01a53SBram Moolenaar    let colseparator = winwidth(0) + 1
1393fb01a53SBram Moolenaar    let row = 1
1403fb01a53SBram Moolenaar    let col = colseparator
14139f76c6aSBram Moolenaar
14239f76c6aSBram Moolenaar    " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported.
14339f76c6aSBram Moolenaar    if ttymouse_val !=# 'xterm' || col <= 223
1443fbd2d7cSBram Moolenaar      call MouseLeftClick(row, col)
1453fb01a53SBram Moolenaar      let col -= 1
1463fbd2d7cSBram Moolenaar      call MouseLeftDrag(row, col)
1473fb01a53SBram Moolenaar      call assert_equal(colseparator - 1, winwidth(0) + 1)
1483fb01a53SBram Moolenaar      let col += 1
1493fbd2d7cSBram Moolenaar      call MouseLeftDrag(row, col)
1503fb01a53SBram Moolenaar      call assert_equal(colseparator, winwidth(0) + 1)
1513fbd2d7cSBram Moolenaar      call MouseLeftRelease(row, col)
1523fb01a53SBram Moolenaar      call assert_equal(colseparator, winwidth(0) + 1)
15339f76c6aSBram Moolenaar    endif
1543fb01a53SBram Moolenaar    bwipe!
1553fbd2d7cSBram Moolenaar  endfor
1563fbd2d7cSBram Moolenaar
1573fbd2d7cSBram Moolenaar  let &mouse = save_mouse
1583fbd2d7cSBram Moolenaar  let &term = save_term
1593fbd2d7cSBram Moolenaar  let &ttymouse = save_ttymouse
1603fbd2d7cSBram Moolenaarendfunc
1613fbd2d7cSBram Moolenaar
1623fbd2d7cSBram Moolenaarfunc Test_xterm_mouse_drag_statusline()
1633fbd2d7cSBram Moolenaar  let save_mouse = &mouse
1643fbd2d7cSBram Moolenaar  let save_term = &term
1653fbd2d7cSBram Moolenaar  let save_ttymouse = &ttymouse
166ca57ab54SBram Moolenaar  let save_laststatus = &laststatus
167ca57ab54SBram Moolenaar  set mouse=a term=xterm laststatus=2
1683fbd2d7cSBram Moolenaar
1693fbd2d7cSBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
1703fbd2d7cSBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
1713fbd2d7cSBram Moolenaar
1723fbd2d7cSBram Moolenaar    call assert_equal(1, &cmdheight)
1733fbd2d7cSBram Moolenaar    let rowstatusline = winheight(0) + 1
1743fbd2d7cSBram Moolenaar    let row = rowstatusline
1753fbd2d7cSBram Moolenaar    let col = 1
176c8b3ddabSBram Moolenaar
177c8b3ddabSBram Moolenaar    if ttymouse_val ==# 'xterm' && row > 223
178c8b3ddabSBram Moolenaar      " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported.
179c8b3ddabSBram Moolenaar      continue
180c8b3ddabSBram Moolenaar    endif
181c8b3ddabSBram Moolenaar
1823fbd2d7cSBram Moolenaar    call MouseLeftClick(row, col)
1833fbd2d7cSBram Moolenaar    let row -= 1
1843fbd2d7cSBram Moolenaar    call MouseLeftDrag(row, col)
1853fbd2d7cSBram Moolenaar    call assert_equal(2, &cmdheight)
1863fbd2d7cSBram Moolenaar    call assert_equal(rowstatusline - 1, winheight(0) + 1)
1873fbd2d7cSBram Moolenaar    let row += 1
1883fbd2d7cSBram Moolenaar    call MouseLeftDrag(row, col)
1893fbd2d7cSBram Moolenaar    call assert_equal(1, &cmdheight)
1903fbd2d7cSBram Moolenaar    call assert_equal(rowstatusline, winheight(0) + 1)
1913fbd2d7cSBram Moolenaar    call MouseLeftRelease(row, col)
1923fbd2d7cSBram Moolenaar    call assert_equal(1, &cmdheight)
1933fbd2d7cSBram Moolenaar    call assert_equal(rowstatusline, winheight(0) + 1)
1943fbd2d7cSBram Moolenaar  endfor
1953fbd2d7cSBram Moolenaar
1963fb01a53SBram Moolenaar  let &mouse = save_mouse
1973fb01a53SBram Moolenaar  let &term = save_term
1983fb01a53SBram Moolenaar  let &ttymouse = save_ttymouse
199ca57ab54SBram Moolenaar  let &laststatus = save_laststatus
200ca57ab54SBram Moolenaarendfunc
201ca57ab54SBram Moolenaar
202ca57ab54SBram Moolenaarfunc Test_xterm_mouse_click_tab()
203ca57ab54SBram Moolenaar  let save_mouse = &mouse
204ca57ab54SBram Moolenaar  let save_term = &term
205ca57ab54SBram Moolenaar  let save_ttymouse = &ttymouse
206ca57ab54SBram Moolenaar  set mouse=a term=xterm
207ca57ab54SBram Moolenaar  let row = 1
208ca57ab54SBram Moolenaar
209ca57ab54SBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
210ca57ab54SBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
211ca57ab54SBram Moolenaar    e Xfoo
212ca57ab54SBram Moolenaar    tabnew Xbar
213ca57ab54SBram Moolenaar
214ca57ab54SBram Moolenaar    let a = split(execute(':tabs'), "\n")
215ca57ab54SBram Moolenaar    call assert_equal(['Tab page 1',
216ca57ab54SBram Moolenaar        \              '    Xfoo',
217ca57ab54SBram Moolenaar        \              'Tab page 2',
218ca57ab54SBram Moolenaar        \              '>   Xbar'], a)
219ca57ab54SBram Moolenaar
220ca57ab54SBram Moolenaar    " Test clicking on tab names in the tabline at the top.
221ca57ab54SBram Moolenaar    let col = 2
22239f76c6aSBram Moolenaar    redraw
223ca57ab54SBram Moolenaar    call MouseLeftClick(row, col)
224ca57ab54SBram Moolenaar    call MouseLeftRelease(row, col)
225ca57ab54SBram Moolenaar    let a = split(execute(':tabs'), "\n")
226ca57ab54SBram Moolenaar    call assert_equal(['Tab page 1',
227ca57ab54SBram Moolenaar        \              '>   Xfoo',
228ca57ab54SBram Moolenaar        \              'Tab page 2',
229ca57ab54SBram Moolenaar        \              '    Xbar'], a)
230ca57ab54SBram Moolenaar
231ca57ab54SBram Moolenaar    let col = 9
232ca57ab54SBram Moolenaar    call MouseLeftClick(row, col)
233ca57ab54SBram Moolenaar    call MouseLeftRelease(row, col)
234ca57ab54SBram Moolenaar    let a = split(execute(':tabs'), "\n")
235ca57ab54SBram Moolenaar    call assert_equal(['Tab page 1',
236ca57ab54SBram Moolenaar        \              '    Xfoo',
237ca57ab54SBram Moolenaar        \              'Tab page 2',
238ca57ab54SBram Moolenaar        \              '>   Xbar'], a)
239ca57ab54SBram Moolenaar
240ca57ab54SBram Moolenaar    %bwipe!
241ca57ab54SBram Moolenaar  endfor
242ca57ab54SBram Moolenaar
243ca57ab54SBram Moolenaar  let &mouse = save_mouse
244ca57ab54SBram Moolenaar  let &term = save_term
245ca57ab54SBram Moolenaar  let &ttymouse = save_ttymouse
2463fb01a53SBram Moolenaarendfunc
24739f76c6aSBram Moolenaar
24839f76c6aSBram Moolenaarfunc Test_xterm_mouse_click_X_to_close_tab()
24939f76c6aSBram Moolenaar  let save_mouse = &mouse
25039f76c6aSBram Moolenaar  let save_term = &term
25139f76c6aSBram Moolenaar  let save_ttymouse = &ttymouse
25239f76c6aSBram Moolenaar  set mouse=a term=xterm
25339f76c6aSBram Moolenaar  let row = 1
25439f76c6aSBram Moolenaar  let col = &columns
25539f76c6aSBram Moolenaar
25639f76c6aSBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
25739f76c6aSBram Moolenaar    if ttymouse_val ==# 'xterm' && col > 223
25839f76c6aSBram Moolenaar      " When 'ttymouse' is 'xterm', row/col bigger than 223 are not supported.
25939f76c6aSBram Moolenaar      continue
26039f76c6aSBram Moolenaar    endif
26139f76c6aSBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
26239f76c6aSBram Moolenaar    e Xtab1
26339f76c6aSBram Moolenaar    tabnew Xtab2
26439f76c6aSBram Moolenaar    tabnew Xtab3
26539f76c6aSBram Moolenaar    tabn 2
26639f76c6aSBram Moolenaar
26739f76c6aSBram Moolenaar    let a = split(execute(':tabs'), "\n")
26839f76c6aSBram Moolenaar    call assert_equal(['Tab page 1',
26939f76c6aSBram Moolenaar        \              '    Xtab1',
27039f76c6aSBram Moolenaar        \              'Tab page 2',
27139f76c6aSBram Moolenaar        \              '>   Xtab2',
27239f76c6aSBram Moolenaar        \              'Tab page 3',
27339f76c6aSBram Moolenaar        \              '    Xtab3'], a)
27439f76c6aSBram Moolenaar
27539f76c6aSBram Moolenaar    " Click on "X" in tabline to close current tab i.e. Xtab2.
27639f76c6aSBram Moolenaar    redraw
27739f76c6aSBram Moolenaar    call MouseLeftClick(row, col)
27839f76c6aSBram Moolenaar    call MouseLeftRelease(row, col)
27939f76c6aSBram Moolenaar    let a = split(execute(':tabs'), "\n")
28039f76c6aSBram Moolenaar    call assert_equal(['Tab page 1',
28139f76c6aSBram Moolenaar        \              '    Xtab1',
28239f76c6aSBram Moolenaar        \              'Tab page 2',
28339f76c6aSBram Moolenaar        \              '>   Xtab3'], a)
28439f76c6aSBram Moolenaar
28539f76c6aSBram Moolenaar    %bwipe!
28639f76c6aSBram Moolenaar  endfor
28739f76c6aSBram Moolenaar
28839f76c6aSBram Moolenaar  let &mouse = save_mouse
28939f76c6aSBram Moolenaar  let &term = save_term
29039f76c6aSBram Moolenaar  let &ttymouse = save_ttymouse
29139f76c6aSBram Moolenaarendfunc
292e3e3828fSBram Moolenaar
293e3e3828fSBram Moolenaarfunc Test_xterm_mouse_drag_to_move_tab()
294e3e3828fSBram Moolenaar  let save_mouse = &mouse
295e3e3828fSBram Moolenaar  let save_term = &term
296e3e3828fSBram Moolenaar  let save_ttymouse = &ttymouse
297e3e3828fSBram Moolenaar  " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop
298e3e3828fSBram Moolenaar  set mouse=a term=xterm mousetime=1
299e3e3828fSBram Moolenaar  let row = 1
300e3e3828fSBram Moolenaar
301e3e3828fSBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
302e3e3828fSBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
303e3e3828fSBram Moolenaar    e Xtab1
304e3e3828fSBram Moolenaar    tabnew Xtab2
305e3e3828fSBram Moolenaar
306e3e3828fSBram Moolenaar    let a = split(execute(':tabs'), "\n")
307e3e3828fSBram Moolenaar    call assert_equal(['Tab page 1',
308e3e3828fSBram Moolenaar        \              '    Xtab1',
309e3e3828fSBram Moolenaar        \              'Tab page 2',
310e3e3828fSBram Moolenaar        \              '>   Xtab2'], a)
311e3e3828fSBram Moolenaar    redraw
312e3e3828fSBram Moolenaar
313e3e3828fSBram Moolenaar    " Click in tab2 and drag it to tab1.
314e3e3828fSBram Moolenaar    " Check getcharmod() to verify that click is not
315e3e3828fSBram Moolenaar    " interpreted as a spurious double-click.
316e3e3828fSBram Moolenaar    call MouseLeftClick(row, 10)
317e3e3828fSBram Moolenaar    call assert_equal(0, getcharmod())
318e3e3828fSBram Moolenaar    for col in [9, 8, 7, 6]
319e3e3828fSBram Moolenaar      call MouseLeftDrag(row, col)
320e3e3828fSBram Moolenaar    endfor
321e3e3828fSBram Moolenaar    call MouseLeftRelease(row, col)
322e3e3828fSBram Moolenaar    let a = split(execute(':tabs'), "\n")
323e3e3828fSBram Moolenaar    call assert_equal(['Tab page 1',
324e3e3828fSBram Moolenaar        \              '>   Xtab2',
325e3e3828fSBram Moolenaar        \              'Tab page 2',
326e3e3828fSBram Moolenaar        \              '    Xtab1'], a)
327e3e3828fSBram Moolenaar
328*7f279765SBram Moolenaar    " brief sleep to avoid causing a double-click
329*7f279765SBram Moolenaar    sleep 20m
330e3e3828fSBram Moolenaar    %bwipe!
331e3e3828fSBram Moolenaar  endfor
332e3e3828fSBram Moolenaar
333e3e3828fSBram Moolenaar  let &mouse = save_mouse
334e3e3828fSBram Moolenaar  let &term = save_term
335e3e3828fSBram Moolenaar  let &ttymouse = save_ttymouse
336e3e3828fSBram Moolenaar  set mousetime&
337e3e3828fSBram Moolenaarendfunc
338e3e3828fSBram Moolenaar
339e3e3828fSBram Moolenaarfunc Test_xterm_mouse_double_click_to_create_tab()
340e3e3828fSBram Moolenaar  let save_mouse = &mouse
341e3e3828fSBram Moolenaar  let save_term = &term
342e3e3828fSBram Moolenaar  let save_ttymouse = &ttymouse
343e3e3828fSBram Moolenaar  " Set 'mousetime' to a small value, so that double-click works but we don't
344e3e3828fSBram Moolenaar  " have to wait long to avoid a triple-click.
345e3e3828fSBram Moolenaar  set mouse=a term=xterm mousetime=100
346e3e3828fSBram Moolenaar  let row = 1
347e3e3828fSBram Moolenaar  let col = 10
348e3e3828fSBram Moolenaar
349e3e3828fSBram Moolenaar  for ttymouse_val in ['xterm', 'sgr']
350e3e3828fSBram Moolenaar    exe 'set ttymouse=' . ttymouse_val
351e3e3828fSBram Moolenaar    e Xtab1
352e3e3828fSBram Moolenaar    tabnew Xtab2
353e3e3828fSBram Moolenaar
354e3e3828fSBram Moolenaar    let a = split(execute(':tabs'), "\n")
355e3e3828fSBram Moolenaar    call assert_equal(['Tab page 1',
356e3e3828fSBram Moolenaar        \              '    Xtab1',
357e3e3828fSBram Moolenaar        \              'Tab page 2',
358e3e3828fSBram Moolenaar        \              '>   Xtab2'], a)
359e3e3828fSBram Moolenaar
360e3e3828fSBram Moolenaar    redraw
361e3e3828fSBram Moolenaar    call MouseLeftClick(row, col)
362e3e3828fSBram Moolenaar    " Check getcharmod() to verify that first click is not
363e3e3828fSBram Moolenaar    " interpreted as a spurious double-click.
364e3e3828fSBram Moolenaar    call assert_equal(0, getcharmod())
365e3e3828fSBram Moolenaar    call MouseLeftRelease(row, col)
366e3e3828fSBram Moolenaar    call MouseLeftClick(row, col)
367e3e3828fSBram Moolenaar    call assert_equal(32, getcharmod()) " double-click
368e3e3828fSBram Moolenaar    call MouseLeftRelease(row, col)
369e3e3828fSBram Moolenaar    let a = split(execute(':tabs'), "\n")
370e3e3828fSBram Moolenaar    call assert_equal(['Tab page 1',
371e3e3828fSBram Moolenaar        \              '    Xtab1',
372e3e3828fSBram Moolenaar        \              'Tab page 2',
373e3e3828fSBram Moolenaar        \              '>   [No Name]',
374e3e3828fSBram Moolenaar        \              'Tab page 3',
375e3e3828fSBram Moolenaar        \              '    Xtab2'], a)
376e3e3828fSBram Moolenaar
377e3e3828fSBram Moolenaar    if ttymouse_val !=# 'sgr'
378e3e3828fSBram Moolenaar      " We need to sleep, or else MouseLeftClick() in next loop
379e3e3828fSBram Moolenaar      " iteration will be interpreted as a spurious triple-click.
380e3e3828fSBram Moolenaar      sleep 100m
381e3e3828fSBram Moolenaar    endif
382e3e3828fSBram Moolenaar    %bwipe!
383e3e3828fSBram Moolenaar  endfor
384e3e3828fSBram Moolenaar
385e3e3828fSBram Moolenaar  let &mouse = save_mouse
386e3e3828fSBram Moolenaar  let &term = save_term
387e3e3828fSBram Moolenaar  let &ttymouse = save_ttymouse
388e3e3828fSBram Moolenaar  set mousetime&
389e3e3828fSBram Moolenaarendfunc
390