1eca626fcSBram Moolenaar" Test for :mksession, :mkview and :loadview in latin1 encoding 2eca626fcSBram Moolenaar 3eca626fcSBram Moolenaarset encoding=latin1 4eca626fcSBram Moolenaarscriptencoding latin1 5eca626fcSBram Moolenaar 6b46fecd3SBram Moolenaarsource check.vim 7b46fecd3SBram MoolenaarCheckFeature mksession 8eca626fcSBram Moolenaar 94d8bac8bSBram Moolenaarsource shared.vim 107a39dd7fSBram Moolenaarsource term_util.vim 114d8bac8bSBram Moolenaar 121e15e611SBram Moolenaar" Test for storing global and local argument list in a session file 131e15e611SBram Moolenaar" This one must be done first. 141e15e611SBram Moolenaarfunc Test__mksession_arglocal() 151e15e611SBram Moolenaar enew | only 161e15e611SBram Moolenaar n a b c 171e15e611SBram Moolenaar new 181e15e611SBram Moolenaar arglocal 191e15e611SBram Moolenaar mksession! Xtest_mks.out 201e15e611SBram Moolenaar 211e15e611SBram Moolenaar %bwipe! 221e15e611SBram Moolenaar %argdelete 231e15e611SBram Moolenaar argglobal 241e15e611SBram Moolenaar source Xtest_mks.out 251e15e611SBram Moolenaar call assert_equal(2, winnr('$')) 261e15e611SBram Moolenaar call assert_equal(2, arglistid(1)) 271e15e611SBram Moolenaar call assert_equal(0, arglistid(2)) 281e15e611SBram Moolenaar 291e15e611SBram Moolenaar %bwipe! 301e15e611SBram Moolenaar %argdelete 311e15e611SBram Moolenaar argglobal 321e15e611SBram Moolenaar call delete('Xtest_mks.out') 331e15e611SBram Moolenaarendfunc 341e15e611SBram Moolenaar 35eca626fcSBram Moolenaarfunc Test_mksession() 36eca626fcSBram Moolenaar tabnew 37eca626fcSBram Moolenaar let wrap_save = &wrap 38eca626fcSBram Moolenaar set sessionoptions=buffers splitbelow fileencoding=latin1 39eca626fcSBram Moolenaar call setline(1, [ 40eca626fcSBram Moolenaar \ 'start:', 41eca626fcSBram Moolenaar \ 'no multibyte chAracter', 42eca626fcSBram Moolenaar \ ' one leaDing tab', 43eca626fcSBram Moolenaar \ ' four leadinG spaces', 44eca626fcSBram Moolenaar \ 'two consecutive tabs', 45eca626fcSBram Moolenaar \ 'two tabs in one line', 46eca626fcSBram Moolenaar \ 'one � multibyteCharacter', 47eca626fcSBram Moolenaar \ 'a� � two multiByte characters', 4892c1b696SBram Moolenaar \ 'A��� three mulTibyte characters', 4992c1b696SBram Moolenaar \ 'short line', 50eca626fcSBram Moolenaar \ ]) 51c9b56b2cSBram Moolenaar let tmpfile = 'Xtemp' 52eca626fcSBram Moolenaar exec 'w! ' . tmpfile 53eca626fcSBram Moolenaar /^start: 54eca626fcSBram Moolenaar set wrap 55eca626fcSBram Moolenaar vsplit 56eca626fcSBram Moolenaar norm! j16| 57eca626fcSBram Moolenaar split 58eca626fcSBram Moolenaar norm! j16| 59eca626fcSBram Moolenaar split 60eca626fcSBram Moolenaar norm! j16| 61eca626fcSBram Moolenaar split 62eca626fcSBram Moolenaar norm! j8| 63eca626fcSBram Moolenaar split 64eca626fcSBram Moolenaar norm! j8| 65eca626fcSBram Moolenaar split 66eca626fcSBram Moolenaar norm! j16| 67eca626fcSBram Moolenaar split 68eca626fcSBram Moolenaar norm! j16| 69eca626fcSBram Moolenaar split 70eca626fcSBram Moolenaar norm! j16| 7192c1b696SBram Moolenaar split 7292c1b696SBram Moolenaar norm! j$ 73eca626fcSBram Moolenaar wincmd l 74eca626fcSBram Moolenaar 75eca626fcSBram Moolenaar set nowrap 76eca626fcSBram Moolenaar /^start: 77eca626fcSBram Moolenaar norm! j16|3zl 78eca626fcSBram Moolenaar split 79eca626fcSBram Moolenaar norm! j016|3zl 80eca626fcSBram Moolenaar split 81eca626fcSBram Moolenaar norm! j016|3zl 82eca626fcSBram Moolenaar split 83eca626fcSBram Moolenaar norm! j08|3zl 84eca626fcSBram Moolenaar split 85eca626fcSBram Moolenaar norm! j08|3zl 86eca626fcSBram Moolenaar split 87eca626fcSBram Moolenaar norm! j016|3zl 88eca626fcSBram Moolenaar split 89eca626fcSBram Moolenaar norm! j016|3zl 90eca626fcSBram Moolenaar split 91eca626fcSBram Moolenaar norm! j016|3zl 92eca626fcSBram Moolenaar split 93eca626fcSBram Moolenaar call wincol() 94c9b56b2cSBram Moolenaar mksession! Xtest_mks.out 9592c1b696SBram Moolenaar let li = filter(readfile('Xtest_mks.out'), 'v:val =~# "\\(^ *normal! [0$]\\|^ *exe ''normal!\\)"') 96eca626fcSBram Moolenaar let expected = [ 97eca626fcSBram Moolenaar \ 'normal! 016|', 98eca626fcSBram Moolenaar \ 'normal! 016|', 99eca626fcSBram Moolenaar \ 'normal! 016|', 100eca626fcSBram Moolenaar \ 'normal! 08|', 101eca626fcSBram Moolenaar \ 'normal! 08|', 102eca626fcSBram Moolenaar \ 'normal! 016|', 103eca626fcSBram Moolenaar \ 'normal! 016|', 104eca626fcSBram Moolenaar \ 'normal! 016|', 10592c1b696SBram Moolenaar \ 'normal! $', 106eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'", 107eca626fcSBram Moolenaar \ " normal! 016|", 108eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'", 109eca626fcSBram Moolenaar \ " normal! 016|", 110eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'", 111eca626fcSBram Moolenaar \ " normal! 016|", 112eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 8 . '|'", 113eca626fcSBram Moolenaar \ " normal! 08|", 114eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 8 . '|'", 115eca626fcSBram Moolenaar \ " normal! 08|", 116eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'", 117eca626fcSBram Moolenaar \ " normal! 016|", 118eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'", 119eca626fcSBram Moolenaar \ " normal! 016|", 120eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'", 121eca626fcSBram Moolenaar \ " normal! 016|", 122eca626fcSBram Moolenaar \ " exe 'normal! ' . s:c . '|zs' . 16 . '|'", 123eca626fcSBram Moolenaar \ " normal! 016|" 124eca626fcSBram Moolenaar \ ] 125eca626fcSBram Moolenaar call assert_equal(expected, li) 126eca626fcSBram Moolenaar tabclose! 127eca626fcSBram Moolenaar 128c9b56b2cSBram Moolenaar call delete('Xtest_mks.out') 129eca626fcSBram Moolenaar call delete(tmpfile) 130eca626fcSBram Moolenaar let &wrap = wrap_save 1314d8bac8bSBram Moolenaar set sessionoptions& 132eca626fcSBram Moolenaarendfunc 133eca626fcSBram Moolenaar 134635bd608SBram Moolenaardef Test_mksession_skiprtp() 135635bd608SBram Moolenaar mksession! Xtest_mks.out 136d23b714dSBram Moolenaar var found_rtp = 0 137d23b714dSBram Moolenaar var found_pp = 0 138635bd608SBram Moolenaar for line in readfile('Xtest_mks.out') 139635bd608SBram Moolenaar if line =~ 'set runtimepath' 140d23b714dSBram Moolenaar found_rtp += 1 141d23b714dSBram Moolenaar endif 142d23b714dSBram Moolenaar if line =~ 'set packpath' 143d23b714dSBram Moolenaar found_pp += 1 144635bd608SBram Moolenaar endif 145635bd608SBram Moolenaar endfor 146d23b714dSBram Moolenaar assert_equal(1, found_rtp) 147d23b714dSBram Moolenaar assert_equal(1, found_pp) 148635bd608SBram Moolenaar delete('Xtest_mks.out') 149635bd608SBram Moolenaar 150635bd608SBram Moolenaar set sessionoptions+=skiprtp 151635bd608SBram Moolenaar mksession! Xtest_mks.out 152d23b714dSBram Moolenaar var found = 0 153635bd608SBram Moolenaar for line in readfile('Xtest_mks.out') 154d23b714dSBram Moolenaar if line =~ 'set \(runtimepath\|packpath\)' 155635bd608SBram Moolenaar found = 1 156635bd608SBram Moolenaar break 157635bd608SBram Moolenaar endif 158635bd608SBram Moolenaar endfor 159635bd608SBram Moolenaar assert_equal(0, found) 160635bd608SBram Moolenaar delete('Xtest_mks.out') 161635bd608SBram Moolenaar set sessionoptions& 162635bd608SBram Moolenaarenddef 163635bd608SBram Moolenaar 16436ae89c5SBram Moolenaarfunc Test_mksession_winheight() 16536ae89c5SBram Moolenaar new 1661c3c1049SBram Moolenaar set winheight=10 1671c3c1049SBram Moolenaar set winminheight=2 168c9b56b2cSBram Moolenaar mksession! Xtest_mks.out 169c9b56b2cSBram Moolenaar source Xtest_mks.out 17036ae89c5SBram Moolenaar 171c9b56b2cSBram Moolenaar call delete('Xtest_mks.out') 17236ae89c5SBram Moolenaarendfunc 17336ae89c5SBram Moolenaar 1741c3c1049SBram Moolenaarfunc Test_mksession_large_winheight() 1751c3c1049SBram Moolenaar set winheight=999 1761c3c1049SBram Moolenaar mksession! Xtest_mks_winheight.out 1771c3c1049SBram Moolenaar set winheight& 1781c3c1049SBram Moolenaar source Xtest_mks_winheight.out 1791c3c1049SBram Moolenaar call delete('Xtest_mks_winheight.out') 1801c3c1049SBram Moolenaarendfunc 1811c3c1049SBram Moolenaar 182b6c2e9a0SBram Moolenaarfunc Test_mksession_zero_winheight() 183b6c2e9a0SBram Moolenaar set winminheight=0 184b6c2e9a0SBram Moolenaar edit SomeFile 185b6c2e9a0SBram Moolenaar split 186b6c2e9a0SBram Moolenaar wincmd _ 187b6c2e9a0SBram Moolenaar mksession! Xtest_mks_zero 188b6c2e9a0SBram Moolenaar set winminheight& 189b6c2e9a0SBram Moolenaar let text = readfile('Xtest_mks_zero')->join() 1905f8ed740SDominique Pelle call delete('Xtest_mks_zero') 191b6c2e9a0SBram Moolenaar close 1925f8ed740SDominique Pelle " check there is no divide by zero 193b6c2e9a0SBram Moolenaar call assert_notmatch('/ 0[^0-9]', text) 194b6c2e9a0SBram Moolenaarendfunc 195b6c2e9a0SBram Moolenaar 196ed18f2c0SBram Moolenaarfunc Test_mksession_rtp() 1976d91bcb4SBram Moolenaar " TODO: fix problem with backslashes on Win32 1986d91bcb4SBram Moolenaar CheckNotMSWindows 1996d91bcb4SBram Moolenaar 200ed18f2c0SBram Moolenaar new 201ed18f2c0SBram Moolenaar let _rtp=&rtp 202ed18f2c0SBram Moolenaar " Make a real long (invalid) runtimepath value, 203ed18f2c0SBram Moolenaar " that should exceed PATH_MAX (hopefully) 204ed18f2c0SBram Moolenaar let newrtp=&rtp.',~'.repeat('/foobar', 1000) 205ed18f2c0SBram Moolenaar let newrtp.=",".expand("$HOME")."/.vim" 206ed18f2c0SBram Moolenaar let &rtp=newrtp 207ed18f2c0SBram Moolenaar 208ed18f2c0SBram Moolenaar " determine expected value 209ed18f2c0SBram Moolenaar let expected=split(&rtp, ',') 210ed18f2c0SBram Moolenaar let expected = map(expected, '"set runtimepath+=".v:val') 211ed18f2c0SBram Moolenaar let expected = ['set runtimepath='] + expected 212ed18f2c0SBram Moolenaar let expected = map(expected, {v,w -> substitute(w, $HOME, "~", "g")}) 213ed18f2c0SBram Moolenaar 214ed18f2c0SBram Moolenaar mksession! Xtest_mks.out 215ed18f2c0SBram Moolenaar let &rtp=_rtp 216ed18f2c0SBram Moolenaar let li = filter(readfile('Xtest_mks.out'), 'v:val =~# "runtimepath"') 217ed18f2c0SBram Moolenaar call assert_equal(expected, li) 218ed18f2c0SBram Moolenaar 219ed18f2c0SBram Moolenaar call delete('Xtest_mks.out') 220ed18f2c0SBram Moolenaarendfunc 221ed18f2c0SBram Moolenaar 22279da563cSBram Moolenaarfunc Test_mksession_arglist() 22366f0e6c6SBram Moolenaar %argdel 22479da563cSBram Moolenaar next file1 file2 file3 file4 225ee1a2b5aSBram Moolenaar new 226ee1a2b5aSBram Moolenaar next | next 22779da563cSBram Moolenaar mksession! Xtest_mks.out 22879da563cSBram Moolenaar source Xtest_mks.out 22979da563cSBram Moolenaar call assert_equal(['file1', 'file2', 'file3', 'file4'], argv()) 230ee1a2b5aSBram Moolenaar call assert_equal(2, argidx()) 231ee1a2b5aSBram Moolenaar wincmd w 232ee1a2b5aSBram Moolenaar call assert_equal(0, argidx()) 23379da563cSBram Moolenaar 23479da563cSBram Moolenaar call delete('Xtest_mks.out') 235ee1a2b5aSBram Moolenaar enew | only 23679da563cSBram Moolenaar argdel * 23779da563cSBram Moolenaarendfunc 23879da563cSBram Moolenaar 2394bebc9a0SBram Moolenaarfunc Test_mksession_one_buffer_two_windows() 2404bebc9a0SBram Moolenaar edit Xtest1 2414bebc9a0SBram Moolenaar new Xtest2 2424bebc9a0SBram Moolenaar split 2434bebc9a0SBram Moolenaar mksession! Xtest_mks.out 2444bebc9a0SBram Moolenaar let lines = readfile('Xtest_mks.out') 2454bebc9a0SBram Moolenaar let count1 = 0 2464bebc9a0SBram Moolenaar let count2 = 0 2474bebc9a0SBram Moolenaar let count2buf = 0 2484bebc9a0SBram Moolenaar for line in lines 2494bebc9a0SBram Moolenaar if line =~ 'edit \f*Xtest1$' 2504bebc9a0SBram Moolenaar let count1 += 1 2514bebc9a0SBram Moolenaar endif 2524bebc9a0SBram Moolenaar if line =~ 'edit \f\{-}Xtest2' 2534bebc9a0SBram Moolenaar let count2 += 1 2544bebc9a0SBram Moolenaar endif 2554bebc9a0SBram Moolenaar if line =~ 'buffer \f\{-}Xtest2' 2564bebc9a0SBram Moolenaar let count2buf += 1 2574bebc9a0SBram Moolenaar endif 2584bebc9a0SBram Moolenaar endfor 2594bebc9a0SBram Moolenaar call assert_equal(1, count1, 'Xtest1 count') 2604bebc9a0SBram Moolenaar call assert_equal(2, count2, 'Xtest2 count') 2614bebc9a0SBram Moolenaar call assert_equal(2, count2buf, 'Xtest2 buffer count') 2624bebc9a0SBram Moolenaar 2634bebc9a0SBram Moolenaar close 2644bebc9a0SBram Moolenaar bwipe! 2654bebc9a0SBram Moolenaar call delete('Xtest_mks.out') 2664bebc9a0SBram Moolenaarendfunc 2674bebc9a0SBram Moolenaar 26826d4b896SBram Moolenaarfunc Test_mksession_lcd_multiple_tabs() 26926d4b896SBram Moolenaar tabnew 27026d4b896SBram Moolenaar tabnew 27181e2ac7bSBram Moolenaar lcd . 27226d4b896SBram Moolenaar tabfirst 27381e2ac7bSBram Moolenaar lcd . 27426d4b896SBram Moolenaar mksession! Xtest_mks.out 27526d4b896SBram Moolenaar tabonly 27626d4b896SBram Moolenaar source Xtest_mks.out 27726d4b896SBram Moolenaar call assert_true(haslocaldir(), 'Tab 1 localdir') 27826d4b896SBram Moolenaar tabnext 2 27926d4b896SBram Moolenaar call assert_true(!haslocaldir(), 'Tab 2 localdir') 28026d4b896SBram Moolenaar tabnext 3 28126d4b896SBram Moolenaar call assert_true(haslocaldir(), 'Tab 3 localdir') 28226d4b896SBram Moolenaar call delete('Xtest_mks.out') 28326d4b896SBram Moolenaarendfunc 28426d4b896SBram Moolenaar 28500aa069dSBram Moolenaar" Test for tabpage-local directory 28600aa069dSBram Moolenaarfunc Test_mksession_tcd_multiple_tabs() 28700aa069dSBram Moolenaar let save_cwd = getcwd() 28800aa069dSBram Moolenaar call mkdir('Xtopdir') 28900aa069dSBram Moolenaar cd Xtopdir 29000aa069dSBram Moolenaar call mkdir('Xtabdir1') 29100aa069dSBram Moolenaar call mkdir('Xtabdir2') 29200aa069dSBram Moolenaar call mkdir('Xtabdir3') 29300aa069dSBram Moolenaar call mkdir('Xwindir1') 29400aa069dSBram Moolenaar call mkdir('Xwindir2') 29500aa069dSBram Moolenaar call mkdir('Xwindir3') 29600aa069dSBram Moolenaar tcd Xtabdir1 29700aa069dSBram Moolenaar botright new 29800aa069dSBram Moolenaar wincmd t 29900aa069dSBram Moolenaar lcd ../Xwindir1 30000aa069dSBram Moolenaar tabnew 30100aa069dSBram Moolenaar tcd ../Xtabdir2 30200aa069dSBram Moolenaar botright new 30300aa069dSBram Moolenaar lcd ../Xwindir2 30400aa069dSBram Moolenaar tabnew 30500aa069dSBram Moolenaar tcd ../Xtabdir3 30600aa069dSBram Moolenaar botright new 30700aa069dSBram Moolenaar lcd ../Xwindir3 30800aa069dSBram Moolenaar tabfirst 30900aa069dSBram Moolenaar 1wincmd w 31000aa069dSBram Moolenaar mksession! Xtest_mks.out 31100aa069dSBram Moolenaar only | tabonly 31200aa069dSBram Moolenaar source Xtest_mks.out 31300aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 1), ':t')) 31400aa069dSBram Moolenaar call assert_equal('Xwindir1', fnamemodify(getcwd(1, 1), ':t')) 31500aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(2, 1), ':t')) 31600aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 2), ':t')) 31700aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(1, 2), ':t')) 31800aa069dSBram Moolenaar call assert_equal('Xwindir2', fnamemodify(getcwd(2, 2), ':t')) 31900aa069dSBram Moolenaar call assert_equal('Xtabdir3', fnamemodify(getcwd(-1, 3), ':t')) 32000aa069dSBram Moolenaar call assert_equal('Xtabdir3', fnamemodify(getcwd(1, 3), ':t')) 32100aa069dSBram Moolenaar call assert_equal('Xwindir3', fnamemodify(getcwd(2, 3), ':t')) 3225bf46e97SBram Moolenaar %bwipe 3235bf46e97SBram Moolenaar call chdir(save_cwd) 32400aa069dSBram Moolenaar call delete("Xtopdir", "rf") 32500aa069dSBram Moolenaarendfunc 32600aa069dSBram Moolenaar 32726d4b896SBram Moolenaarfunc Test_mksession_blank_tabs() 32826d4b896SBram Moolenaar tabnew 32926d4b896SBram Moolenaar tabnew 33026d4b896SBram Moolenaar tabnew 33126d4b896SBram Moolenaar tabnext 3 33226d4b896SBram Moolenaar mksession! Xtest_mks.out 33326d4b896SBram Moolenaar tabnew 33426d4b896SBram Moolenaar tabnew 33526d4b896SBram Moolenaar tabnext 2 33626d4b896SBram Moolenaar source Xtest_mks.out 33726d4b896SBram Moolenaar call assert_equal(4, tabpagenr('$'), 'session restore should restore number of tabs') 33826d4b896SBram Moolenaar call assert_equal(3, tabpagenr(), 'session restore should restore the active tab') 33926d4b896SBram Moolenaar call delete('Xtest_mks.out') 34026d4b896SBram Moolenaarendfunc 34126d4b896SBram Moolenaar 342d39e275bSBram Moolenaarfunc Test_mksession_buffer_count() 343d39e275bSBram Moolenaar set hidden 344d39e275bSBram Moolenaar 345d39e275bSBram Moolenaar " Edit exactly three files in the current session. 346d39e275bSBram Moolenaar %bwipe! 347d39e275bSBram Moolenaar e Xfoo | tabe Xbar | tabe Xbaz 348d39e275bSBram Moolenaar tabdo write 349d39e275bSBram Moolenaar mksession! Xtest_mks.out 350d39e275bSBram Moolenaar 351d39e275bSBram Moolenaar " Verify that loading the session does not create additional buffers. 352d39e275bSBram Moolenaar %bwipe! 353d39e275bSBram Moolenaar source Xtest_mks.out 354d39e275bSBram Moolenaar call assert_equal(3, len(getbufinfo())) 355d39e275bSBram Moolenaar 356d39e275bSBram Moolenaar " Clean up. 357d39e275bSBram Moolenaar call delete('Xfoo') 358d39e275bSBram Moolenaar call delete('Xbar') 359d39e275bSBram Moolenaar call delete('Xbaz') 360d39e275bSBram Moolenaar call delete('Xtest_mks.out') 361d39e275bSBram Moolenaar %bwipe! 362d39e275bSBram Moolenaar set hidden& 363d39e275bSBram Moolenaarendfunc 364d39e275bSBram Moolenaar 365e3c74d24SBram Moolenaarif has('extra_search') 366e3c74d24SBram Moolenaar 367e3c74d24SBram Moolenaarfunc Test_mksession_hlsearch() 368e3c74d24SBram Moolenaar set hlsearch 369e3c74d24SBram Moolenaar mksession! Xtest_mks.out 370e3c74d24SBram Moolenaar nohlsearch 371e3c74d24SBram Moolenaar source Xtest_mks.out 372e3c74d24SBram Moolenaar call assert_equal(1, v:hlsearch, 'session should restore search highlighting state') 373e3c74d24SBram Moolenaar nohlsearch 374e3c74d24SBram Moolenaar mksession! Xtest_mks.out 375e3c74d24SBram Moolenaar source Xtest_mks.out 376e3c74d24SBram Moolenaar call assert_equal(0, v:hlsearch, 'session should restore search highlighting state') 377e3c74d24SBram Moolenaar call delete('Xtest_mks.out') 378e3c74d24SBram Moolenaarendfunc 379e3c74d24SBram Moolenaar 380e3c74d24SBram Moolenaarendif 381e3c74d24SBram Moolenaar 382e3c74d24SBram Moolenaar 38326d4b896SBram Moolenaarfunc Test_mksession_blank_windows() 38426d4b896SBram Moolenaar split 38526d4b896SBram Moolenaar split 38626d4b896SBram Moolenaar split 38726d4b896SBram Moolenaar 3 wincmd w 38826d4b896SBram Moolenaar mksession! Xtest_mks.out 38926d4b896SBram Moolenaar split 39026d4b896SBram Moolenaar split 39126d4b896SBram Moolenaar 2 wincmd w 39226d4b896SBram Moolenaar source Xtest_mks.out 39326d4b896SBram Moolenaar call assert_equal(4, winnr('$'), 'session restore should restore number of windows') 39426d4b896SBram Moolenaar call assert_equal(3, winnr(), 'session restore should restore the active window') 39526d4b896SBram Moolenaar call delete('Xtest_mks.out') 39626d4b896SBram Moolenaarendfunc 39726d4b896SBram Moolenaar 3984d8bac8bSBram Moolenaarfunc Test_mksession_terminal_shell() 399c2c82056SBram Moolenaar CheckFeature terminal 4005a4c3082SBram Moolenaar CheckFeature quickfix 4015a4c3082SBram Moolenaar 4024d8bac8bSBram Moolenaar terminal 4034d8bac8bSBram Moolenaar mksession! Xtest_mks.out 4044d8bac8bSBram Moolenaar let lines = readfile('Xtest_mks.out') 4054d8bac8bSBram Moolenaar let term_cmd = '' 4064d8bac8bSBram Moolenaar for line in lines 4074d8bac8bSBram Moolenaar if line =~ '^terminal' 4084d8bac8bSBram Moolenaar let term_cmd = line 4094d8bac8bSBram Moolenaar elseif line =~ 'badd.*' . &shell 4104d8bac8bSBram Moolenaar call assert_report('unexpected shell line: ' . line) 4114d8bac8bSBram Moolenaar endif 4124d8bac8bSBram Moolenaar endfor 413aa5df7e3SBram Moolenaar call assert_match('terminal ++curwin ++cols=\d\+ ++rows=\d\+\s*.*$', term_cmd) 4144d8bac8bSBram Moolenaar 4157a39dd7fSBram Moolenaar call StopShellInTerminal(bufnr('%')) 4164d8bac8bSBram Moolenaar call delete('Xtest_mks.out') 4174d8bac8bSBram Moolenaarendfunc 4184d8bac8bSBram Moolenaar 4194d8bac8bSBram Moolenaarfunc Test_mksession_terminal_no_restore_cmdarg() 420c2c82056SBram Moolenaar CheckFeature terminal 421c2c82056SBram Moolenaar 4224d8bac8bSBram Moolenaar terminal ++norestore 4234d8bac8bSBram Moolenaar mksession! Xtest_mks.out 4244d8bac8bSBram Moolenaar let lines = readfile('Xtest_mks.out') 4254d8bac8bSBram Moolenaar let term_cmd = '' 4264d8bac8bSBram Moolenaar for line in lines 4274d8bac8bSBram Moolenaar if line =~ '^terminal' 428ac665c24SBram Moolenaar call assert_report('session must not restore terminal') 4294d8bac8bSBram Moolenaar endif 4304d8bac8bSBram Moolenaar endfor 4314d8bac8bSBram Moolenaar 4327a39dd7fSBram Moolenaar call StopShellInTerminal(bufnr('%')) 4334d8bac8bSBram Moolenaar call delete('Xtest_mks.out') 4344d8bac8bSBram Moolenaarendfunc 4354d8bac8bSBram Moolenaar 4364d8bac8bSBram Moolenaarfunc Test_mksession_terminal_no_restore_funcarg() 437c2c82056SBram Moolenaar CheckFeature terminal 438c2c82056SBram Moolenaar 4393a6aadb3SBram Moolenaar let buf = Run_shell_in_terminal({'norestore': 1}) 4404d8bac8bSBram Moolenaar mksession! Xtest_mks.out 4414d8bac8bSBram Moolenaar let lines = readfile('Xtest_mks.out') 4424d8bac8bSBram Moolenaar let term_cmd = '' 4434d8bac8bSBram Moolenaar for line in lines 4444d8bac8bSBram Moolenaar if line =~ '^terminal' 445ac665c24SBram Moolenaar call assert_report('session must not restore terminal') 4464d8bac8bSBram Moolenaar endif 4474d8bac8bSBram Moolenaar endfor 4484d8bac8bSBram Moolenaar 4493a6aadb3SBram Moolenaar call StopShellInTerminal(buf) 4504d8bac8bSBram Moolenaar call delete('Xtest_mks.out') 4514d8bac8bSBram Moolenaarendfunc 4524d8bac8bSBram Moolenaar 4534d8bac8bSBram Moolenaarfunc Test_mksession_terminal_no_restore_func() 454c2c82056SBram Moolenaar CheckFeature terminal 455c2c82056SBram Moolenaar 4564d8bac8bSBram Moolenaar terminal 4574d8bac8bSBram Moolenaar call term_setrestore(bufnr('%'), 'NONE') 4584d8bac8bSBram Moolenaar mksession! Xtest_mks.out 4594d8bac8bSBram Moolenaar let lines = readfile('Xtest_mks.out') 4604d8bac8bSBram Moolenaar let term_cmd = '' 4614d8bac8bSBram Moolenaar for line in lines 4624d8bac8bSBram Moolenaar if line =~ '^terminal' 463ac665c24SBram Moolenaar call assert_report('session must not restore terminal') 4644d8bac8bSBram Moolenaar endif 4654d8bac8bSBram Moolenaar endfor 4664d8bac8bSBram Moolenaar 4677a39dd7fSBram Moolenaar call StopShellInTerminal(bufnr('%')) 4684d8bac8bSBram Moolenaar call delete('Xtest_mks.out') 4694d8bac8bSBram Moolenaarendfunc 4704d8bac8bSBram Moolenaar 4714d8bac8bSBram Moolenaarfunc Test_mksession_terminal_no_ssop() 472c2c82056SBram Moolenaar CheckFeature terminal 473c2c82056SBram Moolenaar 4744d8bac8bSBram Moolenaar terminal 4754d8bac8bSBram Moolenaar set sessionoptions-=terminal 4764d8bac8bSBram Moolenaar mksession! Xtest_mks.out 4774d8bac8bSBram Moolenaar let lines = readfile('Xtest_mks.out') 4784d8bac8bSBram Moolenaar let term_cmd = '' 4794d8bac8bSBram Moolenaar for line in lines 4804d8bac8bSBram Moolenaar if line =~ '^terminal' 481ac665c24SBram Moolenaar call assert_report('session must not restore terminal') 4824d8bac8bSBram Moolenaar endif 4834d8bac8bSBram Moolenaar endfor 4844d8bac8bSBram Moolenaar 4857a39dd7fSBram Moolenaar call StopShellInTerminal(bufnr('%')) 4864d8bac8bSBram Moolenaar call delete('Xtest_mks.out') 4874d8bac8bSBram Moolenaar set sessionoptions& 4884d8bac8bSBram Moolenaarendfunc 4894d8bac8bSBram Moolenaar 4904d8bac8bSBram Moolenaarfunc Test_mksession_terminal_restore_other() 491c2c82056SBram Moolenaar CheckFeature terminal 4925a4c3082SBram Moolenaar CheckFeature quickfix 4935a4c3082SBram Moolenaar 4944d8bac8bSBram Moolenaar terminal 4957ee80f76SBram Moolenaar eval bufnr('%')->term_setrestore('other') 4964d8bac8bSBram Moolenaar mksession! Xtest_mks.out 4974d8bac8bSBram Moolenaar let lines = readfile('Xtest_mks.out') 4984d8bac8bSBram Moolenaar let term_cmd = '' 4994d8bac8bSBram Moolenaar for line in lines 5004d8bac8bSBram Moolenaar if line =~ '^terminal' 5014d8bac8bSBram Moolenaar let term_cmd = line 5024d8bac8bSBram Moolenaar endif 5034d8bac8bSBram Moolenaar endfor 504aa5df7e3SBram Moolenaar call assert_match('terminal ++curwin ++cols=\d\+ ++rows=\d\+.*other', term_cmd) 5054d8bac8bSBram Moolenaar 5067a39dd7fSBram Moolenaar call StopShellInTerminal(bufnr('%')) 5074d8bac8bSBram Moolenaar call delete('Xtest_mks.out') 5084d8bac8bSBram Moolenaarendfunc 5094d8bac8bSBram Moolenaar 5100e655111SBram Moolenaarfunc Test_mksession_terminal_shared_windows() 511c2c82056SBram Moolenaar CheckFeature terminal 512c2c82056SBram Moolenaar 5130e655111SBram Moolenaar terminal 5140e655111SBram Moolenaar let term_buf = bufnr() 5150e655111SBram Moolenaar new 5160e655111SBram Moolenaar execute "buffer" term_buf 5170e655111SBram Moolenaar mksession! Xtest_mks.out 5180e655111SBram Moolenaar 5190e655111SBram Moolenaar let lines = readfile('Xtest_mks.out') 5200e655111SBram Moolenaar let found_creation = 0 5210e655111SBram Moolenaar let found_use = 0 5220e655111SBram Moolenaar 5230e655111SBram Moolenaar for line in lines 5240e655111SBram Moolenaar if line =~ '^terminal' 5250e655111SBram Moolenaar let found_creation = 1 5260e655111SBram Moolenaar call assert_match('terminal ++curwin ++cols=\d\+ ++rows=\d\+', line) 5270e655111SBram Moolenaar elseif line =~ "^execute 'buffer ' . s:term_buf_" . term_buf . "$" 5280e655111SBram Moolenaar let found_use = 1 5290e655111SBram Moolenaar endif 5300e655111SBram Moolenaar endfor 5310e655111SBram Moolenaar 5320e655111SBram Moolenaar call assert_true(found_creation && found_use) 5330e655111SBram Moolenaar 5340e655111SBram Moolenaar call StopShellInTerminal(term_buf) 5350e655111SBram Moolenaar call delete('Xtest_mks.out') 5360e655111SBram Moolenaarendfunc 5370e655111SBram Moolenaar 538c2c82056SBram Moolenaarfunc Test_mkview_terminal_windows() 539c2c82056SBram Moolenaar CheckFeature terminal 540c2c82056SBram Moolenaar 541c2c82056SBram Moolenaar " create two window on the same terminal to check this is handled OK 542c2c82056SBram Moolenaar terminal 543c2c82056SBram Moolenaar let term_buf = bufnr() 544c2c82056SBram Moolenaar exe 'sbuf ' .. term_buf 545c2c82056SBram Moolenaar mkview! Xtestview 546c2c82056SBram Moolenaar 547c2c82056SBram Moolenaar call StopShellInTerminal(term_buf) 548c2c82056SBram Moolenaar call delete('Xtestview') 549c2c82056SBram Moolenaarendfunc 5504bebc9a0SBram Moolenaar 551f9547eb6SBram Moolenaarfunc Test_mkview_open_folds() 552f9547eb6SBram Moolenaar enew! 553f9547eb6SBram Moolenaar 554f9547eb6SBram Moolenaar call append(0, ['a', 'b', 'c']) 555f9547eb6SBram Moolenaar 1,3fold 556f9547eb6SBram Moolenaar " zR affects 'foldlevel', make sure the option is applied after the folds 557f9547eb6SBram Moolenaar " have been recreated. 558f9547eb6SBram Moolenaar normal zR 559f9547eb6SBram Moolenaar write! Xtestfile 560f9547eb6SBram Moolenaar 561f9547eb6SBram Moolenaar call assert_equal(-1, foldclosed(1)) 562f9547eb6SBram Moolenaar call assert_equal(-1, foldclosed(2)) 563f9547eb6SBram Moolenaar call assert_equal(-1, foldclosed(3)) 564f9547eb6SBram Moolenaar 565f9547eb6SBram Moolenaar mkview! Xtestview 566f9547eb6SBram Moolenaar source Xtestview 567f9547eb6SBram Moolenaar 568f9547eb6SBram Moolenaar call assert_equal(-1, foldclosed(1)) 569f9547eb6SBram Moolenaar call assert_equal(-1, foldclosed(2)) 570f9547eb6SBram Moolenaar call assert_equal(-1, foldclosed(3)) 571f9547eb6SBram Moolenaar 572f9547eb6SBram Moolenaar call delete('Xtestview') 573f9547eb6SBram Moolenaar call delete('Xtestfile') 574f9547eb6SBram Moolenaar %bwipe 575f9547eb6SBram Moolenaarendfunc 576f9547eb6SBram Moolenaar 577139348f3SBram Moolenaarfunc Test_mkview_no_balt() 578139348f3SBram Moolenaar edit Xtestfile1 579139348f3SBram Moolenaar edit Xtestfile2 580139348f3SBram Moolenaar 581139348f3SBram Moolenaar mkview! Xtestview 582139348f3SBram Moolenaar bdelete Xtestfile1 583139348f3SBram Moolenaar 584139348f3SBram Moolenaar source Xtestview 585139348f3SBram Moolenaar call assert_equal(0, buflisted('Xtestfile1')) 586139348f3SBram Moolenaar 587139348f3SBram Moolenaar call delete('Xtestview') 588139348f3SBram Moolenaar %bwipe 589139348f3SBram Moolenaarendfunc 590139348f3SBram Moolenaar 5910756f757SBram Moolenaarfunc Test_mksession_no_balt() 5920756f757SBram Moolenaar edit Xtestfile1 5930756f757SBram Moolenaar edit Xtestfile2 5940756f757SBram Moolenaar 5950756f757SBram Moolenaar bdelete Xtestfile1 5960756f757SBram Moolenaar mksession! Xtestview 5970756f757SBram Moolenaar 5980756f757SBram Moolenaar source Xtestview 5990756f757SBram Moolenaar call assert_equal(0, buflisted('Xtestfile1')) 6000756f757SBram Moolenaar 6010756f757SBram Moolenaar call delete('Xtestview') 6020756f757SBram Moolenaar %bwipe 6030756f757SBram Moolenaarendfunc 6040756f757SBram Moolenaar 605627cb6a6SBram Moolenaar" Test :mkview with a file argument. 606627cb6a6SBram Moolenaarfunc Test_mkview_file() 607627cb6a6SBram Moolenaar " Create a view with line number and a fold. 608627cb6a6SBram Moolenaar help :mkview 609627cb6a6SBram Moolenaar set number 6102bf4fe07SBram Moolenaar norm! V}zf0 611dd5d18eaSBram Moolenaar let pos = getpos('.') 612627cb6a6SBram Moolenaar let linefoldclosed1 = foldclosed('.') 613627cb6a6SBram Moolenaar mkview! Xview 614627cb6a6SBram Moolenaar set nonumber 615627cb6a6SBram Moolenaar norm! zrj 616627cb6a6SBram Moolenaar " We can close the help window, as mkview with a file name should 617627cb6a6SBram Moolenaar " generate a command to edit the file. 618627cb6a6SBram Moolenaar helpclose 619627cb6a6SBram Moolenaar 620627cb6a6SBram Moolenaar source Xview 621627cb6a6SBram Moolenaar call assert_equal(1, &number) 622627cb6a6SBram Moolenaar call assert_match('\*:mkview\*$', getline('.')) 623dd5d18eaSBram Moolenaar call assert_equal(pos, getpos('.')) 624627cb6a6SBram Moolenaar call assert_equal(linefoldclosed1, foldclosed('.')) 625627cb6a6SBram Moolenaar 626627cb6a6SBram Moolenaar " Creating a view again with the same file name should fail (file 627627cb6a6SBram Moolenaar " already exists). But with a !, the previous view should be 628627cb6a6SBram Moolenaar " overwritten without error. 629627cb6a6SBram Moolenaar help :loadview 630627cb6a6SBram Moolenaar call assert_fails('mkview Xview', 'E189:') 631627cb6a6SBram Moolenaar call assert_match('\*:loadview\*$', getline('.')) 632627cb6a6SBram Moolenaar mkview! Xview 633627cb6a6SBram Moolenaar call assert_match('\*:loadview\*$', getline('.')) 634627cb6a6SBram Moolenaar 635627cb6a6SBram Moolenaar call delete('Xview') 636627cb6a6SBram Moolenaar bwipe 637627cb6a6SBram Moolenaarendfunc 638627cb6a6SBram Moolenaar 639627cb6a6SBram Moolenaar" Test :mkview and :loadview with a custom 'viewdir'. 640627cb6a6SBram Moolenaarfunc Test_mkview_loadview_with_viewdir() 641627cb6a6SBram Moolenaar set viewdir=Xviewdir 642627cb6a6SBram Moolenaar 643627cb6a6SBram Moolenaar help :mkview 644627cb6a6SBram Moolenaar set number 645627cb6a6SBram Moolenaar norm! V}zf 646dd5d18eaSBram Moolenaar let pos = getpos('.') 647627cb6a6SBram Moolenaar let linefoldclosed1 = foldclosed('.') 648627cb6a6SBram Moolenaar mkview 1 649627cb6a6SBram Moolenaar set nonumber 650627cb6a6SBram Moolenaar norm! zrj 651627cb6a6SBram Moolenaar 652627cb6a6SBram Moolenaar loadview 1 653627cb6a6SBram Moolenaar 654627cb6a6SBram Moolenaar " The directory Xviewdir/ should have been created and the view 655627cb6a6SBram Moolenaar " should be stored in that directory. 656627cb6a6SBram Moolenaar call assert_equal('Xviewdir/' . 657627cb6a6SBram Moolenaar \ substitute( 658627cb6a6SBram Moolenaar \ substitute( 659627cb6a6SBram Moolenaar \ expand('%:p'), '/', '=+', 'g'), ':', '=-', 'g') . '=1.vim', 660627cb6a6SBram Moolenaar \ glob('Xviewdir/*')) 661627cb6a6SBram Moolenaar call assert_equal(1, &number) 662627cb6a6SBram Moolenaar call assert_match('\*:mkview\*$', getline('.')) 663dd5d18eaSBram Moolenaar call assert_equal(pos, getpos('.')) 664627cb6a6SBram Moolenaar call assert_equal(linefoldclosed1, foldclosed('.')) 665627cb6a6SBram Moolenaar 666627cb6a6SBram Moolenaar call delete('Xviewdir', 'rf') 667627cb6a6SBram Moolenaar set viewdir& 668627cb6a6SBram Moolenaar helpclose 669627cb6a6SBram Moolenaarendfunc 670627cb6a6SBram Moolenaar 671627cb6a6SBram Moolenaarfunc Test_mkview_no_file_name() 672627cb6a6SBram Moolenaar new 673627cb6a6SBram Moolenaar " :mkview or :mkview {nr} should fail in a unnamed buffer. 674627cb6a6SBram Moolenaar call assert_fails('mkview', 'E32:') 675627cb6a6SBram Moolenaar call assert_fails('mkview 1', 'E32:') 676627cb6a6SBram Moolenaar 677627cb6a6SBram Moolenaar " :mkview {file} should succeed in a unnamed buffer. 678627cb6a6SBram Moolenaar mkview Xview 679627cb6a6SBram Moolenaar help 680627cb6a6SBram Moolenaar source Xview 681627cb6a6SBram Moolenaar call assert_equal('', bufname('%')) 682627cb6a6SBram Moolenaar 683627cb6a6SBram Moolenaar call delete('Xview') 684627cb6a6SBram Moolenaar %bwipe 685627cb6a6SBram Moolenaarendfunc 68679da563cSBram Moolenaar 6873482be6aSBram Moolenaarfunc Test_mkview_loadview_jumplist() 6883482be6aSBram Moolenaar set viewdir=Xviewdir 6893482be6aSBram Moolenaar au BufWinLeave * silent mkview 6903482be6aSBram Moolenaar au BufWinEnter * silent loadview 6913482be6aSBram Moolenaar 6923482be6aSBram Moolenaar edit Xfile1 6933482be6aSBram Moolenaar call setline(1, ['a', 'bbbbbbb', 'c']) 6943482be6aSBram Moolenaar normal j3l 6953482be6aSBram Moolenaar call assert_equal([2, 4], getcurpos()[1:2]) 6963482be6aSBram Moolenaar write 6973482be6aSBram Moolenaar 6983482be6aSBram Moolenaar edit Xfile2 6993482be6aSBram Moolenaar call setline(1, ['d', 'eeeeeee', 'f']) 7003482be6aSBram Moolenaar normal j5l 7013482be6aSBram Moolenaar call assert_equal([2, 6], getcurpos()[1:2]) 7023482be6aSBram Moolenaar write 7033482be6aSBram Moolenaar 7043482be6aSBram Moolenaar edit Xfile3 7053482be6aSBram Moolenaar call setline(1, ['g', 'h', 'iiiii']) 7063482be6aSBram Moolenaar normal jj3l 7073482be6aSBram Moolenaar call assert_equal([3, 4], getcurpos()[1:2]) 7083482be6aSBram Moolenaar write 7093482be6aSBram Moolenaar 7103482be6aSBram Moolenaar edit Xfile1 7113482be6aSBram Moolenaar call assert_equal([2, 4], getcurpos()[1:2]) 7123482be6aSBram Moolenaar edit Xfile2 7133482be6aSBram Moolenaar call assert_equal([2, 6], getcurpos()[1:2]) 7143482be6aSBram Moolenaar edit Xfile3 7153482be6aSBram Moolenaar call assert_equal([3, 4], getcurpos()[1:2]) 7163482be6aSBram Moolenaar 7173482be6aSBram Moolenaar exe "normal \<C-O>" 7183482be6aSBram Moolenaar call assert_equal('Xfile2', expand('%')) 7193482be6aSBram Moolenaar call assert_equal([2, 6], getcurpos()[1:2]) 7203482be6aSBram Moolenaar exe "normal \<C-O>" 7213482be6aSBram Moolenaar call assert_equal('Xfile1', expand('%')) 7223482be6aSBram Moolenaar call assert_equal([2, 4], getcurpos()[1:2]) 7233482be6aSBram Moolenaar 7243482be6aSBram Moolenaar au! BufWinLeave 7253482be6aSBram Moolenaar au! BufWinEnter 7263482be6aSBram Moolenaar bwipe! 7273482be6aSBram Moolenaar call delete('Xviewdir', 'rf') 7283482be6aSBram Moolenaar call delete('Xfile1') 7293482be6aSBram Moolenaar call delete('Xfile2') 7303482be6aSBram Moolenaar call delete('Xfile3') 7313482be6aSBram Moolenaar set viewdir& 7323482be6aSBram Moolenaarendfunc 7333482be6aSBram Moolenaar 734555de4e3SBram Moolenaar" A clean session (one empty buffer, one window, and one tab) should not 735555de4e3SBram Moolenaar" set any error messages when sourced because no commands should fail. 736555de4e3SBram Moolenaarfunc Test_mksession_no_errmsg() 737555de4e3SBram Moolenaar let v:errmsg = '' 738555de4e3SBram Moolenaar %bwipe! 739555de4e3SBram Moolenaar mksession! Xtest_mks.out 740555de4e3SBram Moolenaar source Xtest_mks.out 741555de4e3SBram Moolenaar call assert_equal('', v:errmsg) 742555de4e3SBram Moolenaar call delete('Xtest_mks.out') 743555de4e3SBram Moolenaarendfunc 744555de4e3SBram Moolenaar 745ad36a358SBram Moolenaarfunc Test_mksession_quote_in_filename() 7469e79ccbeSBram Moolenaar " only Unix can handle this weird filename 7476d91bcb4SBram Moolenaar CheckUnix 7486d91bcb4SBram Moolenaar 749ad36a358SBram Moolenaar let v:errmsg = '' 750ad36a358SBram Moolenaar %bwipe! 751ad36a358SBram Moolenaar split another 752ad36a358SBram Moolenaar split x'y\"z 753ad36a358SBram Moolenaar mksession! Xtest_mks_quoted.out 754ad36a358SBram Moolenaar %bwipe! 755ad36a358SBram Moolenaar source Xtest_mks_quoted.out 756ad36a358SBram Moolenaar call assert_true(bufexists("x'y\"z")) 757ad36a358SBram Moolenaar 758ad36a358SBram Moolenaar %bwipe! 759ad36a358SBram Moolenaar call delete('Xtest_mks_quoted.out') 760ad36a358SBram Moolenaarendfunc 761ad36a358SBram Moolenaar 76266f0e6c6SBram Moolenaar" Test for storing global variables in a session file 76366f0e6c6SBram Moolenaarfunc Test_mksession_globals() 76466f0e6c6SBram Moolenaar set sessionoptions+=globals 76566f0e6c6SBram Moolenaar 76666f0e6c6SBram Moolenaar " create different global variables 767ee1a2b5aSBram Moolenaar let g:Global_string = "Sun is shining\r\n" 76866f0e6c6SBram Moolenaar let g:Global_count = 100 76966f0e6c6SBram Moolenaar let g:Global_pi = 3.14 770ee1a2b5aSBram Moolenaar let g:Global_neg_float = -2.68 77166f0e6c6SBram Moolenaar 77266f0e6c6SBram Moolenaar mksession! Xtest_mks.out 77366f0e6c6SBram Moolenaar 77466f0e6c6SBram Moolenaar unlet g:Global_string 77566f0e6c6SBram Moolenaar unlet g:Global_count 77666f0e6c6SBram Moolenaar unlet g:Global_pi 777ee1a2b5aSBram Moolenaar unlet g:Global_neg_float 77866f0e6c6SBram Moolenaar 77966f0e6c6SBram Moolenaar source Xtest_mks.out 780ee1a2b5aSBram Moolenaar call assert_equal("Sun is shining\r\n", g:Global_string) 78166f0e6c6SBram Moolenaar call assert_equal(100, g:Global_count) 78266f0e6c6SBram Moolenaar call assert_equal(3.14, g:Global_pi) 783ee1a2b5aSBram Moolenaar call assert_equal(-2.68, g:Global_neg_float) 78466f0e6c6SBram Moolenaar 78566f0e6c6SBram Moolenaar unlet g:Global_string 78666f0e6c6SBram Moolenaar unlet g:Global_count 78766f0e6c6SBram Moolenaar unlet g:Global_pi 788ee1a2b5aSBram Moolenaar unlet g:Global_neg_float 78966f0e6c6SBram Moolenaar call delete('Xtest_mks.out') 79066f0e6c6SBram Moolenaar set sessionoptions& 79166f0e6c6SBram Moolenaarendfunc 79266f0e6c6SBram Moolenaar 79366f0e6c6SBram Moolenaar" Test for changing backslash to forward slash in filenames 79466f0e6c6SBram Moolenaarfunc Test_mksession_slash() 79537ac4a53SBram Moolenaar if exists('+shellslash') 79637ac4a53SBram Moolenaar throw 'Skipped: cannot use backslash in file name' 79737ac4a53SBram Moolenaar endif 79866f0e6c6SBram Moolenaar enew 79966f0e6c6SBram Moolenaar %bwipe! 80066f0e6c6SBram Moolenaar e a\\b\\c 80166f0e6c6SBram Moolenaar mksession! Xtest_mks1.out 80266f0e6c6SBram Moolenaar set sessionoptions+=slash 80366f0e6c6SBram Moolenaar mksession! Xtest_mks2.out 80466f0e6c6SBram Moolenaar 80566f0e6c6SBram Moolenaar %bwipe! 80666f0e6c6SBram Moolenaar source Xtest_mks1.out 80766f0e6c6SBram Moolenaar call assert_equal('a\b\c', bufname('')) 80866f0e6c6SBram Moolenaar %bwipe! 80966f0e6c6SBram Moolenaar source Xtest_mks2.out 81066f0e6c6SBram Moolenaar call assert_equal('a/b/c', bufname('')) 81166f0e6c6SBram Moolenaar 81266f0e6c6SBram Moolenaar %bwipe! 81366f0e6c6SBram Moolenaar call delete('Xtest_mks1.out') 81466f0e6c6SBram Moolenaar call delete('Xtest_mks2.out') 81566f0e6c6SBram Moolenaar set sessionoptions& 81666f0e6c6SBram Moolenaarendfunc 81766f0e6c6SBram Moolenaar 81866f0e6c6SBram Moolenaar" Test for changing directory to the session file directory 81966f0e6c6SBram Moolenaarfunc Test_mksession_sesdir() 8205bf46e97SBram Moolenaar let save_cwd = getcwd() 82166f0e6c6SBram Moolenaar call mkdir('Xproj') 82266f0e6c6SBram Moolenaar mksession! Xproj/Xtest_mks1.out 82366f0e6c6SBram Moolenaar set sessionoptions-=curdir 82466f0e6c6SBram Moolenaar set sessionoptions+=sesdir 82566f0e6c6SBram Moolenaar mksession! Xproj/Xtest_mks2.out 82666f0e6c6SBram Moolenaar 82766f0e6c6SBram Moolenaar source Xproj/Xtest_mks1.out 82866f0e6c6SBram Moolenaar call assert_equal('testdir', fnamemodify(getcwd(), ':t')) 82966f0e6c6SBram Moolenaar source Xproj/Xtest_mks2.out 83066f0e6c6SBram Moolenaar call assert_equal('Xproj', fnamemodify(getcwd(), ':t')) 8315bf46e97SBram Moolenaar call chdir(save_cwd) 8325bf46e97SBram Moolenaar %bwipe 83366f0e6c6SBram Moolenaar 83466f0e6c6SBram Moolenaar set sessionoptions& 83566f0e6c6SBram Moolenaar call delete('Xproj', 'rf') 83666f0e6c6SBram Moolenaarendfunc 83766f0e6c6SBram Moolenaar 83866f0e6c6SBram Moolenaar" Test for storing the 'lines' and 'columns' settings 83966f0e6c6SBram Moolenaarfunc Test_mksession_resize() 84066f0e6c6SBram Moolenaar mksession! Xtest_mks1.out 84166f0e6c6SBram Moolenaar set sessionoptions+=resize 84266f0e6c6SBram Moolenaar mksession! Xtest_mks2.out 84366f0e6c6SBram Moolenaar 84466f0e6c6SBram Moolenaar let lines = readfile('Xtest_mks1.out') 84566f0e6c6SBram Moolenaar let found_resize = v:false 84666f0e6c6SBram Moolenaar for line in lines 84766f0e6c6SBram Moolenaar if line =~ '^set lines=' 84866f0e6c6SBram Moolenaar let found_resize = v:true 849ee1a2b5aSBram Moolenaar break 85066f0e6c6SBram Moolenaar endif 85166f0e6c6SBram Moolenaar endfor 852ee1a2b5aSBram Moolenaar call assert_false(found_resize) 85366f0e6c6SBram Moolenaar let lines = readfile('Xtest_mks2.out') 85466f0e6c6SBram Moolenaar let found_resize = v:false 85566f0e6c6SBram Moolenaar for line in lines 85666f0e6c6SBram Moolenaar if line =~ '^set lines=' 85766f0e6c6SBram Moolenaar let found_resize = v:true 858ee1a2b5aSBram Moolenaar break 85966f0e6c6SBram Moolenaar endif 86066f0e6c6SBram Moolenaar endfor 861ee1a2b5aSBram Moolenaar call assert_true(found_resize) 86266f0e6c6SBram Moolenaar 86366f0e6c6SBram Moolenaar call delete('Xtest_mks1.out') 86466f0e6c6SBram Moolenaar call delete('Xtest_mks2.out') 86566f0e6c6SBram Moolenaar set sessionoptions& 86666f0e6c6SBram Moolenaarendfunc 86766f0e6c6SBram Moolenaar 868ee1a2b5aSBram Moolenaar" Test for mksession with a named scratch buffer 869ee1a2b5aSBram Moolenaarfunc Test_mksession_scratch() 870ee1a2b5aSBram Moolenaar enew | only 871ee1a2b5aSBram Moolenaar file Xscratch 872ee1a2b5aSBram Moolenaar set buftype=nofile 873ee1a2b5aSBram Moolenaar mksession! Xtest_mks.out 874ee1a2b5aSBram Moolenaar %bwipe 875ee1a2b5aSBram Moolenaar source Xtest_mks.out 876ee1a2b5aSBram Moolenaar call assert_equal('Xscratch', bufname('')) 877ee1a2b5aSBram Moolenaar call assert_equal('nofile', &buftype) 878ee1a2b5aSBram Moolenaar %bwipe 879ee1a2b5aSBram Moolenaar call delete('Xtest_mks.out') 880ee1a2b5aSBram Moolenaarendfunc 881ee1a2b5aSBram Moolenaar 882ee1a2b5aSBram Moolenaar" Test for mksession with fold options 883ee1a2b5aSBram Moolenaarfunc Test_mksession_foldopt() 884ee1a2b5aSBram Moolenaar set sessionoptions-=options 885ee1a2b5aSBram Moolenaar set sessionoptions+=folds 886ee1a2b5aSBram Moolenaar new 887ee1a2b5aSBram Moolenaar setlocal foldenable 888ee1a2b5aSBram Moolenaar setlocal foldmethod=expr 889ee1a2b5aSBram Moolenaar setlocal foldmarker=<<<,>>> 890ee1a2b5aSBram Moolenaar setlocal foldignore=% 891ee1a2b5aSBram Moolenaar setlocal foldlevel=2 892ee1a2b5aSBram Moolenaar setlocal foldminlines=10 893ee1a2b5aSBram Moolenaar setlocal foldnestmax=15 894ee1a2b5aSBram Moolenaar mksession! Xtest_mks.out 895ee1a2b5aSBram Moolenaar close 896ee1a2b5aSBram Moolenaar %bwipe 897ee1a2b5aSBram Moolenaar 898ee1a2b5aSBram Moolenaar source Xtest_mks.out 899ee1a2b5aSBram Moolenaar call assert_true(&foldenable) 900ee1a2b5aSBram Moolenaar call assert_equal('expr', &foldmethod) 901ee1a2b5aSBram Moolenaar call assert_equal('<<<,>>>', &foldmarker) 902ee1a2b5aSBram Moolenaar call assert_equal('%', &foldignore) 903ee1a2b5aSBram Moolenaar call assert_equal(2, &foldlevel) 904ee1a2b5aSBram Moolenaar call assert_equal(10, &foldminlines) 905ee1a2b5aSBram Moolenaar call assert_equal(15, &foldnestmax) 906ee1a2b5aSBram Moolenaar 907ee1a2b5aSBram Moolenaar close 908ee1a2b5aSBram Moolenaar %bwipe 909ee1a2b5aSBram Moolenaar set sessionoptions& 910ee1a2b5aSBram Moolenaarendfunc 911ee1a2b5aSBram Moolenaar 912ee1a2b5aSBram Moolenaar" Test for mksession with window position 913ee1a2b5aSBram Moolenaarfunc Test_mksession_winpos() 914ee1a2b5aSBram Moolenaar " Only applicable in GUI Vim 9156d91bcb4SBram Moolenaar CheckGui 9166d91bcb4SBram Moolenaar 917ee1a2b5aSBram Moolenaar set sessionoptions+=winpos 918ee1a2b5aSBram Moolenaar mksession! Xtest_mks.out 919ee1a2b5aSBram Moolenaar let found_winpos = v:false 920ee1a2b5aSBram Moolenaar let lines = readfile('Xtest_mks.out') 921ee1a2b5aSBram Moolenaar for line in lines 922ee1a2b5aSBram Moolenaar if line =~ '^winpos ' 923ee1a2b5aSBram Moolenaar let found_winpos = v:true 924ee1a2b5aSBram Moolenaar break 925ee1a2b5aSBram Moolenaar endif 926ee1a2b5aSBram Moolenaar endfor 927ee1a2b5aSBram Moolenaar call assert_true(found_winpos) 928ee1a2b5aSBram Moolenaar call delete('Xtest_mks.out') 929ee1a2b5aSBram Moolenaar set sessionoptions& 930ee1a2b5aSBram Moolenaarendfunc 931ee1a2b5aSBram Moolenaar 9320995c81fSBram Moolenaar" Test for mksession without options restores winminheight 9330995c81fSBram Moolenaarfunc Test_mksession_winminheight() 9340995c81fSBram Moolenaar set sessionoptions-=options 9350995c81fSBram Moolenaar split 9360995c81fSBram Moolenaar mksession! Xtest_mks.out 9370995c81fSBram Moolenaar let found_restore = 0 9380995c81fSBram Moolenaar let lines = readfile('Xtest_mks.out') 9390995c81fSBram Moolenaar for line in lines 9400995c81fSBram Moolenaar if line =~ '= s:save_winmin\(width\|height\)' 9410995c81fSBram Moolenaar let found_restore += 1 9420995c81fSBram Moolenaar endif 9430995c81fSBram Moolenaar endfor 9440995c81fSBram Moolenaar call assert_equal(2, found_restore) 9450995c81fSBram Moolenaar call delete('Xtest_mks.out') 9460995c81fSBram Moolenaar close 9470995c81fSBram Moolenaar set sessionoptions& 9480995c81fSBram Moolenaarendfunc 9490995c81fSBram Moolenaar 950ee1a2b5aSBram Moolenaar" Test for mksession with 'compatible' option 951ee1a2b5aSBram Moolenaarfunc Test_mksession_compatible() 952ee1a2b5aSBram Moolenaar mksession! Xtest_mks1.out 953ee1a2b5aSBram Moolenaar set compatible 954ee1a2b5aSBram Moolenaar mksession! Xtest_mks2.out 955ee1a2b5aSBram Moolenaar set nocp 956ee1a2b5aSBram Moolenaar 957ee1a2b5aSBram Moolenaar let test_success = v:false 958ee1a2b5aSBram Moolenaar let lines = readfile('Xtest_mks1.out') 959ee1a2b5aSBram Moolenaar for line in lines 960ee1a2b5aSBram Moolenaar if line =~ '^if &cp | set nocp | endif' 961ee1a2b5aSBram Moolenaar let test_success = v:true 962ee1a2b5aSBram Moolenaar break 963ee1a2b5aSBram Moolenaar endif 964ee1a2b5aSBram Moolenaar endfor 965ee1a2b5aSBram Moolenaar call assert_true(test_success) 966ee1a2b5aSBram Moolenaar 967ee1a2b5aSBram Moolenaar let test_success = v:false 968ee1a2b5aSBram Moolenaar let lines = readfile('Xtest_mks2.out') 969ee1a2b5aSBram Moolenaar for line in lines 970ee1a2b5aSBram Moolenaar if line =~ '^if !&cp | set cp | endif' 971ee1a2b5aSBram Moolenaar let test_success = v:true 972ee1a2b5aSBram Moolenaar break 973ee1a2b5aSBram Moolenaar endif 974ee1a2b5aSBram Moolenaar endfor 975ee1a2b5aSBram Moolenaar call assert_true(test_success) 976ee1a2b5aSBram Moolenaar 977ee1a2b5aSBram Moolenaar call delete('Xtest_mks1.out') 978ee1a2b5aSBram Moolenaar call delete('Xtest_mks2.out') 979ee1a2b5aSBram Moolenaar set compatible& 980ee1a2b5aSBram Moolenaar set sessionoptions& 981ee1a2b5aSBram Moolenaarendfunc 982ee1a2b5aSBram Moolenaar 9838750026aSBram Moolenaarfunc s:ClearMappings() 9848750026aSBram Moolenaar mapclear 9858750026aSBram Moolenaar omapclear 9868750026aSBram Moolenaar mapclear! 9878750026aSBram Moolenaar lmapclear 9888750026aSBram Moolenaar tmapclear 9898750026aSBram Moolenaarendfunc 9908750026aSBram Moolenaar 9918750026aSBram Moolenaarfunc Test_mkvimrc() 9928750026aSBram Moolenaar let entries = [ 9938750026aSBram Moolenaar \ ['', 'nothing', '<Nop>'], 9948750026aSBram Moolenaar \ ['n', 'normal', 'NORMAL'], 9958750026aSBram Moolenaar \ ['v', 'visual', 'VISUAL'], 9968750026aSBram Moolenaar \ ['s', 'select', 'SELECT'], 9978750026aSBram Moolenaar \ ['x', 'visualonly', 'VISUALONLY'], 9988750026aSBram Moolenaar \ ['o', 'operator', 'OPERATOR'], 9998750026aSBram Moolenaar \ ['i', 'insert', 'INSERT'], 10008750026aSBram Moolenaar \ ['l', 'lang', 'LANG'], 10018750026aSBram Moolenaar \ ['c', 'command', 'COMMAND'], 10028750026aSBram Moolenaar \ ['t', 'terminal', 'TERMINAL'], 10038750026aSBram Moolenaar \ ] 10048750026aSBram Moolenaar for entry in entries 10058750026aSBram Moolenaar exe entry[0] .. 'map ' .. entry[1] .. ' ' .. entry[2] 10068750026aSBram Moolenaar endfor 10078750026aSBram Moolenaar 10088750026aSBram Moolenaar mkvimrc Xtestvimrc 10098750026aSBram Moolenaar 10108750026aSBram Moolenaar call s:ClearMappings() 10118750026aSBram Moolenaar for entry in entries 10128750026aSBram Moolenaar call assert_equal('', maparg(entry[1], entry[0])) 10138750026aSBram Moolenaar endfor 10148750026aSBram Moolenaar 10158750026aSBram Moolenaar source Xtestvimrc 10168750026aSBram Moolenaar 10178750026aSBram Moolenaar for entry in entries 10188750026aSBram Moolenaar call assert_equal(entry[2], maparg(entry[1], entry[0])) 10198750026aSBram Moolenaar endfor 10208750026aSBram Moolenaar 10218750026aSBram Moolenaar call s:ClearMappings() 1022*59585497SYegappan Lakshmanan 1023*59585497SYegappan Lakshmanan " the 'pastetoggle', 'wildchar' and 'wildcharm' option values should be 1024*59585497SYegappan Lakshmanan " stored as key names in the vimrc file 1025*59585497SYegappan Lakshmanan set pastetoggle=<F5> 1026*59585497SYegappan Lakshmanan set wildchar=<F6> 1027*59585497SYegappan Lakshmanan set wildcharm=<F7> 1028*59585497SYegappan Lakshmanan call assert_fails('mkvimrc Xtestvimrc') 1029*59585497SYegappan Lakshmanan mkvimrc! Xtestvimrc 1030*59585497SYegappan Lakshmanan call assert_notequal(-1, index(readfile('Xtestvimrc'), 'set pastetoggle=<F5>')) 1031*59585497SYegappan Lakshmanan call assert_notequal(-1, index(readfile('Xtestvimrc'), 'set wildchar=<F6>')) 1032*59585497SYegappan Lakshmanan call assert_notequal(-1, index(readfile('Xtestvimrc'), 'set wildcharm=<F7>')) 1033*59585497SYegappan Lakshmanan set pastetoggle& wildchar& wildcharm& 1034*59585497SYegappan Lakshmanan 10358750026aSBram Moolenaar call delete('Xtestvimrc') 10368750026aSBram Moolenaarendfunc 10378750026aSBram Moolenaar 103838890835SBram Moolenaarfunc Test_scrolloff() 103938890835SBram Moolenaar set sessionoptions+=localoptions 104038890835SBram Moolenaar setlocal so=1 siso=1 104138890835SBram Moolenaar mksession! Xtest_mks.out 104238890835SBram Moolenaar setlocal so=-1 siso=-1 104338890835SBram Moolenaar source Xtest_mks.out 104438890835SBram Moolenaar call assert_equal(1, &l:so) 104538890835SBram Moolenaar call assert_equal(1, &l:siso) 104638890835SBram Moolenaar call delete('Xtest_mks.out') 104738890835SBram Moolenaar setlocal so& siso& 104838890835SBram Moolenaar set sessionoptions& 104938890835SBram Moolenaarendfunc 105038890835SBram Moolenaar 10513482be6aSBram Moolenaarfunc Test_altfile() 10523482be6aSBram Moolenaar edit Xone 10533482be6aSBram Moolenaar split Xtwo 10543482be6aSBram Moolenaar edit Xtwoalt 10553482be6aSBram Moolenaar edit # 10563482be6aSBram Moolenaar wincmd w 10573482be6aSBram Moolenaar edit Xonealt 10583482be6aSBram Moolenaar edit # 10593482be6aSBram Moolenaar mksession! Xtest_altfile 10603482be6aSBram Moolenaar only 10613482be6aSBram Moolenaar bwipe Xonealt 10623482be6aSBram Moolenaar bwipe Xtwoalt 10633482be6aSBram Moolenaar bwipe! 10643482be6aSBram Moolenaar source Xtest_altfile 10653482be6aSBram Moolenaar call assert_equal('Xone', bufname()) 10663482be6aSBram Moolenaar call assert_equal('Xonealt', bufname('#')) 10673482be6aSBram Moolenaar wincmd w 10683482be6aSBram Moolenaar call assert_equal('Xtwo', bufname()) 10693482be6aSBram Moolenaar call assert_equal('Xtwoalt', bufname('#')) 10703482be6aSBram Moolenaar only 10713482be6aSBram Moolenaar bwipe! 1072ac665c24SBram Moolenaar call delete('Xtest_altfile') 10733482be6aSBram Moolenaarendfunc 10743482be6aSBram Moolenaar 10755c504f68SBram Moolenaar" Test for creating views with manual folds 10765c504f68SBram Moolenaarfunc Test_mkview_manual_fold() 10775c504f68SBram Moolenaar call writefile(range(1,10), 'Xfile') 10785c504f68SBram Moolenaar new Xfile 10795c504f68SBram Moolenaar " create recursive folds 10805c504f68SBram Moolenaar 5,6fold 10815c504f68SBram Moolenaar 4,7fold 10825c504f68SBram Moolenaar mkview Xview 10835c504f68SBram Moolenaar normal zE 10845c504f68SBram Moolenaar source Xview 10855c504f68SBram Moolenaar call assert_equal([-1, 4, 4, 4, 4, -1], [foldclosed(3), foldclosed(4), 10865c504f68SBram Moolenaar \ foldclosed(5), foldclosed(6), foldclosed(7), foldclosed(8)]) 10875c504f68SBram Moolenaar " open one level of fold 10885c504f68SBram Moolenaar 4foldopen 10895c504f68SBram Moolenaar mkview! Xview 10905c504f68SBram Moolenaar normal zE 10915c504f68SBram Moolenaar source Xview 10925c504f68SBram Moolenaar call assert_equal([-1, -1, 5, 5, -1, -1], [foldclosed(3), foldclosed(4), 10935c504f68SBram Moolenaar \ foldclosed(5), foldclosed(6), foldclosed(7), foldclosed(8)]) 10945c504f68SBram Moolenaar " open all the folds 10955c504f68SBram Moolenaar %foldopen! 10965c504f68SBram Moolenaar mkview! Xview 10975c504f68SBram Moolenaar normal zE 10985c504f68SBram Moolenaar source Xview 10995c504f68SBram Moolenaar call assert_equal([-1, -1, -1, -1, -1, -1], [foldclosed(3), foldclosed(4), 11005c504f68SBram Moolenaar \ foldclosed(5), foldclosed(6), foldclosed(7), foldclosed(8)]) 11015c504f68SBram Moolenaar call delete('Xfile') 11025c504f68SBram Moolenaar call delete('Xview') 11035c504f68SBram Moolenaar bw! 11045c504f68SBram Moolenaarendfunc 11055c504f68SBram Moolenaar 1106eca626fcSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1107