1b20e3348SBram Moolenaar" Test for reading and writing .viminfo 2b20e3348SBram Moolenaar 36bd1d770SBram Moolenaarsource check.vim 48e6be343SBram Moolenaarsource term_util.vim 58e6be343SBram Moolenaarsource shared.vim 66bd1d770SBram Moolenaar 7156919f9SBram Moolenaarfunction Test_viminfo_read_and_write() 826b654a5SBram Moolenaar " First clear 'history', so that "hislen" is zero. Then set it again, 926b654a5SBram Moolenaar " simulating Vim starting up. 1026b654a5SBram Moolenaar set history=0 1126b654a5SBram Moolenaar wviminfo Xviminfo 1226b654a5SBram Moolenaar set history=1000 1326b654a5SBram Moolenaar 1445d2eeaaSBram Moolenaar call histdel(':') 15b20e3348SBram Moolenaar let lines = [ 16b20e3348SBram Moolenaar \ '# comment line', 17b20e3348SBram Moolenaar \ '*encoding=utf-8', 18b20e3348SBram Moolenaar \ '~MSle0~/asdf', 19b20e3348SBram Moolenaar \ '|copied as-is', 20b20e3348SBram Moolenaar \ '|and one more', 21b20e3348SBram Moolenaar \ ] 22b20e3348SBram Moolenaar call writefile(lines, 'Xviminfo') 23b20e3348SBram Moolenaar rviminfo Xviminfo 24b20e3348SBram Moolenaar call assert_equal('asdf', @/) 25b20e3348SBram Moolenaar 26b20e3348SBram Moolenaar wviminfo Xviminfo 27b20e3348SBram Moolenaar let lines = readfile('Xviminfo') 28b20e3348SBram Moolenaar let done = 0 29b20e3348SBram Moolenaar for line in lines 30156919f9SBram Moolenaar if line[0] == '|' && line !~ '^|[234],' && line !~ '^|<' 31b20e3348SBram Moolenaar if done == 0 322d358997SBram Moolenaar call assert_equal('|1,4', line) 33b20e3348SBram Moolenaar elseif done == 1 3445d2eeaaSBram Moolenaar call assert_equal('|copied as-is', line) 3545d2eeaaSBram Moolenaar elseif done == 2 36b20e3348SBram Moolenaar call assert_equal('|and one more', line) 37b20e3348SBram Moolenaar endif 38b20e3348SBram Moolenaar let done += 1 39b20e3348SBram Moolenaar endif 40b20e3348SBram Moolenaar endfor 4145d2eeaaSBram Moolenaar call assert_equal(3, done) 42b20e3348SBram Moolenaar 43b20e3348SBram Moolenaar call delete('Xviminfo') 44b20e3348SBram Moolenaarendfunc 45b20e3348SBram Moolenaar 46b20e3348SBram Moolenaarfunc Test_global_vars() 472a8d3b89SBram Moolenaar let g:MY_GLOBAL_STRING = "Vim Editor" 482a8d3b89SBram Moolenaar let g:MY_GLOBAL_NUM = 345 492a8d3b89SBram Moolenaar let g:MY_GLOBAL_FLOAT = 3.14 50b20e3348SBram Moolenaar let test_dict = {'foo': 1, 'bar': 0, 'longvarible': 1000} 51b20e3348SBram Moolenaar let g:MY_GLOBAL_DICT = test_dict 52b20e3348SBram Moolenaar " store a really long list, so line wrapping will occur in viminfo file 53b20e3348SBram Moolenaar let test_list = range(1,100) 54b20e3348SBram Moolenaar let g:MY_GLOBAL_LIST = test_list 558c8b8bb5SBram Moolenaar let test_blob = 0z00112233445566778899aabbccddeeff 568c8b8bb5SBram Moolenaar let g:MY_GLOBAL_BLOB = test_blob 578c8b8bb5SBram Moolenaar let test_false = v:false 588c8b8bb5SBram Moolenaar let g:MY_GLOBAL_FALSE = test_false 598c8b8bb5SBram Moolenaar let test_true = v:true 608c8b8bb5SBram Moolenaar let g:MY_GLOBAL_TRUE = test_true 618c8b8bb5SBram Moolenaar let test_null = v:null 628c8b8bb5SBram Moolenaar let g:MY_GLOBAL_NULL = test_null 638c8b8bb5SBram Moolenaar let test_none = v:none 648c8b8bb5SBram Moolenaar let g:MY_GLOBAL_NONE = test_none 658c8b8bb5SBram Moolenaar 66e9c07270SBram Moolenaar set viminfo='100,<50,s10,h,!,nviminfo 67b20e3348SBram Moolenaar wv! Xviminfo 688c8b8bb5SBram Moolenaar 692a8d3b89SBram Moolenaar unlet g:MY_GLOBAL_STRING 702a8d3b89SBram Moolenaar unlet g:MY_GLOBAL_NUM 712a8d3b89SBram Moolenaar unlet g:MY_GLOBAL_FLOAT 72b20e3348SBram Moolenaar unlet g:MY_GLOBAL_DICT 73b20e3348SBram Moolenaar unlet g:MY_GLOBAL_LIST 748c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_BLOB 758c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_FALSE 768c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_TRUE 778c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_NULL 788c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_NONE 79b20e3348SBram Moolenaar 80b20e3348SBram Moolenaar rv! Xviminfo 812a8d3b89SBram Moolenaar call assert_equal("Vim Editor", g:MY_GLOBAL_STRING) 822a8d3b89SBram Moolenaar call assert_equal(345, g:MY_GLOBAL_NUM) 832a8d3b89SBram Moolenaar call assert_equal(3.14, g:MY_GLOBAL_FLOAT) 84b20e3348SBram Moolenaar call assert_equal(test_dict, g:MY_GLOBAL_DICT) 85b20e3348SBram Moolenaar call assert_equal(test_list, g:MY_GLOBAL_LIST) 868c8b8bb5SBram Moolenaar call assert_equal(test_blob, g:MY_GLOBAL_BLOB) 878c8b8bb5SBram Moolenaar call assert_equal(test_false, g:MY_GLOBAL_FALSE) 888c8b8bb5SBram Moolenaar call assert_equal(test_true, g:MY_GLOBAL_TRUE) 898c8b8bb5SBram Moolenaar call assert_equal(test_null, g:MY_GLOBAL_NULL) 908c8b8bb5SBram Moolenaar call assert_equal(test_none, g:MY_GLOBAL_NONE) 91b20e3348SBram Moolenaar 92845e0ee5SBram Moolenaar " Test for invalid values for a blob, list, dict in a viminfo file 93845e0ee5SBram Moolenaar call writefile([ 94845e0ee5SBram Moolenaar \ "!GLOB_BLOB_1\tBLO\t123", 95845e0ee5SBram Moolenaar \ "!GLOB_BLOB_2\tBLO\t012", 96845e0ee5SBram Moolenaar \ "!GLOB_BLOB_3\tBLO\t0z1x", 97845e0ee5SBram Moolenaar \ "!GLOB_BLOB_4\tBLO\t0z12 ab", 98845e0ee5SBram Moolenaar \ "!GLOB_LIST_1\tLIS\t1 2", 99845e0ee5SBram Moolenaar \ "!GLOB_DICT_1\tDIC\t1 2"], 'Xviminfo') 100845e0ee5SBram Moolenaar call assert_fails('rv! Xviminfo', 'E15:') 101845e0ee5SBram Moolenaar call assert_equal('123', g:GLOB_BLOB_1) 102845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_1)) 103845e0ee5SBram Moolenaar call assert_equal('012', g:GLOB_BLOB_2) 104845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_2)) 105845e0ee5SBram Moolenaar call assert_equal('0z1x', g:GLOB_BLOB_3) 106845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_3)) 107845e0ee5SBram Moolenaar call assert_equal('0z12 ab', g:GLOB_BLOB_4) 108845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_4)) 109845e0ee5SBram Moolenaar call assert_equal('1 2', g:GLOB_LIST_1) 110845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_LIST_1)) 111845e0ee5SBram Moolenaar call assert_equal('1 2', g:GLOB_DICT_1) 112845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_DICT_1)) 113845e0ee5SBram Moolenaar 114b20e3348SBram Moolenaar call delete('Xviminfo') 115b20e3348SBram Moolenaar set viminfo-=! 116b20e3348SBram Moolenaarendfunc 11745d2eeaaSBram Moolenaar 1185b157fe2SBram Moolenaarfunc Test_global_vars_with_circular_reference() 1195b157fe2SBram Moolenaar let g:MY_GLOBAL_LIST = [] 1205b157fe2SBram Moolenaar call add(g:MY_GLOBAL_LIST, g:MY_GLOBAL_LIST) 1215b157fe2SBram Moolenaar let g:MY_GLOBAL_DICT = {} 1225b157fe2SBram Moolenaar let g:MY_GLOBAL_DICT['self'] = g:MY_GLOBAL_DICT 1235b157fe2SBram Moolenaar 1245b157fe2SBram Moolenaar set viminfo='100,<50,s10,h,!,nviminfo 1255b157fe2SBram Moolenaar wv! Xviminfo 1265b157fe2SBram Moolenaar call assert_equal(v:errmsg, '') 1275b157fe2SBram Moolenaar 1285b157fe2SBram Moolenaar unlet g:MY_GLOBAL_LIST 1295b157fe2SBram Moolenaar unlet g:MY_GLOBAL_DICT 1305b157fe2SBram Moolenaar 1315b157fe2SBram Moolenaar rv! Xviminfo 1325b157fe2SBram Moolenaar call assert_equal(v:errmsg, '') 1335b157fe2SBram Moolenaar call assert_true(!exists('g:MY_GLOBAL_LIST')) 1345b157fe2SBram Moolenaar call assert_true(!exists('g:MY_GLOBAL_DICT')) 1355b157fe2SBram Moolenaar 1365b157fe2SBram Moolenaar call delete('Xviminfo') 1375b157fe2SBram Moolenaar set viminfo-=! 1385b157fe2SBram Moolenaarendfunc 1395b157fe2SBram Moolenaar 14045d2eeaaSBram Moolenaarfunc Test_cmdline_history() 14145d2eeaaSBram Moolenaar call histdel(':') 14245d2eeaaSBram Moolenaar call test_settime(11) 14345d2eeaaSBram Moolenaar call histadd(':', "echo 'one'") 14445d2eeaaSBram Moolenaar call test_settime(12) 14545d2eeaaSBram Moolenaar " split into two lines 14645d2eeaaSBram Moolenaar let long800 = repeat(" 'eight'", 100) 14745d2eeaaSBram Moolenaar call histadd(':', "echo " . long800) 14845d2eeaaSBram Moolenaar call test_settime(13) 14945d2eeaaSBram Moolenaar " split into three lines 15045d2eeaaSBram Moolenaar let long1400 = repeat(" 'fourteeeeen'", 100) 15145d2eeaaSBram Moolenaar call histadd(':', "echo " . long1400) 15245d2eeaaSBram Moolenaar wviminfo Xviminfo 15345d2eeaaSBram Moolenaar let lines = readfile('Xviminfo') 15445d2eeaaSBram Moolenaar let done_colon = 0 15545d2eeaaSBram Moolenaar let done_bar = 0 15645d2eeaaSBram Moolenaar let lnum = 0 15745d2eeaaSBram Moolenaar while lnum < len(lines) 15845d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 15945d2eeaaSBram Moolenaar if line[0] == ':' 16045d2eeaaSBram Moolenaar if done_colon == 0 16145d2eeaaSBram Moolenaar call assert_equal(":\x161408", line) 16245d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 16345d2eeaaSBram Moolenaar call assert_equal('<echo ' . long1400, line) 16445d2eeaaSBram Moolenaar elseif done_colon == 1 16545d2eeaaSBram Moolenaar call assert_equal(":\x16808", line) 16645d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 16745d2eeaaSBram Moolenaar call assert_equal("<echo " . long800, line) 16845d2eeaaSBram Moolenaar elseif done_colon == 2 16945d2eeaaSBram Moolenaar call assert_equal(":echo 'one'", line) 17045d2eeaaSBram Moolenaar endif 17145d2eeaaSBram Moolenaar let done_colon += 1 17245d2eeaaSBram Moolenaar elseif line[0:4] == '|2,0,' 17345d2eeaaSBram Moolenaar if done_bar == 0 17445d2eeaaSBram Moolenaar call assert_equal("|2,0,13,,>1407", line) 17545d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 17645d2eeaaSBram Moolenaar call assert_equal('|<"echo ' . long1400[0:484], line) 17745d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 17845d2eeaaSBram Moolenaar call assert_equal('|<' . long1400[485:974], line) 17945d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 18045d2eeaaSBram Moolenaar call assert_equal('|<' . long1400[975:] . '"', line) 18145d2eeaaSBram Moolenaar elseif done_bar == 1 18245d2eeaaSBram Moolenaar call assert_equal('|2,0,12,,>807', line) 18345d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 18445d2eeaaSBram Moolenaar call assert_equal('|<"echo ' . long800[0:484], line) 18545d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 18645d2eeaaSBram Moolenaar call assert_equal('|<' . long800[485:] . '"', line) 18745d2eeaaSBram Moolenaar elseif done_bar == 2 18845d2eeaaSBram Moolenaar call assert_equal("|2,0,11,,\"echo 'one'\"", line) 18945d2eeaaSBram Moolenaar endif 19045d2eeaaSBram Moolenaar let done_bar += 1 19145d2eeaaSBram Moolenaar endif 19245d2eeaaSBram Moolenaar endwhile 19345d2eeaaSBram Moolenaar call assert_equal(3, done_colon) 19445d2eeaaSBram Moolenaar call assert_equal(3, done_bar) 19545d2eeaaSBram Moolenaar 19645d2eeaaSBram Moolenaar call histdel(':') 19745d2eeaaSBram Moolenaar rviminfo Xviminfo 19845d2eeaaSBram Moolenaar call assert_equal("echo " . long1400, histget(':', -1)) 19945d2eeaaSBram Moolenaar call assert_equal("echo " . long800, histget(':', -2)) 20045d2eeaaSBram Moolenaar call assert_equal("echo 'one'", histget(':', -3)) 20145d2eeaaSBram Moolenaar 20245d2eeaaSBram Moolenaar call delete('Xviminfo') 20345d2eeaaSBram Moolenaarendfunc 2041fd99c1cSBram Moolenaar 2051fd99c1cSBram Moolenaarfunc Test_cmdline_history_order() 2061fd99c1cSBram Moolenaar call histdel(':') 2071fd99c1cSBram Moolenaar call test_settime(11) 2081fd99c1cSBram Moolenaar call histadd(':', "echo '11'") 2091fd99c1cSBram Moolenaar call test_settime(22) 2101fd99c1cSBram Moolenaar call histadd(':', "echo '22'") 2111fd99c1cSBram Moolenaar call test_settime(33) 2121fd99c1cSBram Moolenaar call histadd(':', "echo '33'") 2131fd99c1cSBram Moolenaar wviminfo Xviminfo 2141fd99c1cSBram Moolenaar 2151fd99c1cSBram Moolenaar call histdel(':') 2161fd99c1cSBram Moolenaar " items go in between 2171fd99c1cSBram Moolenaar call test_settime(15) 2181fd99c1cSBram Moolenaar call histadd(':', "echo '15'") 2191fd99c1cSBram Moolenaar call test_settime(27) 2201fd99c1cSBram Moolenaar call histadd(':', "echo '27'") 2211fd99c1cSBram Moolenaar 2221fd99c1cSBram Moolenaar rviminfo Xviminfo 2231fd99c1cSBram Moolenaar call assert_equal("echo '33'", histget(':', -1)) 2241fd99c1cSBram Moolenaar call assert_equal("echo '27'", histget(':', -2)) 2251fd99c1cSBram Moolenaar call assert_equal("echo '22'", histget(':', -3)) 2261fd99c1cSBram Moolenaar call assert_equal("echo '15'", histget(':', -4)) 2271fd99c1cSBram Moolenaar call assert_equal("echo '11'", histget(':', -5)) 2281fd99c1cSBram Moolenaar 2291fd99c1cSBram Moolenaar call histdel(':') 2301fd99c1cSBram Moolenaar " items go before and after 231ce90e36fSBram Moolenaar eval 8->test_settime() 2321fd99c1cSBram Moolenaar call histadd(':', "echo '8'") 2331fd99c1cSBram Moolenaar call test_settime(39) 2341fd99c1cSBram Moolenaar call histadd(':', "echo '39'") 2351fd99c1cSBram Moolenaar 2361fd99c1cSBram Moolenaar rviminfo Xviminfo 2371fd99c1cSBram Moolenaar call assert_equal("echo '39'", histget(':', -1)) 2381fd99c1cSBram Moolenaar call assert_equal("echo '33'", histget(':', -2)) 2391fd99c1cSBram Moolenaar call assert_equal("echo '22'", histget(':', -3)) 2401fd99c1cSBram Moolenaar call assert_equal("echo '11'", histget(':', -4)) 2411fd99c1cSBram Moolenaar call assert_equal("echo '8'", histget(':', -5)) 2421fd99c1cSBram Moolenaar 2431fd99c1cSBram Moolenaar " Check sorting works when writing with merge. 2441fd99c1cSBram Moolenaar call histdel(':') 2451fd99c1cSBram Moolenaar call test_settime(8) 2461fd99c1cSBram Moolenaar call histadd(':', "echo '8'") 2471fd99c1cSBram Moolenaar call test_settime(15) 2481fd99c1cSBram Moolenaar call histadd(':', "echo '15'") 2491fd99c1cSBram Moolenaar call test_settime(27) 2501fd99c1cSBram Moolenaar call histadd(':', "echo '27'") 2511fd99c1cSBram Moolenaar call test_settime(39) 2521fd99c1cSBram Moolenaar call histadd(':', "echo '39'") 2531fd99c1cSBram Moolenaar wviminfo Xviminfo 2541fd99c1cSBram Moolenaar 2551fd99c1cSBram Moolenaar call histdel(':') 2561fd99c1cSBram Moolenaar rviminfo Xviminfo 2571fd99c1cSBram Moolenaar call assert_equal("echo '39'", histget(':', -1)) 2581fd99c1cSBram Moolenaar call assert_equal("echo '33'", histget(':', -2)) 2591fd99c1cSBram Moolenaar call assert_equal("echo '27'", histget(':', -3)) 2601fd99c1cSBram Moolenaar call assert_equal("echo '22'", histget(':', -4)) 2611fd99c1cSBram Moolenaar call assert_equal("echo '15'", histget(':', -5)) 2621fd99c1cSBram Moolenaar call assert_equal("echo '11'", histget(':', -6)) 2631fd99c1cSBram Moolenaar call assert_equal("echo '8'", histget(':', -7)) 2641fd99c1cSBram Moolenaar 2651fd99c1cSBram Moolenaar call delete('Xviminfo') 2661fd99c1cSBram Moolenaarendfunc 26701227093SBram Moolenaar 268e80ff744SBram Moolenaarfunc Test_viminfo_registers() 269e80ff744SBram Moolenaar call test_settime(8) 270e80ff744SBram Moolenaar call setreg('a', "eight", 'c') 271e80ff744SBram Moolenaar call test_settime(20) 272e80ff744SBram Moolenaar call setreg('b', ["twenty", "again"], 'l') 273e80ff744SBram Moolenaar call test_settime(40) 274e80ff744SBram Moolenaar call setreg('c', ["four", "agai"], 'b4') 275e80ff744SBram Moolenaar let l = [] 276e80ff744SBram Moolenaar set viminfo='100,<600,s10,h,!,nviminfo 277e80ff744SBram Moolenaar for i in range(500) 278e80ff744SBram Moolenaar call add(l, 'something') 279e80ff744SBram Moolenaar endfor 280e80ff744SBram Moolenaar call setreg('d', l, 'l') 2812a8d3b89SBram Moolenaar call setreg('e', "abc\<C-V>xyz") 282e80ff744SBram Moolenaar wviminfo Xviminfo 283e80ff744SBram Moolenaar 284e80ff744SBram Moolenaar call test_settime(10) 285e80ff744SBram Moolenaar call setreg('a', '', 'b10') 286e80ff744SBram Moolenaar call test_settime(15) 287e80ff744SBram Moolenaar call setreg('b', 'drop') 288e80ff744SBram Moolenaar call test_settime(50) 289e80ff744SBram Moolenaar call setreg('c', 'keep', 'l') 290e80ff744SBram Moolenaar call test_settime(30) 291e80ff744SBram Moolenaar call setreg('d', 'drop', 'l') 2922a8d3b89SBram Moolenaar call setreg('e', 'drop') 293e80ff744SBram Moolenaar rviminfo Xviminfo 294e80ff744SBram Moolenaar 295e80ff744SBram Moolenaar call assert_equal("", getreg('a')) 296e80ff744SBram Moolenaar call assert_equal("\<C-V>10", getregtype('a')) 297e80ff744SBram Moolenaar call assert_equal("twenty\nagain\n", getreg('b')) 298e80ff744SBram Moolenaar call assert_equal("V", getregtype('b')) 299e80ff744SBram Moolenaar call assert_equal("keep\n", getreg('c')) 300e80ff744SBram Moolenaar call assert_equal("V", getregtype('c')) 301e80ff744SBram Moolenaar call assert_equal(l, getreg('d', 1, 1)) 302e80ff744SBram Moolenaar call assert_equal("V", getregtype('d')) 3032a8d3b89SBram Moolenaar call assert_equal("abc\<C-V>xyz", getreg('e')) 304e80ff744SBram Moolenaar 30525709576SBram Moolenaar " Length around 440 switches to line continuation. 30625709576SBram Moolenaar let len = 434 30725709576SBram Moolenaar while len < 445 30825709576SBram Moolenaar let s = repeat('a', len) 30925709576SBram Moolenaar call setreg('"', s) 31025709576SBram Moolenaar wviminfo Xviminfo 31125709576SBram Moolenaar call setreg('"', '') 31225709576SBram Moolenaar rviminfo Xviminfo 31325709576SBram Moolenaar call assert_equal(s, getreg('"'), 'wrong register at length: ' . len) 31425709576SBram Moolenaar 31525709576SBram Moolenaar let len += 1 31625709576SBram Moolenaar endwhile 31725709576SBram Moolenaar 318e80ff744SBram Moolenaar call delete('Xviminfo') 319e80ff744SBram Moolenaarendfunc 320e80ff744SBram Moolenaar 3212d358997SBram Moolenaarfunc Test_viminfo_marks() 3222d358997SBram Moolenaar sp bufa 3232d358997SBram Moolenaar let bufa = bufnr('%') 3242d358997SBram Moolenaar sp bufb 3252d358997SBram Moolenaar let bufb = bufnr('%') 3262d358997SBram Moolenaar 3272d358997SBram Moolenaar call test_settime(8) 3282d358997SBram Moolenaar call setpos("'A", [bufa, 1, 1, 0]) 3292d358997SBram Moolenaar call test_settime(20) 3302d358997SBram Moolenaar call setpos("'B", [bufb, 9, 1, 0]) 3312d358997SBram Moolenaar call setpos("'C", [bufa, 7, 1, 0]) 3322d358997SBram Moolenaar 3332d358997SBram Moolenaar delmark 0-9 3342d358997SBram Moolenaar call test_settime(25) 3352d358997SBram Moolenaar call setpos("'1", [bufb, 12, 1, 0]) 3362d358997SBram Moolenaar call test_settime(35) 3372d358997SBram Moolenaar call setpos("'0", [bufa, 11, 1, 0]) 3382d358997SBram Moolenaar 3392d358997SBram Moolenaar call test_settime(45) 3402d358997SBram Moolenaar wviminfo Xviminfo 3412d358997SBram Moolenaar 3422d358997SBram Moolenaar " Writing viminfo inserts the '0 mark. 3432d358997SBram Moolenaar call assert_equal([bufb, 1, 1, 0], getpos("'0")) 3442d358997SBram Moolenaar call assert_equal([bufa, 11, 1, 0], getpos("'1")) 3452d358997SBram Moolenaar call assert_equal([bufb, 12, 1, 0], getpos("'2")) 3462d358997SBram Moolenaar 3472d358997SBram Moolenaar call test_settime(4) 3482d358997SBram Moolenaar call setpos("'A", [bufa, 9, 1, 0]) 3492d358997SBram Moolenaar call test_settime(30) 3502d358997SBram Moolenaar call setpos("'B", [bufb, 2, 3, 0]) 3512d358997SBram Moolenaar delmark C 3522d358997SBram Moolenaar 3532d358997SBram Moolenaar delmark 0-9 3542d358997SBram Moolenaar call test_settime(30) 3552d358997SBram Moolenaar call setpos("'1", [bufb, 22, 1, 0]) 3562d358997SBram Moolenaar call test_settime(55) 3572d358997SBram Moolenaar call setpos("'0", [bufa, 21, 1, 0]) 3582d358997SBram Moolenaar 3592d358997SBram Moolenaar rviminfo Xviminfo 3602d358997SBram Moolenaar 3612d358997SBram Moolenaar call assert_equal([bufa, 1, 1, 0], getpos("'A")) 3622d358997SBram Moolenaar call assert_equal([bufb, 2, 3, 0], getpos("'B")) 3632d358997SBram Moolenaar call assert_equal([bufa, 7, 1, 0], getpos("'C")) 3642d358997SBram Moolenaar 3652d358997SBram Moolenaar " numbered marks are merged 3662d358997SBram Moolenaar call assert_equal([bufa, 21, 1, 0], getpos("'0")) " time 55 3672d358997SBram Moolenaar call assert_equal([bufb, 1, 1, 0], getpos("'1")) " time 45 3682d358997SBram Moolenaar call assert_equal([bufa, 11, 1, 0], getpos("'2")) " time 35 3692d358997SBram Moolenaar call assert_equal([bufb, 22, 1, 0], getpos("'3")) " time 30 3702d358997SBram Moolenaar call assert_equal([bufb, 12, 1, 0], getpos("'4")) " time 25 3712d358997SBram Moolenaar 3728cd6cd80SBram Moolenaar " deleted file marks are removed from viminfo 3738cd6cd80SBram Moolenaar delmark C 3748cd6cd80SBram Moolenaar wviminfo Xviminfo 3758cd6cd80SBram Moolenaar rviminfo Xviminfo 3768cd6cd80SBram Moolenaar call assert_equal([0, 0, 0, 0], getpos("'C")) 3778cd6cd80SBram Moolenaar 3788cd6cd80SBram Moolenaar " deleted file marks stay in viminfo if defined in another vim later 3798cd6cd80SBram Moolenaar call test_settime(70) 3808cd6cd80SBram Moolenaar call setpos("'D", [bufb, 8, 1, 0]) 3818cd6cd80SBram Moolenaar wviminfo Xviminfo 3828cd6cd80SBram Moolenaar call test_settime(65) 3838cd6cd80SBram Moolenaar delmark D 3848cd6cd80SBram Moolenaar call assert_equal([0, 0, 0, 0], getpos("'D")) 3858cd6cd80SBram Moolenaar call test_settime(75) 3868cd6cd80SBram Moolenaar rviminfo Xviminfo 3878cd6cd80SBram Moolenaar call assert_equal([bufb, 8, 1, 0], getpos("'D")) 3888cd6cd80SBram Moolenaar 3892d358997SBram Moolenaar call delete('Xviminfo') 3902d358997SBram Moolenaar exe 'bwipe ' . bufa 3912d358997SBram Moolenaar exe 'bwipe ' . bufb 3922d358997SBram Moolenaarendfunc 3932d358997SBram Moolenaar 3942d358997SBram Moolenaarfunc Test_viminfo_jumplist() 3952d358997SBram Moolenaar split testbuf 3962d358997SBram Moolenaar clearjumps 3972d358997SBram Moolenaar call setline(1, ['time 05', 'time 10', 'time 15', 'time 20', 'time 30', 'last pos']) 3982d358997SBram Moolenaar call cursor(2, 1) 3992d358997SBram Moolenaar call test_settime(10) 4002d358997SBram Moolenaar exe "normal /20\r" 4012d358997SBram Moolenaar call test_settime(20) 4022d358997SBram Moolenaar exe "normal /30\r" 4032d358997SBram Moolenaar call test_settime(30) 4042d358997SBram Moolenaar exe "normal /last pos\r" 4052d358997SBram Moolenaar wviminfo Xviminfo 4062d358997SBram Moolenaar 4072d358997SBram Moolenaar clearjumps 4082d358997SBram Moolenaar call cursor(1, 1) 4092d358997SBram Moolenaar call test_settime(5) 4102d358997SBram Moolenaar exe "normal /15\r" 4112d358997SBram Moolenaar call test_settime(15) 4122d358997SBram Moolenaar exe "normal /last pos\r" 4132d358997SBram Moolenaar call test_settime(40) 4142d358997SBram Moolenaar exe "normal ?30\r" 4152d358997SBram Moolenaar rviminfo Xviminfo 4162d358997SBram Moolenaar 4172d358997SBram Moolenaar call assert_equal('time 30', getline('.')) 4182d358997SBram Moolenaar exe "normal \<C-O>" 4192d358997SBram Moolenaar call assert_equal('last pos', getline('.')) 4202d358997SBram Moolenaar exe "normal \<C-O>" 4212d358997SBram Moolenaar " duplicate for 'time 30' was removed 4222d358997SBram Moolenaar call assert_equal('time 20', getline('.')) 4232d358997SBram Moolenaar exe "normal \<C-O>" 4242d358997SBram Moolenaar call assert_equal('time 15', getline('.')) 4252d358997SBram Moolenaar exe "normal \<C-O>" 4262d358997SBram Moolenaar call assert_equal('time 10', getline('.')) 4272d358997SBram Moolenaar exe "normal \<C-O>" 4282d358997SBram Moolenaar call assert_equal('time 05', getline('.')) 4292d358997SBram Moolenaar 430ece74ab1SBram Moolenaar clearjumps 431ece74ab1SBram Moolenaar call cursor(1, 1) 432ece74ab1SBram Moolenaar call test_settime(5) 433ece74ab1SBram Moolenaar exe "normal /15\r" 434ece74ab1SBram Moolenaar call test_settime(15) 435ece74ab1SBram Moolenaar exe "normal /last pos\r" 436ece74ab1SBram Moolenaar call test_settime(40) 437ece74ab1SBram Moolenaar exe "normal ?30\r" 438ece74ab1SBram Moolenaar " Test merge when writing 439ece74ab1SBram Moolenaar wviminfo Xviminfo 440ece74ab1SBram Moolenaar clearjumps 441ece74ab1SBram Moolenaar rviminfo Xviminfo 442ece74ab1SBram Moolenaar 44328607ba2SBram Moolenaar let last_line = line('.') 444ece74ab1SBram Moolenaar exe "normal \<C-O>" 445ece74ab1SBram Moolenaar call assert_equal('time 30', getline('.')) 446ece74ab1SBram Moolenaar exe "normal \<C-O>" 447ece74ab1SBram Moolenaar call assert_equal('last pos', getline('.')) 448ece74ab1SBram Moolenaar exe "normal \<C-O>" 449ece74ab1SBram Moolenaar " duplicate for 'time 30' was removed 450ece74ab1SBram Moolenaar call assert_equal('time 20', getline('.')) 451ece74ab1SBram Moolenaar exe "normal \<C-O>" 452ece74ab1SBram Moolenaar call assert_equal('time 15', getline('.')) 453ece74ab1SBram Moolenaar exe "normal \<C-O>" 454ece74ab1SBram Moolenaar call assert_equal('time 10', getline('.')) 455ece74ab1SBram Moolenaar exe "normal \<C-O>" 456ece74ab1SBram Moolenaar call assert_equal('time 05', getline('.')) 457ece74ab1SBram Moolenaar 45828607ba2SBram Moolenaar " Test with jumplist full. 45928607ba2SBram Moolenaar clearjumps 46028607ba2SBram Moolenaar call setline(1, repeat(['match here'], 101)) 46128607ba2SBram Moolenaar call cursor(1, 1) 46228607ba2SBram Moolenaar call test_settime(10) 46328607ba2SBram Moolenaar for i in range(100) 46428607ba2SBram Moolenaar exe "normal /here\r" 46528607ba2SBram Moolenaar endfor 46628607ba2SBram Moolenaar rviminfo Xviminfo 46728607ba2SBram Moolenaar 46828607ba2SBram Moolenaar " must be newest mark that comes from viminfo. 46928607ba2SBram Moolenaar exe "normal \<C-O>" 47028607ba2SBram Moolenaar call assert_equal(last_line, line('.')) 47128607ba2SBram Moolenaar 4722d358997SBram Moolenaar bwipe! 4732d358997SBram Moolenaar call delete('Xviminfo') 4742d358997SBram Moolenaarendfunc 4752d358997SBram Moolenaar 47601227093SBram Moolenaarfunc Test_viminfo_encoding() 47701227093SBram Moolenaar set enc=latin1 47801227093SBram Moolenaar call histdel(':') 47901227093SBram Moolenaar call histadd(':', "echo '\xe9'") 48001227093SBram Moolenaar wviminfo Xviminfo 48101227093SBram Moolenaar 48201227093SBram Moolenaar set fencs=utf-8,latin1 48301227093SBram Moolenaar set enc=utf-8 48401227093SBram Moolenaar sp Xviminfo 48501227093SBram Moolenaar call assert_equal('latin1', &fenc) 48601227093SBram Moolenaar close 48701227093SBram Moolenaar 48801227093SBram Moolenaar call histdel(':') 48901227093SBram Moolenaar rviminfo Xviminfo 49001227093SBram Moolenaar call assert_equal("echo 'é'", histget(':', -1)) 49101227093SBram Moolenaar 49201227093SBram Moolenaar call delete('Xviminfo') 49301227093SBram Moolenaarendfunc 49462f8b4e1SBram Moolenaar 49562f8b4e1SBram Moolenaarfunc Test_viminfo_bad_syntax() 49662f8b4e1SBram Moolenaar let lines = [] 49762f8b4e1SBram Moolenaar call add(lines, '|<') " empty continuation line 49862f8b4e1SBram Moolenaar call add(lines, '|234234234234234324,nothing') 49962f8b4e1SBram Moolenaar call add(lines, '|1+"no comma"') 50062f8b4e1SBram Moolenaar call add(lines, '|1,2,3,4,5,6,7') " too many items 50162f8b4e1SBram Moolenaar call add(lines, '|1,"string version"') 50262f8b4e1SBram Moolenaar call add(lines, '|1,>x') " bad continuation line 50362f8b4e1SBram Moolenaar call add(lines, '|1,"x') " missing quote 50462f8b4e1SBram Moolenaar call add(lines, '|1,"x\') " trailing backslash 50562f8b4e1SBram Moolenaar call add(lines, '|1,,,,') "trailing comma 50662f8b4e1SBram Moolenaar call add(lines, '|1,>234') " trailing continuation line 50762f8b4e1SBram Moolenaar call writefile(lines, 'Xviminfo') 508e80ff744SBram Moolenaar rviminfo Xviminfo 50962f8b4e1SBram Moolenaar 51062f8b4e1SBram Moolenaar call delete('Xviminfo') 51162f8b4e1SBram Moolenaarendfunc 51262f8b4e1SBram Moolenaar 513ab9c89b6SBram Moolenaarfunc Test_viminfo_file_marks() 514ab9c89b6SBram Moolenaar silent! bwipe test_viminfo.vim 515ab9c89b6SBram Moolenaar silent! bwipe Xviminfo 516ab9c89b6SBram Moolenaar 517ab9c89b6SBram Moolenaar call test_settime(10) 518ab9c89b6SBram Moolenaar edit ten 519ab9c89b6SBram Moolenaar call test_settime(25) 520ab9c89b6SBram Moolenaar edit again 521ab9c89b6SBram Moolenaar call test_settime(30) 522ab9c89b6SBram Moolenaar edit thirty 523ab9c89b6SBram Moolenaar wviminfo Xviminfo 524ab9c89b6SBram Moolenaar 525ab9c89b6SBram Moolenaar call test_settime(20) 526ab9c89b6SBram Moolenaar edit twenty 527ab9c89b6SBram Moolenaar call test_settime(35) 528ab9c89b6SBram Moolenaar edit again 529ab9c89b6SBram Moolenaar call test_settime(40) 530ab9c89b6SBram Moolenaar edit fourty 531ab9c89b6SBram Moolenaar wviminfo Xviminfo 532ab9c89b6SBram Moolenaar 533ab9c89b6SBram Moolenaar sp Xviminfo 534ab9c89b6SBram Moolenaar 1 535ab9c89b6SBram Moolenaar for name in ['fourty', 'again', 'thirty', 'twenty', 'ten'] 536ab9c89b6SBram Moolenaar /^> 537ab9c89b6SBram Moolenaar call assert_equal(name, substitute(getline('.'), '.*/', '', '')) 538ab9c89b6SBram Moolenaar endfor 539ab9c89b6SBram Moolenaar close 540ab9c89b6SBram Moolenaar 541ab9c89b6SBram Moolenaar call delete('Xviminfo') 542ab9c89b6SBram Moolenaarendfunc 543e59215c7SBram Moolenaar 544e59215c7SBram Moolenaarfunc Test_viminfo_file_mark_tabclose() 545e59215c7SBram Moolenaar tabnew Xtestfileintab 546e59215c7SBram Moolenaar call setline(1, ['a','b','c','d','e']) 547e59215c7SBram Moolenaar 4 548e59215c7SBram Moolenaar q! 549e59215c7SBram Moolenaar wviminfo Xviminfo 550e59215c7SBram Moolenaar sp Xviminfo 551e59215c7SBram Moolenaar /^> .*Xtestfileintab 552e59215c7SBram Moolenaar let lnum = line('.') 553e59215c7SBram Moolenaar while 1 554e59215c7SBram Moolenaar if lnum == line('$') 55537175409SBram Moolenaar call assert_report('mark not found in Xtestfileintab') 556e59215c7SBram Moolenaar break 557e59215c7SBram Moolenaar endif 558e59215c7SBram Moolenaar let lnum += 1 559e59215c7SBram Moolenaar let line = getline(lnum) 560e59215c7SBram Moolenaar if line == '' 56137175409SBram Moolenaar call assert_report('mark not found in Xtestfileintab') 562e59215c7SBram Moolenaar break 563e59215c7SBram Moolenaar endif 564e59215c7SBram Moolenaar if line =~ "^\t\"" 565e59215c7SBram Moolenaar call assert_equal('4', substitute(line, ".*\"\t\\(\\d\\).*", '\1', '')) 566e59215c7SBram Moolenaar break 567e59215c7SBram Moolenaar endif 568e59215c7SBram Moolenaar endwhile 569e59215c7SBram Moolenaar 570e59215c7SBram Moolenaar call delete('Xviminfo') 571e59215c7SBram Moolenaar silent! bwipe Xtestfileintab 572e59215c7SBram Moolenaarendfunc 573e11d61a3SBram Moolenaar 574156919f9SBram Moolenaarfunc Test_viminfo_file_mark_zero_time() 575156919f9SBram Moolenaar let lines = [ 576156919f9SBram Moolenaar \ '# Viminfo version', 577156919f9SBram Moolenaar \ '|1,4', 578156919f9SBram Moolenaar \ '', 579156919f9SBram Moolenaar \ '*encoding=utf-8', 580156919f9SBram Moolenaar \ '', 581156919f9SBram Moolenaar \ '# File marks:', 582156919f9SBram Moolenaar \ "'B 1 0 /tmp/nothing", 583156919f9SBram Moolenaar \ '|4,66,1,0,0,"/tmp/nothing"', 584156919f9SBram Moolenaar \ "", 585156919f9SBram Moolenaar \ ] 586156919f9SBram Moolenaar call writefile(lines, 'Xviminfo') 587156919f9SBram Moolenaar delmark B 588156919f9SBram Moolenaar rviminfo Xviminfo 589156919f9SBram Moolenaar call delete('Xviminfo') 590156919f9SBram Moolenaar call assert_equal(1, line("'B")) 591156919f9SBram Moolenaar delmark B 592156919f9SBram Moolenaarendfunc 593156919f9SBram Moolenaar 5942a8d3b89SBram Moolenaar" Test for saving and restoring file marks in unloaded buffers 5952a8d3b89SBram Moolenaarfunc Test_viminfo_file_mark_unloaded_buf() 5962a8d3b89SBram Moolenaar let save_viminfo = &viminfo 5972a8d3b89SBram Moolenaar set viminfo&vim 5982a8d3b89SBram Moolenaar call writefile(repeat(['vim'], 10), 'Xfile1') 5992a8d3b89SBram Moolenaar %bwipe 6002a8d3b89SBram Moolenaar edit! Xfile1 6012a8d3b89SBram Moolenaar call setpos("'u", [0, 3, 1, 0]) 6022a8d3b89SBram Moolenaar call setpos("'v", [0, 5, 1, 0]) 6032a8d3b89SBram Moolenaar enew 6042a8d3b89SBram Moolenaar wviminfo Xviminfo 6052a8d3b89SBram Moolenaar %bwipe 6062a8d3b89SBram Moolenaar edit Xfile1 6072a8d3b89SBram Moolenaar rviminfo! Xviminfo 6082a8d3b89SBram Moolenaar call assert_equal([0, 3, 1, 0], getpos("'u")) 6092a8d3b89SBram Moolenaar call assert_equal([0, 5, 1, 0], getpos("'v")) 6102a8d3b89SBram Moolenaar %bwipe 6112a8d3b89SBram Moolenaar call delete('Xfile1') 6122a8d3b89SBram Moolenaar call delete('Xviminfo') 6132a8d3b89SBram Moolenaar let &viminfo = save_viminfo 6142a8d3b89SBram Moolenaarendfunc 6152a8d3b89SBram Moolenaar 616156919f9SBram Moolenaarfunc Test_viminfo_oldfiles() 617e11d61a3SBram Moolenaar let v:oldfiles = [] 618e11d61a3SBram Moolenaar let lines = [ 619e11d61a3SBram Moolenaar \ '# comment line', 620e11d61a3SBram Moolenaar \ '*encoding=utf-8', 621e11d61a3SBram Moolenaar \ '', 6222a8d3b89SBram Moolenaar \ ':h viminfo', 6232a8d3b89SBram Moolenaar \ '?/session', 6242a8d3b89SBram Moolenaar \ '=myvar', 6252a8d3b89SBram Moolenaar \ '@123', 6262a8d3b89SBram Moolenaar \ '', 6272a8d3b89SBram Moolenaar \ "'E 2 0 /tmp/nothing", 6282a8d3b89SBram Moolenaar \ '', 629e11d61a3SBram Moolenaar \ "> /tmp/file_one.txt", 630e11d61a3SBram Moolenaar \ "\t\"\t11\t0", 631e11d61a3SBram Moolenaar \ "", 632e11d61a3SBram Moolenaar \ "> /tmp/file_two.txt", 633e11d61a3SBram Moolenaar \ "\t\"\t11\t0", 634e11d61a3SBram Moolenaar \ "", 635e11d61a3SBram Moolenaar \ "> /tmp/another.txt", 636e11d61a3SBram Moolenaar \ "\t\"\t11\t0", 637e11d61a3SBram Moolenaar \ "", 638e11d61a3SBram Moolenaar \ ] 639e11d61a3SBram Moolenaar call writefile(lines, 'Xviminfo') 6402a8d3b89SBram Moolenaar delmark E 641*5affc034SBram Moolenaar edit /tmp/file_two.txt 642e11d61a3SBram Moolenaar rviminfo! Xviminfo 643e11d61a3SBram Moolenaar call delete('Xviminfo') 644e11d61a3SBram Moolenaar 6452a8d3b89SBram Moolenaar call assert_equal('h viminfo', histget(':')) 6462a8d3b89SBram Moolenaar call assert_equal('session', histget('/')) 6472a8d3b89SBram Moolenaar call assert_equal('myvar', histget('=')) 6482a8d3b89SBram Moolenaar call assert_equal('123', histget('@')) 6492a8d3b89SBram Moolenaar call assert_equal(2, line("'E")) 6507b668e83SBram Moolenaar 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/'})) 6517b668e83SBram Moolenaar call assert_equal(['1: /tmp/file_one.txt', '2: /tmp/file_two.txt'], filter(split(execute('filter file_ oldfiles'), "\n"), {i, v -> v =~ '/tmp/'})) 6527b668e83SBram Moolenaar call assert_equal(['3: /tmp/another.txt'], filter(split(execute('filter /another/ oldfiles'), "\n"), {i, v -> v =~ '/tmp/'})) 6535328cb89SBram Moolenaar 6545328cb89SBram Moolenaar new 6555328cb89SBram Moolenaar call feedkeys("3\<CR>", 't') 6565328cb89SBram Moolenaar browse oldfiles 6575328cb89SBram Moolenaar call assert_equal("/tmp/another.txt", expand("%")) 6585328cb89SBram Moolenaar bwipe 6592a8d3b89SBram Moolenaar delmark E 6602a8d3b89SBram Moolenaarendfunc 6612a8d3b89SBram Moolenaar 6622a8d3b89SBram Moolenaar" Test for storing and restoring buffer list in 'viminfo' 6632a8d3b89SBram Moolenaarfunc Test_viminfo_bufferlist() 6642a8d3b89SBram Moolenaar " If there are arguments, then :rviminfo doesn't read the buffer list. 6652a8d3b89SBram Moolenaar " Need to delete all the arguments for :rviminfo to work. 6662a8d3b89SBram Moolenaar %argdelete 6672a8d3b89SBram Moolenaar 6682a8d3b89SBram Moolenaar edit Xfile1 6692a8d3b89SBram Moolenaar edit Xfile2 6702a8d3b89SBram Moolenaar set viminfo-=% 6712a8d3b89SBram Moolenaar wviminfo Xviminfo 6722a8d3b89SBram Moolenaar %bwipe 6732a8d3b89SBram Moolenaar rviminfo Xviminfo 6742a8d3b89SBram Moolenaar call assert_equal(1, len(getbufinfo())) 6752a8d3b89SBram Moolenaar 6762a8d3b89SBram Moolenaar edit Xfile1 6772a8d3b89SBram Moolenaar edit Xfile2 6782a8d3b89SBram Moolenaar set viminfo^=% 6792a8d3b89SBram Moolenaar wviminfo Xviminfo 6802a8d3b89SBram Moolenaar %bwipe 6812a8d3b89SBram Moolenaar rviminfo Xviminfo 6822a8d3b89SBram Moolenaar let l = getbufinfo() 6832a8d3b89SBram Moolenaar call assert_equal(3, len(l)) 6842a8d3b89SBram Moolenaar call assert_equal('Xfile1', bufname(l[1].bufnr)) 6852a8d3b89SBram Moolenaar call assert_equal('Xfile2', bufname(l[2].bufnr)) 6862a8d3b89SBram Moolenaar 6872a8d3b89SBram Moolenaar call delete('Xviminfo') 6882a8d3b89SBram Moolenaar %bwipe 6892a8d3b89SBram Moolenaar set viminfo-=% 6902a8d3b89SBram Moolenaarendfunc 6912a8d3b89SBram Moolenaar 6922a8d3b89SBram Moolenaar" Test for errors in a viminfo file 6932a8d3b89SBram Moolenaarfunc Test_viminfo_error() 6942a8d3b89SBram Moolenaar " Non-existing viminfo files 6952a8d3b89SBram Moolenaar call assert_fails('rviminfo xyz', 'E195:') 6962a8d3b89SBram Moolenaar 6972a8d3b89SBram Moolenaar " Illegal starting character 6982a8d3b89SBram Moolenaar call writefile(["a 123"], 'Xviminfo') 6992a8d3b89SBram Moolenaar call assert_fails('rv Xviminfo', 'E575:') 7002a8d3b89SBram Moolenaar 7012a8d3b89SBram Moolenaar " Illegal register name in the viminfo file 7022a8d3b89SBram Moolenaar call writefile(['"@ LINE 0'], 'Xviminfo') 7032a8d3b89SBram Moolenaar call assert_fails('rv Xviminfo', 'E577:') 7042a8d3b89SBram Moolenaar 7052a8d3b89SBram Moolenaar " Invalid file mark line 7062a8d3b89SBram Moolenaar call writefile(['>', '@'], 'Xviminfo') 7072a8d3b89SBram Moolenaar call assert_fails('rv Xviminfo', 'E576:') 7082a8d3b89SBram Moolenaar 7092a8d3b89SBram Moolenaar " Too many errors in viminfo file 7102a8d3b89SBram Moolenaar call writefile(repeat(["a 123"], 15), 'Xviminfo') 7119b7bf9e9SBram Moolenaar call assert_fails('rv Xviminfo', 'E575:') 7122a8d3b89SBram Moolenaar 7132a8d3b89SBram Moolenaar call writefile(['>'] + repeat(['@'], 10), 'Xviminfo') 7149b7bf9e9SBram Moolenaar call assert_fails('rv Xviminfo', 'E576:') 7152a8d3b89SBram Moolenaar 7162a8d3b89SBram Moolenaar call writefile(repeat(['"@'], 15), 'Xviminfo') 7179b7bf9e9SBram Moolenaar call assert_fails('rv Xviminfo', 'E577:') 7182a8d3b89SBram Moolenaar 7192a8d3b89SBram Moolenaar call delete('Xviminfo') 7202a8d3b89SBram Moolenaarendfunc 7212a8d3b89SBram Moolenaar 7222a8d3b89SBram Moolenaar" Test for saving and restoring last substitute string in viminfo 7232a8d3b89SBram Moolenaarfunc Test_viminfo_lastsub() 7242a8d3b89SBram Moolenaar enew 7252a8d3b89SBram Moolenaar call append(0, "blue blue blue") 7262a8d3b89SBram Moolenaar call cursor(1, 1) 7272a8d3b89SBram Moolenaar s/blue/green/ 7282a8d3b89SBram Moolenaar wviminfo Xviminfo 7292a8d3b89SBram Moolenaar s/blue/yellow/ 7302a8d3b89SBram Moolenaar rviminfo! Xviminfo 7312a8d3b89SBram Moolenaar & 7322a8d3b89SBram Moolenaar call assert_equal("green yellow green", getline(1)) 7332a8d3b89SBram Moolenaar enew! 7342a8d3b89SBram Moolenaar call delete('Xviminfo') 7352a8d3b89SBram Moolenaarendfunc 7362a8d3b89SBram Moolenaar 7372a8d3b89SBram Moolenaar" Test saving and restoring the register values using the older method 7382a8d3b89SBram Moolenaarfunc Test_viminfo_registers_old() 7392a8d3b89SBram Moolenaar let lines = [ 7402a8d3b89SBram Moolenaar \ '# Viminfo version', 7412a8d3b89SBram Moolenaar \ '|1,1', 7422a8d3b89SBram Moolenaar \ '', 7432a8d3b89SBram Moolenaar \ '*encoding=utf-8', 7442a8d3b89SBram Moolenaar \ '', 7452a8d3b89SBram Moolenaar \ '# Registers:', 7462a8d3b89SBram Moolenaar \ '""0 CHAR 0', 7472a8d3b89SBram Moolenaar \ ' Vim', 7482a8d3b89SBram Moolenaar \ '"a CHAR 0', 7492a8d3b89SBram Moolenaar \ ' red', 7502a8d3b89SBram Moolenaar \ '"m@ CHAR 0', 7512a8d3b89SBram Moolenaar \ " :echo 'Hello'\<CR>", 7522a8d3b89SBram Moolenaar \ "", 7532a8d3b89SBram Moolenaar \ ] 7542a8d3b89SBram Moolenaar call writefile(lines, 'Xviminfo') 7552a8d3b89SBram Moolenaar let @a = 'one' 7562a8d3b89SBram Moolenaar let @b = 'two' 7572a8d3b89SBram Moolenaar let @m = 'three' 7582a8d3b89SBram Moolenaar let @" = 'four' 7592a8d3b89SBram Moolenaar let @t = ":echo 'Unix'\<CR>" 7602a8d3b89SBram Moolenaar silent! normal @t 7612a8d3b89SBram Moolenaar rviminfo! Xviminfo 7622a8d3b89SBram Moolenaar call assert_equal('red', getreg('a')) 7632a8d3b89SBram Moolenaar call assert_equal('two', getreg('b')) 7642a8d3b89SBram Moolenaar call assert_equal(":echo 'Hello'\<CR>", getreg('m')) 7652a8d3b89SBram Moolenaar call assert_equal('Vim', getreg('"')) 7662a8d3b89SBram Moolenaar call assert_equal("\nHello", execute('normal @@')) 7672a8d3b89SBram Moolenaar call delete('Xviminfo') 7682a8d3b89SBram Moolenaar let @" = '' 7692a8d3b89SBram Moolenaarendfunc 7702a8d3b89SBram Moolenaar 7712a8d3b89SBram Moolenaar" Test for saving and restoring large number of lines in a register 7722a8d3b89SBram Moolenaarfunc Test_viminfo_large_register() 7732a8d3b89SBram Moolenaar let save_viminfo = &viminfo 7742a8d3b89SBram Moolenaar set viminfo&vim 7752a8d3b89SBram Moolenaar set viminfo-=<50 7762a8d3b89SBram Moolenaar set viminfo+=<200 7772a8d3b89SBram Moolenaar let lines = ['"r CHAR 0'] 7782a8d3b89SBram Moolenaar call extend(lines, repeat(["\tsun is rising"], 200)) 7792a8d3b89SBram Moolenaar call writefile(lines, 'Xviminfo') 7802a8d3b89SBram Moolenaar let @r = '' 7812a8d3b89SBram Moolenaar rviminfo! Xviminfo 7822a8d3b89SBram Moolenaar call assert_equal(join(repeat(["sun is rising"], 200), "\n"), @r) 7832a8d3b89SBram Moolenaar call delete('Xviminfo') 7846bd1d770SBram Moolenaar let @r = '' 7852a8d3b89SBram Moolenaar let &viminfo = save_viminfo 7862a8d3b89SBram Moolenaarendfunc 7872a8d3b89SBram Moolenaar 7882a8d3b89SBram Moolenaar" Test for setting 'viminfofile' to NONE 7892a8d3b89SBram Moolenaarfunc Test_viminfofile_none() 7906bd1d770SBram Moolenaar let save_vif = &viminfofile 7912a8d3b89SBram Moolenaar set viminfofile=NONE 7922a8d3b89SBram Moolenaar wviminfo Xviminfo 7932a8d3b89SBram Moolenaar call assert_false(filereadable('Xviminfo')) 7942a8d3b89SBram Moolenaar call writefile([''], 'Xviminfo') 7952a8d3b89SBram Moolenaar call assert_fails('rviminfo Xviminfo', 'E195:') 7962a8d3b89SBram Moolenaar call delete('Xviminfo') 7976bd1d770SBram Moolenaar let &viminfofile = save_vif 7982a8d3b89SBram Moolenaarendfunc 7992a8d3b89SBram Moolenaar 8006bd1d770SBram Moolenaar" Test for an unwritable and unreadble 'viminfo' file 8016bd1d770SBram Moolenaarfunc Test_viminfo_perm() 8026bd1d770SBram Moolenaar CheckUnix 80307282f01SBram Moolenaar CheckNotRoot 8042a8d3b89SBram Moolenaar call writefile([''], 'Xviminfo') 8052a8d3b89SBram Moolenaar call setfperm('Xviminfo', 'r-x------') 8062a8d3b89SBram Moolenaar call assert_fails('wviminfo Xviminfo', 'E137:') 8076bd1d770SBram Moolenaar call setfperm('Xviminfo', '--x------') 8086bd1d770SBram Moolenaar call assert_fails('rviminfo Xviminfo', 'E195:') 8092a8d3b89SBram Moolenaar call delete('Xviminfo') 810cde0ff39SBram Moolenaar 811cde0ff39SBram Moolenaar " Try to write the viminfo to a directory 812cde0ff39SBram Moolenaar call mkdir('Xdir') 813b86abadfSBram Moolenaar call assert_fails('wviminfo Xdir', 'E137:') 814cde0ff39SBram Moolenaar call delete('Xdir', 'rf') 815e11d61a3SBram Moolenaarendfunc 8166bd1d770SBram Moolenaar 8176bd1d770SBram Moolenaar" Test for writing to an existing viminfo file merges the file marks 8186bd1d770SBram Moolenaarfunc XTest_viminfo_marks_merge() 8196bd1d770SBram Moolenaar let save_viminfo = &viminfo 8206bd1d770SBram Moolenaar set viminfo&vim 8216bd1d770SBram Moolenaar set viminfo^=% 8226bd1d770SBram Moolenaar enew 8236bd1d770SBram Moolenaar %argdelete 8246bd1d770SBram Moolenaar %bwipe 8256bd1d770SBram Moolenaar 8266bd1d770SBram Moolenaar call writefile(repeat(['editor'], 10), 'Xbufa') 8276bd1d770SBram Moolenaar call writefile(repeat(['Vim'], 10), 'Xbufb') 8286bd1d770SBram Moolenaar 8296bd1d770SBram Moolenaar " set marks in buffers 8306bd1d770SBram Moolenaar call test_settime(10) 8316bd1d770SBram Moolenaar edit Xbufa 8326bd1d770SBram Moolenaar 4mark a 8336bd1d770SBram Moolenaar wviminfo Xviminfo 8346bd1d770SBram Moolenaar edit Xbufb 8356bd1d770SBram Moolenaar 4mark b 8366bd1d770SBram Moolenaar wviminfo Xviminfo 8376bd1d770SBram Moolenaar %bwipe 8386bd1d770SBram Moolenaar 8396bd1d770SBram Moolenaar " set marks in buffers again 8406bd1d770SBram Moolenaar call test_settime(20) 8416bd1d770SBram Moolenaar edit Xbufb 8426bd1d770SBram Moolenaar 6mark b 8436bd1d770SBram Moolenaar wviminfo Xviminfo 8446bd1d770SBram Moolenaar edit Xbufa 8456bd1d770SBram Moolenaar 6mark a 8466bd1d770SBram Moolenaar wviminfo Xviminfo 8476bd1d770SBram Moolenaar %bwipe 8486bd1d770SBram Moolenaar 8496bd1d770SBram Moolenaar " Load the buffer and check the marks 8506bd1d770SBram Moolenaar edit Xbufa 8516bd1d770SBram Moolenaar rviminfo! Xviminfo 8526bd1d770SBram Moolenaar call assert_equal(6, line("'a")) 8536bd1d770SBram Moolenaar edit Xbufb 8546bd1d770SBram Moolenaar rviminfo! Xviminfo 8556bd1d770SBram Moolenaar call assert_equal(6, line("'b")) 8566bd1d770SBram Moolenaar 8576bd1d770SBram Moolenaar " cleanup 8586bd1d770SBram Moolenaar %bwipe 8596bd1d770SBram Moolenaar call delete('Xviminfo') 8606bd1d770SBram Moolenaar call delete('Xbufa') 8616bd1d770SBram Moolenaar call delete('Xbufb') 8626bd1d770SBram Moolenaar call test_settime(0) 8636bd1d770SBram Moolenaar let &viminfo=save_viminfo 8646bd1d770SBram Moolenaarendfunc 865ee4e0c1eSBram Moolenaar 866ee4e0c1eSBram Moolenaar" Test for errors in setting 'viminfo' 867ee4e0c1eSBram Moolenaarfunc Test_viminfo_option_error() 868ee4e0c1eSBram Moolenaar " Missing number 869ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=\"', 'E526:') 870ee4e0c1eSBram Moolenaar for c in split("'/:<@s", '\zs') 871ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=' .. c, 'E526:') 872ee4e0c1eSBram Moolenaar endfor 873ee4e0c1eSBram Moolenaar 874ee4e0c1eSBram Moolenaar " Missing comma 875ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=%10!', 'E527:') 876ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=!%10', 'E527:') 877ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=h%10', 'E527:') 878ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=c%10', 'E527:') 879ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=:10%10', 'E527:') 880ee4e0c1eSBram Moolenaar 881ee4e0c1eSBram Moolenaar " Missing ' setting 882ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=%10', 'E528:') 883ee4e0c1eSBram Moolenaarendfunc 884ee4e0c1eSBram Moolenaar 8858e6be343SBram Moolenaarfunc Test_viminfo_oldfiles_newfile() 8868e6be343SBram Moolenaar CheckRunVimInTerminal 8878e6be343SBram Moolenaar 8888e6be343SBram Moolenaar let save_viminfo = &viminfo 8898e6be343SBram Moolenaar let save_viminfofile = &viminfofile 8908e6be343SBram Moolenaar set viminfo&vim 8918e6be343SBram Moolenaar let v:oldfiles = [] 8928e6be343SBram Moolenaar let commands =<< trim [CODE] 8938e6be343SBram Moolenaar set viminfofile=Xviminfofile 8948e6be343SBram Moolenaar set viminfo&vim 8958e6be343SBram Moolenaar w! Xnew-file.txt 8968e6be343SBram Moolenaar qall 8978e6be343SBram Moolenaar [CODE] 8988e6be343SBram Moolenaar call writefile(commands, 'Xviminfotest') 8998e6be343SBram Moolenaar let buf = RunVimInTerminal('-S Xviminfotest', #{wait_for_ruler: 0}) 9008e6be343SBram Moolenaar call WaitForAssert({-> assert_equal("finished", term_getstatus(buf))}) 9018e6be343SBram Moolenaar 9028e6be343SBram Moolenaar let &viminfofile = 'Xviminfofile' 9038e6be343SBram Moolenaar rviminfo! Xviminfofile 9048e6be343SBram Moolenaar call assert_match('Xnew-file.txt$', v:oldfiles[0]) 9058e6be343SBram Moolenaar call assert_equal(1, len(v:oldfiles)) 9068e6be343SBram Moolenaar call delete('Xviminfofile') 9078e6be343SBram Moolenaar call delete('Xviminfotest') 9088e6be343SBram Moolenaar call delete('Xnew-file.txt') 9098e6be343SBram Moolenaar let &viminfo = save_viminfo 9108e6be343SBram Moolenaar let &viminfofile = save_viminfofile 9118e6be343SBram Moolenaarendfunc 9128e6be343SBram Moolenaar 913ee4e0c1eSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 914