1" Tests for Vim buffer 2 3source check.vim 4 5" Test for the :bunload command with an offset 6func Test_bunload_with_offset() 7 %bwipe! 8 call writefile(['B1'], 'b1') 9 call writefile(['B2'], 'b2') 10 call writefile(['B3'], 'b3') 11 call writefile(['B4'], 'b4') 12 13 " Load four buffers. Unload the second and third buffers and then 14 " execute .+3bunload to unload the last buffer. 15 edit b1 16 new b2 17 new b3 18 new b4 19 20 bunload b2 21 bunload b3 22 exe bufwinnr('b1') . 'wincmd w' 23 .+3bunload 24 call assert_equal(0, getbufinfo('b4')[0].loaded) 25 call assert_equal('b1', 26 \ fnamemodify(getbufinfo({'bufloaded' : 1})[0].name, ':t')) 27 28 " Load four buffers. Unload the third and fourth buffers. Execute .+3bunload 29 " and check whether the second buffer is unloaded. 30 ball 31 bunload b3 32 bunload b4 33 exe bufwinnr('b1') . 'wincmd w' 34 .+3bunload 35 call assert_equal(0, getbufinfo('b2')[0].loaded) 36 call assert_equal('b1', 37 \ fnamemodify(getbufinfo({'bufloaded' : 1})[0].name, ':t')) 38 39 " Load four buffers. Unload the second and third buffers and from the last 40 " buffer execute .-3bunload to unload the first buffer. 41 ball 42 bunload b2 43 bunload b3 44 exe bufwinnr('b4') . 'wincmd w' 45 .-3bunload 46 call assert_equal(0, getbufinfo('b1')[0].loaded) 47 call assert_equal('b4', 48 \ fnamemodify(getbufinfo({'bufloaded' : 1})[0].name, ':t')) 49 50 " Load four buffers. Unload the first and second buffers. Execute .-3bunload 51 " from the last buffer and check whether the third buffer is unloaded. 52 ball 53 bunload b1 54 bunload b2 55 exe bufwinnr('b4') . 'wincmd w' 56 .-3bunload 57 call assert_equal(0, getbufinfo('b3')[0].loaded) 58 call assert_equal('b4', 59 \ fnamemodify(getbufinfo({'bufloaded' : 1})[0].name, ':t')) 60 61 %bwipe! 62 call delete('b1') 63 call delete('b2') 64 call delete('b3') 65 call delete('b4') 66 67 call assert_fails('1,4bunload', 'E16:') 68 call assert_fails(',100bunload', 'E16:') 69 70 " Use a try-catch for this test. When assert_fails() is used for this 71 " test, the command fails with E515: instead of E90: 72 let caught_E90 = 0 73 try 74 $bunload 75 catch /E90:/ 76 let caught_E90 = 1 77 endtry 78 call assert_equal(1, caught_E90) 79 call assert_fails('$bunload', 'E90:') 80endfunc 81 82" Test for :buffer, :bnext, :bprevious, :brewind, :blast and :bmodified 83" commands 84func Test_buflist_browse() 85 %bwipe! 86 call assert_fails('buffer 1000', 'E86:') 87 88 call writefile(['foo1', 'foo2', 'foo3', 'foo4'], 'Xfile1') 89 call writefile(['bar1', 'bar2', 'bar3', 'bar4'], 'Xfile2') 90 call writefile(['baz1', 'baz2', 'baz3', 'baz4'], 'Xfile3') 91 edit Xfile1 92 let b1 = bufnr() 93 edit Xfile2 94 let b2 = bufnr() 95 edit +/baz4 Xfile3 96 let b3 = bufnr() 97 98 call assert_fails('buffer ' .. b1 .. ' abc', 'E488:') 99 call assert_equal(b3, bufnr()) 100 call assert_equal(4, line('.')) 101 exe 'buffer +/bar2 ' .. b2 102 call assert_equal(b2, bufnr()) 103 call assert_equal(2, line('.')) 104 exe 'buffer +/bar1' 105 call assert_equal(b2, bufnr()) 106 call assert_equal(1, line('.')) 107 108 brewind + 109 call assert_equal(b1, bufnr()) 110 call assert_equal(4, line('.')) 111 112 blast +/baz2 113 call assert_equal(b3, bufnr()) 114 call assert_equal(2, line('.')) 115 116 bprevious +/bar4 117 call assert_equal(b2, bufnr()) 118 call assert_equal(4, line('.')) 119 120 bnext +/baz3 121 call assert_equal(b3, bufnr()) 122 call assert_equal(3, line('.')) 123 124 call assert_fails('bmodified', 'E84:') 125 call setbufvar(b2, '&modified', 1) 126 exe 'bmodified +/bar3' 127 call assert_equal(b2, bufnr()) 128 call assert_equal(3, line('.')) 129 130 " With no listed buffers in the list, :bnext and :bprev should fail 131 %bwipe! 132 set nobuflisted 133 call assert_fails('bnext', 'E85:') 134 call assert_fails('bprev', 'E85:') 135 set buflisted 136 137 call assert_fails('sandbox bnext', 'E48:') 138 139 call delete('Xfile1') 140 call delete('Xfile2') 141 call delete('Xfile3') 142 %bwipe! 143endfunc 144 145" Test for :bdelete 146func Test_bdelete_cmd() 147 %bwipe! 148 call assert_fails('bdelete 5', 'E516:') 149 call assert_fails('1,1bdelete 1 2', 'E488:') 150 151 " Deleting a unlisted and unloaded buffer 152 edit Xfile1 153 let bnr = bufnr() 154 set nobuflisted 155 enew 156 call assert_fails('bdelete ' .. bnr, 'E516:') 157 158 " Deleting more than one buffer 159 new Xbuf1 160 new Xbuf2 161 exe 'bdel ' .. bufnr('Xbuf2') .. ' ' .. bufnr('Xbuf1') 162 call assert_equal(1, winnr('$')) 163 call assert_equal(0, getbufinfo('Xbuf1')[0].loaded) 164 call assert_equal(0, getbufinfo('Xbuf2')[0].loaded) 165 166 " Deleting more than one buffer and an invalid buffer 167 new Xbuf1 168 new Xbuf2 169 let cmd = "exe 'bdel ' .. bufnr('Xbuf2') .. ' xxx ' .. bufnr('Xbuf1')" 170 call assert_fails(cmd, 'E94:') 171 call assert_equal(2, winnr('$')) 172 call assert_equal(1, getbufinfo('Xbuf1')[0].loaded) 173 call assert_equal(0, getbufinfo('Xbuf2')[0].loaded) 174 175 %bwipe! 176endfunc 177 178func Test_buffer_error() 179 new foo1 180 new foo2 181 182 call assert_fails('buffer foo', 'E93:') 183 call assert_fails('buffer bar', 'E94:') 184 call assert_fails('buffer 0', 'E939:') 185 186 %bwipe 187endfunc 188 189" Test for the status messages displayed when unloading, deleting or wiping 190" out buffers 191func Test_buffer_statusmsg() 192 CheckEnglish 193 set report=1 194 new Xbuf1 195 new Xbuf2 196 let bnr = bufnr() 197 exe "normal 2\<C-G>" 198 call assert_match('buf ' .. bnr .. ':', v:statusmsg) 199 bunload Xbuf1 Xbuf2 200 call assert_equal('2 buffers unloaded', v:statusmsg) 201 bdel Xbuf1 Xbuf2 202 call assert_equal('2 buffers deleted', v:statusmsg) 203 bwipe Xbuf1 Xbuf2 204 call assert_equal('2 buffers wiped out', v:statusmsg) 205 set report& 206endfunc 207 208" Test for quitting the 'swapfile exists' dialog with the split buffer 209" command. 210func Test_buffer_sbuf_cleanup() 211 call writefile([], 'Xfile') 212 " first open the file in a buffer 213 new Xfile 214 let bnr = bufnr() 215 close 216 " create the swap file 217 call writefile([], '.Xfile.swp') 218 " Remove the catch-all that runtest.vim adds 219 au! SwapExists 220 augroup BufTest 221 au! 222 autocmd SwapExists Xfile let v:swapchoice='q' 223 augroup END 224 exe 'sbuf ' . bnr 225 call assert_equal(1, winnr('$')) 226 call assert_equal(0, getbufinfo('Xfile')[0].loaded) 227 228 " test for :sball 229 sball 230 call assert_equal(1, winnr('$')) 231 call assert_equal(0, getbufinfo('Xfile')[0].loaded) 232 233 %bw! 234 set shortmess+=F 235 let v:statusmsg = '' 236 edit Xfile 237 call assert_equal('', v:statusmsg) 238 call assert_equal(1, winnr('$')) 239 call assert_equal(0, getbufinfo('Xfile')[0].loaded) 240 set shortmess& 241 242 call delete('Xfile') 243 call delete('.Xfile.swp') 244 augroup BufTest 245 au! 246 augroup END 247 augroup! BufTest 248endfunc 249 250" Test for deleting a modified buffer with :confirm 251func Test_bdel_with_confirm() 252 CheckUnix 253 CheckNotGui 254 CheckFeature dialog_con 255 new 256 call setline(1, 'test') 257 call assert_fails('bdel', 'E89:') 258 call feedkeys('c', 'L') 259 confirm bdel 260 call assert_equal(2, winnr('$')) 261 call assert_equal(1, &modified) 262 call feedkeys('n', 'L') 263 confirm bdel 264 call assert_equal(1, winnr('$')) 265endfunc 266 267" Test for editing another buffer from a modified buffer with :confirm 268func Test_goto_buf_with_confirm() 269 CheckUnix 270 CheckNotGui 271 CheckFeature dialog_con 272 new Xfile 273 enew 274 call setline(1, 'test') 275 call assert_fails('b Xfile', 'E37:') 276 call feedkeys('c', 'L') 277 call assert_fails('confirm b Xfile', 'E37:') 278 call assert_equal(1, &modified) 279 call assert_equal('', @%) 280 call feedkeys('y', 'L') 281 call assert_fails('confirm b Xfile', ['', 'E37:']) 282 call assert_equal(1, &modified) 283 call assert_equal('', @%) 284 call feedkeys('n', 'L') 285 confirm b Xfile 286 call assert_equal('Xfile', @%) 287 close! 288endfunc 289 290" Test for splitting buffer with 'switchbuf' 291func Test_buffer_switchbuf() 292 new Xfile 293 wincmd w 294 set switchbuf=useopen 295 sbuf Xfile 296 call assert_equal(1, winnr()) 297 call assert_equal(2, winnr('$')) 298 set switchbuf=usetab 299 tabnew 300 sbuf Xfile 301 call assert_equal(1, tabpagenr()) 302 call assert_equal(2, tabpagenr('$')) 303 set switchbuf& 304 %bw 305endfunc 306 307" Test for BufAdd autocommand wiping out the buffer 308func Test_bufadd_autocmd_bwipe() 309 %bw! 310 augroup BufAdd_Wipe 311 au! 312 autocmd BufAdd Xfile %bw! 313 augroup END 314 edit Xfile 315 call assert_equal('', @%) 316 call assert_equal(0, bufexists('Xfile')) 317 augroup BufAdd_Wipe 318 au! 319 augroup END 320 augroup! BufAdd_Wipe 321endfunc 322 323" Test for trying to load a buffer with text locked 324" <C-\>e in the command line is used to lock the text 325func Test_load_buf_with_text_locked() 326 new Xfile1 327 edit Xfile2 328 let cmd = ":\<C-\>eexecute(\"normal \<C-O>\")\<CR>\<C-C>" 329 call assert_fails("call feedkeys(cmd, 'xt')", 'E565:') 330 %bw! 331endfunc 332 333" Test for using CTRL-^ to edit the alternative file keeping the cursor 334" position with 'nostartofline'. Also test using the 'buf' command. 335func Test_buffer_edit_altfile() 336 call writefile(repeat(['one two'], 50), 'Xfile1') 337 call writefile(repeat(['five six'], 50), 'Xfile2') 338 set nosol 339 edit Xfile1 340 call cursor(25, 5) 341 edit Xfile2 342 call cursor(30, 4) 343 exe "normal \<C-^>" 344 call assert_equal([0, 25, 5, 0], getpos('.')) 345 exe "normal \<C-^>" 346 call assert_equal([0, 30, 4, 0], getpos('.')) 347 buf Xfile1 348 call assert_equal([0, 25, 5, 0], getpos('.')) 349 buf Xfile2 350 call assert_equal([0, 30, 4, 0], getpos('.')) 351 set sol& 352 call delete('Xfile1') 353 call delete('Xfile2') 354endfunc 355 356" Test for running the :sball command with a maximum window count and a 357" modified buffer 358func Test_sball_with_count() 359 %bw! 360 edit Xfile1 361 call setline(1, ['abc']) 362 new Xfile2 363 new Xfile3 364 new Xfile4 365 2sball 366 call assert_equal(bufnr('Xfile4'), winbufnr(1)) 367 call assert_equal(bufnr('Xfile1'), winbufnr(2)) 368 call assert_equal(0, getbufinfo('Xfile2')[0].loaded) 369 call assert_equal(0, getbufinfo('Xfile3')[0].loaded) 370 %bw! 371endfunc 372 373" vim: shiftwidth=2 sts=2 expandtab 374