Patch 8.2.0808
Problem: Not enough testing for the terminal window.
Solution: Add more tests. (Yegappan Lakshmanan, closes #6069) Fix memory
leak.
Files: src/testdir/test_gui.vim, src/testdir/test_terminal.vim,
src/terminal.c
*** ../vim-8.2.0807/src/testdir/test_gui.vim 2020-05-15 22:46:40.759917714 +0200
--- src/testdir/test_gui.vim 2020-05-22 13:26:35.228888857 +0200
***************
*** 850,857 ****
" assume all the other systems have a cat command
let cmd = 'cat'
endif
! let cmd = ':silent !' . cmd . " test_gui.vim\<CR>\<CR>"
! call feedkeys(cmd, 'xt')
" TODO: how to check that the command ran in a separate terminal?
" Maybe check for $TERM (dumb vs xterm) in the spawned shell?
let &guioptions = save_guioptions
--- 850,856 ----
" assume all the other systems have a cat command
let cmd = 'cat'
endif
! exe "silent !" . cmd . " test_gui.vim"
" TODO: how to check that the command ran in a separate terminal?
" Maybe check for $TERM (dumb vs xterm) in the spawned shell?
let &guioptions = save_guioptions
*** ../vim-8.2.0807/src/testdir/test_terminal.vim 2020-05-21 20:38:28.039879979 +0200
--- src/testdir/test_terminal.vim 2020-05-22 13:26:35.228888857 +0200
***************
*** 1220,1225 ****
--- 1220,1226 ----
call delete('Xtest.dump')
call assert_fails("call term_dumpwrite(buf, '')", 'E482:')
call assert_fails("call term_dumpwrite(buf, test_null_string())", 'E482:')
+ call test_garbagecollect_now()
call StopVimInTerminal(buf)
call term_wait(buf)
call assert_fails("call term_dumpwrite(buf, 'Xtest.dump')", 'E958:')
***************
*** 1305,1310 ****
--- 1306,1321 ----
call assert_match('three four five', getline(3))
call assert_match('Undo', getline(45))
quit
+
+ " Diff two terminal dump files with different number of rows
+ " Swap the diffs
+ call term_dumpdiff('dumps/Test_popup_command_01.dump', 'dumps/Test_winline_rnu.dump')
+ call assert_match('Test_popup_command_01.dump', getline(21))
+ call assert_match('Test_winline_rnu.dump', getline(42))
+ normal s
+ call assert_match('Test_winline_rnu.dump', getline(6))
+ call assert_match('Test_popup_command_01.dump', getline(27))
+ quit
endfunc
func Test_terminal_dumpdiff_options()
***************
*** 1619,1624 ****
--- 1630,1636 ----
call assert_equal(colors, term_getansicolors(buf))
call StopShellInTerminal(buf)
call TermWait(buf)
+ call assert_equal([], term_getansicolors(buf))
exe buf . 'bwipe'
endfunc
***************
*** 1673,1681 ****
--- 1685,1695 ----
let colors[4] = 'Invalid'
call assert_fails('call term_setansicolors(buf, colors)', 'E474:')
+ call assert_fails('call term_setansicolors(buf, {})', 'E714:')
call StopShellInTerminal(buf)
call TermWait(buf)
+ call assert_equal(0, term_setansicolors(buf, []))
exe buf . 'bwipe'
endfunc
***************
*** 2029,2035 ****
call WaitForAssert({-> assert_equal('running,normal', term_getstatus(bnr))})
call feedkeys("A", 'xt')
call WaitForAssert({-> assert_equal('running', term_getstatus(bnr))})
! call feedkeys("\<C-W>N", 'xt')
call WaitForAssert({-> assert_equal('running,normal', term_getstatus(bnr))})
call feedkeys("I", 'xt')
call WaitForAssert({-> assert_equal('running', term_getstatus(bnr))})
--- 2043,2049 ----
call WaitForAssert({-> assert_equal('running,normal', term_getstatus(bnr))})
call feedkeys("A", 'xt')
call WaitForAssert({-> assert_equal('running', term_getstatus(bnr))})
! call feedkeys("\<C-\>\<C-N>", 'xt')
call WaitForAssert({-> assert_equal('running,normal', term_getstatus(bnr))})
call feedkeys("I", 'xt')
call WaitForAssert({-> assert_equal('running', term_getstatus(bnr))})
***************
*** 2066,2071 ****
--- 2080,2086 ----
call term_sendkeys(buf, ":set culopt=line\r")
call VerifyScreenDump(buf, 'Test_terminal_normal_3', {})
+ call assert_fails('call term_sendkeys(buf, [])', 'E730:')
call term_sendkeys(buf, "a:q!\<CR>:q\<CR>:q\<CR>")
call StopVimInTerminal(buf)
call delete('XtermNormal')
***************
*** 2178,2194 ****
call StopShellInTerminal(buf)
endfunc
func Test_term_gettitle()
" term_gettitle() returns an empty string for a non-terminal buffer
" and for a non-existing buffer.
call assert_equal('', bufnr('%')->term_gettitle())
call assert_equal('', term_gettitle(bufnr('$') + 1))
! if !has('title') || &title == 0 || empty(&t_ts)
throw "Skipped: can't get/set title"
endif
! let term = term_start([GetVimProg(), '--clean', '-c', 'set noswapfile'])
if has('autoservername')
call WaitForAssert({-> assert_match('^\[No Name\] - VIM\d\+$', term_gettitle(term)) })
call term_sendkeys(term, ":e Xfoo\r")
--- 2193,2210 ----
call StopShellInTerminal(buf)
endfunc
+ " Test for term_gettitle()
func Test_term_gettitle()
" term_gettitle() returns an empty string for a non-terminal buffer
" and for a non-existing buffer.
call assert_equal('', bufnr('%')->term_gettitle())
call assert_equal('', term_gettitle(bufnr('$') + 1))
! if !has('title') || empty(&t_ts)
throw "Skipped: can't get/set title"
endif
! let term = term_start([GetVimProg(), '--clean', '-c', 'set noswapfile', '-c', 'set title'])
if has('autoservername')
call WaitForAssert({-> assert_match('^\[No Name\] - VIM\d\+$', term_gettitle(term)) })
call term_sendkeys(term, ":e Xfoo\r")
***************
*** 2692,2706 ****
call assert_equal(output[i], term_getline(buf, 1))
endfor
- "call term_sendkeys(buf, "\<K0>\<K1>\<K2>\<K3>\<K4>\<K5>\<K6>\<K7>\<K8>\<K9>")
- "call term_sendkeys(buf, "\<kEnter>\<kPoint>\<kPlus>")
- "call term_sendkeys(buf, "\<kMinus>\<kMultiply>\<kDivide>")
- "call term_sendkeys(buf, "\<Esc>")
- "call term_sendkeys(buf, "\<Home>\<Ins>\<Tab>\<S-Tab>")
- "call term_sendkeys(buf, "\<Esc>")
-
- "call term_sendkeys(buf, ":write Xkeycodes\<CR>")
-
let keypad_keys = ["\<k0>", "\<k1>", "\<k2>", "\<k3>", "\<k4>", "\<k5>",
\ "\<k6>", "\<k7>", "\<k8>", "\<k9>", "\<kPoint>", "\<kPlus>",
\ "\<kMinus>", "\<kMultiply>", "\<kDivide>"]
--- 2708,2713 ----
***************
*** 2733,2739 ****
let save_term = &term
let save_ttymouse = &ttymouse
let save_clipboard = &clipboard
- call test_override('no_query_mouse', 1)
set mouse=a term=xterm ttymouse=sgr mousetime=200 clipboard=
let lines =<< trim END
--- 2740,2745 ----
***************
*** 2743,2748 ****
--- 2749,2756 ----
END
call writefile(lines, 'Xtest_mouse')
+ " Create a terminal window running Vim for the test with mouse enabled
+ let prev_win = win_getid()
let buf = RunVimInTerminal('Xtest_mouse -n', {})
call term_sendkeys(buf, ":set nocompatible\<CR>")
call term_sendkeys(buf, ":set mouse=a term=xterm ttymouse=sgr\<CR>")
***************
*** 2751,2756 ****
--- 2759,2770 ----
call term_wait(buf)
redraw!
+ " Use the mouse to enter the terminal window
+ call win_gotoid(prev_win)
+ call feedkeys(MouseLeftClickCode(1, 1), 'x')
+ call feedkeys(MouseLeftReleaseCode(1, 1), 'x')
+ call assert_equal(1, getwininfo(win_getid())[0].terminal)
+
" Test for <LeftMouse> click/release
call test_setmouse(2, 5)
call feedkeys("\<LeftMouse>\<LeftRelease>", 'xt')
***************
*** 2833,2839 ****
let &ttymouse = save_ttymouse
let &clipboard = save_clipboard
set mousetime&
- call test_override('no_query_mouse', 0)
call delete('Xtest_mouse')
call delete('Xbuf')
endfunc
--- 2847,2852 ----
***************
*** 2848,2854 ****
let save_mouse = &mouse
let save_term = &term
let save_ttymouse = &ttymouse
- call test_override('no_query_mouse', 1)
set mouse=a term=xterm ttymouse=sgr mousetime=200
set clipboard=autoselectml
--- 2861,2866 ----
***************
*** 2859,2870 ****
--- 2871,2891 ----
END
call writefile(lines, 'Xtest_modeless')
+ " Create a terminal window running Vim for the test with mouse disabled
+ let prev_win = win_getid()
let buf = RunVimInTerminal('Xtest_modeless -n', {})
call term_sendkeys(buf, ":set nocompatible\<CR>")
call term_sendkeys(buf, ":set mouse=\<CR>")
call term_wait(buf)
redraw!
+ " Use the mouse to enter the terminal window
+ call win_gotoid(prev_win)
+ call feedkeys(MouseLeftClickCode(1, 1), 'x')
+ call feedkeys(MouseLeftReleaseCode(1, 1), 'x')
+ call term_wait(buf)
+ call assert_equal(1, getwininfo(win_getid())[0].terminal)
+
" Test for copying a modeless selection to clipboard
let @* = 'clean'
" communicating with X server may take a little time
***************
*** 2881,2888 ****
let &term = save_term
let &ttymouse = save_ttymouse
set mousetime& clipboard&
- call test_override('no_query_mouse', 0)
call delete('Xtest_modeless')
endfunc
" vim: shiftwidth=2 sts=2 expandtab
--- 2902,2909 ----
let &term = save_term
let &ttymouse = save_ttymouse
set mousetime& clipboard&
call delete('Xtest_modeless')
+ new | only!
endfunc
" vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0807/src/terminal.c 2020-05-21 20:10:00.281336782 +0200
--- src/terminal.c 2020-05-22 13:31:34.243876336 +0200
***************
*** 3047,3053 ****
#endif
else
{
! term->tl_title = vim_strsave(strval);
strval = NULL;
}
VIM_CLEAR(term->tl_status_text);
--- 3047,3053 ----
#endif
else
{
! term->tl_title = strval;
strval = NULL;
}
VIM_CLEAR(term->tl_status_text);
*** ../vim-8.2.0807/src/version.c 2020-05-22 13:09:55.320226061 +0200
--- src/version.c 2020-05-22 13:27:36.908681360 +0200
***************
*** 748,749 ****
--- 748,751 ----
{ /* Add new patch number below this line */
+ /**/
+ 808,
/**/
--
hundred-and-one symptoms of being an internet addict:
156. You forget your friend's name but not her e-mail address.
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language --
http://www.Zimbu.org ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///