blob: d359f205d5d86f422819abbc8cad9702afd26313 [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()
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))
Bram Moolenaar17aca702019-05-16 22:24:55 +020013 call assert_equal(['bar'], getbufline(b, '$'))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020014 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
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020022
23 call assert_equal(1, setbufline(b, 5, 'x'))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020024 call assert_equal(1, setbufline(b, 5, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020025 call assert_equal(1, setbufline(b, 5, []))
26 call assert_equal(1, setbufline(b, 5, test_null_list()))
27
28 call assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
Bram Moolenaar196b4662019-09-06 21:34:30 +020029 call assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020030 call assert_equal(1, []->setbufline(bufnr('$') + 1, 1))
31 call assert_equal(1, test_null_list()->setbufline(bufnr('$') + 1, 1))
32
33 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
34
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020035 call assert_equal(0, setbufline(b, 4, ['d', 'e']))
Bram Moolenaar4c313b12019-08-24 22:58:31 +020036 call assert_equal(['c'], b->getbufline(3))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020037 call assert_equal(['d'], getbufline(b, 4))
38 call assert_equal(['e'], getbufline(b, 5))
39 call assert_equal([], getbufline(b, 6))
40 exe "bwipe! " . b
41endfunc
Bram Moolenaar9d954202017-09-04 20:34:19 +020042
Bram Moolenaar0c4dc882017-11-06 21:32:54 +010043func Test_setbufline_getbufline_fold()
44 split Xtest
45 setlocal foldmethod=expr foldexpr=0
46 let b = bufnr('%')
47 new
48 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
49 call assert_equal(['foo'], getbufline(b, 1))
50 call assert_equal(['bar'], getbufline(b, 2))
51 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
52 exe "bwipe!" b
53 bwipe!
54endfunc
55
56func Test_setbufline_getbufline_fold_tab()
57 split Xtest
58 setlocal foldmethod=expr foldexpr=0
59 let b = bufnr('%')
60 tab new
61 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
62 call assert_equal(['foo'], getbufline(b, 1))
63 call assert_equal(['bar'], getbufline(b, 2))
64 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
65 exe "bwipe!" b
66 bwipe!
67endfunc
68
Bram Moolenaar9d954202017-09-04 20:34:19 +020069func Test_setline_startup()
70 let cmd = GetVimCommand('Xscript')
71 if cmd == ''
72 return
73 endif
Bram Moolenaar11aa62f2017-09-04 22:56:01 +020074 call writefile(['call setline(1, "Hello")', 'silent w Xtest', 'q!'], 'Xscript')
Bram Moolenaar9d954202017-09-04 20:34:19 +020075 call system(cmd)
76 call assert_equal(['Hello'], readfile('Xtest'))
77
78 call delete('Xscript')
79 call delete('Xtest')
80endfunc
Bram Moolenaarca851592018-06-06 21:04:07 +020081
82func Test_appendbufline()
83 new
84 let b = bufnr('%')
85 hide
86 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
87 call assert_equal(['foo'], getbufline(b, 1))
88 call assert_equal(['bar'], getbufline(b, 2))
89 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
90 exe "bd!" b
91 call assert_equal([], getbufline(b, 1, 2))
92
93 split Xtest
94 call setline(1, ['a', 'b', 'c'])
95 let b = bufnr('%')
96 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020097
98 call assert_equal(1, appendbufline(b, -1, 'x'))
Bram Moolenaar17aca702019-05-16 22:24:55 +020099 call assert_equal(1, appendbufline(b, -1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200100 call assert_equal(1, appendbufline(b, -1, []))
101 call assert_equal(1, appendbufline(b, -1, test_null_list()))
102
103 call assert_equal(1, appendbufline(b, 4, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200104 call assert_equal(1, appendbufline(b, 4, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200105 call assert_equal(1, appendbufline(b, 4, []))
106 call assert_equal(1, appendbufline(b, 4, test_null_list()))
107
108 call assert_equal(1, appendbufline(1234, 1, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200109 call assert_equal(1, appendbufline(1234, 1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200110 call assert_equal(1, appendbufline(1234, 1, []))
111 call assert_equal(1, appendbufline(1234, 1, test_null_list()))
112
113 call assert_equal(0, appendbufline(b, 1, []))
114 call assert_equal(0, appendbufline(b, 1, test_null_list()))
115 call assert_equal(1, appendbufline(b, 3, []))
116 call assert_equal(1, appendbufline(b, 3, test_null_list()))
117
118 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
119
Bram Moolenaarca851592018-06-06 21:04:07 +0200120 call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
121 call assert_equal(['c'], getbufline(b, 3))
122 call assert_equal(['d'], getbufline(b, 4))
123 call assert_equal(['e'], getbufline(b, 5))
124 call assert_equal([], getbufline(b, 6))
125 exe "bwipe! " . b
126endfunc
Bram Moolenaard79a2622018-06-07 18:17:46 +0200127
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200128func Test_appendbufline_no_E315()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200129 let after =<< trim [CODE]
130 set stl=%f ls=2
131 new
132 let buf = bufnr("%")
133 quit
134 vsp
135 exec "buffer" buf
136 wincmd w
137 call appendbufline(buf, 0, "abc")
138 redraw
139 while getbufline(buf, 1)[0] =~ "^\\s*$"
140 sleep 10m
141 endwhile
142 au VimLeavePre * call writefile([v:errmsg], "Xerror")
143 au VimLeavePre * call writefile(["done"], "Xdone")
144 qall!
145 [CODE]
146
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200147 if !RunVim([], after, '--clean')
148 return
149 endif
150 call assert_notmatch("^E315:", readfile("Xerror")[0])
151 call assert_equal("done", readfile("Xdone")[0])
152 call delete("Xerror")
153 call delete("Xdone")
154endfunc
155
Bram Moolenaard79a2622018-06-07 18:17:46 +0200156func Test_deletebufline()
157 new
158 let b = bufnr('%')
159 call setline(1, ['aaa', 'bbb', 'ccc'])
160 hide
161 call assert_equal(0, deletebufline(b, 2))
162 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
163 call assert_equal(0, deletebufline(b, 2, 8))
164 call assert_equal(['aaa'], getbufline(b, 1, 2))
165 exe "bd!" b
Bram Moolenaar1a3a8912019-08-23 22:31:37 +0200166 call assert_equal(1, b->deletebufline(1))
Bram Moolenaard79a2622018-06-07 18:17:46 +0200167
Bram Moolenaar17aca702019-05-16 22:24:55 +0200168 call assert_equal(1, deletebufline(-1, 1))
169
Bram Moolenaard79a2622018-06-07 18:17:46 +0200170 split Xtest
171 call setline(1, ['a', 'b', 'c'])
Bram Moolenaar17aca702019-05-16 22:24:55 +0200172 call cursor(line('$'), 1)
Bram Moolenaard79a2622018-06-07 18:17:46 +0200173 let b = bufnr('%')
174 wincmd w
175 call assert_equal(1, deletebufline(b, 4))
176 call assert_equal(0, deletebufline(b, 1))
177 call assert_equal(['b', 'c'], getbufline(b, 1, 2))
178 exe "bwipe! " . b
179endfunc
Bram Moolenaar29846662019-07-27 17:39:15 +0200180
181func Test_appendbufline_redraw()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200182 CheckScreendump
183
Bram Moolenaar29846662019-07-27 17:39:15 +0200184 let lines =<< trim END
185 new foo
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200186 let winnr = 'foo'->bufwinnr()
187 let buf = bufnr('foo')
Bram Moolenaar29846662019-07-27 17:39:15 +0200188 wincmd p
189 call appendbufline(buf, '$', range(1,200))
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200190 exe winnr .. 'wincmd w'
Bram Moolenaar29846662019-07-27 17:39:15 +0200191 norm! G
192 wincmd p
193 call deletebufline(buf, 1, '$')
194 call appendbufline(buf, '$', 'Hello Vim world...')
195 END
196 call writefile(lines, 'XscriptMatchCommon')
197 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
Bram Moolenaar6a2c5a72020-04-08 21:50:25 +0200198 call TermWait(buf)
Bram Moolenaar29846662019-07-27 17:39:15 +0200199 call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
200
201 call StopVimInTerminal(buf)
202 call delete('XscriptMatchCommon')
203endfunc