blob: 3326e7d2971f576421456b6473f5fceabc903418 [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))
Bram Moolenaar99fa7212020-04-26 15:59:55 +020040 call assert_equal([], getbufline(b, 2, 1))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020041 exe "bwipe! " . b
42endfunc
Bram Moolenaar9d954202017-09-04 20:34:19 +020043
Bram Moolenaar0c4dc882017-11-06 21:32:54 +010044func Test_setbufline_getbufline_fold()
45 split Xtest
46 setlocal foldmethod=expr foldexpr=0
47 let b = bufnr('%')
48 new
49 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
50 call assert_equal(['foo'], getbufline(b, 1))
51 call assert_equal(['bar'], getbufline(b, 2))
52 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
53 exe "bwipe!" b
54 bwipe!
55endfunc
56
57func Test_setbufline_getbufline_fold_tab()
58 split Xtest
59 setlocal foldmethod=expr foldexpr=0
60 let b = bufnr('%')
61 tab new
62 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
63 call assert_equal(['foo'], getbufline(b, 1))
64 call assert_equal(['bar'], getbufline(b, 2))
65 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
66 exe "bwipe!" b
67 bwipe!
68endfunc
69
Bram Moolenaar9d954202017-09-04 20:34:19 +020070func Test_setline_startup()
71 let cmd = GetVimCommand('Xscript')
72 if cmd == ''
73 return
74 endif
Bram Moolenaar11aa62f2017-09-04 22:56:01 +020075 call writefile(['call setline(1, "Hello")', 'silent w Xtest', 'q!'], 'Xscript')
Bram Moolenaar9d954202017-09-04 20:34:19 +020076 call system(cmd)
77 call assert_equal(['Hello'], readfile('Xtest'))
78
79 call delete('Xscript')
80 call delete('Xtest')
81endfunc
Bram Moolenaarca851592018-06-06 21:04:07 +020082
83func Test_appendbufline()
84 new
85 let b = bufnr('%')
86 hide
87 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
88 call assert_equal(['foo'], getbufline(b, 1))
89 call assert_equal(['bar'], getbufline(b, 2))
90 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
91 exe "bd!" b
92 call assert_equal([], getbufline(b, 1, 2))
93
94 split Xtest
95 call setline(1, ['a', 'b', 'c'])
96 let b = bufnr('%')
97 wincmd w
Bram Moolenaarad48e6c2020-04-21 22:19:45 +020098
99 call assert_equal(1, appendbufline(b, -1, 'x'))
Bram Moolenaar17aca702019-05-16 22:24:55 +0200100 call assert_equal(1, appendbufline(b, -1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200101 call assert_equal(1, appendbufline(b, -1, []))
102 call assert_equal(1, appendbufline(b, -1, test_null_list()))
103
104 call assert_equal(1, appendbufline(b, 4, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200105 call assert_equal(1, appendbufline(b, 4, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200106 call assert_equal(1, appendbufline(b, 4, []))
107 call assert_equal(1, appendbufline(b, 4, test_null_list()))
108
109 call assert_equal(1, appendbufline(1234, 1, 'x'))
Bram Moolenaarca851592018-06-06 21:04:07 +0200110 call assert_equal(1, appendbufline(1234, 1, ['x']))
Bram Moolenaarad48e6c2020-04-21 22:19:45 +0200111 call assert_equal(1, appendbufline(1234, 1, []))
112 call assert_equal(1, appendbufline(1234, 1, test_null_list()))
113
114 call assert_equal(0, appendbufline(b, 1, []))
115 call assert_equal(0, appendbufline(b, 1, test_null_list()))
116 call assert_equal(1, appendbufline(b, 3, []))
117 call assert_equal(1, appendbufline(b, 3, test_null_list()))
118
119 call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
120
Bram Moolenaarca851592018-06-06 21:04:07 +0200121 call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
122 call assert_equal(['c'], getbufline(b, 3))
123 call assert_equal(['d'], getbufline(b, 4))
124 call assert_equal(['e'], getbufline(b, 5))
125 call assert_equal([], getbufline(b, 6))
126 exe "bwipe! " . b
127endfunc
Bram Moolenaard79a2622018-06-07 18:17:46 +0200128
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200129func Test_appendbufline_no_E315()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200130 let after =<< trim [CODE]
131 set stl=%f ls=2
132 new
133 let buf = bufnr("%")
134 quit
135 vsp
136 exec "buffer" buf
137 wincmd w
138 call appendbufline(buf, 0, "abc")
139 redraw
140 while getbufline(buf, 1)[0] =~ "^\\s*$"
141 sleep 10m
142 endwhile
143 au VimLeavePre * call writefile([v:errmsg], "Xerror")
144 au VimLeavePre * call writefile(["done"], "Xdone")
145 qall!
146 [CODE]
147
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200148 if !RunVim([], after, '--clean')
149 return
150 endif
151 call assert_notmatch("^E315:", readfile("Xerror")[0])
152 call assert_equal("done", readfile("Xdone")[0])
153 call delete("Xerror")
154 call delete("Xdone")
155endfunc
156
Bram Moolenaard79a2622018-06-07 18:17:46 +0200157func Test_deletebufline()
158 new
159 let b = bufnr('%')
160 call setline(1, ['aaa', 'bbb', 'ccc'])
161 hide
162 call assert_equal(0, deletebufline(b, 2))
163 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
164 call assert_equal(0, deletebufline(b, 2, 8))
165 call assert_equal(['aaa'], getbufline(b, 1, 2))
166 exe "bd!" b
Bram Moolenaar1a3a8912019-08-23 22:31:37 +0200167 call assert_equal(1, b->deletebufline(1))
Bram Moolenaard79a2622018-06-07 18:17:46 +0200168
Bram Moolenaar17aca702019-05-16 22:24:55 +0200169 call assert_equal(1, deletebufline(-1, 1))
170
Bram Moolenaard79a2622018-06-07 18:17:46 +0200171 split Xtest
172 call setline(1, ['a', 'b', 'c'])
Bram Moolenaar17aca702019-05-16 22:24:55 +0200173 call cursor(line('$'), 1)
Bram Moolenaard79a2622018-06-07 18:17:46 +0200174 let b = bufnr('%')
175 wincmd w
176 call assert_equal(1, deletebufline(b, 4))
177 call assert_equal(0, deletebufline(b, 1))
178 call assert_equal(['b', 'c'], getbufline(b, 1, 2))
179 exe "bwipe! " . b
180endfunc
Bram Moolenaar29846662019-07-27 17:39:15 +0200181
182func Test_appendbufline_redraw()
Bram Moolenaar8c5a2782019-08-07 23:07:07 +0200183 CheckScreendump
184
Bram Moolenaar29846662019-07-27 17:39:15 +0200185 let lines =<< trim END
186 new foo
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200187 let winnr = 'foo'->bufwinnr()
188 let buf = bufnr('foo')
Bram Moolenaar29846662019-07-27 17:39:15 +0200189 wincmd p
190 call appendbufline(buf, '$', range(1,200))
Bram Moolenaare49fbff2019-08-21 22:50:07 +0200191 exe winnr .. 'wincmd w'
Bram Moolenaar29846662019-07-27 17:39:15 +0200192 norm! G
193 wincmd p
194 call deletebufline(buf, 1, '$')
195 call appendbufline(buf, '$', 'Hello Vim world...')
196 END
197 call writefile(lines, 'XscriptMatchCommon')
198 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
Bram Moolenaar6a2c5a72020-04-08 21:50:25 +0200199 call TermWait(buf)
Bram Moolenaar29846662019-07-27 17:39:15 +0200200 call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
201
202 call StopVimInTerminal(buf)
203 call delete('XscriptMatchCommon')
204endfunc