1" Tests for setbufline(), getbufline(), appendbufline(), deletebufline() 2 3source shared.vim 4source screendump.vim 5source check.vim 6 7func Test_setbufline_getbufline() 8 new 9 let b = bufnr('%') 10 hide 11 call assert_equal(0, setbufline(b, 1, ['foo', 'bar'])) 12 call assert_equal(['foo'], getbufline(b, 1)) 13 call assert_equal(['bar'], getbufline(b, '$')) 14 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) 15 exe "bd!" b 16 call assert_equal([], getbufline(b, 1, 2)) 17 18 split Xtest 19 call setline(1, ['a', 'b', 'c']) 20 let b = bufnr('%') 21 wincmd w 22 call assert_equal(1, setbufline(b, 5, ['x'])) 23 call assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1)) 24 call assert_equal(0, setbufline(b, 4, ['d', 'e'])) 25 call assert_equal(['c'], b->getbufline(3)) 26 call assert_equal(['d'], getbufline(b, 4)) 27 call assert_equal(['e'], getbufline(b, 5)) 28 call assert_equal([], getbufline(b, 6)) 29 exe "bwipe! " . b 30endfunc 31 32func Test_setbufline_getbufline_fold() 33 split Xtest 34 setlocal foldmethod=expr foldexpr=0 35 let b = bufnr('%') 36 new 37 call assert_equal(0, setbufline(b, 1, ['foo', 'bar'])) 38 call assert_equal(['foo'], getbufline(b, 1)) 39 call assert_equal(['bar'], getbufline(b, 2)) 40 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) 41 exe "bwipe!" b 42 bwipe! 43endfunc 44 45func Test_setbufline_getbufline_fold_tab() 46 split Xtest 47 setlocal foldmethod=expr foldexpr=0 48 let b = bufnr('%') 49 tab new 50 call assert_equal(0, setbufline(b, 1, ['foo', 'bar'])) 51 call assert_equal(['foo'], getbufline(b, 1)) 52 call assert_equal(['bar'], getbufline(b, 2)) 53 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) 54 exe "bwipe!" b 55 bwipe! 56endfunc 57 58func Test_setline_startup() 59 let cmd = GetVimCommand('Xscript') 60 if cmd == '' 61 return 62 endif 63 call writefile(['call setline(1, "Hello")', 'silent w Xtest', 'q!'], 'Xscript') 64 call system(cmd) 65 call assert_equal(['Hello'], readfile('Xtest')) 66 67 call delete('Xscript') 68 call delete('Xtest') 69endfunc 70 71func Test_appendbufline() 72 new 73 let b = bufnr('%') 74 hide 75 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar'])) 76 call assert_equal(['foo'], getbufline(b, 1)) 77 call assert_equal(['bar'], getbufline(b, 2)) 78 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) 79 exe "bd!" b 80 call assert_equal([], getbufline(b, 1, 2)) 81 82 split Xtest 83 call setline(1, ['a', 'b', 'c']) 84 let b = bufnr('%') 85 wincmd w 86 call assert_equal(1, appendbufline(b, -1, ['x'])) 87 call assert_equal(1, appendbufline(b, 4, ['x'])) 88 call assert_equal(1, appendbufline(1234, 1, ['x'])) 89 call assert_equal(0, appendbufline(b, 3, ['d', 'e'])) 90 call assert_equal(['c'], getbufline(b, 3)) 91 call assert_equal(['d'], getbufline(b, 4)) 92 call assert_equal(['e'], getbufline(b, 5)) 93 call assert_equal([], getbufline(b, 6)) 94 exe "bwipe! " . b 95endfunc 96 97func Test_appendbufline_no_E315() 98 let after =<< trim [CODE] 99 set stl=%f ls=2 100 new 101 let buf = bufnr("%") 102 quit 103 vsp 104 exec "buffer" buf 105 wincmd w 106 call appendbufline(buf, 0, "abc") 107 redraw 108 while getbufline(buf, 1)[0] =~ "^\\s*$" 109 sleep 10m 110 endwhile 111 au VimLeavePre * call writefile([v:errmsg], "Xerror") 112 au VimLeavePre * call writefile(["done"], "Xdone") 113 qall! 114 [CODE] 115 116 if !RunVim([], after, '--clean') 117 return 118 endif 119 call assert_notmatch("^E315:", readfile("Xerror")[0]) 120 call assert_equal("done", readfile("Xdone")[0]) 121 call delete("Xerror") 122 call delete("Xdone") 123endfunc 124 125func Test_deletebufline() 126 new 127 let b = bufnr('%') 128 call setline(1, ['aaa', 'bbb', 'ccc']) 129 hide 130 call assert_equal(0, deletebufline(b, 2)) 131 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2)) 132 call assert_equal(0, deletebufline(b, 2, 8)) 133 call assert_equal(['aaa'], getbufline(b, 1, 2)) 134 exe "bd!" b 135 call assert_equal(1, b->deletebufline(1)) 136 137 call assert_equal(1, deletebufline(-1, 1)) 138 139 split Xtest 140 call setline(1, ['a', 'b', 'c']) 141 call cursor(line('$'), 1) 142 let b = bufnr('%') 143 wincmd w 144 call assert_equal(1, deletebufline(b, 4)) 145 call assert_equal(0, deletebufline(b, 1)) 146 call assert_equal(['b', 'c'], getbufline(b, 1, 2)) 147 exe "bwipe! " . b 148endfunc 149 150func Test_appendbufline_redraw() 151 CheckScreendump 152 153 let lines =<< trim END 154 new foo 155 let winnr = 'foo'->bufwinnr() 156 let buf = bufnr('foo') 157 wincmd p 158 call appendbufline(buf, '$', range(1,200)) 159 exe winnr .. 'wincmd w' 160 norm! G 161 wincmd p 162 call deletebufline(buf, 1, '$') 163 call appendbufline(buf, '$', 'Hello Vim world...') 164 END 165 call writefile(lines, 'XscriptMatchCommon') 166 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10}) 167 call term_wait(buf) 168 call VerifyScreenDump(buf, 'Test_appendbufline_1', {}) 169 170 call StopVimInTerminal(buf) 171 call delete('XscriptMatchCommon') 172endfunc 173