blob: 1517a9b730548cd32a30c53da9c3ccdafedb76b4 [file] [log] [blame]
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02001" Tests for the getbufinfo(), getwininfo() and gettabinfo() functions
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +02002
Bram Moolenaar5a4c3082019-12-01 15:23:11 +01003source check.vim
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004
Bram Moolenaar5a4c3082019-12-01 15:23:11 +01005func Test_getbufwintabinfo()
6 CheckFeature quickfix
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02007
Bram Moolenaar5a4c3082019-12-01 15:23:11 +01008 edit Xtestfile1
9 edit Xtestfile2
10 let buflist = getbufinfo()
11 call assert_equal(2, len(buflist))
12 call assert_match('Xtestfile1', buflist[0].name)
13 call assert_match('Xtestfile2', getbufinfo('Xtestfile2')[0].name)
14 call assert_equal([], getbufinfo(2016))
15 edit Xtestfile1
16 hide edit Xtestfile2
17 hide enew
18 call assert_equal(3, len(getbufinfo({'bufloaded':1})))
19
20 set tabstop&vim
21 let b:editor = 'vim'
22 let l = getbufinfo('%')
23 call assert_equal(bufnr('%'), l[0].bufnr)
24 call assert_equal('vim', l[0].variables.editor)
25 call assert_notequal(-1, index(l[0].windows, '%'->bufwinid()))
26
Bram Moolenaar6434fc52020-07-18 22:24:22 +020027 let l = '%'->getbufinfo()
28 call assert_equal(bufnr('%'), l[0].bufnr)
29
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010030 " Test for getbufinfo() with 'bufmodified'
31 call assert_equal(0, len(getbufinfo({'bufmodified' : 1})))
32 call setbufline('Xtestfile1', 1, ["Line1"])
33 let l = getbufinfo({'bufmodified' : 1})
34 call assert_equal(1, len(l))
35 call assert_equal(bufnr('Xtestfile1'), l[0].bufnr)
36
37 if has('signs')
38 call append(0, ['Linux', 'Windows', 'Mac'])
39 sign define Mark text=>> texthl=Search
40 exe "sign place 2 line=3 name=Mark buffer=" . bufnr('%')
Bram Moolenaar386600f2016-08-15 22:16:25 +020041 let l = getbufinfo('%')
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010042 call assert_equal(2, l[0].signs[0].id)
43 call assert_equal(3, l[0].signs[0].lnum)
44 call assert_equal('Mark', l[0].signs[0].name)
45 sign unplace *
46 sign undefine Mark
47 enew!
48 endif
Bram Moolenaar92b83cc2020-04-25 15:24:44 +020049 call assert_notequal([], getbufinfo(test_null_dict()))
Bram Moolenaar386600f2016-08-15 22:16:25 +020050
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010051 only
52 let w1_id = win_getid()
Bram Moolenaarcdf5fdb2021-11-20 11:14:24 +000053 setl foldcolumn=3
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010054 new
55 let w2_id = win_getid()
56 tabnew | let w3_id = win_getid()
57 new | let w4_id = win_getid()
58 vert new | let w5_id = win_getid()
59 eval 'green'->setwinvar(0, 'signal')
60 tabfirst
61 let winlist = getwininfo()
62 call assert_equal(5, len(winlist))
63 call assert_equal(winwidth(1), winlist[0].width)
64 call assert_equal(1, winlist[0].wincol)
65 " tabline adds one row in terminal, not in GUI
66 let tablineheight = winlist[0].winrow == 2 ? 1 : 0
67 call assert_equal(tablineheight + 1, winlist[0].winrow)
Bram Moolenaar8e6a31d2017-12-10 21:06:22 +010068
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010069 call assert_equal(winbufnr(2), winlist[1].bufnr)
70 call assert_equal(winheight(2), winlist[1].height)
71 call assert_equal(1, winlist[1].wincol)
Bram Moolenaarcdf5fdb2021-11-20 11:14:24 +000072 call assert_equal(3, winlist[1].textoff) " foldcolumn
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010073 call assert_equal(tablineheight + winheight(1) + 2, winlist[1].winrow)
Bram Moolenaar386600f2016-08-15 22:16:25 +020074
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010075 call assert_equal(1, winlist[2].winnr)
76 call assert_equal(tablineheight + 1, winlist[2].winrow)
77 call assert_equal(1, winlist[2].wincol)
Bram Moolenaarb6959a82018-07-14 21:41:44 +020078
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010079 call assert_equal(winlist[2].width + 2, winlist[3].wincol)
80 call assert_equal(1, winlist[4].wincol)
Bram Moolenaarb6959a82018-07-14 21:41:44 +020081
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010082 call assert_equal(1, winlist[0].tabnr)
83 call assert_equal(1, winlist[1].tabnr)
84 call assert_equal(2, winlist[2].tabnr)
85 call assert_equal(2, winlist[3].tabnr)
86 call assert_equal(2, winlist[4].tabnr)
Bram Moolenaarb6959a82018-07-14 21:41:44 +020087
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010088 call assert_equal('green', winlist[2].variables.signal)
89 call assert_equal(w4_id, winlist[3].winid)
90 let winfo = w5_id->getwininfo()[0]
91 call assert_equal(2, winfo.tabnr)
92 call assert_equal([], getwininfo(3))
Bram Moolenaarb6959a82018-07-14 21:41:44 +020093
Bram Moolenaar5a4c3082019-12-01 15:23:11 +010094 call settabvar(1, 'space', 'build')
95 let tablist = gettabinfo()
96 call assert_equal(2, len(tablist))
97 call assert_equal(3, len(tablist[1].windows))
98 call assert_equal(2, tablist[1].tabnr)
99 call assert_equal('build', tablist[0].variables.space)
100 call assert_equal(w2_id, tablist[0].windows[0])
101 call assert_equal([], 3->gettabinfo())
Bram Moolenaarb6959a82018-07-14 21:41:44 +0200102
Bram Moolenaar5a4c3082019-12-01 15:23:11 +0100103 tabonly | only
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +0200104
Bram Moolenaar5a4c3082019-12-01 15:23:11 +0100105 lexpr ''
106 lopen
107 copen
108 let winlist = getwininfo()
109 call assert_false(winlist[0].quickfix)
110 call assert_false(winlist[0].loclist)
111 call assert_true(winlist[1].quickfix)
112 call assert_true(winlist[1].loclist)
113 call assert_true(winlist[2].quickfix)
114 call assert_false(winlist[2].loclist)
115 wincmd t | only
116endfunc
Bram Moolenaar30567352016-08-27 21:25:44 +0200117
glepnir0a850672024-11-25 19:39:04 +0100118function Test_get_wininfo_leftcol()
119 set nowrap
120 set winwidth=10
121 vsp
122 call setline(1, ['abcdefghijklmnopqrstuvwxyz'])
123 norm! 5zl
124 call assert_equal(5, getwininfo()[0].leftcol)
125 bwipe!
126 set wrap&
127 set winwidth&
128endfunc
129
Bram Moolenaar30567352016-08-27 21:25:44 +0200130function Test_get_buf_options()
Bram Moolenaar4c313b12019-08-24 22:58:31 +0200131 let opts = bufnr()->getbufvar('&')
Bram Moolenaar30567352016-08-27 21:25:44 +0200132 call assert_equal(v:t_dict, type(opts))
133 call assert_equal(8, opts.tabstop)
134endfunc
135
136function Test_get_win_options()
Bram Moolenaar789a5c02016-09-12 19:51:11 +0200137 if has('folding')
138 set foldlevel=999
139 endif
140 set list
Bram Moolenaar30567352016-08-27 21:25:44 +0200141 let opts = getwinvar(1, '&')
142 call assert_equal(v:t_dict, type(opts))
143 call assert_equal(0, opts.linebreak)
Bram Moolenaar789a5c02016-09-12 19:51:11 +0200144 call assert_equal(1, opts.list)
145 if has('folding')
146 call assert_equal(999, opts.foldlevel)
147 endif
Bram Moolenaar30567352016-08-27 21:25:44 +0200148 if has('signs')
149 call assert_equal('auto', opts.signcolumn)
150 endif
151
152 let opts = gettabwinvar(1, 1, '&')
153 call assert_equal(v:t_dict, type(opts))
154 call assert_equal(0, opts.linebreak)
Bram Moolenaar789a5c02016-09-12 19:51:11 +0200155 call assert_equal(1, opts.list)
Bram Moolenaar30567352016-08-27 21:25:44 +0200156 if has('signs')
157 call assert_equal('auto', opts.signcolumn)
158 endif
Bram Moolenaar789a5c02016-09-12 19:51:11 +0200159 set list&
160 if has('folding')
161 set foldlevel=0
162 endif
Bram Moolenaar30567352016-08-27 21:25:44 +0200163endfunc
Bram Moolenaar52410572019-10-27 05:12:45 +0100164
165function Test_getbufinfo_lastused()
166 call test_settime(1234567)
167 edit Xtestfile1
168 enew
169 call test_settime(7654321)
170 edit Xtestfile2
171 enew
172 call assert_equal(getbufinfo('Xtestfile1')[0].lastused, 1234567)
173 call assert_equal(getbufinfo('Xtestfile2')[0].lastused, 7654321)
174 call test_settime(0)
175endfunc
Bram Moolenaara9e96792019-12-17 22:40:15 +0100176
177func Test_getbufinfo_lines()
178 new Xfoo
179 call setline(1, ['a', 'bc', 'd'])
180 let bn = bufnr('%')
181 hide
182 call assert_equal(3, getbufinfo(bn)[0]["linecount"])
183 edit Xfoo
184 bw!
185endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200186
LemonBoy8530b412022-04-20 19:00:36 +0100187func Test_getwininfo_au()
188 enew
189 call setline(1, range(1, 16))
190
191 let g:info = #{}
192 augroup T1
193 au!
194 au WinEnter * let g:info = getwininfo(win_getid())[0]
195 augroup END
196
197 4split
198 " Check that calling getwininfo() from WinEnter returns fresh values for
199 " topline and botline.
200 call assert_equal(1, g:info.topline)
201 call assert_equal(4, g:info.botline)
202 close
203
204 unlet g:info
205 augroup! T1
206 bwipe!
207endfunc
208
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200209" vim: shiftwidth=2 sts=2 expandtab