blob: 1720107458687bfc599618f27dcdc471e9aa1d24 [file] [log] [blame]
Bram Moolenaar1381d792016-08-18 22:11:42 +02001" Tests for tabpage
2
3function Test_tabpage()
4 bw!
5 " Simple test for opening and closing a tab page
6 tabnew
7 call assert_equal(2, tabpagenr())
8 quit
9
10 " Open three tab pages and use ":tabdo"
11 0tabnew
12 1tabnew
13 $tabnew
Bram Moolenaar3e8474d2016-10-12 17:52:42 +020014 %del
Bram Moolenaar1381d792016-08-18 22:11:42 +020015 tabdo call append(line('$'), tabpagenr())
16 tabclose! 2
17 tabrewind
18 let line1 = getline('$')
19 undo
20 q
21 tablast
22 let line2 = getline('$')
23 q!
24 call append(line('$'), line1)
25 call append(line('$'), line2)
26 unlet line1 line2
27 call assert_equal(['', '3', '1', '4'], getline(1, '$'))
28 "
29 " Test for settabvar() and gettabvar() functions. Open a new tab page and
30 " set 3 variables to a number, string and a list. Verify that the variables
31 " are correctly set.
32 tabnew
33 tabfirst
34 call settabvar(2, 'val_num', 100)
35 call settabvar(2, 'val_str', 'SetTabVar test')
36 call settabvar(2, 'val_list', ['red', 'blue', 'green'])
37 "
38 call assert_true(gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test' && gettabvar(2, 'val_list') == ['red', 'blue', 'green'])
39
40 tabnext 2
41 call assert_true(t:val_num == 100 && t:val_str == 'SetTabVar test' && t:val_list == ['red', 'blue', 'green'])
42 tabclose
43
44 if has('gui') || has('clientserver')
45 " Test for ":tab drop exist-file" to keep current window.
46 sp test1
47 tab drop test1
48 call assert_true(tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1)
49 close
50 "
51 "
52 " Test for ":tab drop new-file" to keep current window of tabpage 1.
53 split
54 tab drop newfile
55 call assert_true(tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1)
56 tabclose
57 q
58 "
59 "
60 " Test for ":tab drop multi-opend-file" to keep current tabpage and window.
61 new test1
62 tabnew
63 new test1
64 tab drop test1
65 call assert_true(tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1)
66 tabclose
67 q
Bram Moolenaar5a030a52016-12-01 17:48:29 +010068 "
69 "
70 " Test for ":tab drop vertical-split-window" to jump test1 buffer
71 tabedit test1
72 vnew
73 tabfirst
74 tab drop test1
75 call assert_equal([2, 2, 2, 2], [tabpagenr('$'), tabpagenr(), tabpagewinnr(2, '$'), tabpagewinnr(2)])
76 1tabonly
Bram Moolenaar1381d792016-08-18 22:11:42 +020077 endif
78 "
79 "
80 for i in range(9) | tabnew | endfor
81 normal! 1gt
82 call assert_equal(1, tabpagenr())
83 tabmove 5
84 call assert_equal(5, tabpagenr())
85 .tabmove
86 call assert_equal(5, tabpagenr())
87 tabmove -
88 call assert_equal(4, tabpagenr())
89 tabmove +
90 call assert_equal(5, tabpagenr())
91 tabmove -2
92 call assert_equal(3, tabpagenr())
93 tabmove +4
94 call assert_equal(7, tabpagenr())
95 tabmove
96 call assert_equal(10, tabpagenr())
97 tabmove -20
98 call assert_equal(1, tabpagenr())
99 tabmove +20
100 call assert_equal(10, tabpagenr())
101 0tabmove
102 call assert_equal(1, tabpagenr())
103 $tabmove
104 call assert_equal(10, tabpagenr())
105 tabmove 0
106 call assert_equal(1, tabpagenr())
107 tabmove $
108 call assert_equal(10, tabpagenr())
109 3tabmove
110 call assert_equal(4, tabpagenr())
111 7tabmove 5
112 call assert_equal(5, tabpagenr())
113 call assert_fails("tabmove foo", 'E474:')
114endfunc
115
116" Test autocommands
117function Test_tabpage_with_autocmd()
118 if !has('autocmd')
119 return
120 endif
121 tabonly!
122 command -nargs=1 -bar C :call add(s:li, '=== ' . <q-args> . ' ===')|<args>
123 augroup TestTabpageGroup
124 au!
125 autocmd TabEnter * call add(s:li, 'TabEnter')
126 autocmd WinEnter * call add(s:li, 'WinEnter')
127 autocmd BufEnter * call add(s:li, 'BufEnter')
128 autocmd TabLeave * call add(s:li, 'TabLeave')
129 autocmd WinLeave * call add(s:li, 'WinLeave')
130 autocmd BufLeave * call add(s:li, 'BufLeave')
131 augroup END
132
133 let s:li = []
134 let t:a='a'
135 C tab split
136 call assert_equal(['=== tab split ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter'], s:li)
137 let s:li = []
138 let t:a='b'
139 C tabnew
140 call assert_equal(['=== tabnew ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter'], s:li)
141 let t:a='c'
142 let s:li = split(join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')) , '\s\+')
143 call assert_equal(['a', 'b', 'c'], s:li)
144
145 let s:li = []
146 C call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)')
147 call assert_equal(["=== call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)') ==="], s:li)
148 let s:li = split(join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')) , '\s\+')
149 call assert_equal(['2', '4', '6'], s:li)
150
151 let s:li = []
152 let w:a='a'
153 C vsplit
154 call assert_equal(['=== vsplit ===', 'WinLeave', 'WinEnter'], s:li)
155 let s:li = []
156 let w:a='a'
157 let tabn=tabpagenr()
158 let winr=range(1, winnr('$'))
159 C tabnext 1
160 call assert_equal(['=== tabnext 1 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
161 let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
162 call assert_equal(['a', 'a'], s:li)
163 let s:li = []
164 C call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)')
165 let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
166 call assert_equal(['2', '4'], s:li)
167
168 augroup TabDestructive
169 autocmd TabEnter * :C tabnext 2 | C tabclose 3
170 augroup END
171 let s:li = []
172 C tabnext 3
173 call assert_equal(['=== tabnext 3 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', '=== tabclose 3 ==='], s:li)
174 call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
175
176 autocmd! TabDestructive TabEnter
177 let s:li = []
178 C tabnew
179 call assert_equal(['=== tabnew ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter'], s:li)
180 let s:li = []
181 C tabnext 1
182 call assert_equal(['=== tabnext 1 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
183
184 autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
185 let s:li = []
186 C tabnext 3
187 call assert_equal(['=== tabnext 3 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', '=== tabclose 3 ===', 'BufEnter', '=== tabclose 3 ==='], s:li)
188 call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
189
190 delcommand C
191 autocmd! TabDestructive
192 augroup! TabDestructive
193 autocmd! TestTabpageGroup
194 augroup! TestTabpageGroup
195 tabonly!
196 bw!
197endfunction
198
Bram Moolenaar9b7f8ce2016-08-21 19:07:17 +0200199function Test_tabpage_with_tab_modifier()
200 for n in range(4)
201 tabedit
202 endfor
203
204 function s:check_tab(pre_nr, cmd, post_nr)
205 exec 'tabnext ' . a:pre_nr
206 exec a:cmd
207 call assert_equal(a:post_nr, tabpagenr())
Bram Moolenaar100f5c92016-09-06 21:33:52 +0200208 call assert_equal('help', &buftype)
Bram Moolenaar9b7f8ce2016-08-21 19:07:17 +0200209 helpclose
210 endfunc
211
212 call s:check_tab(1, 'tab help', 2)
213 call s:check_tab(1, '3tab help', 4)
214 call s:check_tab(1, '.tab help', 2)
215 call s:check_tab(1, '.+1tab help', 3)
216 call s:check_tab(1, '0tab help', 1)
217 call s:check_tab(2, '+tab help', 4)
218 call s:check_tab(2, '+2tab help', 5)
219 call s:check_tab(4, '-tab help', 4)
220 call s:check_tab(4, '-2tab help', 3)
221 call s:check_tab(3, '$tab help', 6)
222 call assert_fails('99tab help', 'E16:')
223 call assert_fails('+99tab help', 'E16:')
224 call assert_fails('-99tab help', 'E16:')
225
226 delfunction s:check_tab
227 tabonly!
228 bw!
229endfunction
230
Bram Moolenaar5a497892016-09-03 16:29:04 +0200231func Test_tabnext_on_buf_unload1()
Bram Moolenaar11fbc282016-09-02 21:48:32 +0200232 " This once caused a crash
233 new
234 tabedit
235 tabfirst
236 au BufUnload <buffer> tabnext
237 q
238
239 while tabpagenr('$') > 1
Bram Moolenaar5a497892016-09-03 16:29:04 +0200240 bwipe!
241 endwhile
242endfunc
243
244func Test_tabnext_on_buf_unload2()
245 " This once caused a crash
246 tabedit
247 autocmd BufUnload <buffer> tabnext
248 file x
249 edit y
250
251 while tabpagenr('$') > 1
252 bwipe!
Bram Moolenaar11fbc282016-09-02 21:48:32 +0200253 endwhile
254endfunc
255
256
Bram Moolenaar1381d792016-08-18 22:11:42 +0200257" vim: shiftwidth=2 sts=2 expandtab