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 741a7f82dSYegappan Lakshmananfunc 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(':') 1541a7f82dSYegappan Lakshmanan let @/='' 16b20e3348SBram Moolenaar let lines = [ 17b20e3348SBram Moolenaar \ '# comment line', 18b20e3348SBram Moolenaar \ '*encoding=utf-8', 19b20e3348SBram Moolenaar \ '~MSle0~/asdf', 20b20e3348SBram Moolenaar \ '|copied as-is', 21b20e3348SBram Moolenaar \ '|and one more', 22b20e3348SBram Moolenaar \ ] 23b20e3348SBram Moolenaar call writefile(lines, 'Xviminfo') 24b20e3348SBram Moolenaar rviminfo Xviminfo 25b20e3348SBram Moolenaar call assert_equal('asdf', @/) 26b20e3348SBram Moolenaar 27b20e3348SBram Moolenaar wviminfo Xviminfo 28b20e3348SBram Moolenaar let lines = readfile('Xviminfo') 29b20e3348SBram Moolenaar let done = 0 30b20e3348SBram Moolenaar for line in lines 31156919f9SBram Moolenaar if line[0] == '|' && line !~ '^|[234],' && line !~ '^|<' 32b20e3348SBram Moolenaar if done == 0 332d358997SBram Moolenaar call assert_equal('|1,4', line) 34b20e3348SBram Moolenaar elseif done == 1 3545d2eeaaSBram Moolenaar call assert_equal('|copied as-is', line) 3645d2eeaaSBram Moolenaar elseif done == 2 37b20e3348SBram Moolenaar call assert_equal('|and one more', line) 38b20e3348SBram Moolenaar endif 39b20e3348SBram Moolenaar let done += 1 40b20e3348SBram Moolenaar endif 41b20e3348SBram Moolenaar endfor 4245d2eeaaSBram Moolenaar call assert_equal(3, done) 43b20e3348SBram Moolenaar 44b20e3348SBram Moolenaar call delete('Xviminfo') 45b20e3348SBram Moolenaarendfunc 46b20e3348SBram Moolenaar 47b20e3348SBram Moolenaarfunc Test_global_vars() 482a8d3b89SBram Moolenaar let g:MY_GLOBAL_STRING = "Vim Editor" 492a8d3b89SBram Moolenaar let g:MY_GLOBAL_NUM = 345 502a8d3b89SBram Moolenaar let g:MY_GLOBAL_FLOAT = 3.14 51b20e3348SBram Moolenaar let test_dict = {'foo': 1, 'bar': 0, 'longvarible': 1000} 52b20e3348SBram Moolenaar let g:MY_GLOBAL_DICT = test_dict 53b20e3348SBram Moolenaar " store a really long list, so line wrapping will occur in viminfo file 54b20e3348SBram Moolenaar let test_list = range(1,100) 55b20e3348SBram Moolenaar let g:MY_GLOBAL_LIST = test_list 568c8b8bb5SBram Moolenaar let test_blob = 0z00112233445566778899aabbccddeeff 578c8b8bb5SBram Moolenaar let g:MY_GLOBAL_BLOB = test_blob 588c8b8bb5SBram Moolenaar let test_false = v:false 598c8b8bb5SBram Moolenaar let g:MY_GLOBAL_FALSE = test_false 608c8b8bb5SBram Moolenaar let test_true = v:true 618c8b8bb5SBram Moolenaar let g:MY_GLOBAL_TRUE = test_true 628c8b8bb5SBram Moolenaar let test_null = v:null 638c8b8bb5SBram Moolenaar let g:MY_GLOBAL_NULL = test_null 648c8b8bb5SBram Moolenaar let test_none = v:none 658c8b8bb5SBram Moolenaar let g:MY_GLOBAL_NONE = test_none 66*f1e7449dSYegappan Lakshmanan let g:MY_GLOBAL_FUNCREF = function('min') 678c8b8bb5SBram Moolenaar 68e9c07270SBram Moolenaar set viminfo='100,<50,s10,h,!,nviminfo 69b20e3348SBram Moolenaar wv! Xviminfo 708c8b8bb5SBram Moolenaar 712a8d3b89SBram Moolenaar unlet g:MY_GLOBAL_STRING 722a8d3b89SBram Moolenaar unlet g:MY_GLOBAL_NUM 732a8d3b89SBram Moolenaar unlet g:MY_GLOBAL_FLOAT 74b20e3348SBram Moolenaar unlet g:MY_GLOBAL_DICT 75b20e3348SBram Moolenaar unlet g:MY_GLOBAL_LIST 768c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_BLOB 778c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_FALSE 788c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_TRUE 798c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_NULL 808c8b8bb5SBram Moolenaar unlet g:MY_GLOBAL_NONE 81*f1e7449dSYegappan Lakshmanan unlet g:MY_GLOBAL_FUNCREF 82b20e3348SBram Moolenaar 83b20e3348SBram Moolenaar rv! Xviminfo 842a8d3b89SBram Moolenaar call assert_equal("Vim Editor", g:MY_GLOBAL_STRING) 852a8d3b89SBram Moolenaar call assert_equal(345, g:MY_GLOBAL_NUM) 862a8d3b89SBram Moolenaar call assert_equal(3.14, g:MY_GLOBAL_FLOAT) 87b20e3348SBram Moolenaar call assert_equal(test_dict, g:MY_GLOBAL_DICT) 88b20e3348SBram Moolenaar call assert_equal(test_list, g:MY_GLOBAL_LIST) 898c8b8bb5SBram Moolenaar call assert_equal(test_blob, g:MY_GLOBAL_BLOB) 908c8b8bb5SBram Moolenaar call assert_equal(test_false, g:MY_GLOBAL_FALSE) 918c8b8bb5SBram Moolenaar call assert_equal(test_true, g:MY_GLOBAL_TRUE) 928c8b8bb5SBram Moolenaar call assert_equal(test_null, g:MY_GLOBAL_NULL) 938c8b8bb5SBram Moolenaar call assert_equal(test_none, g:MY_GLOBAL_NONE) 94*f1e7449dSYegappan Lakshmanan call assert_false(exists("g:MY_GLOBAL_FUNCREF")) 95b20e3348SBram Moolenaar 9641a7f82dSYegappan Lakshmanan " When reading global variables from viminfo, if a variable cannot be 9741a7f82dSYegappan Lakshmanan " modified, then the value should not be changed. 9841a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_STRING 9941a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_NUM 10041a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_FLOAT 10141a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_DICT 10241a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_LIST 10341a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_BLOB 10441a7f82dSYegappan Lakshmanan 10541a7f82dSYegappan Lakshmanan const g:MY_GLOBAL_STRING = 'New Value' 10641a7f82dSYegappan Lakshmanan const g:MY_GLOBAL_NUM = 987 10741a7f82dSYegappan Lakshmanan const g:MY_GLOBAL_FLOAT = 1.16 10841a7f82dSYegappan Lakshmanan const g:MY_GLOBAL_DICT = {'editor': 'vim'} 10941a7f82dSYegappan Lakshmanan const g:MY_GLOBAL_LIST = [5, 7, 13] 11041a7f82dSYegappan Lakshmanan const g:MY_GLOBAL_BLOB = 0zDEADBEEF 11141a7f82dSYegappan Lakshmanan call assert_fails('rv! Xviminfo', 'E741:') 11241a7f82dSYegappan Lakshmanan call assert_equal('New Value', g:MY_GLOBAL_STRING) 11341a7f82dSYegappan Lakshmanan call assert_equal(987, g:MY_GLOBAL_NUM) 11441a7f82dSYegappan Lakshmanan call assert_equal(1.16, g:MY_GLOBAL_FLOAT) 11541a7f82dSYegappan Lakshmanan call assert_equal({'editor': 'vim'}, g:MY_GLOBAL_DICT) 11641a7f82dSYegappan Lakshmanan call assert_equal([5, 7 , 13], g:MY_GLOBAL_LIST) 11741a7f82dSYegappan Lakshmanan call assert_equal(0zDEADBEEF, g:MY_GLOBAL_BLOB) 11841a7f82dSYegappan Lakshmanan 11941a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_STRING 12041a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_NUM 12141a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_FLOAT 12241a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_DICT 12341a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_LIST 12441a7f82dSYegappan Lakshmanan unlet g:MY_GLOBAL_BLOB 12541a7f82dSYegappan Lakshmanan 126845e0ee5SBram Moolenaar " Test for invalid values for a blob, list, dict in a viminfo file 127845e0ee5SBram Moolenaar call writefile([ 128845e0ee5SBram Moolenaar \ "!GLOB_BLOB_1\tBLO\t123", 129845e0ee5SBram Moolenaar \ "!GLOB_BLOB_2\tBLO\t012", 130845e0ee5SBram Moolenaar \ "!GLOB_BLOB_3\tBLO\t0z1x", 131845e0ee5SBram Moolenaar \ "!GLOB_BLOB_4\tBLO\t0z12 ab", 132845e0ee5SBram Moolenaar \ "!GLOB_LIST_1\tLIS\t1 2", 133845e0ee5SBram Moolenaar \ "!GLOB_DICT_1\tDIC\t1 2"], 'Xviminfo') 134fae55a9cSBram Moolenaar call assert_fails('rv! Xviminfo', 'E488:') 135845e0ee5SBram Moolenaar call assert_equal('123', g:GLOB_BLOB_1) 136845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_1)) 137845e0ee5SBram Moolenaar call assert_equal('012', g:GLOB_BLOB_2) 138845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_2)) 139845e0ee5SBram Moolenaar call assert_equal('0z1x', g:GLOB_BLOB_3) 140845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_3)) 141845e0ee5SBram Moolenaar call assert_equal('0z12 ab', g:GLOB_BLOB_4) 142845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_BLOB_4)) 143845e0ee5SBram Moolenaar call assert_equal('1 2', g:GLOB_LIST_1) 144845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_LIST_1)) 145845e0ee5SBram Moolenaar call assert_equal('1 2', g:GLOB_DICT_1) 146845e0ee5SBram Moolenaar call assert_equal(1, type(g:GLOB_DICT_1)) 147845e0ee5SBram Moolenaar 148b20e3348SBram Moolenaar call delete('Xviminfo') 149b20e3348SBram Moolenaar set viminfo-=! 150b20e3348SBram Moolenaarendfunc 15145d2eeaaSBram Moolenaar 1525b157fe2SBram Moolenaarfunc Test_global_vars_with_circular_reference() 1535b157fe2SBram Moolenaar let g:MY_GLOBAL_LIST = [] 1545b157fe2SBram Moolenaar call add(g:MY_GLOBAL_LIST, g:MY_GLOBAL_LIST) 1555b157fe2SBram Moolenaar let g:MY_GLOBAL_DICT = {} 1565b157fe2SBram Moolenaar let g:MY_GLOBAL_DICT['self'] = g:MY_GLOBAL_DICT 1575b157fe2SBram Moolenaar 1585b157fe2SBram Moolenaar set viminfo='100,<50,s10,h,!,nviminfo 1595b157fe2SBram Moolenaar wv! Xviminfo 1605b157fe2SBram Moolenaar call assert_equal(v:errmsg, '') 1615b157fe2SBram Moolenaar 1625b157fe2SBram Moolenaar unlet g:MY_GLOBAL_LIST 1635b157fe2SBram Moolenaar unlet g:MY_GLOBAL_DICT 1645b157fe2SBram Moolenaar 1655b157fe2SBram Moolenaar rv! Xviminfo 1665b157fe2SBram Moolenaar call assert_equal(v:errmsg, '') 1675b157fe2SBram Moolenaar call assert_true(!exists('g:MY_GLOBAL_LIST')) 1685b157fe2SBram Moolenaar call assert_true(!exists('g:MY_GLOBAL_DICT')) 1695b157fe2SBram Moolenaar 1705b157fe2SBram Moolenaar call delete('Xviminfo') 1715b157fe2SBram Moolenaar set viminfo-=! 1725b157fe2SBram Moolenaarendfunc 1735b157fe2SBram Moolenaar 17445d2eeaaSBram Moolenaarfunc Test_cmdline_history() 17545d2eeaaSBram Moolenaar call histdel(':') 17645d2eeaaSBram Moolenaar call test_settime(11) 17745d2eeaaSBram Moolenaar call histadd(':', "echo 'one'") 17845d2eeaaSBram Moolenaar call test_settime(12) 17945d2eeaaSBram Moolenaar " split into two lines 18045d2eeaaSBram Moolenaar let long800 = repeat(" 'eight'", 100) 18145d2eeaaSBram Moolenaar call histadd(':', "echo " . long800) 18245d2eeaaSBram Moolenaar call test_settime(13) 18345d2eeaaSBram Moolenaar " split into three lines 18445d2eeaaSBram Moolenaar let long1400 = repeat(" 'fourteeeeen'", 100) 18545d2eeaaSBram Moolenaar call histadd(':', "echo " . long1400) 18645d2eeaaSBram Moolenaar wviminfo Xviminfo 18745d2eeaaSBram Moolenaar let lines = readfile('Xviminfo') 18845d2eeaaSBram Moolenaar let done_colon = 0 18945d2eeaaSBram Moolenaar let done_bar = 0 19045d2eeaaSBram Moolenaar let lnum = 0 19145d2eeaaSBram Moolenaar while lnum < len(lines) 19245d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 19345d2eeaaSBram Moolenaar if line[0] == ':' 19445d2eeaaSBram Moolenaar if done_colon == 0 19545d2eeaaSBram Moolenaar call assert_equal(":\x161408", line) 19645d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 19745d2eeaaSBram Moolenaar call assert_equal('<echo ' . long1400, line) 19845d2eeaaSBram Moolenaar elseif done_colon == 1 19945d2eeaaSBram Moolenaar call assert_equal(":\x16808", line) 20045d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 20145d2eeaaSBram Moolenaar call assert_equal("<echo " . long800, line) 20245d2eeaaSBram Moolenaar elseif done_colon == 2 20345d2eeaaSBram Moolenaar call assert_equal(":echo 'one'", line) 20445d2eeaaSBram Moolenaar endif 20545d2eeaaSBram Moolenaar let done_colon += 1 20645d2eeaaSBram Moolenaar elseif line[0:4] == '|2,0,' 20745d2eeaaSBram Moolenaar if done_bar == 0 20845d2eeaaSBram Moolenaar call assert_equal("|2,0,13,,>1407", line) 20945d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 21045d2eeaaSBram Moolenaar call assert_equal('|<"echo ' . long1400[0:484], line) 21145d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 21245d2eeaaSBram Moolenaar call assert_equal('|<' . long1400[485:974], line) 21345d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 21445d2eeaaSBram Moolenaar call assert_equal('|<' . long1400[975:] . '"', line) 21545d2eeaaSBram Moolenaar elseif done_bar == 1 21645d2eeaaSBram Moolenaar call assert_equal('|2,0,12,,>807', line) 21745d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 21845d2eeaaSBram Moolenaar call assert_equal('|<"echo ' . long800[0:484], line) 21945d2eeaaSBram Moolenaar let line = lines[lnum] | let lnum += 1 22045d2eeaaSBram Moolenaar call assert_equal('|<' . long800[485:] . '"', line) 22145d2eeaaSBram Moolenaar elseif done_bar == 2 22245d2eeaaSBram Moolenaar call assert_equal("|2,0,11,,\"echo 'one'\"", line) 22345d2eeaaSBram Moolenaar endif 22445d2eeaaSBram Moolenaar let done_bar += 1 22545d2eeaaSBram Moolenaar endif 22645d2eeaaSBram Moolenaar endwhile 22745d2eeaaSBram Moolenaar call assert_equal(3, done_colon) 22845d2eeaaSBram Moolenaar call assert_equal(3, done_bar) 22945d2eeaaSBram Moolenaar 23045d2eeaaSBram Moolenaar call histdel(':') 23145d2eeaaSBram Moolenaar rviminfo Xviminfo 23245d2eeaaSBram Moolenaar call assert_equal("echo " . long1400, histget(':', -1)) 23345d2eeaaSBram Moolenaar call assert_equal("echo " . long800, histget(':', -2)) 23445d2eeaaSBram Moolenaar call assert_equal("echo 'one'", histget(':', -3)) 23545d2eeaaSBram Moolenaar 236*f1e7449dSYegappan Lakshmanan " If the value for the '/' or ':' or '@' field in 'viminfo' is zero, then 237*f1e7449dSYegappan Lakshmanan " the corresponding history entries are not saved. 238*f1e7449dSYegappan Lakshmanan set viminfo='100,/0,:0,@0,<50,s10,h,!,nviminfo 239*f1e7449dSYegappan Lakshmanan call histdel('/') 240*f1e7449dSYegappan Lakshmanan call histdel(':') 241*f1e7449dSYegappan Lakshmanan call histdel('@') 242*f1e7449dSYegappan Lakshmanan call histadd('/', 'foo') 243*f1e7449dSYegappan Lakshmanan call histadd(':', 'bar') 244*f1e7449dSYegappan Lakshmanan call histadd('@', 'baz') 245*f1e7449dSYegappan Lakshmanan wviminfo! Xviminfo 246*f1e7449dSYegappan Lakshmanan call histdel('/') 247*f1e7449dSYegappan Lakshmanan call histdel(':') 248*f1e7449dSYegappan Lakshmanan call histdel('@') 249*f1e7449dSYegappan Lakshmanan rviminfo! Xviminfo 250*f1e7449dSYegappan Lakshmanan call assert_equal('', histget('/')) 251*f1e7449dSYegappan Lakshmanan call assert_equal('', histget(':')) 252*f1e7449dSYegappan Lakshmanan call assert_equal('', histget('@')) 253*f1e7449dSYegappan Lakshmanan 25445d2eeaaSBram Moolenaar call delete('Xviminfo') 255*f1e7449dSYegappan Lakshmanan set viminfo&vim 25645d2eeaaSBram Moolenaarendfunc 2571fd99c1cSBram Moolenaar 2581fd99c1cSBram Moolenaarfunc Test_cmdline_history_order() 2591fd99c1cSBram Moolenaar call histdel(':') 2601fd99c1cSBram Moolenaar call test_settime(11) 2611fd99c1cSBram Moolenaar call histadd(':', "echo '11'") 2621fd99c1cSBram Moolenaar call test_settime(22) 2631fd99c1cSBram Moolenaar call histadd(':', "echo '22'") 2641fd99c1cSBram Moolenaar call test_settime(33) 2651fd99c1cSBram Moolenaar call histadd(':', "echo '33'") 2661fd99c1cSBram Moolenaar wviminfo Xviminfo 2671fd99c1cSBram Moolenaar 2681fd99c1cSBram Moolenaar call histdel(':') 2691fd99c1cSBram Moolenaar " items go in between 2701fd99c1cSBram Moolenaar call test_settime(15) 2711fd99c1cSBram Moolenaar call histadd(':', "echo '15'") 2721fd99c1cSBram Moolenaar call test_settime(27) 2731fd99c1cSBram Moolenaar call histadd(':', "echo '27'") 2741fd99c1cSBram Moolenaar 2751fd99c1cSBram Moolenaar rviminfo Xviminfo 2761fd99c1cSBram Moolenaar call assert_equal("echo '33'", histget(':', -1)) 2771fd99c1cSBram Moolenaar call assert_equal("echo '27'", histget(':', -2)) 2781fd99c1cSBram Moolenaar call assert_equal("echo '22'", histget(':', -3)) 2791fd99c1cSBram Moolenaar call assert_equal("echo '15'", histget(':', -4)) 2801fd99c1cSBram Moolenaar call assert_equal("echo '11'", histget(':', -5)) 2811fd99c1cSBram Moolenaar 2821fd99c1cSBram Moolenaar call histdel(':') 2831fd99c1cSBram Moolenaar " items go before and after 284ce90e36fSBram Moolenaar eval 8->test_settime() 2851fd99c1cSBram Moolenaar call histadd(':', "echo '8'") 2861fd99c1cSBram Moolenaar call test_settime(39) 2871fd99c1cSBram Moolenaar call histadd(':', "echo '39'") 2881fd99c1cSBram Moolenaar 2891fd99c1cSBram Moolenaar rviminfo Xviminfo 2901fd99c1cSBram Moolenaar call assert_equal("echo '39'", histget(':', -1)) 2911fd99c1cSBram Moolenaar call assert_equal("echo '33'", histget(':', -2)) 2921fd99c1cSBram Moolenaar call assert_equal("echo '22'", histget(':', -3)) 2931fd99c1cSBram Moolenaar call assert_equal("echo '11'", histget(':', -4)) 2941fd99c1cSBram Moolenaar call assert_equal("echo '8'", histget(':', -5)) 2951fd99c1cSBram Moolenaar 2961fd99c1cSBram Moolenaar " Check sorting works when writing with merge. 2971fd99c1cSBram Moolenaar call histdel(':') 2981fd99c1cSBram Moolenaar call test_settime(8) 2991fd99c1cSBram Moolenaar call histadd(':', "echo '8'") 3001fd99c1cSBram Moolenaar call test_settime(15) 3011fd99c1cSBram Moolenaar call histadd(':', "echo '15'") 3021fd99c1cSBram Moolenaar call test_settime(27) 3031fd99c1cSBram Moolenaar call histadd(':', "echo '27'") 3041fd99c1cSBram Moolenaar call test_settime(39) 3051fd99c1cSBram Moolenaar call histadd(':', "echo '39'") 3061fd99c1cSBram Moolenaar wviminfo Xviminfo 3071fd99c1cSBram Moolenaar 3081fd99c1cSBram Moolenaar call histdel(':') 3091fd99c1cSBram Moolenaar rviminfo Xviminfo 3101fd99c1cSBram Moolenaar call assert_equal("echo '39'", histget(':', -1)) 3111fd99c1cSBram Moolenaar call assert_equal("echo '33'", histget(':', -2)) 3121fd99c1cSBram Moolenaar call assert_equal("echo '27'", histget(':', -3)) 3131fd99c1cSBram Moolenaar call assert_equal("echo '22'", histget(':', -4)) 3141fd99c1cSBram Moolenaar call assert_equal("echo '15'", histget(':', -5)) 3151fd99c1cSBram Moolenaar call assert_equal("echo '11'", histget(':', -6)) 3161fd99c1cSBram Moolenaar call assert_equal("echo '8'", histget(':', -7)) 3171fd99c1cSBram Moolenaar 3181fd99c1cSBram Moolenaar call delete('Xviminfo') 3191fd99c1cSBram Moolenaarendfunc 32001227093SBram Moolenaar 321e80ff744SBram Moolenaarfunc Test_viminfo_registers() 322e80ff744SBram Moolenaar call test_settime(8) 323e80ff744SBram Moolenaar call setreg('a', "eight", 'c') 324e80ff744SBram Moolenaar call test_settime(20) 325e80ff744SBram Moolenaar call setreg('b', ["twenty", "again"], 'l') 326e80ff744SBram Moolenaar call test_settime(40) 327e80ff744SBram Moolenaar call setreg('c', ["four", "agai"], 'b4') 328e80ff744SBram Moolenaar let l = [] 329e80ff744SBram Moolenaar set viminfo='100,<600,s10,h,!,nviminfo 330e80ff744SBram Moolenaar for i in range(500) 331e80ff744SBram Moolenaar call add(l, 'something') 332e80ff744SBram Moolenaar endfor 333e80ff744SBram Moolenaar call setreg('d', l, 'l') 3342a8d3b89SBram Moolenaar call setreg('e', "abc\<C-V>xyz") 335e80ff744SBram Moolenaar wviminfo Xviminfo 336e80ff744SBram Moolenaar 337e80ff744SBram Moolenaar call test_settime(10) 338e80ff744SBram Moolenaar call setreg('a', '', 'b10') 339e80ff744SBram Moolenaar call test_settime(15) 340e80ff744SBram Moolenaar call setreg('b', 'drop') 341e80ff744SBram Moolenaar call test_settime(50) 342e80ff744SBram Moolenaar call setreg('c', 'keep', 'l') 343e80ff744SBram Moolenaar call test_settime(30) 344e80ff744SBram Moolenaar call setreg('d', 'drop', 'l') 3452a8d3b89SBram Moolenaar call setreg('e', 'drop') 346e80ff744SBram Moolenaar rviminfo Xviminfo 347e80ff744SBram Moolenaar 348e80ff744SBram Moolenaar call assert_equal("", getreg('a')) 349e80ff744SBram Moolenaar call assert_equal("\<C-V>10", getregtype('a')) 350e80ff744SBram Moolenaar call assert_equal("twenty\nagain\n", getreg('b')) 351e80ff744SBram Moolenaar call assert_equal("V", getregtype('b')) 352e80ff744SBram Moolenaar call assert_equal("keep\n", getreg('c')) 353e80ff744SBram Moolenaar call assert_equal("V", getregtype('c')) 354e80ff744SBram Moolenaar call assert_equal(l, getreg('d', 1, 1)) 355e80ff744SBram Moolenaar call assert_equal("V", getregtype('d')) 3562a8d3b89SBram Moolenaar call assert_equal("abc\<C-V>xyz", getreg('e')) 357e80ff744SBram Moolenaar 35825709576SBram Moolenaar " Length around 440 switches to line continuation. 35925709576SBram Moolenaar let len = 434 36025709576SBram Moolenaar while len < 445 36125709576SBram Moolenaar let s = repeat('a', len) 36225709576SBram Moolenaar call setreg('"', s) 36325709576SBram Moolenaar wviminfo Xviminfo 36425709576SBram Moolenaar call setreg('"', '') 36525709576SBram Moolenaar rviminfo Xviminfo 36625709576SBram Moolenaar call assert_equal(s, getreg('"'), 'wrong register at length: ' . len) 36725709576SBram Moolenaar 36825709576SBram Moolenaar let len += 1 36925709576SBram Moolenaar endwhile 37025709576SBram Moolenaar 371*f1e7449dSYegappan Lakshmanan " If the maximum number of lines saved for a register ('<' in 'viminfo') is 372*f1e7449dSYegappan Lakshmanan " zero, then register values should not be saved. 373*f1e7449dSYegappan Lakshmanan let @a = 'abc' 374*f1e7449dSYegappan Lakshmanan set viminfo='100,<0,s10,h,!,nviminfo 375*f1e7449dSYegappan Lakshmanan wviminfo Xviminfo 376*f1e7449dSYegappan Lakshmanan let @a = 'xyz' 377*f1e7449dSYegappan Lakshmanan rviminfo! Xviminfo 378*f1e7449dSYegappan Lakshmanan call assert_equal('xyz', @a) 379*f1e7449dSYegappan Lakshmanan " repeat the test with '"' instead of '<' 380*f1e7449dSYegappan Lakshmanan let @b = 'def' 381*f1e7449dSYegappan Lakshmanan set viminfo='100,\"0,s10,h,!,nviminfo 382*f1e7449dSYegappan Lakshmanan wviminfo Xviminfo 383*f1e7449dSYegappan Lakshmanan let @b = 'rst' 384*f1e7449dSYegappan Lakshmanan rviminfo! Xviminfo 385*f1e7449dSYegappan Lakshmanan call assert_equal('rst', @b) 386*f1e7449dSYegappan Lakshmanan 387*f1e7449dSYegappan Lakshmanan " If the maximum size of an item ('s' in 'viminfo') is zero, then register 388*f1e7449dSYegappan Lakshmanan " values should not be saved. 389*f1e7449dSYegappan Lakshmanan let @c = '123' 390*f1e7449dSYegappan Lakshmanan set viminfo='100,<20,s0,h,!,nviminfo 391*f1e7449dSYegappan Lakshmanan wviminfo Xviminfo 392*f1e7449dSYegappan Lakshmanan let @c = '456' 393*f1e7449dSYegappan Lakshmanan rviminfo! Xviminfo 394*f1e7449dSYegappan Lakshmanan call assert_equal('456', @c) 395*f1e7449dSYegappan Lakshmanan 396e80ff744SBram Moolenaar call delete('Xviminfo') 397*f1e7449dSYegappan Lakshmanan set viminfo&vim 398e80ff744SBram Moolenaarendfunc 399e80ff744SBram Moolenaar 4002d358997SBram Moolenaarfunc Test_viminfo_marks() 4012d358997SBram Moolenaar sp bufa 4022d358997SBram Moolenaar let bufa = bufnr('%') 4032d358997SBram Moolenaar sp bufb 4042d358997SBram Moolenaar let bufb = bufnr('%') 4052d358997SBram Moolenaar 4062d358997SBram Moolenaar call test_settime(8) 4072d358997SBram Moolenaar call setpos("'A", [bufa, 1, 1, 0]) 4082d358997SBram Moolenaar call test_settime(20) 4092d358997SBram Moolenaar call setpos("'B", [bufb, 9, 1, 0]) 4102d358997SBram Moolenaar call setpos("'C", [bufa, 7, 1, 0]) 4112d358997SBram Moolenaar 4122d358997SBram Moolenaar delmark 0-9 4132d358997SBram Moolenaar call test_settime(25) 4142d358997SBram Moolenaar call setpos("'1", [bufb, 12, 1, 0]) 4152d358997SBram Moolenaar call test_settime(35) 4162d358997SBram Moolenaar call setpos("'0", [bufa, 11, 1, 0]) 4172d358997SBram Moolenaar 4182d358997SBram Moolenaar call test_settime(45) 4192d358997SBram Moolenaar wviminfo Xviminfo 4202d358997SBram Moolenaar 4212d358997SBram Moolenaar " Writing viminfo inserts the '0 mark. 4222d358997SBram Moolenaar call assert_equal([bufb, 1, 1, 0], getpos("'0")) 4232d358997SBram Moolenaar call assert_equal([bufa, 11, 1, 0], getpos("'1")) 4242d358997SBram Moolenaar call assert_equal([bufb, 12, 1, 0], getpos("'2")) 4252d358997SBram Moolenaar 4262d358997SBram Moolenaar call test_settime(4) 4272d358997SBram Moolenaar call setpos("'A", [bufa, 9, 1, 0]) 4282d358997SBram Moolenaar call test_settime(30) 4292d358997SBram Moolenaar call setpos("'B", [bufb, 2, 3, 0]) 4302d358997SBram Moolenaar delmark C 4312d358997SBram Moolenaar 4322d358997SBram Moolenaar delmark 0-9 4332d358997SBram Moolenaar call test_settime(30) 4342d358997SBram Moolenaar call setpos("'1", [bufb, 22, 1, 0]) 4352d358997SBram Moolenaar call test_settime(55) 4362d358997SBram Moolenaar call setpos("'0", [bufa, 21, 1, 0]) 4372d358997SBram Moolenaar 4382d358997SBram Moolenaar rviminfo Xviminfo 4392d358997SBram Moolenaar 4402d358997SBram Moolenaar call assert_equal([bufa, 1, 1, 0], getpos("'A")) 4412d358997SBram Moolenaar call assert_equal([bufb, 2, 3, 0], getpos("'B")) 4422d358997SBram Moolenaar call assert_equal([bufa, 7, 1, 0], getpos("'C")) 4432d358997SBram Moolenaar 4442d358997SBram Moolenaar " numbered marks are merged 4452d358997SBram Moolenaar call assert_equal([bufa, 21, 1, 0], getpos("'0")) " time 55 4462d358997SBram Moolenaar call assert_equal([bufb, 1, 1, 0], getpos("'1")) " time 45 4472d358997SBram Moolenaar call assert_equal([bufa, 11, 1, 0], getpos("'2")) " time 35 4482d358997SBram Moolenaar call assert_equal([bufb, 22, 1, 0], getpos("'3")) " time 30 4492d358997SBram Moolenaar call assert_equal([bufb, 12, 1, 0], getpos("'4")) " time 25 4502d358997SBram Moolenaar 4518cd6cd80SBram Moolenaar " deleted file marks are removed from viminfo 4528cd6cd80SBram Moolenaar delmark C 4538cd6cd80SBram Moolenaar wviminfo Xviminfo 4548cd6cd80SBram Moolenaar rviminfo Xviminfo 4558cd6cd80SBram Moolenaar call assert_equal([0, 0, 0, 0], getpos("'C")) 4568cd6cd80SBram Moolenaar 4578cd6cd80SBram Moolenaar " deleted file marks stay in viminfo if defined in another vim later 4588cd6cd80SBram Moolenaar call test_settime(70) 4598cd6cd80SBram Moolenaar call setpos("'D", [bufb, 8, 1, 0]) 4608cd6cd80SBram Moolenaar wviminfo Xviminfo 4618cd6cd80SBram Moolenaar call test_settime(65) 4628cd6cd80SBram Moolenaar delmark D 4638cd6cd80SBram Moolenaar call assert_equal([0, 0, 0, 0], getpos("'D")) 4648cd6cd80SBram Moolenaar call test_settime(75) 4658cd6cd80SBram Moolenaar rviminfo Xviminfo 4668cd6cd80SBram Moolenaar call assert_equal([bufb, 8, 1, 0], getpos("'D")) 4678cd6cd80SBram Moolenaar 4682d358997SBram Moolenaar call delete('Xviminfo') 4692d358997SBram Moolenaar exe 'bwipe ' . bufa 4702d358997SBram Moolenaar exe 'bwipe ' . bufb 4712d358997SBram Moolenaarendfunc 4722d358997SBram Moolenaar 4732d358997SBram Moolenaarfunc Test_viminfo_jumplist() 4742d358997SBram Moolenaar split testbuf 4752d358997SBram Moolenaar clearjumps 4762d358997SBram Moolenaar call setline(1, ['time 05', 'time 10', 'time 15', 'time 20', 'time 30', 'last pos']) 4772d358997SBram Moolenaar call cursor(2, 1) 4782d358997SBram Moolenaar call test_settime(10) 4792d358997SBram Moolenaar exe "normal /20\r" 4802d358997SBram Moolenaar call test_settime(20) 4812d358997SBram Moolenaar exe "normal /30\r" 4822d358997SBram Moolenaar call test_settime(30) 4832d358997SBram Moolenaar exe "normal /last pos\r" 4842d358997SBram Moolenaar wviminfo Xviminfo 4852d358997SBram Moolenaar 4862d358997SBram Moolenaar clearjumps 4872d358997SBram Moolenaar call cursor(1, 1) 4882d358997SBram Moolenaar call test_settime(5) 4892d358997SBram Moolenaar exe "normal /15\r" 4902d358997SBram Moolenaar call test_settime(15) 4912d358997SBram Moolenaar exe "normal /last pos\r" 4922d358997SBram Moolenaar call test_settime(40) 4932d358997SBram Moolenaar exe "normal ?30\r" 4942d358997SBram Moolenaar rviminfo Xviminfo 4952d358997SBram Moolenaar 4962d358997SBram Moolenaar call assert_equal('time 30', getline('.')) 4972d358997SBram Moolenaar exe "normal \<C-O>" 4982d358997SBram Moolenaar call assert_equal('last pos', getline('.')) 4992d358997SBram Moolenaar exe "normal \<C-O>" 5002d358997SBram Moolenaar " duplicate for 'time 30' was removed 5012d358997SBram Moolenaar call assert_equal('time 20', getline('.')) 5022d358997SBram Moolenaar exe "normal \<C-O>" 5032d358997SBram Moolenaar call assert_equal('time 15', getline('.')) 5042d358997SBram Moolenaar exe "normal \<C-O>" 5052d358997SBram Moolenaar call assert_equal('time 10', getline('.')) 5062d358997SBram Moolenaar exe "normal \<C-O>" 5072d358997SBram Moolenaar call assert_equal('time 05', getline('.')) 5082d358997SBram Moolenaar 509ece74ab1SBram Moolenaar clearjumps 510ece74ab1SBram Moolenaar call cursor(1, 1) 511ece74ab1SBram Moolenaar call test_settime(5) 512ece74ab1SBram Moolenaar exe "normal /15\r" 513ece74ab1SBram Moolenaar call test_settime(15) 514ece74ab1SBram Moolenaar exe "normal /last pos\r" 515ece74ab1SBram Moolenaar call test_settime(40) 516ece74ab1SBram Moolenaar exe "normal ?30\r" 517ece74ab1SBram Moolenaar " Test merge when writing 518ece74ab1SBram Moolenaar wviminfo Xviminfo 519ece74ab1SBram Moolenaar clearjumps 520ece74ab1SBram Moolenaar rviminfo Xviminfo 521ece74ab1SBram Moolenaar 52228607ba2SBram Moolenaar let last_line = line('.') 523ece74ab1SBram Moolenaar exe "normal \<C-O>" 524ece74ab1SBram Moolenaar call assert_equal('time 30', getline('.')) 525ece74ab1SBram Moolenaar exe "normal \<C-O>" 526ece74ab1SBram Moolenaar call assert_equal('last pos', getline('.')) 527ece74ab1SBram Moolenaar exe "normal \<C-O>" 528ece74ab1SBram Moolenaar " duplicate for 'time 30' was removed 529ece74ab1SBram Moolenaar call assert_equal('time 20', getline('.')) 530ece74ab1SBram Moolenaar exe "normal \<C-O>" 531ece74ab1SBram Moolenaar call assert_equal('time 15', getline('.')) 532ece74ab1SBram Moolenaar exe "normal \<C-O>" 533ece74ab1SBram Moolenaar call assert_equal('time 10', getline('.')) 534ece74ab1SBram Moolenaar exe "normal \<C-O>" 535ece74ab1SBram Moolenaar call assert_equal('time 05', getline('.')) 536ece74ab1SBram Moolenaar 53728607ba2SBram Moolenaar " Test with jumplist full. 53828607ba2SBram Moolenaar clearjumps 53928607ba2SBram Moolenaar call setline(1, repeat(['match here'], 101)) 54028607ba2SBram Moolenaar call cursor(1, 1) 54128607ba2SBram Moolenaar call test_settime(10) 54228607ba2SBram Moolenaar for i in range(100) 54328607ba2SBram Moolenaar exe "normal /here\r" 54428607ba2SBram Moolenaar endfor 54528607ba2SBram Moolenaar rviminfo Xviminfo 54628607ba2SBram Moolenaar 54728607ba2SBram Moolenaar " must be newest mark that comes from viminfo. 54828607ba2SBram Moolenaar exe "normal \<C-O>" 54928607ba2SBram Moolenaar call assert_equal(last_line, line('.')) 55028607ba2SBram Moolenaar 5512d358997SBram Moolenaar bwipe! 5522d358997SBram Moolenaar call delete('Xviminfo') 5532d358997SBram Moolenaarendfunc 5542d358997SBram Moolenaar 55501227093SBram Moolenaarfunc Test_viminfo_encoding() 55601227093SBram Moolenaar set enc=latin1 55701227093SBram Moolenaar call histdel(':') 55801227093SBram Moolenaar call histadd(':', "echo '\xe9'") 55901227093SBram Moolenaar wviminfo Xviminfo 56001227093SBram Moolenaar 56101227093SBram Moolenaar set fencs=utf-8,latin1 56201227093SBram Moolenaar set enc=utf-8 56301227093SBram Moolenaar sp Xviminfo 56401227093SBram Moolenaar call assert_equal('latin1', &fenc) 56501227093SBram Moolenaar close 56601227093SBram Moolenaar 56701227093SBram Moolenaar call histdel(':') 56801227093SBram Moolenaar rviminfo Xviminfo 56901227093SBram Moolenaar call assert_equal("echo 'é'", histget(':', -1)) 57001227093SBram Moolenaar 57101227093SBram Moolenaar call delete('Xviminfo') 57201227093SBram Moolenaarendfunc 57362f8b4e1SBram Moolenaar 57462f8b4e1SBram Moolenaarfunc Test_viminfo_bad_syntax() 57562f8b4e1SBram Moolenaar let lines = [] 57662f8b4e1SBram Moolenaar call add(lines, '|<') " empty continuation line 57762f8b4e1SBram Moolenaar call add(lines, '|234234234234234324,nothing') 57862f8b4e1SBram Moolenaar call add(lines, '|1+"no comma"') 57962f8b4e1SBram Moolenaar call add(lines, '|1,2,3,4,5,6,7') " too many items 58062f8b4e1SBram Moolenaar call add(lines, '|1,"string version"') 58162f8b4e1SBram Moolenaar call add(lines, '|1,>x') " bad continuation line 58262f8b4e1SBram Moolenaar call add(lines, '|1,"x') " missing quote 58362f8b4e1SBram Moolenaar call add(lines, '|1,"x\') " trailing backslash 58462f8b4e1SBram Moolenaar call add(lines, '|1,,,,') "trailing comma 58562f8b4e1SBram Moolenaar call add(lines, '|1,>234') " trailing continuation line 58662f8b4e1SBram Moolenaar call writefile(lines, 'Xviminfo') 587e80ff744SBram Moolenaar rviminfo Xviminfo 58862f8b4e1SBram Moolenaar 58962f8b4e1SBram Moolenaar call delete('Xviminfo') 59062f8b4e1SBram Moolenaarendfunc 59162f8b4e1SBram Moolenaar 592*f1e7449dSYegappan Lakshmananfunc Test_viminfo_bad_syntax2() 59341a7f82dSYegappan Lakshmanan let lines = [] 59441a7f82dSYegappan Lakshmanan call add(lines, '|1,4') 595*f1e7449dSYegappan Lakshmanan 596*f1e7449dSYegappan Lakshmanan " bad viminfo syntax for history barline 597*f1e7449dSYegappan Lakshmanan call add(lines, '|2') " invalid number of fields in a history barline 598*f1e7449dSYegappan Lakshmanan call add(lines, '|2,9,1,1,"x"') " invalid value for the history type 599*f1e7449dSYegappan Lakshmanan call add(lines, '|2,0,,1,"x"') " no timestamp 600*f1e7449dSYegappan Lakshmanan call add(lines, '|2,0,1,1,10') " non-string text 601*f1e7449dSYegappan Lakshmanan 602*f1e7449dSYegappan Lakshmanan " bad viminfo syntax for register barline 603*f1e7449dSYegappan Lakshmanan call add(lines, '|3') " invalid number of fields in a register barline 604*f1e7449dSYegappan Lakshmanan call add(lines, '|3,1,1,1,1,,1,"x"') " missing width field 60541a7f82dSYegappan Lakshmanan call add(lines, '|3,0,80,1,1,1,1,"x"') " invalid register number 60641a7f82dSYegappan Lakshmanan call add(lines, '|3,0,10,5,1,1,1,"x"') " invalid register type 60741a7f82dSYegappan Lakshmanan call add(lines, '|3,0,10,1,20,1,1,"x"') " invalid line count 60841a7f82dSYegappan Lakshmanan call add(lines, '|3,0,10,1,0,1,1') " zero line count 609*f1e7449dSYegappan Lakshmanan 610*f1e7449dSYegappan Lakshmanan " bad viminfo syntax for mark barline 611*f1e7449dSYegappan Lakshmanan call add(lines, '|4') " invalid number of fields in a mark barline 612*f1e7449dSYegappan Lakshmanan call add(lines, '|4,1,1,1,1,1') " invalid value for file name 613*f1e7449dSYegappan Lakshmanan call add(lines, '|4,20,1,1,1,"x"') " invalid value for file name 614*f1e7449dSYegappan Lakshmanan call add(lines, '|4,49,0,1,1,"x"') " invalid value for line number 615*f1e7449dSYegappan Lakshmanan 61641a7f82dSYegappan Lakshmanan call writefile(lines, 'Xviminfo') 61741a7f82dSYegappan Lakshmanan rviminfo Xviminfo 61841a7f82dSYegappan Lakshmanan call delete('Xviminfo') 61941a7f82dSYegappan Lakshmananendfunc 62041a7f82dSYegappan Lakshmanan 621ab9c89b6SBram Moolenaarfunc Test_viminfo_file_marks() 622ab9c89b6SBram Moolenaar silent! bwipe test_viminfo.vim 623ab9c89b6SBram Moolenaar silent! bwipe Xviminfo 624ab9c89b6SBram Moolenaar 625ab9c89b6SBram Moolenaar call test_settime(10) 626ab9c89b6SBram Moolenaar edit ten 627ab9c89b6SBram Moolenaar call test_settime(25) 628ab9c89b6SBram Moolenaar edit again 629ab9c89b6SBram Moolenaar call test_settime(30) 630ab9c89b6SBram Moolenaar edit thirty 631ab9c89b6SBram Moolenaar wviminfo Xviminfo 632ab9c89b6SBram Moolenaar 633ab9c89b6SBram Moolenaar call test_settime(20) 634ab9c89b6SBram Moolenaar edit twenty 635ab9c89b6SBram Moolenaar call test_settime(35) 636ab9c89b6SBram Moolenaar edit again 637ab9c89b6SBram Moolenaar call test_settime(40) 638ab9c89b6SBram Moolenaar edit fourty 639ab9c89b6SBram Moolenaar wviminfo Xviminfo 640ab9c89b6SBram Moolenaar 641ab9c89b6SBram Moolenaar sp Xviminfo 642ab9c89b6SBram Moolenaar 1 643ab9c89b6SBram Moolenaar for name in ['fourty', 'again', 'thirty', 'twenty', 'ten'] 644ab9c89b6SBram Moolenaar /^> 645ab9c89b6SBram Moolenaar call assert_equal(name, substitute(getline('.'), '.*/', '', '')) 646ab9c89b6SBram Moolenaar endfor 647ab9c89b6SBram Moolenaar close 648ab9c89b6SBram Moolenaar 649ab9c89b6SBram Moolenaar call delete('Xviminfo') 650ab9c89b6SBram Moolenaarendfunc 651e59215c7SBram Moolenaar 652e59215c7SBram Moolenaarfunc Test_viminfo_file_mark_tabclose() 653e59215c7SBram Moolenaar tabnew Xtestfileintab 654e59215c7SBram Moolenaar call setline(1, ['a','b','c','d','e']) 655e59215c7SBram Moolenaar 4 656e59215c7SBram Moolenaar q! 657e59215c7SBram Moolenaar wviminfo Xviminfo 658e59215c7SBram Moolenaar sp Xviminfo 659e59215c7SBram Moolenaar /^> .*Xtestfileintab 660e59215c7SBram Moolenaar let lnum = line('.') 661e59215c7SBram Moolenaar while 1 662e59215c7SBram Moolenaar if lnum == line('$') 66337175409SBram Moolenaar call assert_report('mark not found in Xtestfileintab') 664e59215c7SBram Moolenaar break 665e59215c7SBram Moolenaar endif 666e59215c7SBram Moolenaar let lnum += 1 667e59215c7SBram Moolenaar let line = getline(lnum) 668e59215c7SBram Moolenaar if line == '' 66937175409SBram Moolenaar call assert_report('mark not found in Xtestfileintab') 670e59215c7SBram Moolenaar break 671e59215c7SBram Moolenaar endif 672e59215c7SBram Moolenaar if line =~ "^\t\"" 673e59215c7SBram Moolenaar call assert_equal('4', substitute(line, ".*\"\t\\(\\d\\).*", '\1', '')) 674e59215c7SBram Moolenaar break 675e59215c7SBram Moolenaar endif 676e59215c7SBram Moolenaar endwhile 677e59215c7SBram Moolenaar 678e59215c7SBram Moolenaar call delete('Xviminfo') 679e59215c7SBram Moolenaar silent! bwipe Xtestfileintab 680e59215c7SBram Moolenaarendfunc 681e11d61a3SBram Moolenaar 682156919f9SBram Moolenaarfunc Test_viminfo_file_mark_zero_time() 683156919f9SBram Moolenaar let lines = [ 684156919f9SBram Moolenaar \ '# Viminfo version', 685156919f9SBram Moolenaar \ '|1,4', 686156919f9SBram Moolenaar \ '', 687156919f9SBram Moolenaar \ '*encoding=utf-8', 688156919f9SBram Moolenaar \ '', 689156919f9SBram Moolenaar \ '# File marks:', 690156919f9SBram Moolenaar \ "'B 1 0 /tmp/nothing", 691156919f9SBram Moolenaar \ '|4,66,1,0,0,"/tmp/nothing"', 692156919f9SBram Moolenaar \ "", 693156919f9SBram Moolenaar \ ] 694156919f9SBram Moolenaar call writefile(lines, 'Xviminfo') 695156919f9SBram Moolenaar delmark B 696156919f9SBram Moolenaar rviminfo Xviminfo 697156919f9SBram Moolenaar call delete('Xviminfo') 698156919f9SBram Moolenaar call assert_equal(1, line("'B")) 699156919f9SBram Moolenaar delmark B 700156919f9SBram Moolenaarendfunc 701156919f9SBram Moolenaar 7022a8d3b89SBram Moolenaar" Test for saving and restoring file marks in unloaded buffers 7032a8d3b89SBram Moolenaarfunc Test_viminfo_file_mark_unloaded_buf() 7042a8d3b89SBram Moolenaar let save_viminfo = &viminfo 7052a8d3b89SBram Moolenaar set viminfo&vim 7062a8d3b89SBram Moolenaar call writefile(repeat(['vim'], 10), 'Xfile1') 7072a8d3b89SBram Moolenaar %bwipe 7082a8d3b89SBram Moolenaar edit! Xfile1 7092a8d3b89SBram Moolenaar call setpos("'u", [0, 3, 1, 0]) 7102a8d3b89SBram Moolenaar call setpos("'v", [0, 5, 1, 0]) 7112a8d3b89SBram Moolenaar enew 7122a8d3b89SBram Moolenaar wviminfo Xviminfo 7132a8d3b89SBram Moolenaar %bwipe 7142a8d3b89SBram Moolenaar edit Xfile1 7152a8d3b89SBram Moolenaar rviminfo! Xviminfo 7162a8d3b89SBram Moolenaar call assert_equal([0, 3, 1, 0], getpos("'u")) 7172a8d3b89SBram Moolenaar call assert_equal([0, 5, 1, 0], getpos("'v")) 7182a8d3b89SBram Moolenaar %bwipe 7192a8d3b89SBram Moolenaar call delete('Xfile1') 7202a8d3b89SBram Moolenaar call delete('Xviminfo') 7212a8d3b89SBram Moolenaar let &viminfo = save_viminfo 7222a8d3b89SBram Moolenaarendfunc 7232a8d3b89SBram Moolenaar 724156919f9SBram Moolenaarfunc Test_viminfo_oldfiles() 725e11d61a3SBram Moolenaar let v:oldfiles = [] 726e11d61a3SBram Moolenaar let lines = [ 727e11d61a3SBram Moolenaar \ '# comment line', 728e11d61a3SBram Moolenaar \ '*encoding=utf-8', 729e11d61a3SBram Moolenaar \ '', 7302a8d3b89SBram Moolenaar \ ':h viminfo', 7312a8d3b89SBram Moolenaar \ '?/session', 7322a8d3b89SBram Moolenaar \ '=myvar', 7332a8d3b89SBram Moolenaar \ '@123', 7342a8d3b89SBram Moolenaar \ '', 7352a8d3b89SBram Moolenaar \ "'E 2 0 /tmp/nothing", 7362a8d3b89SBram Moolenaar \ '', 737e11d61a3SBram Moolenaar \ "> /tmp/file_one.txt", 738e11d61a3SBram Moolenaar \ "\t\"\t11\t0", 739e11d61a3SBram Moolenaar \ "", 740e11d61a3SBram Moolenaar \ "> /tmp/file_two.txt", 741e11d61a3SBram Moolenaar \ "\t\"\t11\t0", 742e11d61a3SBram Moolenaar \ "", 743e11d61a3SBram Moolenaar \ "> /tmp/another.txt", 744e11d61a3SBram Moolenaar \ "\t\"\t11\t0", 745e11d61a3SBram Moolenaar \ "", 746e11d61a3SBram Moolenaar \ ] 747e11d61a3SBram Moolenaar call writefile(lines, 'Xviminfo') 7482a8d3b89SBram Moolenaar delmark E 7495affc034SBram Moolenaar edit /tmp/file_two.txt 750e11d61a3SBram Moolenaar rviminfo! Xviminfo 751e11d61a3SBram Moolenaar call delete('Xviminfo') 752e11d61a3SBram Moolenaar 7532a8d3b89SBram Moolenaar call assert_equal('h viminfo', histget(':')) 7542a8d3b89SBram Moolenaar call assert_equal('session', histget('/')) 7552a8d3b89SBram Moolenaar call assert_equal('myvar', histget('=')) 7562a8d3b89SBram Moolenaar call assert_equal('123', histget('@')) 7572a8d3b89SBram Moolenaar call assert_equal(2, line("'E")) 7587b668e83SBram 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/'})) 7597b668e83SBram 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/'})) 7607b668e83SBram Moolenaar call assert_equal(['3: /tmp/another.txt'], filter(split(execute('filter /another/ oldfiles'), "\n"), {i, v -> v =~ '/tmp/'})) 7615328cb89SBram Moolenaar 7625328cb89SBram Moolenaar new 7635328cb89SBram Moolenaar call feedkeys("3\<CR>", 't') 7645328cb89SBram Moolenaar browse oldfiles 7655328cb89SBram Moolenaar call assert_equal("/tmp/another.txt", expand("%")) 7665328cb89SBram Moolenaar bwipe 7672a8d3b89SBram Moolenaar delmark E 7682a8d3b89SBram Moolenaarendfunc 7692a8d3b89SBram Moolenaar 7702a8d3b89SBram Moolenaar" Test for storing and restoring buffer list in 'viminfo' 7712a8d3b89SBram Moolenaarfunc Test_viminfo_bufferlist() 7722a8d3b89SBram Moolenaar " If there are arguments, then :rviminfo doesn't read the buffer list. 7732a8d3b89SBram Moolenaar " Need to delete all the arguments for :rviminfo to work. 7742a8d3b89SBram Moolenaar %argdelete 77541a7f82dSYegappan Lakshmanan set viminfo&vim 7762a8d3b89SBram Moolenaar 7772a8d3b89SBram Moolenaar edit Xfile1 7782a8d3b89SBram Moolenaar edit Xfile2 7792a8d3b89SBram Moolenaar set viminfo-=% 7802a8d3b89SBram Moolenaar wviminfo Xviminfo 7812a8d3b89SBram Moolenaar %bwipe 7822a8d3b89SBram Moolenaar rviminfo Xviminfo 7832a8d3b89SBram Moolenaar call assert_equal(1, len(getbufinfo())) 7842a8d3b89SBram Moolenaar 7852a8d3b89SBram Moolenaar edit Xfile1 7862a8d3b89SBram Moolenaar edit Xfile2 7872a8d3b89SBram Moolenaar set viminfo^=% 7882a8d3b89SBram Moolenaar wviminfo Xviminfo 7892a8d3b89SBram Moolenaar %bwipe 7902a8d3b89SBram Moolenaar rviminfo Xviminfo 7912a8d3b89SBram Moolenaar let l = getbufinfo() 7922a8d3b89SBram Moolenaar call assert_equal(3, len(l)) 7932a8d3b89SBram Moolenaar call assert_equal('Xfile1', bufname(l[1].bufnr)) 7942a8d3b89SBram Moolenaar call assert_equal('Xfile2', bufname(l[2].bufnr)) 7952a8d3b89SBram Moolenaar 79641a7f82dSYegappan Lakshmanan " The quickfix, terminal, unlisted, unnamed buffers are not stored in the 79741a7f82dSYegappan Lakshmanan " viminfo file 79841a7f82dSYegappan Lakshmanan %bw! 79941a7f82dSYegappan Lakshmanan edit Xfile1 80041a7f82dSYegappan Lakshmanan new 80141a7f82dSYegappan Lakshmanan setlocal nobuflisted 80241a7f82dSYegappan Lakshmanan new 80341a7f82dSYegappan Lakshmanan copen 80441a7f82dSYegappan Lakshmanan if has('terminal') 80541a7f82dSYegappan Lakshmanan terminal 80641a7f82dSYegappan Lakshmanan endif 80741a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 80841a7f82dSYegappan Lakshmanan %bwipe! 80941a7f82dSYegappan Lakshmanan rviminfo Xviminfo 81041a7f82dSYegappan Lakshmanan let l = getbufinfo() 81141a7f82dSYegappan Lakshmanan call assert_equal(2, len(l)) 81241a7f82dSYegappan Lakshmanan call assert_true(bufexists('Xfile1')) 81341a7f82dSYegappan Lakshmanan 81441a7f82dSYegappan Lakshmanan " If a count is specified for '%', then only that many buffers should be 81541a7f82dSYegappan Lakshmanan " stored in the viminfo file. 81641a7f82dSYegappan Lakshmanan %bw! 81741a7f82dSYegappan Lakshmanan set viminfo&vim 81841a7f82dSYegappan Lakshmanan new Xbuf1 81941a7f82dSYegappan Lakshmanan new Xbuf2 82041a7f82dSYegappan Lakshmanan set viminfo+=%1 82141a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 82241a7f82dSYegappan Lakshmanan %bwipe! 82341a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 82441a7f82dSYegappan Lakshmanan let l = getbufinfo() 82541a7f82dSYegappan Lakshmanan call assert_equal(2, len(l)) 82641a7f82dSYegappan Lakshmanan call assert_true(bufexists('Xbuf1')) 82741a7f82dSYegappan Lakshmanan call assert_false(bufexists('Xbuf2')) 82841a7f82dSYegappan Lakshmanan 8292a8d3b89SBram Moolenaar call delete('Xviminfo') 8302a8d3b89SBram Moolenaar %bwipe 83141a7f82dSYegappan Lakshmanan set viminfo&vim 8322a8d3b89SBram Moolenaarendfunc 8332a8d3b89SBram Moolenaar 8342a8d3b89SBram Moolenaar" Test for errors in a viminfo file 8352a8d3b89SBram Moolenaarfunc Test_viminfo_error() 8362a8d3b89SBram Moolenaar " Non-existing viminfo files 8372a8d3b89SBram Moolenaar call assert_fails('rviminfo xyz', 'E195:') 8382a8d3b89SBram Moolenaar 8392a8d3b89SBram Moolenaar " Illegal starting character 8402a8d3b89SBram Moolenaar call writefile(["a 123"], 'Xviminfo') 8412a8d3b89SBram Moolenaar call assert_fails('rv Xviminfo', 'E575:') 8422a8d3b89SBram Moolenaar 8432a8d3b89SBram Moolenaar " Illegal register name in the viminfo file 8442a8d3b89SBram Moolenaar call writefile(['"@ LINE 0'], 'Xviminfo') 8452a8d3b89SBram Moolenaar call assert_fails('rv Xviminfo', 'E577:') 8462a8d3b89SBram Moolenaar 8472a8d3b89SBram Moolenaar " Invalid file mark line 8482a8d3b89SBram Moolenaar call writefile(['>', '@'], 'Xviminfo') 8492a8d3b89SBram Moolenaar call assert_fails('rv Xviminfo', 'E576:') 8502a8d3b89SBram Moolenaar 8512a8d3b89SBram Moolenaar " Too many errors in viminfo file 8522a8d3b89SBram Moolenaar call writefile(repeat(["a 123"], 15), 'Xviminfo') 8539b7bf9e9SBram Moolenaar call assert_fails('rv Xviminfo', 'E575:') 8542a8d3b89SBram Moolenaar 8552a8d3b89SBram Moolenaar call writefile(['>'] + repeat(['@'], 10), 'Xviminfo') 8569b7bf9e9SBram Moolenaar call assert_fails('rv Xviminfo', 'E576:') 8572a8d3b89SBram Moolenaar 8582a8d3b89SBram Moolenaar call writefile(repeat(['"@'], 15), 'Xviminfo') 8599b7bf9e9SBram Moolenaar call assert_fails('rv Xviminfo', 'E577:') 8602a8d3b89SBram Moolenaar 8612a8d3b89SBram Moolenaar call delete('Xviminfo') 8622a8d3b89SBram Moolenaarendfunc 8632a8d3b89SBram Moolenaar 8642a8d3b89SBram Moolenaar" Test for saving and restoring last substitute string in viminfo 8652a8d3b89SBram Moolenaarfunc Test_viminfo_lastsub() 8662a8d3b89SBram Moolenaar enew 8672a8d3b89SBram Moolenaar call append(0, "blue blue blue") 8682a8d3b89SBram Moolenaar call cursor(1, 1) 8692a8d3b89SBram Moolenaar s/blue/green/ 8702a8d3b89SBram Moolenaar wviminfo Xviminfo 8712a8d3b89SBram Moolenaar s/blue/yellow/ 8722a8d3b89SBram Moolenaar rviminfo! Xviminfo 8732a8d3b89SBram Moolenaar & 8742a8d3b89SBram Moolenaar call assert_equal("green yellow green", getline(1)) 8752a8d3b89SBram Moolenaar enew! 8762a8d3b89SBram Moolenaar call delete('Xviminfo') 8772a8d3b89SBram Moolenaarendfunc 8782a8d3b89SBram Moolenaar 8792a8d3b89SBram Moolenaar" Test saving and restoring the register values using the older method 8802a8d3b89SBram Moolenaarfunc Test_viminfo_registers_old() 8812a8d3b89SBram Moolenaar let lines = [ 8822a8d3b89SBram Moolenaar \ '# Viminfo version', 8832a8d3b89SBram Moolenaar \ '|1,1', 8842a8d3b89SBram Moolenaar \ '', 8852a8d3b89SBram Moolenaar \ '*encoding=utf-8', 8862a8d3b89SBram Moolenaar \ '', 8872a8d3b89SBram Moolenaar \ '# Registers:', 8882a8d3b89SBram Moolenaar \ '""0 CHAR 0', 8892a8d3b89SBram Moolenaar \ ' Vim', 8902a8d3b89SBram Moolenaar \ '"a CHAR 0', 8912a8d3b89SBram Moolenaar \ ' red', 89241a7f82dSYegappan Lakshmanan \ '"c BLOCK 0', 89341a7f82dSYegappan Lakshmanan \ ' a', 89441a7f82dSYegappan Lakshmanan \ ' d', 89541a7f82dSYegappan Lakshmanan \ '"d LINE 0', 89641a7f82dSYegappan Lakshmanan \ ' abc', 89741a7f82dSYegappan Lakshmanan \ ' def', 8982a8d3b89SBram Moolenaar \ '"m@ CHAR 0', 8992a8d3b89SBram Moolenaar \ " :echo 'Hello'\<CR>", 9002a8d3b89SBram Moolenaar \ "", 9012a8d3b89SBram Moolenaar \ ] 9022a8d3b89SBram Moolenaar call writefile(lines, 'Xviminfo') 9032a8d3b89SBram Moolenaar let @a = 'one' 9042a8d3b89SBram Moolenaar let @b = 'two' 9052a8d3b89SBram Moolenaar let @m = 'three' 9062a8d3b89SBram Moolenaar let @" = 'four' 9072a8d3b89SBram Moolenaar let @t = ":echo 'Unix'\<CR>" 9082a8d3b89SBram Moolenaar silent! normal @t 9092a8d3b89SBram Moolenaar rviminfo! Xviminfo 9102a8d3b89SBram Moolenaar call assert_equal('red', getreg('a')) 91141a7f82dSYegappan Lakshmanan call assert_equal("v", getregtype('a')) 9122a8d3b89SBram Moolenaar call assert_equal('two', getreg('b')) 91341a7f82dSYegappan Lakshmanan call assert_equal("a\nd", getreg('c')) 91441a7f82dSYegappan Lakshmanan call assert_equal("\<C-V>1", getregtype('c')) 91541a7f82dSYegappan Lakshmanan call assert_equal("abc\ndef\n", getreg('d')) 91641a7f82dSYegappan Lakshmanan call assert_equal("V", getregtype('d')) 9172a8d3b89SBram Moolenaar call assert_equal(":echo 'Hello'\<CR>", getreg('m')) 9182a8d3b89SBram Moolenaar call assert_equal('Vim', getreg('"')) 9192a8d3b89SBram Moolenaar call assert_equal("\nHello", execute('normal @@')) 9202a8d3b89SBram Moolenaar call delete('Xviminfo') 9212a8d3b89SBram Moolenaar let @" = '' 9222a8d3b89SBram Moolenaarendfunc 9232a8d3b89SBram Moolenaar 9242a8d3b89SBram Moolenaar" Test for saving and restoring large number of lines in a register 9252a8d3b89SBram Moolenaarfunc Test_viminfo_large_register() 9262a8d3b89SBram Moolenaar let save_viminfo = &viminfo 9272a8d3b89SBram Moolenaar set viminfo&vim 9282a8d3b89SBram Moolenaar set viminfo-=<50 9292a8d3b89SBram Moolenaar set viminfo+=<200 9302a8d3b89SBram Moolenaar let lines = ['"r CHAR 0'] 9312a8d3b89SBram Moolenaar call extend(lines, repeat(["\tsun is rising"], 200)) 9322a8d3b89SBram Moolenaar call writefile(lines, 'Xviminfo') 9332a8d3b89SBram Moolenaar let @r = '' 9342a8d3b89SBram Moolenaar rviminfo! Xviminfo 9352a8d3b89SBram Moolenaar call assert_equal(join(repeat(["sun is rising"], 200), "\n"), @r) 9362a8d3b89SBram Moolenaar call delete('Xviminfo') 9376bd1d770SBram Moolenaar let @r = '' 9382a8d3b89SBram Moolenaar let &viminfo = save_viminfo 9392a8d3b89SBram Moolenaarendfunc 9402a8d3b89SBram Moolenaar 9412a8d3b89SBram Moolenaar" Test for setting 'viminfofile' to NONE 9422a8d3b89SBram Moolenaarfunc Test_viminfofile_none() 9436bd1d770SBram Moolenaar let save_vif = &viminfofile 9442a8d3b89SBram Moolenaar set viminfofile=NONE 9452a8d3b89SBram Moolenaar wviminfo Xviminfo 9462a8d3b89SBram Moolenaar call assert_false(filereadable('Xviminfo')) 9472a8d3b89SBram Moolenaar call writefile([''], 'Xviminfo') 9482a8d3b89SBram Moolenaar call assert_fails('rviminfo Xviminfo', 'E195:') 9492a8d3b89SBram Moolenaar call delete('Xviminfo') 9506bd1d770SBram Moolenaar let &viminfofile = save_vif 9512a8d3b89SBram Moolenaarendfunc 9522a8d3b89SBram Moolenaar 9536bd1d770SBram Moolenaar" Test for an unwritable and unreadble 'viminfo' file 9546bd1d770SBram Moolenaarfunc Test_viminfo_perm() 9556bd1d770SBram Moolenaar CheckUnix 95607282f01SBram Moolenaar CheckNotRoot 9572a8d3b89SBram Moolenaar call writefile([''], 'Xviminfo') 9582a8d3b89SBram Moolenaar call setfperm('Xviminfo', 'r-x------') 9592a8d3b89SBram Moolenaar call assert_fails('wviminfo Xviminfo', 'E137:') 9606bd1d770SBram Moolenaar call setfperm('Xviminfo', '--x------') 9616bd1d770SBram Moolenaar call assert_fails('rviminfo Xviminfo', 'E195:') 9622a8d3b89SBram Moolenaar call delete('Xviminfo') 963cde0ff39SBram Moolenaar 964cde0ff39SBram Moolenaar " Try to write the viminfo to a directory 965cde0ff39SBram Moolenaar call mkdir('Xdir') 966b86abadfSBram Moolenaar call assert_fails('wviminfo Xdir', 'E137:') 967*f1e7449dSYegappan Lakshmanan call assert_fails('rviminfo Xdir', 'E195:') 968cde0ff39SBram Moolenaar call delete('Xdir', 'rf') 969e11d61a3SBram Moolenaarendfunc 9706bd1d770SBram Moolenaar 9716bd1d770SBram Moolenaar" Test for writing to an existing viminfo file merges the file marks 9726bd1d770SBram Moolenaarfunc XTest_viminfo_marks_merge() 9736bd1d770SBram Moolenaar let save_viminfo = &viminfo 9746bd1d770SBram Moolenaar set viminfo&vim 9756bd1d770SBram Moolenaar set viminfo^=% 9766bd1d770SBram Moolenaar enew 9776bd1d770SBram Moolenaar %argdelete 9786bd1d770SBram Moolenaar %bwipe 9796bd1d770SBram Moolenaar 9806bd1d770SBram Moolenaar call writefile(repeat(['editor'], 10), 'Xbufa') 9816bd1d770SBram Moolenaar call writefile(repeat(['Vim'], 10), 'Xbufb') 9826bd1d770SBram Moolenaar 9836bd1d770SBram Moolenaar " set marks in buffers 9846bd1d770SBram Moolenaar call test_settime(10) 9856bd1d770SBram Moolenaar edit Xbufa 9866bd1d770SBram Moolenaar 4mark a 9876bd1d770SBram Moolenaar wviminfo Xviminfo 9886bd1d770SBram Moolenaar edit Xbufb 9896bd1d770SBram Moolenaar 4mark b 9906bd1d770SBram Moolenaar wviminfo Xviminfo 9916bd1d770SBram Moolenaar %bwipe 9926bd1d770SBram Moolenaar 9936bd1d770SBram Moolenaar " set marks in buffers again 9946bd1d770SBram Moolenaar call test_settime(20) 9956bd1d770SBram Moolenaar edit Xbufb 9966bd1d770SBram Moolenaar 6mark b 9976bd1d770SBram Moolenaar wviminfo Xviminfo 9986bd1d770SBram Moolenaar edit Xbufa 9996bd1d770SBram Moolenaar 6mark a 10006bd1d770SBram Moolenaar wviminfo Xviminfo 10016bd1d770SBram Moolenaar %bwipe 10026bd1d770SBram Moolenaar 10036bd1d770SBram Moolenaar " Load the buffer and check the marks 10046bd1d770SBram Moolenaar edit Xbufa 10056bd1d770SBram Moolenaar rviminfo! Xviminfo 10066bd1d770SBram Moolenaar call assert_equal(6, line("'a")) 10076bd1d770SBram Moolenaar edit Xbufb 10086bd1d770SBram Moolenaar rviminfo! Xviminfo 10096bd1d770SBram Moolenaar call assert_equal(6, line("'b")) 10106bd1d770SBram Moolenaar 10116bd1d770SBram Moolenaar " cleanup 10126bd1d770SBram Moolenaar %bwipe 10136bd1d770SBram Moolenaar call delete('Xviminfo') 10146bd1d770SBram Moolenaar call delete('Xbufa') 10156bd1d770SBram Moolenaar call delete('Xbufb') 10166bd1d770SBram Moolenaar call test_settime(0) 10176bd1d770SBram Moolenaar let &viminfo=save_viminfo 10186bd1d770SBram Moolenaarendfunc 1019ee4e0c1eSBram Moolenaar 1020ee4e0c1eSBram Moolenaar" Test for errors in setting 'viminfo' 1021ee4e0c1eSBram Moolenaarfunc Test_viminfo_option_error() 1022ee4e0c1eSBram Moolenaar " Missing number 1023ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=\"', 'E526:') 1024ee4e0c1eSBram Moolenaar for c in split("'/:<@s", '\zs') 1025ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=' .. c, 'E526:') 1026ee4e0c1eSBram Moolenaar endfor 1027ee4e0c1eSBram Moolenaar 1028ee4e0c1eSBram Moolenaar " Missing comma 1029ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=%10!', 'E527:') 1030ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=!%10', 'E527:') 1031ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=h%10', 'E527:') 1032ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=c%10', 'E527:') 1033ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=:10%10', 'E527:') 1034ee4e0c1eSBram Moolenaar 1035ee4e0c1eSBram Moolenaar " Missing ' setting 1036ee4e0c1eSBram Moolenaar call assert_fails('set viminfo=%10', 'E528:') 1037ee4e0c1eSBram Moolenaarendfunc 1038ee4e0c1eSBram Moolenaar 10398e6be343SBram Moolenaarfunc Test_viminfo_oldfiles_newfile() 10408e6be343SBram Moolenaar CheckRunVimInTerminal 10418e6be343SBram Moolenaar 10428e6be343SBram Moolenaar let save_viminfo = &viminfo 10438e6be343SBram Moolenaar let save_viminfofile = &viminfofile 10448e6be343SBram Moolenaar set viminfo&vim 10458e6be343SBram Moolenaar let v:oldfiles = [] 10468e6be343SBram Moolenaar let commands =<< trim [CODE] 10478e6be343SBram Moolenaar set viminfofile=Xviminfofile 10488e6be343SBram Moolenaar set viminfo&vim 10498e6be343SBram Moolenaar w! Xnew-file.txt 10508e6be343SBram Moolenaar qall 10518e6be343SBram Moolenaar [CODE] 10528e6be343SBram Moolenaar call writefile(commands, 'Xviminfotest') 10538e6be343SBram Moolenaar let buf = RunVimInTerminal('-S Xviminfotest', #{wait_for_ruler: 0}) 10548e6be343SBram Moolenaar call WaitForAssert({-> assert_equal("finished", term_getstatus(buf))}) 10558e6be343SBram Moolenaar 10568e6be343SBram Moolenaar let &viminfofile = 'Xviminfofile' 10578e6be343SBram Moolenaar rviminfo! Xviminfofile 10588e6be343SBram Moolenaar call assert_match('Xnew-file.txt$', v:oldfiles[0]) 10598e6be343SBram Moolenaar call assert_equal(1, len(v:oldfiles)) 10608e6be343SBram Moolenaar call delete('Xviminfofile') 10618e6be343SBram Moolenaar call delete('Xviminfotest') 10628e6be343SBram Moolenaar call delete('Xnew-file.txt') 10636fd367a9SBram Moolenaar 10646fd367a9SBram Moolenaar let v:oldfiles = test_null_list() 10656fd367a9SBram Moolenaar call assert_equal("\nNo old files", execute('oldfiles')) 10666fd367a9SBram Moolenaar 10678e6be343SBram Moolenaar let &viminfo = save_viminfo 10688e6be343SBram Moolenaar let &viminfofile = save_viminfofile 10698e6be343SBram Moolenaarendfunc 10708e6be343SBram Moolenaar 107141a7f82dSYegappan Lakshmanan" When writing CTRL-V or "\n" to a viminfo file, it is converted to CTRL-V 107241a7f82dSYegappan Lakshmanan" CTRL-V and CTRL-V n respectively. 107341a7f82dSYegappan Lakshmananfunc Test_viminfo_with_Ctrl_V() 107441a7f82dSYegappan Lakshmanan silent! exe "normal! /\<C-V>\<C-V>\n" 107541a7f82dSYegappan Lakshmanan wviminfo Xviminfo 107641a7f82dSYegappan Lakshmanan call assert_notequal(-1, readfile('Xviminfo')->index("?/\<C-V>\<C-V>")) 107741a7f82dSYegappan Lakshmanan let @/ = 'abc' 107841a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 107941a7f82dSYegappan Lakshmanan call assert_equal("\<C-V>", @/) 108041a7f82dSYegappan Lakshmanan silent! exe "normal! /\<C-V>\<C-J>\n" 108141a7f82dSYegappan Lakshmanan wviminfo Xviminfo 108241a7f82dSYegappan Lakshmanan call assert_notequal(-1, readfile('Xviminfo')->index("?/\<C-V>n")) 108341a7f82dSYegappan Lakshmanan let @/ = 'abc' 108441a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 108541a7f82dSYegappan Lakshmanan call assert_equal("\n", @/) 108641a7f82dSYegappan Lakshmanan call delete('Xviminfo') 108741a7f82dSYegappan Lakshmananendfunc 108841a7f82dSYegappan Lakshmanan 108941a7f82dSYegappan Lakshmanan" Test for the 'r' field in 'viminfo' (removal media) 109041a7f82dSYegappan Lakshmananfunc Test_viminfo_removable_media() 109141a7f82dSYegappan Lakshmanan CheckUnix 109241a7f82dSYegappan Lakshmanan if !isdirectory('/tmp') || getftype('/tmp') != 'dir' 109341a7f82dSYegappan Lakshmanan return 109441a7f82dSYegappan Lakshmanan endif 109541a7f82dSYegappan Lakshmanan let save_viminfo = &viminfo 109641a7f82dSYegappan Lakshmanan set viminfo+=r/tmp 109741a7f82dSYegappan Lakshmanan edit /tmp/Xvima1b2c3 109841a7f82dSYegappan Lakshmanan wviminfo Xviminfo 109941a7f82dSYegappan Lakshmanan let matches = readfile('Xviminfo')->filter("v:val =~ 'Xvima1b2c3'") 110041a7f82dSYegappan Lakshmanan call assert_equal(0, matches->len()) 110141a7f82dSYegappan Lakshmanan let &viminfo = save_viminfo 110241a7f82dSYegappan Lakshmanan call delete('Xviminfo') 110341a7f82dSYegappan Lakshmananendfunc 110441a7f82dSYegappan Lakshmanan 110541a7f82dSYegappan Lakshmanan" Test for the 'h' flag in 'viminfo'. If 'h' is not present, then the last 110641a7f82dSYegappan Lakshmanan" search pattern read from 'viminfo' should be highlighted with 'hlsearch'. 110741a7f82dSYegappan Lakshmanan" If 'h' is present, then the last search pattern should not be highlighted. 110841a7f82dSYegappan Lakshmananfunc Test_viminfo_hlsearch() 110941a7f82dSYegappan Lakshmanan set viminfo&vim 111041a7f82dSYegappan Lakshmanan 111141a7f82dSYegappan Lakshmanan new 111241a7f82dSYegappan Lakshmanan call setline(1, ['one two three']) 111341a7f82dSYegappan Lakshmanan " save the screen attribute for the Search highlighted text and the normal 111441a7f82dSYegappan Lakshmanan " text for later comparison 111541a7f82dSYegappan Lakshmanan set hlsearch 111641a7f82dSYegappan Lakshmanan let @/ = 'three' 111741a7f82dSYegappan Lakshmanan redraw! 111841a7f82dSYegappan Lakshmanan let hiSearch = screenattr(1, 9) 111941a7f82dSYegappan Lakshmanan let hiNormal = screenattr(1, 1) 112041a7f82dSYegappan Lakshmanan 112141a7f82dSYegappan Lakshmanan set viminfo-=h 112241a7f82dSYegappan Lakshmanan let @/='two' 112341a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 112441a7f82dSYegappan Lakshmanan let @/='one' 112541a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 112641a7f82dSYegappan Lakshmanan redraw! 112741a7f82dSYegappan Lakshmanan call assert_equal(hiSearch, screenattr(1, 5)) 112841a7f82dSYegappan Lakshmanan call assert_equal(hiSearch, screenattr(1, 6)) 112941a7f82dSYegappan Lakshmanan call assert_equal(hiSearch, screenattr(1, 7)) 113041a7f82dSYegappan Lakshmanan 113141a7f82dSYegappan Lakshmanan set viminfo+=h 113241a7f82dSYegappan Lakshmanan let @/='two' 113341a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 113441a7f82dSYegappan Lakshmanan let @/='one' 113541a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 113641a7f82dSYegappan Lakshmanan redraw! 113741a7f82dSYegappan Lakshmanan call assert_equal(hiNormal, screenattr(1, 5)) 113841a7f82dSYegappan Lakshmanan call assert_equal(hiNormal, screenattr(1, 6)) 113941a7f82dSYegappan Lakshmanan call assert_equal(hiNormal, screenattr(1, 7)) 114041a7f82dSYegappan Lakshmanan 114141a7f82dSYegappan Lakshmanan call delete('Xviminfo') 114241a7f82dSYegappan Lakshmanan set hlsearch& viminfo&vim 114341a7f82dSYegappan Lakshmanan bw! 114441a7f82dSYegappan Lakshmananendfunc 114541a7f82dSYegappan Lakshmanan 114641a7f82dSYegappan Lakshmanan" Test for restoring the magicness of the last search pattern from the viminfo 114741a7f82dSYegappan Lakshmanan" file. 114841a7f82dSYegappan Lakshmananfunc Test_viminfo_last_spat_magic() 114941a7f82dSYegappan Lakshmanan set viminfo&vim 115041a7f82dSYegappan Lakshmanan new 115141a7f82dSYegappan Lakshmanan call setline(1, ' one abc a.c') 115241a7f82dSYegappan Lakshmanan 115341a7f82dSYegappan Lakshmanan " restore 'nomagic' 115441a7f82dSYegappan Lakshmanan set nomagic 115541a7f82dSYegappan Lakshmanan exe "normal gg/a.c\<CR>" 115641a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 115741a7f82dSYegappan Lakshmanan set magic 115841a7f82dSYegappan Lakshmanan exe "normal gg/one\<CR>" 115941a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 116041a7f82dSYegappan Lakshmanan exe "normal! gg/\<CR>" 116141a7f82dSYegappan Lakshmanan call assert_equal(10, col('.')) 116241a7f82dSYegappan Lakshmanan 116341a7f82dSYegappan Lakshmanan " restore 'magic' 116441a7f82dSYegappan Lakshmanan set magic 116541a7f82dSYegappan Lakshmanan exe "normal gg/a.c\<CR>" 116641a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 116741a7f82dSYegappan Lakshmanan set nomagic 116841a7f82dSYegappan Lakshmanan exe "normal gg/one\<CR>" 116941a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 117041a7f82dSYegappan Lakshmanan exe "normal! gg/\<CR>" 117141a7f82dSYegappan Lakshmanan call assert_equal(6, col('.')) 117241a7f82dSYegappan Lakshmanan 117341a7f82dSYegappan Lakshmanan call delete('Xviminfo') 117441a7f82dSYegappan Lakshmanan set viminfo&vim magic& 117541a7f82dSYegappan Lakshmanan bw! 117641a7f82dSYegappan Lakshmananendfunc 117741a7f82dSYegappan Lakshmanan 117841a7f82dSYegappan Lakshmanan" Test for restoring the smartcase of the last search pattern from the viminfo 117941a7f82dSYegappan Lakshmanan" file. 118041a7f82dSYegappan Lakshmananfunc Test_viminfo_last_spat_smartcase() 118141a7f82dSYegappan Lakshmanan new 118241a7f82dSYegappan Lakshmanan call setline(1, ' one abc Abc') 118341a7f82dSYegappan Lakshmanan set ignorecase smartcase 118441a7f82dSYegappan Lakshmanan 118541a7f82dSYegappan Lakshmanan " Searching with * should disable smartcase 118641a7f82dSYegappan Lakshmanan exe "normal! gg$b*" 118741a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 118841a7f82dSYegappan Lakshmanan exe "normal gg/one\<CR>" 118941a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 119041a7f82dSYegappan Lakshmanan exe "normal! gg/\<CR>" 119141a7f82dSYegappan Lakshmanan call assert_equal(6, col('.')) 119241a7f82dSYegappan Lakshmanan 119341a7f82dSYegappan Lakshmanan call delete('Xviminfo') 119441a7f82dSYegappan Lakshmanan set ignorecase& smartcase& viminfo& 119541a7f82dSYegappan Lakshmanan bw! 119641a7f82dSYegappan Lakshmananendfunc 119741a7f82dSYegappan Lakshmanan 119841a7f82dSYegappan Lakshmanan" Test for restoring the last search pattern with a line or character offset 119941a7f82dSYegappan Lakshmanan" from the viminfo file. 120041a7f82dSYegappan Lakshmananfunc Test_viminfo_last_spat_offset() 120141a7f82dSYegappan Lakshmanan new 120241a7f82dSYegappan Lakshmanan call setline(1, ['one', 'two', 'three', 'four', 'five']) 120341a7f82dSYegappan Lakshmanan " line offset 120441a7f82dSYegappan Lakshmanan exe "normal! /two/+2\<CR>" 120541a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 120641a7f82dSYegappan Lakshmanan exe "normal gg/five\<CR>" 120741a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 120841a7f82dSYegappan Lakshmanan exe "normal! gg/\<CR>" 120941a7f82dSYegappan Lakshmanan call assert_equal(4, line('.')) 121041a7f82dSYegappan Lakshmanan " character offset 121141a7f82dSYegappan Lakshmanan exe "normal! gg/^th/e+2\<CR>" 121241a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 121341a7f82dSYegappan Lakshmanan exe "normal gg/two\<CR>" 121441a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 121541a7f82dSYegappan Lakshmanan exe "normal! gg/\<CR>" 121641a7f82dSYegappan Lakshmanan call assert_equal([3, 4], [line('.'), col('.')]) 121741a7f82dSYegappan Lakshmanan call delete('Xviminfo') 121841a7f82dSYegappan Lakshmanan bw! 121941a7f82dSYegappan Lakshmananendfunc 122041a7f82dSYegappan Lakshmanan 122141a7f82dSYegappan Lakshmanan" Test for saving and restoring the last executed register (@ command) 122241a7f82dSYegappan Lakshmanan" from the viminfo file 122341a7f82dSYegappan Lakshmananfunc Test_viminfo_last_exec_reg() 122441a7f82dSYegappan Lakshmanan let g:val = 1 122541a7f82dSYegappan Lakshmanan let @a = ":let g:val += 1\n" 122641a7f82dSYegappan Lakshmanan normal! @a 122741a7f82dSYegappan Lakshmanan wviminfo! Xviminfo 122841a7f82dSYegappan Lakshmanan let @b = '' 122941a7f82dSYegappan Lakshmanan normal! @b 123041a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 123141a7f82dSYegappan Lakshmanan normal @@ 123241a7f82dSYegappan Lakshmanan call assert_equal(3, g:val) 123341a7f82dSYegappan Lakshmanan call delete('Xviminfo') 123441a7f82dSYegappan Lakshmananendfunc 123541a7f82dSYegappan Lakshmanan 123641a7f82dSYegappan Lakshmanan" Test for merging file marks in a viminfo file 123741a7f82dSYegappan Lakshmananfunc Test_viminfo_merge_file_marks() 123841a7f82dSYegappan Lakshmanan for [f, l, t] in [['a.txt', 5, 10], ['b.txt', 10, 20]] 123941a7f82dSYegappan Lakshmanan call test_settime(t) 124041a7f82dSYegappan Lakshmanan exe 'edit ' .. f 124141a7f82dSYegappan Lakshmanan call setline(1, range(1, 20)) 124241a7f82dSYegappan Lakshmanan exe l . 'mark a' 124341a7f82dSYegappan Lakshmanan wviminfo Xviminfo 124441a7f82dSYegappan Lakshmanan bw! 124541a7f82dSYegappan Lakshmanan endfor 124641a7f82dSYegappan Lakshmanan call test_settime(30) 124741a7f82dSYegappan Lakshmanan for [f, l] in [['a.txt', 5], ['b.txt', 10]] 124841a7f82dSYegappan Lakshmanan exe 'edit ' .. f 124941a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 125041a7f82dSYegappan Lakshmanan call assert_equal(l, line("'a")) 125141a7f82dSYegappan Lakshmanan bw! 125241a7f82dSYegappan Lakshmanan endfor 125341a7f82dSYegappan Lakshmanan call delete('Xviminfo') 125441a7f82dSYegappan Lakshmanan call test_settime(0) 125541a7f82dSYegappan Lakshmananendfunc 125641a7f82dSYegappan Lakshmanan 125741a7f82dSYegappan Lakshmanan" Test for merging file marks from a old viminfo file 125841a7f82dSYegappan Lakshmananfunc Test_viminfo_merge_old_filemarks() 125941a7f82dSYegappan Lakshmanan let lines = [] 126041a7f82dSYegappan Lakshmanan call add(lines, '|1,4') 126141a7f82dSYegappan Lakshmanan call add(lines, '> ' .. fnamemodify('a.txt', ':p:~')) 126241a7f82dSYegappan Lakshmanan call add(lines, "\tb\t7\t0\n") 126341a7f82dSYegappan Lakshmanan call writefile(lines, 'Xviminfo') 126441a7f82dSYegappan Lakshmanan edit b.txt 126541a7f82dSYegappan Lakshmanan call setline(1, range(1, 20)) 126641a7f82dSYegappan Lakshmanan 12mark b 126741a7f82dSYegappan Lakshmanan wviminfo Xviminfo 126841a7f82dSYegappan Lakshmanan bw! 126941a7f82dSYegappan Lakshmanan edit a.txt 127041a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 127141a7f82dSYegappan Lakshmanan call assert_equal(7, line("'b")) 127241a7f82dSYegappan Lakshmanan edit b.txt 127341a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 127441a7f82dSYegappan Lakshmanan call assert_equal(12, line("'b")) 127541a7f82dSYegappan Lakshmanan call delete('Xviminfo') 127641a7f82dSYegappan Lakshmananendfunc 127741a7f82dSYegappan Lakshmanan 127841a7f82dSYegappan Lakshmanan" Test for merging the jump list from a old viminfo file 127941a7f82dSYegappan Lakshmananfunc Test_viminfo_merge_old_jumplist() 128041a7f82dSYegappan Lakshmanan let lines = [] 128141a7f82dSYegappan Lakshmanan call add(lines, "-' 10 1 " .. fnamemodify('a.txt', ':p:~')) 128241a7f82dSYegappan Lakshmanan call add(lines, "-' 20 1 " .. fnamemodify('a.txt', ':p:~')) 128341a7f82dSYegappan Lakshmanan call add(lines, "-' 30 1 " .. fnamemodify('b.txt', ':p:~')) 128441a7f82dSYegappan Lakshmanan call add(lines, "-' 40 1 " .. fnamemodify('b.txt', ':p:~')) 128541a7f82dSYegappan Lakshmanan call writefile(lines, 'Xviminfo') 128641a7f82dSYegappan Lakshmanan clearjumps 128741a7f82dSYegappan Lakshmanan rviminfo! Xviminfo 128841a7f82dSYegappan Lakshmanan let l = getjumplist()[0] 128941a7f82dSYegappan Lakshmanan call assert_equal([40, 30, 20, 10], [l[0].lnum, l[1].lnum, l[2].lnum, 129041a7f82dSYegappan Lakshmanan \ l[3].lnum]) 129141a7f82dSYegappan Lakshmanan bw! 129241a7f82dSYegappan Lakshmanan call delete('Xviminfo') 129341a7f82dSYegappan Lakshmananendfunc 129441a7f82dSYegappan Lakshmanan 1295ee4e0c1eSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1296