xref: /vim-8.2.3635/src/testdir/test_bufline.vim (revision 8fe1000e)
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