blob: 279b1c3d18ff0629e9daea0c6a217614e599c1aa [file] [log] [blame]
" Test for reading and writing .viminfo
function Test_read_and_write()
call histdel(':')
let lines = [
\ '# comment line',
\ '*encoding=utf-8',
\ '~MSle0~/asdf',
\ '|copied as-is',
\ '|and one more',
\ ]
call writefile(lines, 'Xviminfo')
rviminfo Xviminfo
call assert_equal('asdf', @/)
wviminfo Xviminfo
let lines = readfile('Xviminfo')
let done = 0
for line in lines
if line[0] == '|'
if done == 0
call assert_equal('|1,2', line)
elseif done == 1
call assert_equal('|copied as-is', line)
elseif done == 2
call assert_equal('|and one more', line)
endif
let done += 1
endif
endfor
call assert_equal(3, done)
call delete('Xviminfo')
endfunc
func Test_global_vars()
let test_dict = {'foo': 1, 'bar': 0, 'longvarible': 1000}
let g:MY_GLOBAL_DICT = test_dict
" store a really long list, so line wrapping will occur in viminfo file
let test_list = range(1,100)
let g:MY_GLOBAL_LIST = test_list
set viminfo='100,<50,s10,h,!,nviminfo
wv! Xviminfo
unlet g:MY_GLOBAL_DICT
unlet g:MY_GLOBAL_LIST
rv! Xviminfo
call assert_equal(test_dict, g:MY_GLOBAL_DICT)
call assert_equal(test_list, g:MY_GLOBAL_LIST)
call delete('Xviminfo')
set viminfo-=!
endfunc
func Test_cmdline_history()
call histdel(':')
call test_settime(11)
call histadd(':', "echo 'one'")
call test_settime(12)
" split into two lines
let long800 = repeat(" 'eight'", 100)
call histadd(':', "echo " . long800)
call test_settime(13)
" split into three lines
let long1400 = repeat(" 'fourteeeeen'", 100)
call histadd(':', "echo " . long1400)
wviminfo Xviminfo
let lines = readfile('Xviminfo')
let done_colon = 0
let done_bar = 0
let lnum = 0
while lnum < len(lines)
let line = lines[lnum] | let lnum += 1
if line[0] == ':'
if done_colon == 0
call assert_equal(":\x161408", line)
let line = lines[lnum] | let lnum += 1
call assert_equal('<echo ' . long1400, line)
elseif done_colon == 1
call assert_equal(":\x16808", line)
let line = lines[lnum] | let lnum += 1
call assert_equal("<echo " . long800, line)
elseif done_colon == 2
call assert_equal(":echo 'one'", line)
endif
let done_colon += 1
elseif line[0:4] == '|2,0,'
if done_bar == 0
call assert_equal("|2,0,13,,>1407", line)
let line = lines[lnum] | let lnum += 1
call assert_equal('|<"echo ' . long1400[0:484], line)
let line = lines[lnum] | let lnum += 1
call assert_equal('|<' . long1400[485:974], line)
let line = lines[lnum] | let lnum += 1
call assert_equal('|<' . long1400[975:] . '"', line)
elseif done_bar == 1
call assert_equal('|2,0,12,,>807', line)
let line = lines[lnum] | let lnum += 1
call assert_equal('|<"echo ' . long800[0:484], line)
let line = lines[lnum] | let lnum += 1
call assert_equal('|<' . long800[485:] . '"', line)
elseif done_bar == 2
call assert_equal("|2,0,11,,\"echo 'one'\"", line)
endif
let done_bar += 1
endif
endwhile
call assert_equal(3, done_colon)
call assert_equal(3, done_bar)
call histdel(':')
rviminfo Xviminfo
call assert_equal("echo " . long1400, histget(':', -1))
call assert_equal("echo " . long800, histget(':', -2))
call assert_equal("echo 'one'", histget(':', -3))
call delete('Xviminfo')
endfunc
func Test_cmdline_history_order()
call histdel(':')
call test_settime(11)
call histadd(':', "echo '11'")
call test_settime(22)
call histadd(':', "echo '22'")
call test_settime(33)
call histadd(':', "echo '33'")
wviminfo Xviminfo
call histdel(':')
" items go in between
call test_settime(15)
call histadd(':', "echo '15'")
call test_settime(27)
call histadd(':', "echo '27'")
rviminfo Xviminfo
call assert_equal("echo '33'", histget(':', -1))
call assert_equal("echo '27'", histget(':', -2))
call assert_equal("echo '22'", histget(':', -3))
call assert_equal("echo '15'", histget(':', -4))
call assert_equal("echo '11'", histget(':', -5))
call histdel(':')
" items go before and after
call test_settime(8)
call histadd(':', "echo '8'")
call test_settime(39)
call histadd(':', "echo '39'")
rviminfo Xviminfo
call assert_equal("echo '39'", histget(':', -1))
call assert_equal("echo '33'", histget(':', -2))
call assert_equal("echo '22'", histget(':', -3))
call assert_equal("echo '11'", histget(':', -4))
call assert_equal("echo '8'", histget(':', -5))
" Check sorting works when writing with merge.
call histdel(':')
call test_settime(8)
call histadd(':', "echo '8'")
call test_settime(15)
call histadd(':', "echo '15'")
call test_settime(27)
call histadd(':', "echo '27'")
call test_settime(39)
call histadd(':', "echo '39'")
wviminfo Xviminfo
call histdel(':')
rviminfo Xviminfo
call assert_equal("echo '39'", histget(':', -1))
call assert_equal("echo '33'", histget(':', -2))
call assert_equal("echo '27'", histget(':', -3))
call assert_equal("echo '22'", histget(':', -4))
call assert_equal("echo '15'", histget(':', -5))
call assert_equal("echo '11'", histget(':', -6))
call assert_equal("echo '8'", histget(':', -7))
call delete('Xviminfo')
endfunc