blob: 13e891bcf15327ccb046ccec092f9a43d67ef2df [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
101 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
102 call assert_equal(['foo'], getbufline(b, 1))
103 call assert_equal(['bar'], getbufline(b, 2))
104 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
105 exe "bd!" b
106 call assert_equal([], getbufline(b, 1, 2))
107
108 split Xtest
109 call setline(1, ['a', 'b', 'c'])
110 let b = bufnr('%')
111 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200112
113 call assert_equal(1, appendbufline(b, -1, 'x'))
Bram Moolenaar17aca702019-05-16 22:24:55 +0200114 call assert_equal(1, appendbufline(b, -1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200115 call assert_equal(1, appendbufline(b, -1, []))
116 call assert_equal(1, appendbufline(b, -1, test_null_list()))
117
118 call assert_equal(1, appendbufline(b, 4, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200119 call assert_equal(1, appendbufline(b, 4, ['x']))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +0000120 call assert_equal(0, appendbufline(b, 4, []))
121 call assert_equal(0, appendbufline(b, 4, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200122
123 call assert_equal(1, appendbufline(1234, 1, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200124 call assert_equal(1, appendbufline(1234, 1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200125 call assert_equal(1, appendbufline(1234, 1, []))
126 call assert_equal(1, appendbufline(1234, 1, test_null_list()))
127
128 call assert_equal(0, appendbufline(b, 1, []))
129 call assert_equal(0, appendbufline(b, 1, test_null_list()))
Bram Moolenaarcd9c8d42022-11-05 23:46:43 +0000130 call assert_equal(0, appendbufline(b, 3, []))
131 call assert_equal(0, appendbufline(b, 3, test_null_list()))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200132
133 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
134
Bram Moolenaarca851592018-06-06 21:04:07 +0200135 call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
136 call assert_equal(['c'], getbufline(b, 3))
137 call assert_equal(['d'], getbufline(b, 4))
138 call assert_equal(['e'], getbufline(b, 5))
139 call assert_equal([], getbufline(b, 6))
140 exe "bwipe! " . b
141endfunc
Bram Moolenaard79a2622018-06-07 18:17:46 +0200142
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200143func Test_appendbufline_no_E315()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200144 let after =<< trim [CODE]
145 set stl=%f ls=2
146 new
147 let buf = bufnr("%")
148 quit
149 vsp
150 exec "buffer" buf
151 wincmd w
152 call appendbufline(buf, 0, "abc")
153 redraw
154 while getbufline(buf, 1)[0] =~ "^\\s*$"
155 sleep 10m
156 endwhile
157 au VimLeavePre * call writefile([v:errmsg], "Xerror")
158 au VimLeavePre * call writefile(["done"], "Xdone")
159 qall!
160 [CODE]
161
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200162 if !RunVim([], after, '--clean')
163 return
164 endif
165 call assert_notmatch("^E315:", readfile("Xerror")[0])
166 call assert_equal("done", readfile("Xdone")[0])
167 call delete("Xerror")
168 call delete("Xdone")
169endfunc
170
Bram Moolenaard79a2622018-06-07 18:17:46 +0200171func Test_deletebufline()
172 new
173 let b = bufnr('%')
174 call setline(1, ['aaa', 'bbb', 'ccc'])
175 hide
176 call assert_equal(0, deletebufline(b, 2))
177 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
178 call assert_equal(0, deletebufline(b, 2, 8))
179 call assert_equal(['aaa'], getbufline(b, 1, 2))
180 exe "bd!" b
Bram Moolenaar1a3a8912019-08-23 22:31:37 +0200181 call assert_equal(1, b->deletebufline(1))
Bram Moolenaard79a2622018-06-07 18:17:46 +0200182
Bram Moolenaar17aca702019-05-16 22:24:55 +0200183 call assert_equal(1, deletebufline(-1, 1))
184
Bram Moolenaard79a2622018-06-07 18:17:46 +0200185 split Xtest
186 call setline(1, ['a', 'b', 'c'])
Bram Moolenaar17aca702019-05-16 22:24:55 +0200187 call cursor(line('$'), 1)
Bram Moolenaard79a2622018-06-07 18:17:46 +0200188 let b = bufnr('%')
189 wincmd w
190 call assert_equal(1, deletebufline(b, 4))
191 call assert_equal(0, deletebufline(b, 1))
192 call assert_equal(['b', 'c'], getbufline(b, 1, 2))
193 exe "bwipe! " . b
Bram Moolenaar963ffa02021-02-09 20:02:55 +0100194
195 edit XbufOne
196 let one = bufnr()
197 call setline(1, ['a', 'b', 'c'])
198 setlocal nomodifiable
199 split XbufTwo
200 let two = bufnr()
201 call assert_fails('call deletebufline(one, 1)', 'E21:')
202 call assert_equal(two, bufnr())
203 bwipe! XbufTwo
204 bwipe! XbufOne
Bram Moolenaard79a2622018-06-07 18:17:46 +0200205endfunc
Bram Moolenaar29846662019-07-27 17:39:15 +0200206
207func Test_appendbufline_redraw()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200208 CheckScreendump
209
Bram Moolenaar29846662019-07-27 17:39:15 +0200210 let lines =<< trim END
211 new foo
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200212 let winnr = 'foo'->bufwinnr()
213 let buf = bufnr('foo')
Bram Moolenaar29846662019-07-27 17:39:15 +0200214 wincmd p
215 call appendbufline(buf, '$', range(1,200))
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200216 exe winnr .. 'wincmd w'
Bram Moolenaar29846662019-07-27 17:39:15 +0200217 norm! G
218 wincmd p
219 call deletebufline(buf, 1, '$')
220 call appendbufline(buf, '$', 'Hello Vim world...')
221 END
Bram Moolenaar34112652022-09-05 21:40:44 +0100222 call writefile(lines, 'XscriptMatchCommon', 'D')
Bram Moolenaar29846662019-07-27 17:39:15 +0200223 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
Bram Moolenaar29846662019-07-27 17:39:15 +0200224 call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
225
226 call StopVimInTerminal(buf)
Bram Moolenaar29846662019-07-27 17:39:15 +0200227endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200228
Bram Moolenaar0ad00a72022-05-22 11:59:25 +0100229func Test_setbufline_select_mode()
230 new
231 call setline(1, ['foo', 'bar'])
232 call feedkeys("j^v2l\<C-G>", 'nx')
233
234 let bufnr = bufadd('Xdummy')
235 call bufload(bufnr)
236 call setbufline(bufnr, 1, ['abc'])
237
238 call feedkeys("x", 'nx')
239 call assert_equal(['foo', 'x'], getline(1, 2))
240
241 exe "bwipe! " .. bufnr
242 bwipe!
243endfunc
244
LemonBoy9b2edfd2022-05-22 15:35:53 +0100245func Test_deletebufline_select_mode()
246 new
247 call setline(1, ['foo', 'bar'])
248 call feedkeys("j^v2l\<C-G>", 'nx')
249
250 let bufnr = bufadd('Xdummy')
251 call bufload(bufnr)
252 call setbufline(bufnr, 1, ['abc', 'def'])
253 call deletebufline(bufnr, 1)
254
255 call feedkeys("x", 'nx')
256 call assert_equal(['foo', 'x'], getline(1, 2))
257
258 exe "bwipe! " .. bufnr
259 bwipe!
260endfunc
261
zeertzjq93f72cc2022-08-26 15:34:52 +0100262func Test_setbufline_startup_nofile()
263 let before =<< trim [CODE]
264 set shortmess+=F
265 file Xresult
266 set buftype=nofile
267 call setbufline('', 1, 'success')
268 [CODE]
269 let after =<< trim [CODE]
270 set buftype=
271 write
272 quit
273 [CODE]
274
275 if !RunVim(before, after, '--clean')
276 return
277 endif
278 call assert_equal(['success'], readfile('Xresult'))
279 call delete('Xresult')
280endfunc
281
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200282" vim: shiftwidth=2 sts=2 expandtab