To: vim_dev@googlegroups.com Subject: Patch 8.1.2111 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.2111 Problem: Viminfo file not sufficiently tested. Solution: Add more tests. (Yegappan Lakshmanan, closes #5009) Files: src/testdir/test_viminfo.vim *** ../vim-8.1.2110/src/testdir/test_viminfo.vim 2019-09-08 18:58:39.557952948 +0200 --- src/testdir/test_viminfo.vim 2019-10-04 21:18:54.327852460 +0200 *************** *** 40,45 **** --- 40,48 ---- endfunc func Test_global_vars() + let g:MY_GLOBAL_STRING = "Vim Editor" + let g:MY_GLOBAL_NUM = 345 + let g:MY_GLOBAL_FLOAT = 3.14 let test_dict = {'foo': 1, 'bar': 0, 'longvarible': 1000} let g:MY_GLOBAL_DICT = test_dict " store a really long list, so line wrapping will occur in viminfo file *************** *** 59,64 **** --- 62,70 ---- set viminfo='100,<50,s10,h,!,nviminfo wv! Xviminfo + unlet g:MY_GLOBAL_STRING + unlet g:MY_GLOBAL_NUM + unlet g:MY_GLOBAL_FLOAT unlet g:MY_GLOBAL_DICT unlet g:MY_GLOBAL_LIST unlet g:MY_GLOBAL_BLOB *************** *** 68,73 **** --- 74,82 ---- unlet g:MY_GLOBAL_NONE rv! Xviminfo + call assert_equal("Vim Editor", g:MY_GLOBAL_STRING) + call assert_equal(345, g:MY_GLOBAL_NUM) + call assert_equal(3.14, g:MY_GLOBAL_FLOAT) call assert_equal(test_dict, g:MY_GLOBAL_DICT) call assert_equal(test_list, g:MY_GLOBAL_LIST) call assert_equal(test_blob, g:MY_GLOBAL_BLOB) *************** *** 221,226 **** --- 230,236 ---- call add(l, 'something') endfor call setreg('d', l, 'l') + call setreg('e', "abc\xyz") wviminfo Xviminfo call test_settime(10) *************** *** 231,236 **** --- 241,247 ---- call setreg('c', 'keep', 'l') call test_settime(30) call setreg('d', 'drop', 'l') + call setreg('e', 'drop') rviminfo Xviminfo call assert_equal("", getreg('a')) *************** *** 241,246 **** --- 252,258 ---- call assert_equal("V", getregtype('c')) call assert_equal(l, getreg('d', 1, 1)) call assert_equal("V", getregtype('d')) + call assert_equal("abc\xyz", getreg('e')) " Length around 440 switches to line continuation. let len = 434 *************** *** 514,525 **** --- 526,566 ---- delmark B endfunc + " Test for saving and restoring file marks in unloaded buffers + func Test_viminfo_file_mark_unloaded_buf() + let save_viminfo = &viminfo + set viminfo&vim + call writefile(repeat(['vim'], 10), 'Xfile1') + %bwipe + edit! Xfile1 + call setpos("'u", [0, 3, 1, 0]) + call setpos("'v", [0, 5, 1, 0]) + enew + wviminfo Xviminfo + %bwipe + edit Xfile1 + rviminfo! Xviminfo + call assert_equal([0, 3, 1, 0], getpos("'u")) + call assert_equal([0, 5, 1, 0], getpos("'v")) + %bwipe + call delete('Xfile1') + call delete('Xviminfo') + let &viminfo = save_viminfo + endfunc + func Test_viminfo_oldfiles() let v:oldfiles = [] let lines = [ \ '# comment line', \ '*encoding=utf-8', \ '', + \ ':h viminfo', + \ '?/session', + \ '=myvar', + \ '@123', + \ '', + \ "'E 2 0 /tmp/nothing", + \ '', \ "> /tmp/file_one.txt", \ "\t\"\t11\t0", \ "", *************** *** 531,539 **** --- 572,586 ---- \ "", \ ] call writefile(lines, 'Xviminfo') + delmark E rviminfo! Xviminfo call delete('Xviminfo') + call assert_equal('h viminfo', histget(':')) + call assert_equal('session', histget('/')) + call assert_equal('myvar', histget('=')) + call assert_equal('123', histget('@')) + call assert_equal(2, line("'E")) call assert_equal(['1: /tmp/file_one.txt', '2: /tmp/file_two.txt', '3: /tmp/another.txt'], filter(split(execute('oldfiles'), "\n"), {i, v -> v =~ '/tmp/'})) call assert_equal(['1: /tmp/file_one.txt', '2: /tmp/file_two.txt'], filter(split(execute('filter file_ oldfiles'), "\n"), {i, v -> v =~ '/tmp/'})) call assert_equal(['3: /tmp/another.txt'], filter(split(execute('filter /another/ oldfiles'), "\n"), {i, v -> v =~ '/tmp/'})) *************** *** 543,546 **** --- 590,740 ---- browse oldfiles call assert_equal("/tmp/another.txt", expand("%")) bwipe + delmark E + endfunc + + " Test for storing and restoring buffer list in 'viminfo' + func Test_viminfo_bufferlist() + " If there are arguments, then :rviminfo doesn't read the buffer list. + " Need to delete all the arguments for :rviminfo to work. + %argdelete + + edit Xfile1 + edit Xfile2 + set viminfo-=% + wviminfo Xviminfo + %bwipe + rviminfo Xviminfo + call assert_equal(1, len(getbufinfo())) + + edit Xfile1 + edit Xfile2 + set viminfo^=% + wviminfo Xviminfo + %bwipe + rviminfo Xviminfo + let l = getbufinfo() + call assert_equal(3, len(l)) + call assert_equal('Xfile1', bufname(l[1].bufnr)) + call assert_equal('Xfile2', bufname(l[2].bufnr)) + + call delete('Xviminfo') + %bwipe + set viminfo-=% + endfunc + + " Test for errors in a viminfo file + func Test_viminfo_error() + " Non-existing viminfo files + call assert_fails('rviminfo xyz', 'E195:') + + " Illegal starting character + call writefile(["a 123"], 'Xviminfo') + call assert_fails('rv Xviminfo', 'E575:') + + " Illegal register name in the viminfo file + call writefile(['"@ LINE 0'], 'Xviminfo') + call assert_fails('rv Xviminfo', 'E577:') + + " Invalid file mark line + call writefile(['>', '@'], 'Xviminfo') + call assert_fails('rv Xviminfo', 'E576:') + + " Too many errors in viminfo file + call writefile(repeat(["a 123"], 15), 'Xviminfo') + call assert_fails('rv Xviminfo', 'E136:') + + call writefile(['>'] + repeat(['@'], 10), 'Xviminfo') + call assert_fails('rv Xviminfo', 'E136:') + + call writefile(repeat(['"@'], 15), 'Xviminfo') + call assert_fails('rv Xviminfo', 'E136:') + + call delete('Xviminfo') + endfunc + + " Test for saving and restoring last substitute string in viminfo + func Test_viminfo_lastsub() + enew + call append(0, "blue blue blue") + call cursor(1, 1) + s/blue/green/ + wviminfo Xviminfo + s/blue/yellow/ + rviminfo! Xviminfo + & + call assert_equal("green yellow green", getline(1)) + enew! + call delete('Xviminfo') + endfunc + + " Test saving and restoring the register values using the older method + func Test_viminfo_registers_old() + let lines = [ + \ '# Viminfo version', + \ '|1,1', + \ '', + \ '*encoding=utf-8', + \ '', + \ '# Registers:', + \ '""0 CHAR 0', + \ ' Vim', + \ '"a CHAR 0', + \ ' red', + \ '"m@ CHAR 0', + \ " :echo 'Hello'\", + \ "", + \ ] + call writefile(lines, 'Xviminfo') + let @a = 'one' + let @b = 'two' + let @m = 'three' + let @" = 'four' + let @t = ":echo 'Unix'\" + silent! normal @t + rviminfo! Xviminfo + call assert_equal('red', getreg('a')) + call assert_equal('two', getreg('b')) + call assert_equal(":echo 'Hello'\", getreg('m')) + call assert_equal('Vim', getreg('"')) + call assert_equal("\nHello", execute('normal @@')) + call delete('Xviminfo') + let @" = '' + endfunc + + " Test for saving and restoring large number of lines in a register + func Test_viminfo_large_register() + let save_viminfo = &viminfo + set viminfo&vim + set viminfo-=<50 + set viminfo+=<200 + let lines = ['"r CHAR 0'] + call extend(lines, repeat(["\tsun is rising"], 200)) + call writefile(lines, 'Xviminfo') + let @r = '' + rviminfo! Xviminfo + call assert_equal(join(repeat(["sun is rising"], 200), "\n"), @r) + call delete('Xviminfo') + let &viminfo = save_viminfo + endfunc + + " Test for setting 'viminfofile' to NONE + func Test_viminfofile_none() + set viminfofile=NONE + wviminfo Xviminfo + call assert_false(filereadable('Xviminfo')) + call writefile([''], 'Xviminfo') + call assert_fails('rviminfo Xviminfo', 'E195:') + call delete('Xviminfo') + endfunc + + " Test for an unwritable 'viminfo' file + func Test_viminfo_readonly() + if !has('unix') + return + endif + call writefile([''], 'Xviminfo') + call setfperm('Xviminfo', 'r-x------') + call assert_fails('wviminfo Xviminfo', 'E137:') + call delete('Xviminfo') endfunc *** ../vim-8.1.2110/src/version.c 2019-10-03 22:35:46.688591474 +0200 --- src/version.c 2019-10-04 21:20:00.491465863 +0200 *************** *** 755,756 **** --- 755,758 ---- { /* Add new patch number below this line */ + /**/ + 2111, /**/ -- Time flies like an arrow. Fruit flies like a banana. /// 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 ///