Tests for tab pages

STARTTEST
:so small.vim
:" 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
:888tabnew
: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
Go=tabpagenr()
:tabmove 5
i=tabpagenr()
:tabmove -2
i=tabpagenr()
:tabmove +4
i=tabpagenr()
:tabmove
i=tabpagenr()
:tabmove -20
i=tabpagenr()
:tabmove +20
i=tabpagenr()
:3tabmove
i=tabpagenr()
:7tabmove 5
i=tabpagenr()
:let a='No error caught.'
:try
:tabmove foo
:catch E474
:let a='E474 caught.'
:endtry
i=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:
