blob: eb46104a8931878a63dd24655bc3b1f1b3305791 [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 Moolenaar11aa62f2017-09-04 22:56:01 +02005
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02006func Test_setbufline_getbufline()
7 new
8 let b = bufnr('%')
9 hide
10 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
11 call assert_equal(['foo'], getbufline(b, 1))
Bram Moolenaar17aca702019-05-16 22:24:55 +020012 call assert_equal(['bar'], getbufline(b, '$'))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020013 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
14 exe "bd!" b
15 call assert_equal([], getbufline(b, 1, 2))
16
17 split Xtest
18 call setline(1, ['a', 'b', 'c'])
19 let b = bufnr('%')
20 wincmd w
21 call assert_equal(1, setbufline(b, 5, ['x']))
Bram Moolenaarabc7c7f2019-04-20 15:10:13 +020022 call assert_equal(1, setbufline(bufnr('$') + 1, 1, ['x']))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +020023 call assert_equal(0, setbufline(b, 4, ['d', 'e']))
24 call assert_equal(['c'], getbufline(b, 3))
25 call assert_equal(['d'], getbufline(b, 4))
26 call assert_equal(['e'], getbufline(b, 5))
27 call assert_equal([], getbufline(b, 6))
28 exe "bwipe! " . b
29endfunc
Bram Moolenaar9d954202017-09-04 20:34:19 +020030
Bram Moolenaar0c4dc882017-11-06 21:32:54 +010031func Test_setbufline_getbufline_fold()
32 split Xtest
33 setlocal foldmethod=expr foldexpr=0
34 let b = bufnr('%')
35 new
36 call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
37 call assert_equal(['foo'], getbufline(b, 1))
38 call assert_equal(['bar'], getbufline(b, 2))
39 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
40 exe "bwipe!" b
41 bwipe!
42endfunc
43
44func Test_setbufline_getbufline_fold_tab()
45 split Xtest
46 setlocal foldmethod=expr foldexpr=0
47 let b = bufnr('%')
48 tab 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
Bram Moolenaar9d954202017-09-04 20:34:19 +020057func Test_setline_startup()
58 let cmd = GetVimCommand('Xscript')
59 if cmd == ''
60 return
61 endif
Bram Moolenaar11aa62f2017-09-04 22:56:01 +020062 call writefile(['call setline(1, "Hello")', 'silent w Xtest', 'q!'], 'Xscript')
Bram Moolenaar9d954202017-09-04 20:34:19 +020063 call system(cmd)
64 call assert_equal(['Hello'], readfile('Xtest'))
65
66 call delete('Xscript')
67 call delete('Xtest')
68endfunc
Bram Moolenaarca851592018-06-06 21:04:07 +020069
70func Test_appendbufline()
71 new
72 let b = bufnr('%')
73 hide
74 call assert_equal(0, appendbufline(b, 0, ['foo', 'bar']))
75 call assert_equal(['foo'], getbufline(b, 1))
76 call assert_equal(['bar'], getbufline(b, 2))
77 call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
78 exe "bd!" b
79 call assert_equal([], getbufline(b, 1, 2))
80
81 split Xtest
82 call setline(1, ['a', 'b', 'c'])
83 let b = bufnr('%')
84 wincmd w
Bram Moolenaar17aca702019-05-16 22:24:55 +020085 call assert_equal(1, appendbufline(b, -1, ['x']))
Bram Moolenaarca851592018-06-06 21:04:07 +020086 call assert_equal(1, appendbufline(b, 4, ['x']))
87 call assert_equal(1, appendbufline(1234, 1, ['x']))
88 call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
89 call assert_equal(['c'], getbufline(b, 3))
90 call assert_equal(['d'], getbufline(b, 4))
91 call assert_equal(['e'], getbufline(b, 5))
92 call assert_equal([], getbufline(b, 6))
93 exe "bwipe! " . b
94endfunc
Bram Moolenaard79a2622018-06-07 18:17:46 +020095
Bram Moolenaar9cea87c2018-09-21 16:59:45 +020096func Test_appendbufline_no_E315()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020097 let after =<< trim [CODE]
98 set stl=%f ls=2
99 new
100 let buf = bufnr("%")
101 quit
102 vsp
103 exec "buffer" buf
104 wincmd w
105 call appendbufline(buf, 0, "abc")
106 redraw
107 while getbufline(buf, 1)[0] =~ "^\\s*$"
108 sleep 10m
109 endwhile
110 au VimLeavePre * call writefile([v:errmsg], "Xerror")
111 au VimLeavePre * call writefile(["done"], "Xdone")
112 qall!
113 [CODE]
114
Bram Moolenaar9cea87c2018-09-21 16:59:45 +0200115 if !RunVim([], after, '--clean')
116 return
117 endif
118 call assert_notmatch("^E315:", readfile("Xerror")[0])
119 call assert_equal("done", readfile("Xdone")[0])
120 call delete("Xerror")
121 call delete("Xdone")
122endfunc
123
Bram Moolenaard79a2622018-06-07 18:17:46 +0200124func Test_deletebufline()
125 new
126 let b = bufnr('%')
127 call setline(1, ['aaa', 'bbb', 'ccc'])
128 hide
129 call assert_equal(0, deletebufline(b, 2))
130 call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2))
131 call assert_equal(0, deletebufline(b, 2, 8))
132 call assert_equal(['aaa'], getbufline(b, 1, 2))
133 exe "bd!" b
134 call assert_equal(1, deletebufline(b, 1))
135
Bram Moolenaar17aca702019-05-16 22:24:55 +0200136 call assert_equal(1, deletebufline(-1, 1))
137
Bram Moolenaard79a2622018-06-07 18:17:46 +0200138 split Xtest
139 call setline(1, ['a', 'b', 'c'])
Bram Moolenaar17aca702019-05-16 22:24:55 +0200140 call cursor(line('$'), 1)
Bram Moolenaard79a2622018-06-07 18:17:46 +0200141 let b = bufnr('%')
142 wincmd w
143 call assert_equal(1, deletebufline(b, 4))
144 call assert_equal(0, deletebufline(b, 1))
145 call assert_equal(['b', 'c'], getbufline(b, 1, 2))
146 exe "bwipe! " . b
147endfunc
Bram Moolenaar29846662019-07-27 17:39:15 +0200148
149func Test_appendbufline_redraw()
150 if !CanRunVimInTerminal()
151 throw 'Skipped: cannot make screendumps'
152 endif
153 let lines =<< trim END
154 new foo
155 let winnr=bufwinnr('foo')
156 let buf=bufnr('foo')
157 wincmd p
158 call appendbufline(buf, '$', range(1,200))
159 exe winnr. 'wincmd w'
160 norm! G
161 wincmd p
162 call deletebufline(buf, 1, '$')
163 call appendbufline(buf, '$', 'Hello Vim world...')
164 END
165 call writefile(lines, 'XscriptMatchCommon')
166 let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
167 call term_wait(buf)
168 call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
169
170 call StopVimInTerminal(buf)
171 call delete('XscriptMatchCommon')
172endfunc