# HG changeset patch # User Christian Brabandt # Date 1509042605 -7200 # Node ID aa658b33f25ad744a0798d9c5f8ba3359854cfa1 # Parent 7f73fbae6771476fd1c0ac155b23048769bfd44a patch 8.0.1221: still too many old style tests commit https://github.com/vim/vim/commit/15993ce9210e8b8d4bc11e1d640f6447b18d3e6c Author: Bram Moolenaar Date: Thu Oct 26 20:21:44 2017 +0200 patch 8.0.1221: still too many old style tests Problem: Still too many old style tests. Solution: Convert a few more tests to new style. (Yegappan Lakshmanan, closes #2256) diff --git a/src/Makefile b/src/Makefile --- a/src/Makefile +++ b/src/Makefile @@ -2100,13 +2100,12 @@ test1 \ test_listchars \ test_search_mbyte \ test_wordcount \ - test3 test11 test12 test14 test15 test17 test19 \ - test20 test25 test28 test29 \ - test30 test32 test36 test37 test38 test39 \ + test3 test11 test12 test14 test15 test17 \ + test29 test30 test36 test37 test39 \ test40 test42 test44 test45 test48 test49 \ test50 test52 test55 test59 \ - test64 test66 test68 test69 \ - test70 test72 test73 test77 test79 \ + test64 test68 test69 \ + test70 test72 test73 test77 \ test83 test85 test86 test87 test88 \ test94 test95 test99 test108: cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE) diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -16,13 +16,9 @@ SCRIPTS_ALL = \ test3.out \ test14.out \ test15.out \ - test19.out \ - test20.out \ - test28.out \ test29.out \ test36.out \ test37.out \ - test38.out \ test39.out \ test40.out \ test42.out \ @@ -31,12 +27,10 @@ SCRIPTS_ALL = \ test48.out \ test55.out \ test64.out \ - test66.out \ test68.out \ test69.out \ test70.out \ test73.out \ - test79.out \ test88.out \ test94.out \ test95.out \ @@ -65,7 +59,6 @@ SCRIPTS_MORE1 = \ # Tests that run on most systems, but not on Amiga and DOS/Windows. SCRIPTS_MORE2 = \ test12.out \ - test25.out \ test49.out @@ -73,7 +66,6 @@ SCRIPTS_MORE2 = \ SCRIPTS_MORE4 = \ test17.out \ test30.out \ - test32.out \ test59.out \ test72.out \ test83.out @@ -129,6 +121,7 @@ NEW_TESTS = test_arabic.res \ test_hlsearch.res \ test_increment.res \ test_increment_dbcs.res \ + test_ins_complete.res \ test_job_fails.res \ test_json.res \ test_langmap.res \ @@ -173,6 +166,7 @@ NEW_TESTS = test_arabic.res \ test_substitute.res \ test_syntax.res \ test_system.res \ + test_tab.res \ test_tcl.res \ test_terminal.res \ test_terminal_fail.res \ diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak --- a/src/testdir/Make_amiga.mak +++ b/src/testdir/Make_amiga.mak @@ -14,7 +14,6 @@ include Make_all.mak # test10 'errorformat' is different # test11 "cat" doesn't work properly # test12 can't unlink a swap file -# test25 uses symbolic link # test52 only for Win32 # test85 no Lua interface # test86, 87 no Python interface diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak --- a/src/testdir/Make_dos.mak +++ b/src/testdir/Make_dos.mak @@ -13,7 +13,6 @@ default: nongui # test2 "\\tmp" doesn't work. # test10 'errorformat' is different # test12 can't unlink a swap file -# test25 uses symbolic link # test49 fails in various ways # test97 \{ and \$ are not escaped characters. diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak --- a/src/testdir/Make_ming.mak +++ b/src/testdir/Make_ming.mak @@ -32,7 +32,6 @@ include Make_all.mak # test2 "\\tmp" doesn't work. # test10 'errorformat' is different # test12 can't unlink a swap file -# test25 uses symbolic link # test97 \{ and \$ are not escaped characters SCRIPTS = $(SCRIPTS_ALL) $(SCRIPTS_MORE1) $(SCRIPTS_MORE4) $(SCRIPTS_WIN32) diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms --- a/src/testdir/Make_vms.mms +++ b/src/testdir/Make_vms.mms @@ -75,21 +75,13 @@ VIMPROG = <->vim.exe SCRIPT = test1.out test3.out \ test14.out test15.out \ - test19.out test20.out \ - test28.out test29.out test30.out test32.out \ - test36.out test37.out \ - test38.out test39.out test40.out test42.out \ - test44.out test45.out \ - test48.out test49.out \ - test55.out \ - test64.out \ - test66.out test68.out test69.out \ - test72.out \ - test77a.out test79.out \ - test88.out \ - test94.out \ - test95.out test99.out \ - test108.out\ + test29.out test30.out \ + test36.out test37.out test39.out \ + test40.out test42.out test44.out test45.out \ + test48.out test49.out test55.out \ + test64.out test68.out test69.out \ + test72.out test77a.out test88.out \ + test94.out test95.out test99.out test108.out\ test_autocmd_option.out \ test_breakindent.out \ test_changelist.out \ @@ -110,10 +102,6 @@ SCRIPT = test1.out test3.out \ # # test30: bug, most probably - a problem around mac format # -# test32: VMS is not case sensitive and all filenames are lowercase within Vim -# (this should be changed in order to preserve the original filename) - should -# be fixed. VMS allows just one dot in the filename -# # test59: Failed/Hangs - VMS does not support spell files (file names # with too many dots). # @@ -131,7 +119,7 @@ GUI_OPTION = -g .ENDIF .IFDEF WANT_UNIX -SCRIPT_UNIX = test10.out test12.out test17.out test25.out test27.out test49.out test73.out +SCRIPT_UNIX = test10.out test12.out test17.out test27.out test49.out test73.out .ENDIF .IFDEF WANT_WIN diff --git a/src/testdir/main.aap b/src/testdir/main.aap --- a/src/testdir/main.aap +++ b/src/testdir/main.aap @@ -7,11 +7,10 @@ VimProg ?= ../vim Scripts = test1.out test2.out test3.out test6.out test11.out test12.out test13.out test14.out test15.out test17.out - test18.out test19.out test20.out test21.out - test25.out test27.out - test28.out test29.out test30.out test32.out + test18.out test21.out + test27.out test29.out test30.out test36.out test37.out - test38.out test39.out test40.out test42.out + test39.out test40.out test42.out test44.out test45.out test46.out test47.out test48.out test49.out test74.out diff --git a/src/testdir/test19.in b/src/testdir/test19.in deleted file mode 100644 --- a/src/testdir/test19.in +++ /dev/null @@ -1,33 +0,0 @@ -Tests for "r" with 'smarttab' and 'expandtab' set/not set. -Also test that dv_ works correctly - -STARTTEST -:so small.vim -:set smarttab expandtab ts=8 sw=4 -:" make sure that backspace works, no matter what termcap is used -:set t_kD=x7f t_kb=x08 -/some -r :set noexpandtab -/other -r -:" Test replacing with Tabs and then backspacing to undo it -0wR  -:" Test replacing with Tabs -0wR  -:" Test that copyindent works with expandtab set -:set expandtab smartindent copyindent ts=8 sw=8 sts=8 -o{ -x:set nosol -/Second line/ -fwdv_:?^start?,$w! test.out -:qa! -ENDTEST - -start text - some test text -test text - other test text - a cde - f ghi -test text - Second line beginning with whitespace diff --git a/src/testdir/test19.ok b/src/testdir/test19.ok deleted file mode 100644 --- a/src/testdir/test19.ok +++ /dev/null @@ -1,10 +0,0 @@ -start text - ome test text -test text - ther test text - a cde - hi -test text -{ - x - with whitespace diff --git a/src/testdir/test20.in b/src/testdir/test20.in deleted file mode 100644 --- a/src/testdir/test20.in +++ /dev/null @@ -1,28 +0,0 @@ -Tests Blockwise Visual when there are TABs before the text. -First test for undo working properly when executing commands from a register. -Also test this in an empty buffer. - -STARTTEST -:so tiny.vim -G0"ay$k@au -:new -@auY:quit! -GP -/start here$ -"by$jjlld -/456$ -jj"bP -:/56$/,$-1w! test.out -:qa! -ENDTEST - -123456 -234567 -345678 - -test text test tex start here - some text - test text -test text - -OxjAykdd diff --git a/src/testdir/test20.ok b/src/testdir/test20.ok deleted file mode 100644 --- a/src/testdir/test20.ok +++ /dev/null @@ -1,10 +0,0 @@ -123start here56 -234start here67 -345start here78 - -test text test tex rt here - somext - tesext -test text - - diff --git a/src/testdir/test25.in b/src/testdir/test25.in deleted file mode 100644 --- a/src/testdir/test25.in +++ /dev/null @@ -1,31 +0,0 @@ -Test for jumping to a tag with 'hidden' set, with symbolic link in path of tag. -This only works for Unix, because of the symbolic link. - -STARTTEST -:so small.vim -:set hidden -:" Create a link from test25.dir to the current directory. -:!rm -f test25.dir -:!ln -s . test25.dir -:" Create tags.text, with the current directory name inserted. -/tags line -:r !pwd -d$/test -hP:.w! tags.test -:" Try jumping to a tag in the current file, but with a path that contains a -:" symbolic link. When wrong, this will give the ATTENTION message. The next -:" space will then be eaten by hit-return, instead of moving the cursor to 'd'. -:set tags=tags.test -G x:.w! test.out -:!rm -f test25.dir tags.test -:qa! -ENDTEST - -tags line: -SECTION_OFF /test25.dir/test25.in /^#define SECTION_OFF 3$/ - -/*tx.c*/ -#define SECTION_OFF 3 -#define NUM_SECTIONS 3 - -SECTION_OFF diff --git a/src/testdir/test25.ok b/src/testdir/test25.ok deleted file mode 100644 --- a/src/testdir/test25.ok +++ /dev/null @@ -1,1 +0,0 @@ -#efine SECTION_OFF 3 diff --git a/src/testdir/test28.in b/src/testdir/test28.in deleted file mode 100644 index 5542c92666d15351d747051f7dfa608a54e8abe1..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@w! test.out -/^abcdefgh -4jI j<<11|D -7|a  -7|a  -7|a 4k13|4j< -:$-5,$w >> test.out -:$-4,$s/\s\+//g -4kI j<< -7|a  -7|a  -7|a 4k13|4j3< -:$-4,$w >> test.out -:qa! -ENDTEST - -one two three -one two three -one two three -one two three -one two three - -abcdefghijklmnopqrstuvwxyz -abcdefghijklmnopqrstuvwxyz -abcdefghijklmnopqrstuvwxyz -abcdefghijklmnopqrstuvwxyz -abcdefghijklmnopqrstuvwxyz diff --git a/src/testdir/test66.ok b/src/testdir/test66.ok deleted file mode 100644 --- a/src/testdir/test66.ok +++ /dev/null @@ -1,16 +0,0 @@ -on1 two three -on1 two three -on1 two three -on1 two three -on1 two three - - abcdefghijklmnopqrstuvwxyz -abcdefghij - abc defghijklmnopqrstuvwxyz - abc defghijklmnopqrstuvwxyz - abc defghijklmnopqrstuvwxyz - abcdefghijklmnopqrstuvwxyz -abcdefghij - abc defghijklmnopqrstuvwxyz - abc defghijklmnopqrstuvwxyz - abc defghijklmnopqrstuvwxyz diff --git a/src/testdir/test79.in b/src/testdir/test79.in deleted file mode 100644 index 8278bd80005bc3f7a985634b465f1af38391f171..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@\\\\\" + call assert_equal('run1 run3', getline('.')) + " add-expands (current buffer first) + exe "normal o\\\" + call assert_equal('run3 run3', getline('.')) + " Local expansion, ends in an empty line (unless it becomes a global + " expansion) + exe "normal o\\\\\\" + call assert_equal('', getline('.')) + " starts Local and switches to global add-expansion + exe "normal o\\\\\\\\\" + call assert_equal('run1 run2', getline('.')) + + set cpt=.,w,i + " i-add-expands and switches to local + exe "normal OM\\\\\\\\\" + call assert_equal("Makefile\tto\trun3", getline('.')) + " add-expands lines (it would end in an empty line if it didn't ignored + " itself) + exe "normal o\\\\\\" + call assert_equal("Makefile\tto\trun3", getline('.')) + call assert_equal("Makefile\tto\trun3", getline(line('.') - 1)) + + set cpt=kXtestfile + " checks k-expansion, and file expansion (use Xtest11 instead of test11, + " because TEST11.OUT may match first on DOS) + write Xtest11.one + write Xtest11.two + exe "normal o\\IX\A\\\" + call assert_equal('Xtest11.two', getline('.')) + + " use CTRL-X CTRL-F to complete Xtest11.one, remove it and then use CTRL-X + " CTRL-F again to verify this doesn't cause trouble. + exe "normal oXt\\\\\\\\\\\\" + call assert_equal('Xtest11.one', getline('.')) + normal ddk + + set cpt=w + " checks make_cyclic in other window + exe "normal oST\\\\\" + call assert_equal('STARTTEST', getline('.')) + + set cpt=u nohid + " checks unloaded buffer expansion + only + exe "normal oEN\" + call assert_equal('ENDTEST', getline('.')) + " checks adding mode abortion + exe "normal ounl\\\\" + call assert_equal('unless', getline('.')) + + set cpt=t,d def=^\\k* tags=Xtestfile notagbsearch + " tag expansion, define add-expansion interrupted + exe "normal o\\\\\\\\\\\\\\\" + call assert_equal('test11file 36Gepeto /Tag/ asd', getline('.')) + " t-expansion + exe "normal oa\\" + call assert_equal('asd', getline('.')) + + %bw! + call delete('Xtestfile') + call delete('Xtest11.one') + call delete('Xtest11.two') + call delete('Xtestdata') + set cpt& cot& def& tags& tagbsearch& hidden& +endfunc diff --git a/src/testdir/test_source_utf8.vim b/src/testdir/test_source_utf8.vim --- a/src/testdir/test_source_utf8.vim +++ b/src/testdir/test_source_utf8.vim @@ -31,3 +31,33 @@ func Test_source_latin() bwipe! call delete('Xscript') endfunc + +" Test for sourcing a file with CTRL-V's at the end of the line +func Test_source_ctrl_v() + call writefile(['map __1 afirst', + \ 'map __2 asecond', + \ 'map __3 athird', + \ 'map __4 afourth', + \ 'map __5 afifth', + \ "map __1 asd\", + \ "map __2 asd\\", + \ "map __3 asd\\", + \ "map __4 asd\\\", + \ "map __5 asd\\\", + \ ], 'Xtestfile') + source Xtestfile + enew! + exe "normal __1\\__2\__3\\__4\__5\" + exe "%s/\/0/g" + call assert_equal(['sd', + \ "map __2 asd\secondsd\sd0map __5 asd0fifth"], + \ getline(1, 2)) + + enew! + call delete('Xtestfile') + unmap __1 + unmap __2 + unmap __3 + unmap __4 + unmap __5 +endfunc diff --git a/src/testdir/test_substitute.vim b/src/testdir/test_substitute.vim --- a/src/testdir/test_substitute.vim +++ b/src/testdir/test_substitute.vim @@ -294,3 +294,209 @@ func Test_sub_replace_10() call assert_equal('aa2a3a', substitute('123', '1\|\ze', 'a', 'g')) call assert_equal('1aaa', substitute('123', '1\zs\|[23]', 'a', 'g')) endfunc + +" Tests for *sub-replace-special* and *sub-replace-expression* on :substitute. + +" Execute a list of :substitute command tests +func Run_SubCmd_Tests(tests) + enew! + for t in a:tests + let start = line('.') + 1 + let end = start + len(t[2]) - 1 + exe "normal o" . t[0] + call cursor(start, 1) + exe t[1] + call assert_equal(t[2], getline(start, end), t[1]) + endfor + enew! +endfunc + +func Test_sub_cmd_1() + set magic + set cpo& + + " List entry format: [input, cmd, output] + let tests = [['A', 's/A/&&/', ['AA']], + \ ['B', 's/B/\&/', ['&']], + \ ['C123456789', 's/C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/', ['C123456789987654321']], + \ ['D', 's/D/d/', ['d']], + \ ['E', 's/E/~/', ['d']], + \ ['F', 's/F/\~/', ['~']], + \ ['G', 's/G/\ugg/', ['Gg']], + \ ['H', 's/H/\Uh\Eh/', ['Hh']], + \ ['I', 's/I/\lII/', ['iI']], + \ ['J', 's/J/\LJ\EJ/', ['jJ']], + \ ['K', 's/K/\Uk\ek/', ['Kk']], + \ ['lLl', "s/L/\\/", ["l\", 'l']], + \ ['mMm', 's/M/\r/', ['m', 'm']], + \ ['nNn', "s/N/\\\\/", ["n\", 'n']], + \ ['oOo', 's/O/\n/', ["o\no"]], + \ ['pPp', 's/P/\b/', ["p\p"]], + \ ['qQq', 's/Q/\t/', ["q\tq"]], + \ ['rRr', 's/R/\\/', ['r\r']], + \ ['sSs', 's/S/\c/', ['scs']], + \ ['tTt', "s/T/\\/", ["t\\t"]], + \ ['U', 's/U/\L\uuUu\l\EU/', ['UuuU']], + \ ['V', 's/V/\U\lVvV\u\Ev/', ['vVVv']] + \ ] + call Run_SubCmd_Tests(tests) +endfunc + +func Test_sub_cmd_2() + set nomagic + set cpo& + + " List entry format: [input, cmd, output] + let tests = [['A', 's/A/&&/', ['&&']], + \ ['B', 's/B/\&/', ['B']], + \ ['C123456789', 's/\mC\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/', ['C123456789987654321']], + \ ['D', 's/D/d/', ['d']], + \ ['E', 's/E/~/', ['~']], + \ ['F', 's/F/\~/', ['~']], + \ ['G', 's/G/\ugg/', ['Gg']], + \ ['H', 's/H/\Uh\Eh/', ['Hh']], + \ ['I', 's/I/\lII/', ['iI']], + \ ['J', 's/J/\LJ\EJ/', ['jJ']], + \ ['K', 's/K/\Uk\ek/', ['Kk']], + \ ['lLl', "s/L/\\/", ["l\", 'l']], + \ ['mMm', 's/M/\r/', ['m', 'm']], + \ ['nNn', "s/N/\\\\/", ["n\", 'n']], + \ ['oOo', 's/O/\n/', ["o\no"]], + \ ['pPp', 's/P/\b/', ["p\p"]], + \ ['qQq', 's/Q/\t/', ["q\tq"]], + \ ['rRr', 's/R/\\/', ['r\r']], + \ ['sSs', 's/S/\c/', ['scs']], + \ ['tTt', "s/T/\\/", ["t\\t"]], + \ ['U', 's/U/\L\uuUu\l\EU/', ['UuuU']], + \ ['V', 's/V/\U\lVvV\u\Ev/', ['vVVv']] + \ ] + call Run_SubCmd_Tests(tests) +endfunc + +func Test_sub_cmd_3() + set nomagic + set cpo& + + " List entry format: [input, cmd, output] + let tests = [['aAa', "s/A/\\='\\'/", ['a\a']], + \ ['bBb', "s/B/\\='\\\\'/", ['b\\b']], + \ ['cCc', "s/C/\\='\\'/", ["c\", 'c']], + \ ['dDd', "s/D/\\='\\\\'/", ["d\\\", 'd']], + \ ['eEe', "s/E/\\='\\\\\\'/", ["e\\\\\", 'e']], + \ ['fFf', "s/F/\\='\r'/", ['f', 'f']], + \ ['gGg', "s/G/\\='\\'/", ["g\", 'g']], + \ ['hHh', "s/H/\\='\\\\'/", ["h\\\", 'h']], + \ ['iIi', "s/I/\\='\\\\\\'/", ["i\\\\\", 'i']], + \ ['jJj', "s/J/\\='\n'/", ['j', 'j']], + \ ['kKk', 's/K/\="\r"/', ['k', 'k']], + \ ['lLl', 's/L/\="\n"/', ['l', 'l']] + \ ] + call Run_SubCmd_Tests(tests) +endfunc + +" Test for submatch() on :substitue. +func Test_sub_cmd_4() + set magic& + set cpo& + + " List entry format: [input, cmd, output] + let tests = [ ['aAa', "s/A/\\=substitute(submatch(0), '.', '\\', '')/", + \ ['a\a']], + \ ['bBb', "s/B/\\=substitute(submatch(0), '.', '\\', '')/", + \ ['b\b']], + \ ['cCc', "s/C/\\=substitute(submatch(0), '.', '\\', '')/", + \ ["c\", 'c']], + \ ['dDd', "s/D/\\=substitute(submatch(0), '.', '\\\\', '')/", + \ ["d\", 'd']], + \ ['eEe', "s/E/\\=substitute(submatch(0), '.', '\\\\\\', '')/", + \ ["e\\\", 'e']], + \ ['fFf', "s/F/\\=substitute(submatch(0), '.', '\\r', '')/", + \ ['f', 'f']], + \ ['gGg', 's/G/\=substitute(submatch(0), ".", "\\", "")/', + \ ["g\", 'g']], + \ ['hHh', 's/H/\=substitute(submatch(0), ".", "\\\\", "")/', + \ ["h\", 'h']], + \ ['iIi', 's/I/\=substitute(submatch(0), ".", "\\\\\\", "")/', + \ ["i\\\", 'i']], + \ ['jJj', "s/J/\\=substitute(submatch(0), '.', '\\n', '')/", + \ ['j', 'j']], + \ ['kKk', "s/K/\\=substitute(submatch(0), '.', '\\r', '')/", + \ ['k', 'k']], + \ ['lLl', "s/L/\\=substitute(submatch(0), '.', '\\n', '')/", + \ ['l', 'l']], + \ ] + call Run_SubCmd_Tests(tests) +endfunc + +func Test_sub_cmd_5() + set magic& + set cpo& + + " List entry format: [input, cmd, output] + let tests = [ ['A123456789', 's/A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)/', ['A123456789987654321']], + \ ['B123456789', 's/B\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\=string([submatch(0, 1), submatch(9, 1), submatch(8, 1), submatch(7, 1), submatch(6, 1), submatch(5, 1), submatch(4, 1), submatch(3, 1), submatch(2, 1), submatch(1, 1)])/', ["[['B123456789'], ['9'], ['8'], ['7'], ['6'], ['5'], ['4'], ['3'], ['2'], ['1']]"]], + \ ] + call Run_SubCmd_Tests(tests) +endfunc + +" Test for *:s%* on :substitute. +func Test_sub_cmd_6() + set magic& + set cpo+=/ + + " List entry format: [input, cmd, output] + let tests = [ ['A', 's/A/a/', ['a']], + \ ['B', 's/B/%/', ['a']], + \ ] + call Run_SubCmd_Tests(tests) + + set cpo-=/ + let tests = [ ['C', 's/C/c/', ['c']], + \ ['D', 's/D/%/', ['%']], + \ ] + call Run_SubCmd_Tests(tests) + + set cpo& +endfunc + +" Test for :s replacing \n with line break. +func Test_sub_cmd_7() + set magic& + set cpo& + + " List entry format: [input, cmd, output] + let tests = [ ["A\\A", 's/A./\=submatch(0)/', ['A', 'A']], + \ ["B\\B", 's/B./\=submatch(0)/', ['B', 'B']], + \ ["C\\C", 's/C./\=strtrans(string(submatch(0, 1)))/', [strtrans("['C\']C")]], + \ ["D\\\nD", 's/D.\nD/\=strtrans(string(submatch(0, 1)))/', [strtrans("['D\', 'D']")]], + \ ["E\\\n\\\n\\\n\\\n\\E", 's/E\_.\{-}E/\=strtrans(string(submatch(0, 1)))/', [strtrans("['E\', '\', '\', '\', '\E']")]], + \ ] + call Run_SubCmd_Tests(tests) + + exe "normal oQ\nQ\k" + call assert_fails('s/Q[^\n]Q/\=submatch(0)."foobar"/', 'E486') + enew! +endfunc + +func TitleString() + let check = 'foo' =~ 'bar' + return "" +endfunc + +func Test_sub_cmd_8() + set titlestring=%{TitleString()} + + enew! + call append(0, ['', 'test_one', 'test_two']) + call cursor(1,1) + /^test_one/s/.*/\="foo\nbar"/ + call assert_equal('foo', getline(2)) + call assert_equal('bar', getline(3)) + call feedkeys(':/^test_two/s/.*/\="foo\nbar"/c', "t") + call feedkeys("\y", "xt") + call assert_equal('foo', getline(4)) + call assert_equal('bar', getline(5)) + + enew! + set titlestring& +endfunc diff --git a/src/testdir/test_tab.vim b/src/testdir/test_tab.vim new file mode 100644 --- /dev/null +++ b/src/testdir/test_tab.vim @@ -0,0 +1,45 @@ + +" Tests for "r" with 'smarttab' and 'expandtab' set/not set. +" Also test that dv_ works correctly +func Test_smarttab() + enew! + set smarttab expandtab ts=8 sw=4 + " make sure that backspace works, no matter what termcap is used + exe "set t_kD=\x7f t_kb=\x08" + call append(0, ['start text', + \ "\t\tsome test text", + \ 'test text', + \ "\t\tother test text", + \ ' a cde', + \ ' f ghi', + \ 'test text', + \ ' Second line beginning with whitespace' + \ ]) + call cursor(1, 1) + exe "normal /some\" + exe "normal r\t" + call assert_equal("\t\t ome test text", getline('.')) + set noexpandtab + exe "normal /other\" + exe "normal r\t" + call assert_equal("\t\t ther test text", getline('.')) + + " Test replacing with Tabs and then backspacing to undo it + exe "normal j0wR\t\t\t\\\" + call assert_equal(" a cde", getline('.')) + " Test replacing with Tabs + exe "normal j0wR\t\t\t" + call assert_equal(" \t\thi", getline('.')) + + " Test that copyindent works with expandtab set + set expandtab smartindent copyindent ts=8 sw=8 sts=8 + exe "normal jo{\x" + call assert_equal('{', getline(line('.') - 1)) + call assert_equal(' x', getline('.')) + set nosol + exe "normal /Second line/\" + exe "normal fwdv_" + call assert_equal(' with whitespace', getline('.')) + enew! + set expandtab& smartindent& copyindent& ts& sw& sts& +endfunc diff --git a/src/testdir/test_tagjump.vim b/src/testdir/test_tagjump.vim --- a/src/testdir/test_tagjump.vim +++ b/src/testdir/test_tagjump.vim @@ -137,4 +137,41 @@ function Test_keyword_jump() call delete('Xinclude') endfunction +" Test for jumping to a tag with 'hidden' set, with symbolic link in path of +" tag. This only works for Unix, because of the symbolic link. +func Test_tag_symbolic() + if !has('unix') + return + endif + set hidden + call delete("Xtest.dir", "rf") + call system("ln -s . Xtest.dir") + " Create a tags file with the current directory name inserted. + call writefile([ + \ "SECTION_OFF " . getcwd() . "/Xtest.dir/Xtest.c /^#define SECTION_OFF 3$/", + \ '', + \ ], 'Xtags') + call writefile(['#define SECTION_OFF 3', + \ '#define NUM_SECTIONS 3'], 'Xtest.c') + + " Try jumping to a tag, but with a path that contains a symbolic link. When + " wrong, this will give the ATTENTION message. The next space will then be + " eaten by hit-return, instead of moving the cursor to 'd'. + set tags=Xtags + enew! + call append(0, 'SECTION_OFF') + call cursor(1,1) + exe "normal \ " + call assert_equal('Xtest.c', expand('%:t')) + call assert_equal(2, col('.')) + + set hidden& + set tags& + enew! + call delete('Xtags') + call delete('Xtest.c') + call delete("Xtest.dir", "rf") + %bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_undo.vim b/src/testdir/test_undo.vim --- a/src/testdir/test_undo.vim +++ b/src/testdir/test_undo.vim @@ -273,3 +273,19 @@ func Test_undofile_earlier() call delete('Xfile') call delete('Xundofile') endfunc + +" Test for undo working properly when executing commands from a register. +" Also test this in an empty buffer. +func Test_cmd_in_reg_undo() + enew! + let @a="Ox\jAy\kdd" + edit +/^$ test_undo.vim + normal @au + call assert_equal(0, &modified) + return + new + normal @au + call assert_equal(0, &modified) + only! + let @a='' +endfunc diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim --- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -89,3 +89,101 @@ func Test_visual_mode_reset() endfunc +" Test for visual block shift and tab characters. +func Test_block_shift_tab() + enew! + call append(0, repeat(['one two three'], 5)) + call cursor(1,1) + exe "normal i\u" + exe "normal fe\4jR\ugvr1" + call assert_equal('on1 two three', getline(1)) + call assert_equal('on1 two three', getline(2)) + call assert_equal('on1 two three', getline(5)) + + enew! + call append(0, repeat(['abcdefghijklmnopqrstuvwxyz'], 5)) + call cursor(1,1) + exe "normal \4jI \j<<11|D" + exe "normal j7|a\\" + exe "normal j7|a\\ " + exe "normal j7|a\ \\4k13|\4j<" + call assert_equal(' abcdefghijklmnopqrstuvwxyz', getline(1)) + call assert_equal('abcdefghij', getline(2)) + call assert_equal(" abc\ defghijklmnopqrstuvwxyz", getline(3)) + call assert_equal(" abc\ defghijklmnopqrstuvwxyz", getline(4)) + call assert_equal(" abc\ defghijklmnopqrstuvwxyz", getline(5)) + + %s/\s\+//g + call cursor(1,1) + exe "normal \4jI \j<<" + exe "normal j7|a\\" + exe "normal j7|a\\\\\" + exe "normal j7|a\ \\\4k13|\4j3<" + call assert_equal(' abcdefghijklmnopqrstuvwxyz', getline(1)) + call assert_equal('abcdefghij', getline(2)) + call assert_equal(" abc\ defghijklmnopqrstuvwxyz", getline(3)) + call assert_equal(" abc\\defghijklmnopqrstuvwxyz", getline(4)) + call assert_equal(" abc\ defghijklmnopqrstuvwxyz", getline(5)) + + enew! +endfunc + +" Tests Blockwise Visual when there are TABs before the text. +func Test_blockwise_visual() + enew! + call append(0, ['123456', + \ '234567', + \ '345678', + \ '', + \ 'test text test tex start here', + \ "\t\tsome text", + \ "\t\ttest text", + \ 'test text']) + call cursor(1,1) + exe "normal /start here$\" + exe 'normal "by$' . "\jjlld" + exe "normal /456$\" + exe "normal \jj" . '"bP' + call assert_equal(['123start here56', + \ '234start here67', + \ '345start here78', + \ '', + \ 'test text test tex rt here', + \ "\t\tsomext", + \ "\t\ttesext"], getline(1, 7)) + + enew! +endfunc + +" Test Virtual replace mode. +func Test_virtual_replace() + exe "set t_kD=\x7f t_kb=\x08" + enew! + exe "normal a\nabcdefghi\njk\tlmn\n opq rst\n\uvwxyz" + call cursor(1,1) + set ai bs=2 + exe "normal gR0\ 1\nA\nBCDEFGHIJ\n\tKL\nMNO\nPQR" + call assert_equal([' 1', + \ ' A', + \ ' BCDEFGHIJ', + \ ' KL', + \ ' MNO', + \ ' PQR', + \ ], getline(1, 6)) + normal G + mark a + exe "normal o0\\nabcdefghi\njk\tlmn\n opq\trst\n\uvwxyz\n" + exe "normal 'ajgR0\ 1\nA\nBCDEFGHIJ\n\tKL\nMNO\nPQR" . repeat("\", 29) + call assert_equal([' 1', + \ 'abcdefghi', + \ 'jk lmn', + \ ' opq rst', + \ 'uvwxyz'], getline(7, 11)) + normal G + exe "normal iab\tcdefghi\tjkl" + exe "normal 0gRAB......CDEFGHI.J\o" + exe "normal iabcdefghijklmnopqrst\0gRAB\tIJKLMNO\tQR" + call assert_equal(['AB......CDEFGHI.Jkl', + \ 'AB IJKLMNO QRst'], getline(12, 13)) + enew! +endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1221, +/**/ 1220, /**/ 1219,