blob: 6021a4ea80cd84cf1872a60806a00389c84c340b [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 Moolenaar17aca702019-05-16 22:24:55 +020014 call assert_equal(['bar'], getbufline(b, '$'))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020015 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
16 exe "bd!" b
17 call assert_equal([], getbufline(b, 1, 2))
18
19 split Xtest
20 call setline(1, ['a', 'b', 'c'])
21 let b = bufnr('%')
22 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020023
24 call assert_equal(1, setbufline(b, 5, 'x'))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020025 call assert_equal(1, setbufline(b, 5, ['x']))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +000026 call assert_equal(0, setbufline(b, 5, []))
27 call assert_equal(0, setbufline(b, 5, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020028
29 call assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
Bram Moolenaar196b4662019-09-06 21:34:30 +020030 call assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020031 call assert_equal(1, []->setbufline(bufnr('$') + 1, 1))
32 call assert_equal(1, test_null_list()->setbufline(bufnr('$') + 1, 1))
33
34 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
35
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020036 call assert_equal(0, setbufline(b, 4, ['d', 'e']))
Bram Moolenaar4c313b12019-08-24 22:58:31 +020037 call assert_equal(['c'], b->getbufline(3))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020038 call assert_equal(['d'], getbufline(b, 4))
39 call assert_equal(['e'], getbufline(b, 5))
40 call assert_equal([], getbufline(b, 6))
Bram Moolenaar99fa7212020-04-26 15:59:55 +020041 call assert_equal([], getbufline(b, 2, 1))
Bram Moolenaar34453202021-01-31 13:08:38 +010042
Bram Moolenaar00385112021-02-07 14:31:06 +010043 if has('job')
44 call setbufline(b, 2, [function('eval'), #{key: 123}, test_null_job()])
45 call assert_equal(["function('eval')",
46 \ "{'key': 123}",
47 \ "no process"],
48 \ getbufline(b, 2, 4))
49 endif
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020050 exe "bwipe! " . b
51endfunc
Bram Moolenaar9d954202017-09-04 20:34:19 +020052
Bram Moolenaar0c4dc882017-11-06 21:32:54 +010053func Test_setbufline_getbufline_fold()
54 split Xtest
55 setlocal foldmethod=expr foldexpr=0
56 let b = bufnr('%')
57 new
58 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
59 call assert_equal(['foo'], getbufline(b, 1))
60 call assert_equal(['bar'], getbufline(b, 2))
61 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
62 exe "bwipe!" b
63 bwipe!
64endfunc
65
66func Test_setbufline_getbufline_fold_tab()
67 split Xtest
68 setlocal foldmethod=expr foldexpr=0
69 let b = bufnr('%')
70 tab new
71 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
72 call assert_equal(['foo'], getbufline(b, 1))
73 call assert_equal(['bar'], getbufline(b, 2))
74 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
75 exe "bwipe!" b
76 bwipe!
77endfunc
78
Bram Moolenaar9d954202017-09-04 20:34:19 +020079func Test_setline_startup()
80 let cmd = GetVimCommand('Xscript')
81 if cmd == ''
82 return
83 endif
Bram Moolenaar34112652022-09-05 21:40:44 +010084 call writefile(['call setline(1, "Hello")', 'silent w Xtest', 'q!'], 'Xscript', 'D')
Bram Moolenaar9d954202017-09-04 20:34:19 +020085 call system(cmd)
K.Takata0500e872022-09-08 12:28:02 +010086 sleep 50m
Bram Moolenaar9d954202017-09-04 20:34:19 +020087 call assert_equal(['Hello'], readfile('Xtest'))
88
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +000089 call assert_equal(0, setline(1, []))
90 call assert_equal(0, setline(1, test_null_list()))
91 call assert_equal(0, setline(5, []))
92 call assert_equal(0, setline(6, test_null_list()))
93
Bram Moolenaar9d954202017-09-04 20:34:19 +020094 call delete('Xtest')
95endfunc
Bram Moolenaarca851592018-06-06 21:04:07 +020096
97func Test_appendbufline()
98 new
99 let b = bufnr('%')
100 hide
zeertzjq228e4222022-11-20 11:13:17 +0000101
102 new
103 call setline(1, ['line1', 'line2', 'line3'])
104 normal! 2gggg
105 call assert_equal(2, line("''"))
106
Bram Moolenaarca851592018-06-06 21:04:07 +0200107 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
108 call assert_equal(['foo'], getbufline(b, 1))
109 call assert_equal(['bar'], getbufline(b, 2))
110 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
zeertzjq228e4222022-11-20 11:13:17 +0000111 call assert_equal(0, appendbufline(b, 0, 'baz'))
112 call assert_equal(['baz', 'foo', 'bar'], getbufline(b, 1, 3))
113
114 " appendbufline() in a hidden buffer shouldn't move marks in current window.
115 call assert_equal(2, line("''"))
116 bwipe!
117
Bram Moolenaarca851592018-06-06 21:04:07 +0200118 exe "bd!" b
zeertzjq228e4222022-11-20 11:13:17 +0000119 call assert_equal([], getbufline(b, 1, 3))
Bram Moolenaarca851592018-06-06 21:04:07 +0200120
121 split Xtest
122 call setline(1, ['a', 'b', 'c'])
123 let b = bufnr('%')
124 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200125
126 call assert_equal(1, appendbufline(b, -1, 'x'))
Bram Moolenaar17aca702019-05-16 22:24:55 +0200127 call assert_equal(1, appendbufline(b, -1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200128 call assert_equal(1, appendbufline(b, -1, []))
129 call assert_equal(1, appendbufline(b, -1, test_null_list()))
130
131 call assert_equal(1, appendbufline(b, 4, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200132 call assert_equal(1, appendbufline(b, 4, ['x']))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +0000133 call assert_equal(0, appendbufline(b, 4, []))
134 call assert_equal(0, appendbufline(b, 4, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200135
136 call assert_equal(1, appendbufline(1234, 1, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200137 call assert_equal(1, appendbufline(1234, 1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200138 call assert_equal(1, appendbufline(1234, 1, []))
139 call assert_equal(1, appendbufline(1234, 1, test_null_list()))
140
141 call assert_equal(0, appendbufline(b, 1, []))
142 call assert_equal(0, appendbufline(b, 1, test_null_list()))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +0000143 call assert_equal(0, appendbufline(b, 3, []))
144 call assert_equal(0, appendbufline(b, 3, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200145
146 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
147
Bram Moolenaarca851592018-06-06 21:04:07 +0200148 call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
149 call assert_equal(['c'], getbufline(b, 3))
150 call assert_equal(['d'], getbufline(b, 4))
151 call assert_equal(['e'], getbufline(b, 5))
152 call assert_equal([], getbufline(b, 6))
153 exe "bwipe! " . b
154endfunc
Bram Moolenaard79a2622018-06-07 18:17:46 +0200155
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200156func Test_appendbufline_no_E315()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200157 let after =<< trim [CODE]
158 set stl=%f ls=2
159 new
160 let buf = bufnr("%")
161 quit
162 vsp
163 exec "buffer" buf
164 wincmd w
165 call appendbufline(buf, 0, "abc")
166 redraw
167 while getbufline(buf, 1)[0] =~ "^\\s*$"
168 sleep 10m
169 endwhile
170 au VimLeavePre * call writefile([v:errmsg], "Xerror")
171 au VimLeavePre * call writefile(["done"], "Xdone")
172 qall!
173 [CODE]
174
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200175 if !RunVim([], after, '--clean')
176 return
177 endif
178 call assert_notmatch("^E315:", readfile("Xerror")[0])
179 call assert_equal("done", readfile("Xdone")[0])
180 call delete("Xerror")
181 call delete("Xdone")
182endfunc
183
Bram Moolenaard79a2622018-06-07 18:17:46 +0200184func Test_deletebufline()
185 new
186 let b = bufnr('%')
187 call setline(1, ['aaa', 'bbb', 'ccc'])
188 hide
zeertzjq228e4222022-11-20 11:13:17 +0000189
190 new
191 call setline(1, ['line1', 'line2', 'line3'])
192 normal! 2gggg
193 call assert_equal(2, line("''"))
194
Bram Moolenaard79a2622018-06-07 18:17:46 +0200195 call assert_equal(0, deletebufline(b, 2))
196 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
197 call assert_equal(0, deletebufline(b, 2, 8))
198 call assert_equal(['aaa'], getbufline(b, 1, 2))
zeertzjq228e4222022-11-20 11:13:17 +0000199
200 " deletebufline() in a hidden buffer shouldn't move marks in current window.
201 call assert_equal(2, line("''"))
202 bwipe!
203
Bram Moolenaard79a2622018-06-07 18:17:46 +0200204 exe "bd!" b
Bram Moolenaar1a3a8912019-08-23 22:31:37 +0200205 call assert_equal(1, b->deletebufline(1))
Bram Moolenaard79a2622018-06-07 18:17:46 +0200206
Bram Moolenaar17aca702019-05-16 22:24:55 +0200207 call assert_equal(1, deletebufline(-1, 1))
208
Bram Moolenaard79a2622018-06-07 18:17:46 +0200209 split Xtest
210 call setline(1, ['a', 'b', 'c'])
Bram Moolenaar17aca702019-05-16 22:24:55 +0200211 call cursor(line('$'), 1)
Bram Moolenaard79a2622018-06-07 18:17:46 +0200212 let b = bufnr('%')
213 wincmd w
214 call assert_equal(1, deletebufline(b, 4))
215 call assert_equal(0, deletebufline(b, 1))
216 call assert_equal(['b', 'c'], getbufline(b, 1, 2))
217 exe "bwipe! " . b
Bram Moolenaar963ffa02021-02-09 20:02:55 +0100218
219 edit XbufOne
220 let one = bufnr()
221 call setline(1, ['a', 'b', 'c'])
222 setlocal nomodifiable
223 split XbufTwo
224 let two = bufnr()
225 call assert_fails('call deletebufline(one, 1)', 'E21:')
226 call assert_equal(two, bufnr())
227 bwipe! XbufTwo
228 bwipe! XbufOne
Bram Moolenaard79a2622018-06-07 18:17:46 +0200229endfunc
Bram Moolenaar29846662019-07-27 17:39:15 +0200230
231func Test_appendbufline_redraw()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200232 CheckScreendump
233
Bram Moolenaar29846662019-07-27 17:39:15 +0200234 let lines =<< trim END
235 new foo
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200236 let winnr = 'foo'->bufwinnr()
237 let buf = bufnr('foo')
Bram Moolenaar29846662019-07-27 17:39:15 +0200238 wincmd p
239 call appendbufline(buf, '$', range(1,200))
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200240 exe winnr .. 'wincmd w'
Bram Moolenaar29846662019-07-27 17:39:15 +0200241 norm! G
242 wincmd p
243 call deletebufline(buf, 1, '$')
244 call appendbufline(buf, '$', 'Hello Vim world...')
245 END
Bram Moolenaar34112652022-09-05 21:40:44 +0100246 call writefile(lines, 'XscriptMatchCommon', 'D')
Bram Moolenaar29846662019-07-27 17:39:15 +0200247 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
Bram Moolenaar29846662019-07-27 17:39:15 +0200248 call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
249
250 call StopVimInTerminal(buf)
Bram Moolenaar29846662019-07-27 17:39:15 +0200251endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200252
Bram Moolenaar0ad00a72022-05-22 11:59:25 +0100253func Test_setbufline_select_mode()
254 new
255 call setline(1, ['foo', 'bar'])
256 call feedkeys("j^v2l\<C-G>", 'nx')
257
258 let bufnr = bufadd('Xdummy')
259 call bufload(bufnr)
260 call setbufline(bufnr, 1, ['abc'])
261
262 call feedkeys("x", 'nx')
263 call assert_equal(['foo', 'x'], getline(1, 2))
264
265 exe "bwipe! " .. bufnr
266 bwipe!
267endfunc
268
LemonBoy9b2edfd2022-05-22 15:35:53 +0100269func Test_deletebufline_select_mode()
270 new
271 call setline(1, ['foo', 'bar'])
272 call feedkeys("j^v2l\<C-G>", 'nx')
273
274 let bufnr = bufadd('Xdummy')
275 call bufload(bufnr)
276 call setbufline(bufnr, 1, ['abc', 'def'])
277 call deletebufline(bufnr, 1)
278
279 call feedkeys("x", 'nx')
280 call assert_equal(['foo', 'x'], getline(1, 2))
281
282 exe "bwipe! " .. bufnr
283 bwipe!
284endfunc
285
zeertzjq93f72cc2022-08-26 15:34:52 +0100286func Test_setbufline_startup_nofile()
287 let before =<< trim [CODE]
288 set shortmess+=F
289 file Xresult
290 set buftype=nofile
291 call setbufline('', 1, 'success')
292 [CODE]
293 let after =<< trim [CODE]
294 set buftype=
295 write
296 quit
297 [CODE]
298
299 if !RunVim(before, after, '--clean')
300 return
301 endif
302 call assert_equal(['success'], readfile('Xresult'))
303 call delete('Xresult')
304endfunc
305
zeertzjq7af3ee22022-11-06 22:26:05 +0000306" Test that setbufline(), appendbufline() and deletebufline() should fail and
307" return 1 when "textlock" is active.
308func Test_change_bufline_with_textlock()
309 new
310 inoremap <buffer> <expr> <F2> setbufline('', 1, '')
311 call assert_fails("normal a\<F2>", 'E565:')
312 call assert_equal('1', getline(1))
313 inoremap <buffer> <expr> <F2> appendbufline('', 1, '')
314 call assert_fails("normal a\<F2>", 'E565:')
315 call assert_equal('11', getline(1))
316 inoremap <buffer> <expr> <F2> deletebufline('', 1)
317 call assert_fails("normal a\<F2>", 'E565:')
318 call assert_equal('111', getline(1))
319 bwipe!
320endfunc
321
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200322" vim: shiftwidth=2 sts=2 expandtab