blob: c437f36a86295563ec9d4f75138bcdde250cec29 [file] [log] [blame]
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001Tests for tab pages
2
3STARTTEST
4:so small.vim
Bram Moolenaar33e87782014-04-29 11:55:29 +02005:lang C
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00006:" Simple test for opening and closing a tab page
7:tabnew
8:let nr = tabpagenr()
9:q
10:call append(line('$'), 'tab page ' . nr)
Bram Moolenaar9d2c8c12007-09-25 16:00:00 +000011:unlet nr
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000012:"
13:" Open three tab pages and use ":tabdo"
14:0tabnew
15:1tabnew
Bram Moolenaar3ffc79a2015-01-07 15:57:17 +010016:$tabnew
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000017:tabdo call append(line('$'), 'this is tab page ' . tabpagenr())
18:tabclose! 2
19:tabrewind
20:let line1 = getline('$')
21:undo
22:q
23:tablast
24:let line2 = getline('$')
25:q!
26:call append(line('$'), line1)
27:call append(line('$'), line2)
Bram Moolenaar9d2c8c12007-09-25 16:00:00 +000028:unlet line1 line2
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000029:"
Bram Moolenaar20a825a2010-05-31 21:27:30 +020030:" Test for settabvar() and gettabvar() functions. Open a new tab page and
31:" set 3 variables to a number, string and a list. Verify that the variables
32:" are correctly set.
33:tabnew
34:tabfirst
35:call settabvar(2, 'val_num', 100)
36:call settabvar(2, 'val_str', 'SetTabVar test')
37:call settabvar(2, 'val_list', ['red', 'blue', 'green'])
38:"
39:let test_status = 'gettabvar: fail'
Bram Moolenaar6f394f82013-07-14 13:41:56 +020040:if gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test' && gettabvar(2, 'val_list') == ['red', 'blue', 'green']
Bram Moolenaar20a825a2010-05-31 21:27:30 +020041: let test_status = 'gettabvar: pass'
42:endif
43:call append(line('$'), test_status)
44:"
45:tabnext 2
46:let test_status = 'settabvar: fail'
47:if t:val_num == 100 && t:val_str == 'SetTabVar test' && t:val_list == ['red', 'blue', 'green']
48: let test_status = 'settabvar: pass'
49:endif
50:tabclose
51:call append(line('$'), test_status)
52:"
Bram Moolenaar7c578d32012-03-07 22:55:20 +010053:if has('gui') || has('clientserver')
Bram Moolenaar52379ea2012-02-22 19:13:08 +010054:" Test for ":tab drop exist-file" to keep current window.
55:sp test1
56:tab drop test1
57:let test_status = 'tab drop 1: fail'
58:if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
59: let test_status = 'tab drop 1: pass'
60:endif
61:close
62:call append(line('$'), test_status)
63:"
64:"
65:" Test for ":tab drop new-file" to keep current window of tabpage 1.
66:split
67:tab drop newfile
68:let test_status = 'tab drop 2: fail'
69:if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
70: let test_status = 'tab drop 2: pass'
71:endif
72:tabclose
73:q
74:call append(line('$'), test_status)
75:"
76:"
77:" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
78:new test1
79:tabnew
80:new test1
81:tab drop test1
82:let test_status = 'tab drop 3: fail'
83:if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
84: let test_status = 'tab drop 3: pass'
85:endif
86:tabclose
87:q
88:call append(line('$'), test_status)
Bram Moolenaar7c578d32012-03-07 22:55:20 +010089:else
90:" :drop not supported
91:call append(line('$'), 'tab drop 1: pass')
92:call append(line('$'), 'tab drop 2: pass')
93:call append(line('$'), 'tab drop 3: pass')
94:endif
Bram Moolenaar52379ea2012-02-22 19:13:08 +010095:"
96:"
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +020097:for i in range(9) | tabnew | endfor
981gt
Bram Moolenaar40ce3a42015-04-21 18:08:39 +020099:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200100:tabmove 5
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200101:$put =tabpagenr()
102:.tabmove
103:$put =tabpagenr()
104:tabmove -
105:$put =tabpagenr()
106:tabmove +
107:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200108:tabmove -2
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200109:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200110:tabmove +4
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200111:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200112:tabmove
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200113:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200114:tabmove -20
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200115:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200116:tabmove +20
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200117:$put =tabpagenr()
118:0tabmove
119:$put =tabpagenr()
120:$tabmove
121:$put =tabpagenr()
122:tabmove 0
123:$put =tabpagenr()
124:tabmove $
125:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200126:3tabmove
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200127:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200128:7tabmove 5
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200129:$put =tabpagenr()
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200130:let a='No error caught.'
131:try
132:tabmove foo
133:catch E474
134:let a='E474 caught.'
135:endtry
Bram Moolenaar40ce3a42015-04-21 18:08:39 +0200136:$put =a
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200137:"
Bram Moolenaar49e649f2013-05-06 04:50:35 +0200138:" Test autocommands
139:tabonly!
140:let g:r=[]
141:command -nargs=1 -bar C :call add(g:r, '=== ' . <q-args> . ' ===')|<args>
142:function Test()
143 let hasau=has('autocmd')
144 if hasau
145 autocmd TabEnter * :call add(g:r, 'TabEnter')
146 autocmd WinEnter * :call add(g:r, 'WinEnter')
147 autocmd BufEnter * :call add(g:r, 'BufEnter')
148 autocmd TabLeave * :call add(g:r, 'TabLeave')
149 autocmd WinLeave * :call add(g:r, 'WinLeave')
150 autocmd BufLeave * :call add(g:r, 'BufLeave')
151 endif
152 let t:a='a'
153 C tab split
154 if !hasau
155 let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter']
156 endif
157 let t:a='b'
158 C tabnew
159 if !hasau
160 let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter']
161 endif
162 let t:a='c'
163 call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
Bram Moolenaaree31be62013-07-14 12:21:57 +0200164 C call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)')
Bram Moolenaar49e649f2013-05-06 04:50:35 +0200165 call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
166 let w:a='a'
167 C vsplit
168 if !hasau
169 let g:r+=['WinLeave', 'WinEnter']
170 endif
171 let w:a='a'
172 let tabn=tabpagenr()
173 let winr=range(1, winnr('$'))
174 C tabnext 1
175 if !hasau
176 let g:r+=['BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter']
177 endif
178 call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
Bram Moolenaaree31be62013-07-14 12:21:57 +0200179 C call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)')
Bram Moolenaar49e649f2013-05-06 04:50:35 +0200180 call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
181 if hasau
182 augroup TabDestructive
183 autocmd TabEnter * :C tabnext 2 | C tabclose 3
184 augroup END
185 C tabnext 3
186 let g:r+=[tabpagenr().'/'.tabpagenr('$')]
187 autocmd! TabDestructive TabEnter
188 C tabnew
189 C tabnext 1
190 autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
191 C tabnext 3
192 let g:r+=[tabpagenr().'/'.tabpagenr('$')]
193 else
194 let g:r+=["=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","2/2","=== tabnew ===","WinLeave","TabLeave","WinEnter","TabEnter","BufLeave","BufEnter","=== tabnext 1 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","BufEnter","=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","BufEnter","=== tabclose 3 ===","2/2",]
195 endif
196endfunction
197:call Test()
198:$ put =g:r
199:"
Bram Moolenaar8cb8dca2012-07-06 18:27:39 +0200200:"
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000201:/^Results/,$w! test.out
202:qa!
203ENDTEST
204
205Results: