blob: f3502a3d4149396d741ff5da44a6580cd1e56594 [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 Moolenaarad48e6c2020-04-21 22:19:45 +020026 call assert_equal(1, setbufline(b, 5, []))
27 call assert_equal(1, setbufline(b, 5, test_null_list()))
28
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)
86 call assert_equal(['Hello'], readfile('Xtest'))
87
Bram Moolenaar9d954202017-09-04 20:34:19 +020088 call delete('Xtest')
89endfunc
Bram Moolenaarca851592018-06-06 21:04:07 +020090
91func Test_appendbufline()
92 new
93 let b = bufnr('%')
94 hide
95 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
96 call assert_equal(['foo'], getbufline(b, 1))
97 call assert_equal(['bar'], getbufline(b, 2))
98 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
99 exe "bd!" b
100 call assert_equal([], getbufline(b, 1, 2))
101
102 split Xtest
103 call setline(1, ['a', 'b', 'c'])
104 let b = bufnr('%')
105 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200106
107 call assert_equal(1, appendbufline(b, -1, 'x'))
Bram Moolenaar17aca702019-05-16 22:24:55 +0200108 call assert_equal(1, appendbufline(b, -1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200109 call assert_equal(1, appendbufline(b, -1, []))
110 call assert_equal(1, appendbufline(b, -1, test_null_list()))
111
112 call assert_equal(1, appendbufline(b, 4, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200113 call assert_equal(1, appendbufline(b, 4, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200114 call assert_equal(1, appendbufline(b, 4, []))
115 call assert_equal(1, appendbufline(b, 4, test_null_list()))
116
117 call assert_equal(1, appendbufline(1234, 1, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200118 call assert_equal(1, appendbufline(1234, 1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200119 call assert_equal(1, appendbufline(1234, 1, []))
120 call assert_equal(1, appendbufline(1234, 1, test_null_list()))
121
122 call assert_equal(0, appendbufline(b, 1, []))
123 call assert_equal(0, appendbufline(b, 1, test_null_list()))
124 call assert_equal(1, appendbufline(b, 3, []))
125 call assert_equal(1, appendbufline(b, 3, test_null_list()))
126
127 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
128
Bram Moolenaarca851592018-06-06 21:04:07 +0200129 call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
130 call assert_equal(['c'], getbufline(b, 3))
131 call assert_equal(['d'], getbufline(b, 4))
132 call assert_equal(['e'], getbufline(b, 5))
133 call assert_equal([], getbufline(b, 6))
134 exe "bwipe! " . b
135endfunc
Bram Moolenaard79a2622018-06-07 18:17:46 +0200136
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200137func Test_appendbufline_no_E315()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200138 let after =<< trim [CODE]
139 set stl=%f ls=2
140 new
141 let buf = bufnr("%")
142 quit
143 vsp
144 exec "buffer" buf
145 wincmd w
146 call appendbufline(buf, 0, "abc")
147 redraw
148 while getbufline(buf, 1)[0] =~ "^\\s*$"
149 sleep 10m
150 endwhile
151 au VimLeavePre * call writefile([v:errmsg], "Xerror")
152 au VimLeavePre * call writefile(["done"], "Xdone")
153 qall!
154 [CODE]
155
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200156 if !RunVim([], after, '--clean')
157 return
158 endif
159 call assert_notmatch("^E315:", readfile("Xerror")[0])
160 call assert_equal("done", readfile("Xdone")[0])
161 call delete("Xerror")
162 call delete("Xdone")
163endfunc
164
Bram Moolenaard79a2622018-06-07 18:17:46 +0200165func Test_deletebufline()
166 new
167 let b = bufnr('%')
168 call setline(1, ['aaa', 'bbb', 'ccc'])
169 hide
170 call assert_equal(0, deletebufline(b, 2))
171 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
172 call assert_equal(0, deletebufline(b, 2, 8))
173 call assert_equal(['aaa'], getbufline(b, 1, 2))
174 exe "bd!" b
Bram Moolenaar1a3a8912019-08-23 22:31:37 +0200175 call assert_equal(1, b->deletebufline(1))
Bram Moolenaard79a2622018-06-07 18:17:46 +0200176
Bram Moolenaar17aca702019-05-16 22:24:55 +0200177 call assert_equal(1, deletebufline(-1, 1))
178
Bram Moolenaard79a2622018-06-07 18:17:46 +0200179 split Xtest
180 call setline(1, ['a', 'b', 'c'])
Bram Moolenaar17aca702019-05-16 22:24:55 +0200181 call cursor(line('$'), 1)
Bram Moolenaard79a2622018-06-07 18:17:46 +0200182 let b = bufnr('%')
183 wincmd w
184 call assert_equal(1, deletebufline(b, 4))
185 call assert_equal(0, deletebufline(b, 1))
186 call assert_equal(['b', 'c'], getbufline(b, 1, 2))
187 exe "bwipe! " . b
Bram Moolenaar963ffa02021-02-09 20:02:55 +0100188
189 edit XbufOne
190 let one = bufnr()
191 call setline(1, ['a', 'b', 'c'])
192 setlocal nomodifiable
193 split XbufTwo
194 let two = bufnr()
195 call assert_fails('call deletebufline(one, 1)', 'E21:')
196 call assert_equal(two, bufnr())
197 bwipe! XbufTwo
198 bwipe! XbufOne
Bram Moolenaard79a2622018-06-07 18:17:46 +0200199endfunc
Bram Moolenaar29846662019-07-27 17:39:15 +0200200
201func Test_appendbufline_redraw()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200202 CheckScreendump
203
Bram Moolenaar29846662019-07-27 17:39:15 +0200204 let lines =<< trim END
205 new foo
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200206 let winnr = 'foo'->bufwinnr()
207 let buf = bufnr('foo')
Bram Moolenaar29846662019-07-27 17:39:15 +0200208 wincmd p
209 call appendbufline(buf, '$', range(1,200))
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200210 exe winnr .. 'wincmd w'
Bram Moolenaar29846662019-07-27 17:39:15 +0200211 norm! G
212 wincmd p
213 call deletebufline(buf, 1, '$')
214 call appendbufline(buf, '$', 'Hello Vim world...')
215 END
Bram Moolenaar34112652022-09-05 21:40:44 +0100216 call writefile(lines, 'XscriptMatchCommon', 'D')
Bram Moolenaar29846662019-07-27 17:39:15 +0200217 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
Bram Moolenaar29846662019-07-27 17:39:15 +0200218 call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
219
220 call StopVimInTerminal(buf)
Bram Moolenaar29846662019-07-27 17:39:15 +0200221endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200222
Bram Moolenaar0ad00a72022-05-22 11:59:25 +0100223func Test_setbufline_select_mode()
224 new
225 call setline(1, ['foo', 'bar'])
226 call feedkeys("j^v2l\<C-G>", 'nx')
227
228 let bufnr = bufadd('Xdummy')
229 call bufload(bufnr)
230 call setbufline(bufnr, 1, ['abc'])
231
232 call feedkeys("x", 'nx')
233 call assert_equal(['foo', 'x'], getline(1, 2))
234
235 exe "bwipe! " .. bufnr
236 bwipe!
237endfunc
238
LemonBoy9b2edfd2022-05-22 15:35:53 +0100239func Test_deletebufline_select_mode()
240 new
241 call setline(1, ['foo', 'bar'])
242 call feedkeys("j^v2l\<C-G>", 'nx')
243
244 let bufnr = bufadd('Xdummy')
245 call bufload(bufnr)
246 call setbufline(bufnr, 1, ['abc', 'def'])
247 call deletebufline(bufnr, 1)
248
249 call feedkeys("x", 'nx')
250 call assert_equal(['foo', 'x'], getline(1, 2))
251
252 exe "bwipe! " .. bufnr
253 bwipe!
254endfunc
255
zeertzjq93f72cc2022-08-26 15:34:52 +0100256func Test_setbufline_startup_nofile()
257 let before =<< trim [CODE]
258 set shortmess+=F
259 file Xresult
260 set buftype=nofile
261 call setbufline('', 1, 'success')
262 [CODE]
263 let after =<< trim [CODE]
264 set buftype=
265 write
266 quit
267 [CODE]
268
269 if !RunVim(before, after, '--clean')
270 return
271 endif
272 call assert_equal(['success'], readfile('Xresult'))
273 call delete('Xresult')
274endfunc
275
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200276" vim: shiftwidth=2 sts=2 expandtab