forked from aniani/vim
Problem: ":tabmove" does not work as documented.
Solution: Make it work consistently. Update documentation and add tests.
(Hirohito Higashi)
206 lines
5.6 KiB
Plaintext
206 lines
5.6 KiB
Plaintext
Tests for tab pages
|
|
|
|
STARTTEST
|
|
:so small.vim
|
|
:lang C
|
|
:" Simple test for opening and closing a tab page
|
|
:tabnew
|
|
:let nr = tabpagenr()
|
|
:q
|
|
:call append(line('$'), 'tab page ' . nr)
|
|
:unlet nr
|
|
:"
|
|
:" Open three tab pages and use ":tabdo"
|
|
:0tabnew
|
|
:1tabnew
|
|
:$tabnew
|
|
:tabdo call append(line('$'), 'this is tab page ' . tabpagenr())
|
|
:tabclose! 2
|
|
:tabrewind
|
|
:let line1 = getline('$')
|
|
:undo
|
|
:q
|
|
:tablast
|
|
:let line2 = getline('$')
|
|
:q!
|
|
:call append(line('$'), line1)
|
|
:call append(line('$'), line2)
|
|
:unlet line1 line2
|
|
:"
|
|
:" Test for settabvar() and gettabvar() functions. Open a new tab page and
|
|
:" set 3 variables to a number, string and a list. Verify that the variables
|
|
:" are correctly set.
|
|
:tabnew
|
|
:tabfirst
|
|
:call settabvar(2, 'val_num', 100)
|
|
:call settabvar(2, 'val_str', 'SetTabVar test')
|
|
:call settabvar(2, 'val_list', ['red', 'blue', 'green'])
|
|
:"
|
|
:let test_status = 'gettabvar: fail'
|
|
:if gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test' && gettabvar(2, 'val_list') == ['red', 'blue', 'green']
|
|
: let test_status = 'gettabvar: pass'
|
|
:endif
|
|
:call append(line('$'), test_status)
|
|
:"
|
|
:tabnext 2
|
|
:let test_status = 'settabvar: fail'
|
|
:if t:val_num == 100 && t:val_str == 'SetTabVar test' && t:val_list == ['red', 'blue', 'green']
|
|
: let test_status = 'settabvar: pass'
|
|
:endif
|
|
:tabclose
|
|
:call append(line('$'), test_status)
|
|
:"
|
|
:if has('gui') || has('clientserver')
|
|
:" Test for ":tab drop exist-file" to keep current window.
|
|
:sp test1
|
|
:tab drop test1
|
|
:let test_status = 'tab drop 1: fail'
|
|
:if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
|
|
: let test_status = 'tab drop 1: pass'
|
|
:endif
|
|
:close
|
|
:call append(line('$'), test_status)
|
|
:"
|
|
:"
|
|
:" Test for ":tab drop new-file" to keep current window of tabpage 1.
|
|
:split
|
|
:tab drop newfile
|
|
:let test_status = 'tab drop 2: fail'
|
|
:if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
|
|
: let test_status = 'tab drop 2: pass'
|
|
:endif
|
|
:tabclose
|
|
:q
|
|
:call append(line('$'), test_status)
|
|
:"
|
|
:"
|
|
:" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
|
|
:new test1
|
|
:tabnew
|
|
:new test1
|
|
:tab drop test1
|
|
:let test_status = 'tab drop 3: fail'
|
|
:if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
|
|
: let test_status = 'tab drop 3: pass'
|
|
:endif
|
|
:tabclose
|
|
:q
|
|
:call append(line('$'), test_status)
|
|
:else
|
|
:" :drop not supported
|
|
:call append(line('$'), 'tab drop 1: pass')
|
|
:call append(line('$'), 'tab drop 2: pass')
|
|
:call append(line('$'), 'tab drop 3: pass')
|
|
:endif
|
|
:"
|
|
:"
|
|
:for i in range(9) | tabnew | endfor
|
|
1gt
|
|
:$put =tabpagenr()
|
|
:tabmove 5
|
|
:$put =tabpagenr()
|
|
:.tabmove
|
|
:$put =tabpagenr()
|
|
:tabmove -
|
|
:$put =tabpagenr()
|
|
:tabmove +
|
|
:$put =tabpagenr()
|
|
:tabmove -2
|
|
:$put =tabpagenr()
|
|
:tabmove +4
|
|
:$put =tabpagenr()
|
|
:tabmove
|
|
:$put =tabpagenr()
|
|
:tabmove -20
|
|
:$put =tabpagenr()
|
|
:tabmove +20
|
|
:$put =tabpagenr()
|
|
:0tabmove
|
|
:$put =tabpagenr()
|
|
:$tabmove
|
|
:$put =tabpagenr()
|
|
:tabmove 0
|
|
:$put =tabpagenr()
|
|
:tabmove $
|
|
:$put =tabpagenr()
|
|
:3tabmove
|
|
:$put =tabpagenr()
|
|
:7tabmove 5
|
|
:$put =tabpagenr()
|
|
:let a='No error caught.'
|
|
:try
|
|
:tabmove foo
|
|
:catch E474
|
|
:let a='E474 caught.'
|
|
:endtry
|
|
:$put =a
|
|
:"
|
|
:" Test autocommands
|
|
:tabonly!
|
|
:let g:r=[]
|
|
:command -nargs=1 -bar C :call add(g:r, '=== ' . <q-args> . ' ===')|<args>
|
|
:function Test()
|
|
let hasau=has('autocmd')
|
|
if hasau
|
|
autocmd TabEnter * :call add(g:r, 'TabEnter')
|
|
autocmd WinEnter * :call add(g:r, 'WinEnter')
|
|
autocmd BufEnter * :call add(g:r, 'BufEnter')
|
|
autocmd TabLeave * :call add(g:r, 'TabLeave')
|
|
autocmd WinLeave * :call add(g:r, 'WinLeave')
|
|
autocmd BufLeave * :call add(g:r, 'BufLeave')
|
|
endif
|
|
let t:a='a'
|
|
C tab split
|
|
if !hasau
|
|
let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter']
|
|
endif
|
|
let t:a='b'
|
|
C tabnew
|
|
if !hasau
|
|
let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter']
|
|
endif
|
|
let t:a='c'
|
|
call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
|
|
C call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)')
|
|
call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
|
|
let w:a='a'
|
|
C vsplit
|
|
if !hasau
|
|
let g:r+=['WinLeave', 'WinEnter']
|
|
endif
|
|
let w:a='a'
|
|
let tabn=tabpagenr()
|
|
let winr=range(1, winnr('$'))
|
|
C tabnext 1
|
|
if !hasau
|
|
let g:r+=['BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter']
|
|
endif
|
|
call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
|
|
C call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)')
|
|
call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
|
|
if hasau
|
|
augroup TabDestructive
|
|
autocmd TabEnter * :C tabnext 2 | C tabclose 3
|
|
augroup END
|
|
C tabnext 3
|
|
let g:r+=[tabpagenr().'/'.tabpagenr('$')]
|
|
autocmd! TabDestructive TabEnter
|
|
C tabnew
|
|
C tabnext 1
|
|
autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
|
|
C tabnext 3
|
|
let g:r+=[tabpagenr().'/'.tabpagenr('$')]
|
|
else
|
|
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",]
|
|
endif
|
|
endfunction
|
|
:call Test()
|
|
:$ put =g:r
|
|
:"
|
|
:"
|
|
:/^Results/,$w! test.out
|
|
:qa!
|
|
ENDTEST
|
|
|
|
Results:
|