To: vim_dev@googlegroups.com Subject: Patch 7.4.2194 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.2194 Problem: Sign tests don't cover enough. Solution: Add more test cases. (Dominique Pelle) Files: src/testdir/test_signs.vim, *** ../vim-7.4.2193/src/testdir/test_signs.vim 2016-08-08 22:26:37.989926409 +0200 --- src/testdir/test_signs.vim 2016-08-10 21:32:32.409145706 +0200 *************** *** 8,43 **** new call setline(1, ['a', 'b', 'c', 'd']) sign define Sign1 text=x ! sign define Sign2 text=y " Test listing signs. let a=execute('sign list') ! call assert_equal("\nsign Sign1 text=x \nsign Sign2 text=y ", a) let a=execute('sign list Sign1') call assert_equal("\nsign Sign1 text=x ", a) ! " Place the sign at line 3,then check that we can jump to it. ! exe 'sign place 42 line=3 name=Sign1 buffer=' . bufnr('') 1 ! exe 'sign jump 42 buffer=' . bufnr('') call assert_equal('c', getline('.')) ! " Can't change sign. ! call assert_fails("exe 'sign place 43 name=Sign1 buffer=' . bufnr('')", 'E885:') let a=execute('sign place') ! call assert_equal("\n--- Signs ---\nSigns for [NULL]:\n line=3 id=42 name=Sign1\n", a) ! " Unplace the sign and try jumping to it again should now fail. ! sign unplace 42 1 ! call assert_fails("exe 'sign jump 42 buffer=' . bufnr('')", 'E157:') call assert_equal('a', getline('.')) " Unplace sign on current line. ! exe 'sign place 43 line=4 name=Sign2 buffer=' . bufnr('') 4 sign unplace let a=execute('sign place') --- 8,78 ---- new call setline(1, ['a', 'b', 'c', 'd']) + " Define some signs. + " We can specify icons even if not all versions of vim support icons as + " icon is ignored when not supported. "(not supported)" is shown after + " the icon name when listing signs. sign define Sign1 text=x ! try ! sign define Sign2 text=xy texthl=Title linehl=Error icon=../../pixmaps/stock_vim_find_help.png ! catch /E255:/ ! " ignore error: E255: Couldn't read in sign data! ! " This error can happen when running in gui. ! " Some gui like Motif do not support the png icon format. ! endtry " Test listing signs. let a=execute('sign list') ! call assert_match("^\nsign Sign1 text=x \nsign Sign2 icon=../../pixmaps/stock_vim_find_help.png .*text=xy linehl=Error texthl=Title$", a) let a=execute('sign list Sign1') call assert_equal("\nsign Sign1 text=x ", a) ! " Split the window to the bottom to verify sign jump will stay in the current window ! " if the buffer is displayed there. ! let bn = bufnr('%') ! let wn = winnr() ! exe 'sign place 41 line=3 name=Sign1 buffer=' . bn ! 1 ! bot split ! exe 'sign jump 41 buffer=' . bufnr('%') ! call assert_equal('c', getline('.')) ! call assert_equal(3, winnr()) ! call assert_equal(bn, bufnr('%')) ! call assert_notequal(wn, winnr()) ! ! " Create a new buffer and check that ":sign jump" switches to the old buffer. 1 ! new foo ! call assert_notequal(bn, bufnr('%')) ! exe 'sign jump 41 buffer=' . bn ! call assert_equal(bn, bufnr('%')) call assert_equal('c', getline('.')) ! " Redraw to make sure that screen redraw with sign gets exercised, ! " with and without 'rightleft'. ! if has('rightleft') ! set rightleft ! redraw ! set norightleft ! endif ! redraw + " Check that we can't change sign. + call assert_fails("exe 'sign place 40 name=Sign1 buffer=' . bufnr('%')", 'E885:') + + " Check placed signs let a=execute('sign place') ! call assert_equal("\n--- Signs ---\nSigns for [NULL]:\n line=3 id=41 name=Sign1\n", a) ! " Unplace the sign and try jumping to it again should fail. ! sign unplace 41 1 ! call assert_fails("exe 'sign jump 41 buffer=' . bufnr('%')", 'E157:') call assert_equal('a', getline('.')) " Unplace sign on current line. ! exe 'sign place 42 line=4 name=Sign2 buffer=' . bufnr('%') 4 sign unplace let a=execute('sign place') *************** *** 47,62 **** call assert_fails('sign unplace', 'E159:') " Unplace all signs. ! exe 'sign place 42 line=3 name=Sign1 buffer=' . bufnr('') sign unplace * let a=execute('sign place') call assert_equal("\n--- Signs ---\n", a) " After undefining the sign, we should no longer be able to place it. sign undefine Sign1 sign undefine Sign2 ! call assert_fails("exe 'sign place 42 line=3 name=Sign1 buffer=' . bufnr('')", 'E155:') endfunc func Test_sign_completion() --- 82,135 ---- call assert_fails('sign unplace', 'E159:') " Unplace all signs. ! exe 'sign place 41 line=3 name=Sign1 buffer=' . bufnr('%') sign unplace * let a=execute('sign place') call assert_equal("\n--- Signs ---\n", a) + " Check :jump with file=... + edit foo + call setline(1, ['A', 'B', 'C', 'D']) + + try + sign define Sign3 text=y texthl=DoesNotExist linehl=DoesNotExist icon=doesnotexist.xpm + catch /E255:/ + " ignore error: E255: it can happens for guis. + endtry + + let fn = expand('%:p') + exe 'sign place 43 line=2 name=Sign3 file=' . fn + edit bar + call assert_notequal(fn, expand('%:p')) + exe 'sign jump 43 file=' . fn + call assert_equal('B', getline('.')) + " After undefining the sign, we should no longer be able to place it. sign undefine Sign1 sign undefine Sign2 ! sign undefine Sign3 ! call assert_fails("exe 'sign place 41 line=3 name=Sign1 buffer=' . bufnr('%')", 'E155:') ! endfunc + " Undefining placed sign is not recommended. + " Quoting :help sign + " + " :sign undefine {name} + " Deletes a previously defined sign. If signs with this {name} + " are still placed this will cause trouble. + func Test_sign_undefine_still_placed() + new foobar + sign define Sign text=x + exe 'sign place 41 line=1 name=Sign buffer=' . bufnr('%') + sign undefine Sign + + " Listing placed sign should show that sign is deleted. + let a=execute('sign place') + call assert_equal("\n--- Signs ---\nSigns for foobar:\n line=1 id=41 name=[Deleted]\n", a) + + sign unplace 41 + let a=execute('sign place') + call assert_equal("\n--- Signs ---\n", a) endfunc func Test_sign_completion() *************** *** 72,77 **** --- 145,153 ---- call feedkeys(":sign define Sign linehl=Spell\\\"\", 'tx') call assert_equal('"sign define Sign linehl=SpellBad SpellCap SpellLocal SpellRare', @:) + call feedkeys(":sign define Sign icon=../../pixmaps/tb_p\\\"\", 'tx') + call assert_equal('"sign define Sign icon=../../pixmaps/tb_paste.xpm ../../pixmaps/tb_print.xpm', @:) + call feedkeys(":sign undefine \\\"\", 'tx') call assert_equal('"sign undefine Sign1 Sign2', @:) *************** *** 92,104 **** sign undefine Sign1 sign undefine Sign2 - endfunc func Test_sign_invalid_commands() call assert_fails('sign', 'E471:') call assert_fails('sign xxx', 'E160:') call assert_fails('sign define', 'E156:') call assert_fails('sign undefine', 'E156:') call assert_fails('sign list xxx', 'E155:') call assert_fails('sign place 1 buffer=', 'E158:') --- 168,181 ---- sign undefine Sign1 sign undefine Sign2 endfunc func Test_sign_invalid_commands() call assert_fails('sign', 'E471:') + call assert_fails('sign jump', 'E471:') call assert_fails('sign xxx', 'E160:') call assert_fails('sign define', 'E156:') + call assert_fails('sign define Sign1 xxx', 'E475:') call assert_fails('sign undefine', 'E156:') call assert_fails('sign list xxx', 'E155:') call assert_fails('sign place 1 buffer=', 'E158:') *** ../vim-7.4.2193/src/version.c 2016-08-10 21:28:41.059332614 +0200 --- src/version.c 2016-08-10 21:33:21.952677853 +0200 *************** *** 765,766 **** --- 765,768 ---- { /* Add new patch number below this line */ + /**/ + 2194, /**/ -- Often you're less important than your furniture. If you think about it, you can get fired but your furniture stays behind, gainfully employed at the company that didn't need _you_ anymore. (Scott Adams - The Dilbert principle) /// 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 ///