blob: 9e4402f79e1eeb92dff8d9868f3e0c104cbe549c [file] [log] [blame]
Bram Moolenaard79a2622018-06-07 18:17:46 +02001" Tests for setbufline(), getbufline(), appendbufline(), deletebufline()
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02002
Bram Moolenaar660b85e2017-09-30 14:26:58 +02003source shared.vim
Bram Moolenaar29846662019-07-27 17:39:15 +02004source screendump.vim
Bram Moolenaar8c5a2782019-08-07 23:07:07 +02005source check.vim
Bram Moolenaar11aa62f2017-09-04 22:56:01 +02006
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02007func Test_setbufline_getbufline()
Bram Moolenaar34453202021-01-31 13:08:38 +01008 " similar to Test_set_get_bufline()
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02009 new
10 let b = bufnr('%')
11 hide
12 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
13 call assert_equal(['foo'], getbufline(b, 1))
Bram Moolenaarce30ccc2022-11-21 19:57:04 +000014 call assert_equal('foo', getbufoneline(b, 1))
Bram Moolenaar17aca702019-05-16 22:24:55 +020015 call assert_equal(['bar'], getbufline(b, '$'))
Bram Moolenaarce30ccc2022-11-21 19:57:04 +000016 call assert_equal('bar', getbufoneline(b, '$'))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020017 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
18 exe "bd!" b
19 call assert_equal([], getbufline(b, 1, 2))
20
21 split Xtest
22 call setline(1, ['a', 'b', 'c'])
23 let b = bufnr('%')
24 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020025
26 call assert_equal(1, setbufline(b, 5, 'x'))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020027 call assert_equal(1, setbufline(b, 5, ['x']))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +000028 call assert_equal(0, setbufline(b, 5, []))
29 call assert_equal(0, setbufline(b, 5, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020030
31 call assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
Bram Moolenaar196b4662019-09-06 21:34:30 +020032 call assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020033 call assert_equal(1, []->setbufline(bufnr('$') + 1, 1))
34 call assert_equal(1, test_null_list()->setbufline(bufnr('$') + 1, 1))
35
36 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
37
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020038 call assert_equal(0, setbufline(b, 4, ['d', 'e']))
Bram Moolenaar4c313b12019-08-24 22:58:31 +020039 call assert_equal(['c'], b->getbufline(3))
Bram Moolenaarce30ccc2022-11-21 19:57:04 +000040 call assert_equal('c', b->getbufoneline(3))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020041 call assert_equal(['d'], getbufline(b, 4))
Bram Moolenaarce30ccc2022-11-21 19:57:04 +000042 call assert_equal('d', getbufoneline(b, 4))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020043 call assert_equal(['e'], getbufline(b, 5))
Bram Moolenaarce30ccc2022-11-21 19:57:04 +000044 call assert_equal('e', getbufoneline(b, 5))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020045 call assert_equal([], getbufline(b, 6))
Bram Moolenaar99fa7212020-04-26 15:59:55 +020046 call assert_equal([], getbufline(b, 2, 1))
Bram Moolenaar34453202021-01-31 13:08:38 +010047
Bram Moolenaar00385112021-02-07 14:31:06 +010048 if has('job')
49 call setbufline(b, 2, [function('eval'), #{key: 123}, test_null_job()])
50 call assert_equal(["function('eval')",
51 \ "{'key': 123}",
52 \ "no process"],
53 \ getbufline(b, 2, 4))
54 endif
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020055 exe "bwipe! " . b
56endfunc
Bram Moolenaar9d954202017-09-04 20:34:19 +020057
Bram Moolenaar0c4dc882017-11-06 21:32:54 +010058func Test_setbufline_getbufline_fold()
59 split Xtest
60 setlocal foldmethod=expr foldexpr=0
61 let b = bufnr('%')
62 new
63 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
64 call assert_equal(['foo'], getbufline(b, 1))
65 call assert_equal(['bar'], getbufline(b, 2))
66 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
67 exe "bwipe!" b
68 bwipe!
69endfunc
70
71func Test_setbufline_getbufline_fold_tab()
72 split Xtest
73 setlocal foldmethod=expr foldexpr=0
74 let b = bufnr('%')
75 tab new
76 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
77 call assert_equal(['foo'], getbufline(b, 1))
78 call assert_equal(['bar'], getbufline(b, 2))
79 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
80 exe "bwipe!" b
81 bwipe!
82endfunc
83
Bram Moolenaar9d954202017-09-04 20:34:19 +020084func Test_setline_startup()
85 let cmd = GetVimCommand('Xscript')
86 if cmd == ''
87 return
88 endif
Bram Moolenaar34112652022-09-05 21:40:44 +010089 call writefile(['call setline(1, "Hello")', 'silent w Xtest', 'q!'], 'Xscript', 'D')
Bram Moolenaar9d954202017-09-04 20:34:19 +020090 call system(cmd)
K.Takata0500e872022-09-08 12:28:02 +010091 sleep 50m
Bram Moolenaar9d954202017-09-04 20:34:19 +020092 call assert_equal(['Hello'], readfile('Xtest'))
93
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +000094 call assert_equal(0, setline(1, []))
95 call assert_equal(0, setline(1, test_null_list()))
96 call assert_equal(0, setline(5, []))
97 call assert_equal(0, setline(6, test_null_list()))
98
Bram Moolenaar9d954202017-09-04 20:34:19 +020099 call delete('Xtest')
100endfunc
Bram Moolenaarca851592018-06-06 21:04:07 +0200101
102func Test_appendbufline()
103 new
104 let b = bufnr('%')
105 hide
zeertzjq228e4222022-11-20 11:13:17 +0000106
107 new
108 call setline(1, ['line1', 'line2', 'line3'])
109 normal! 2gggg
110 call assert_equal(2, line("''"))
111
Bram Moolenaarca851592018-06-06 21:04:07 +0200112 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
113 call assert_equal(['foo'], getbufline(b, 1))
114 call assert_equal(['bar'], getbufline(b, 2))
115 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
zeertzjq228e4222022-11-20 11:13:17 +0000116 call assert_equal(0, appendbufline(b, 0, 'baz'))
117 call assert_equal(['baz', 'foo', 'bar'], getbufline(b, 1, 3))
118
119 " appendbufline() in a hidden buffer shouldn't move marks in current window.
120 call assert_equal(2, line("''"))
121 bwipe!
122
Bram Moolenaarca851592018-06-06 21:04:07 +0200123 exe "bd!" b
zeertzjq228e4222022-11-20 11:13:17 +0000124 call assert_equal([], getbufline(b, 1, 3))
Bram Moolenaarca851592018-06-06 21:04:07 +0200125
126 split Xtest
127 call setline(1, ['a', 'b', 'c'])
128 let b = bufnr('%')
129 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200130
131 call assert_equal(1, appendbufline(b, -1, 'x'))
Bram Moolenaar17aca702019-05-16 22:24:55 +0200132 call assert_equal(1, appendbufline(b, -1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200133 call assert_equal(1, appendbufline(b, -1, []))
134 call assert_equal(1, appendbufline(b, -1, test_null_list()))
135
136 call assert_equal(1, appendbufline(b, 4, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200137 call assert_equal(1, appendbufline(b, 4, ['x']))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +0000138 call assert_equal(0, appendbufline(b, 4, []))
139 call assert_equal(0, appendbufline(b, 4, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200140
141 call assert_equal(1, appendbufline(1234, 1, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200142 call assert_equal(1, appendbufline(1234, 1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200143 call assert_equal(1, appendbufline(1234, 1, []))
144 call assert_equal(1, appendbufline(1234, 1, test_null_list()))
145
146 call assert_equal(0, appendbufline(b, 1, []))
147 call assert_equal(0, appendbufline(b, 1, test_null_list()))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +0000148 call assert_equal(0, appendbufline(b, 3, []))
149 call assert_equal(0, appendbufline(b, 3, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200150
151 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
152
Bram Moolenaarca851592018-06-06 21:04:07 +0200153 call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
154 call assert_equal(['c'], getbufline(b, 3))
155 call assert_equal(['d'], getbufline(b, 4))
156 call assert_equal(['e'], getbufline(b, 5))
157 call assert_equal([], getbufline(b, 6))
158 exe "bwipe! " . b
159endfunc
Bram Moolenaard79a2622018-06-07 18:17:46 +0200160
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200161func Test_appendbufline_no_E315()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200162 let after =<< trim [CODE]
163 set stl=%f ls=2
164 new
165 let buf = bufnr("%")
166 quit
167 vsp
168 exec "buffer" buf
169 wincmd w
170 call appendbufline(buf, 0, "abc")
171 redraw
172 while getbufline(buf, 1)[0] =~ "^\\s*$"
173 sleep 10m
174 endwhile
175 au VimLeavePre * call writefile([v:errmsg], "Xerror")
176 au VimLeavePre * call writefile(["done"], "Xdone")
177 qall!
178 [CODE]
179
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200180 if !RunVim([], after, '--clean')
181 return
182 endif
183 call assert_notmatch("^E315:", readfile("Xerror")[0])
184 call assert_equal("done", readfile("Xdone")[0])
185 call delete("Xerror")
186 call delete("Xdone")
187endfunc
188
Bram Moolenaard79a2622018-06-07 18:17:46 +0200189func Test_deletebufline()
190 new
191 let b = bufnr('%')
192 call setline(1, ['aaa', 'bbb', 'ccc'])
193 hide
zeertzjq228e4222022-11-20 11:13:17 +0000194
195 new
196 call setline(1, ['line1', 'line2', 'line3'])
197 normal! 2gggg
198 call assert_equal(2, line("''"))
199
Bram Moolenaard79a2622018-06-07 18:17:46 +0200200 call assert_equal(0, deletebufline(b, 2))
201 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
202 call assert_equal(0, deletebufline(b, 2, 8))
203 call assert_equal(['aaa'], getbufline(b, 1, 2))
zeertzjq228e4222022-11-20 11:13:17 +0000204
205 " deletebufline() in a hidden buffer shouldn't move marks in current window.
206 call assert_equal(2, line("''"))
207 bwipe!
208
Bram Moolenaard79a2622018-06-07 18:17:46 +0200209 exe "bd!" b
Bram Moolenaar1a3a8912019-08-23 22:31:37 +0200210 call assert_equal(1, b->deletebufline(1))
Bram Moolenaard79a2622018-06-07 18:17:46 +0200211
Bram Moolenaar17aca702019-05-16 22:24:55 +0200212 call assert_equal(1, deletebufline(-1, 1))
213
Bram Moolenaard79a2622018-06-07 18:17:46 +0200214 split Xtest
215 call setline(1, ['a', 'b', 'c'])
Bram Moolenaar17aca702019-05-16 22:24:55 +0200216 call cursor(line('$'), 1)
Bram Moolenaard79a2622018-06-07 18:17:46 +0200217 let b = bufnr('%')
218 wincmd w
219 call assert_equal(1, deletebufline(b, 4))
220 call assert_equal(0, deletebufline(b, 1))
221 call assert_equal(['b', 'c'], getbufline(b, 1, 2))
222 exe "bwipe! " . b
Bram Moolenaar963ffa02021-02-09 20:02:55 +0100223
224 edit XbufOne
225 let one = bufnr()
226 call setline(1, ['a', 'b', 'c'])
227 setlocal nomodifiable
228 split XbufTwo
229 let two = bufnr()
230 call assert_fails('call deletebufline(one, 1)', 'E21:')
231 call assert_equal(two, bufnr())
232 bwipe! XbufTwo
233 bwipe! XbufOne
Bram Moolenaard79a2622018-06-07 18:17:46 +0200234endfunc
Bram Moolenaar29846662019-07-27 17:39:15 +0200235
236func Test_appendbufline_redraw()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200237 CheckScreendump
238
Bram Moolenaar29846662019-07-27 17:39:15 +0200239 let lines =<< trim END
240 new foo
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200241 let winnr = 'foo'->bufwinnr()
242 let buf = bufnr('foo')
Bram Moolenaar29846662019-07-27 17:39:15 +0200243 wincmd p
244 call appendbufline(buf, '$', range(1,200))
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200245 exe winnr .. 'wincmd w'
Bram Moolenaar29846662019-07-27 17:39:15 +0200246 norm! G
247 wincmd p
248 call deletebufline(buf, 1, '$')
249 call appendbufline(buf, '$', 'Hello Vim world...')
250 END
Bram Moolenaar34112652022-09-05 21:40:44 +0100251 call writefile(lines, 'XscriptMatchCommon', 'D')
Bram Moolenaar29846662019-07-27 17:39:15 +0200252 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
Bram Moolenaar29846662019-07-27 17:39:15 +0200253 call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
254
255 call StopVimInTerminal(buf)
Bram Moolenaar29846662019-07-27 17:39:15 +0200256endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200257
Bram Moolenaar0ad00a72022-05-22 11:59:25 +0100258func Test_setbufline_select_mode()
259 new
260 call setline(1, ['foo', 'bar'])
261 call feedkeys("j^v2l\<C-G>", 'nx')
262
263 let bufnr = bufadd('Xdummy')
264 call bufload(bufnr)
265 call setbufline(bufnr, 1, ['abc'])
266
267 call feedkeys("x", 'nx')
268 call assert_equal(['foo', 'x'], getline(1, 2))
269
270 exe "bwipe! " .. bufnr
271 bwipe!
272endfunc
273
LemonBoy9b2edfd2022-05-22 15:35:53 +0100274func Test_deletebufline_select_mode()
275 new
276 call setline(1, ['foo', 'bar'])
277 call feedkeys("j^v2l\<C-G>", 'nx')
278
279 let bufnr = bufadd('Xdummy')
280 call bufload(bufnr)
281 call setbufline(bufnr, 1, ['abc', 'def'])
282 call deletebufline(bufnr, 1)
283
284 call feedkeys("x", 'nx')
285 call assert_equal(['foo', 'x'], getline(1, 2))
286
287 exe "bwipe! " .. bufnr
288 bwipe!
289endfunc
290
zeertzjq93f72cc2022-08-26 15:34:52 +0100291func Test_setbufline_startup_nofile()
292 let before =<< trim [CODE]
293 set shortmess+=F
294 file Xresult
295 set buftype=nofile
296 call setbufline('', 1, 'success')
297 [CODE]
298 let after =<< trim [CODE]
299 set buftype=
300 write
301 quit
302 [CODE]
303
304 if !RunVim(before, after, '--clean')
305 return
306 endif
307 call assert_equal(['success'], readfile('Xresult'))
308 call delete('Xresult')
309endfunc
310
zeertzjq7af3ee22022-11-06 22:26:05 +0000311" Test that setbufline(), appendbufline() and deletebufline() should fail and
312" return 1 when "textlock" is active.
313func Test_change_bufline_with_textlock()
314 new
315 inoremap <buffer> <expr> <F2> setbufline('', 1, '')
316 call assert_fails("normal a\<F2>", 'E565:')
317 call assert_equal('1', getline(1))
318 inoremap <buffer> <expr> <F2> appendbufline('', 1, '')
319 call assert_fails("normal a\<F2>", 'E565:')
320 call assert_equal('11', getline(1))
321 inoremap <buffer> <expr> <F2> deletebufline('', 1)
322 call assert_fails("normal a\<F2>", 'E565:')
323 call assert_equal('111', getline(1))
324 bwipe!
325endfunc
326
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200327" vim: shiftwidth=2 sts=2 expandtab