To: vim_dev@googlegroups.com Subject: Patch 8.2.0808 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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\\" ! 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("\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("\\", '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!\:q\:q\") 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, "\\\\\\\\\\") - "call term_sendkeys(buf, "\\\") - "call term_sendkeys(buf, "\\\") - "call term_sendkeys(buf, "\") - "call term_sendkeys(buf, "\\\\") - "call term_sendkeys(buf, "\") - - "call term_sendkeys(buf, ":write Xkeycodes\") - let keypad_keys = ["\", "\", "\", "\", "\", "\", \ "\", "\", "\", "\", "\", "\", \ "\", "\", "\"] --- 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\") call term_sendkeys(buf, ":set mouse=a term=xterm ttymouse=sgr\") *************** *** 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 click/release call test_setmouse(2, 5) call feedkeys("\\", '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\") call term_sendkeys(buf, ":set mouse=\") 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 -- Bram@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 ///