diff src/testdir/test_tabpage.vim @ 9906:1ed0cab95f9a v7.4.2227

commit https://github.com/vim/vim/commit/1381d791478ee77c8368b89a3d4954316bf839b5 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 18 22:11:42 2016 +0200 patch 7.4.2227 Problem: Tab page tests are old style. Solution: Change into new style tests. (Hirohito Higashi)
author Christian Brabandt <cb@256bit.org>
date Thu, 18 Aug 2016 22:15:06 +0200
parents
children e1a8b2601fe0
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_tabpage.vim
@@ -0,0 +1,189 @@
+" Tests for tabpage
+
+function Test_tabpage()
+  bw!
+  " Simple test for opening and closing a tab page
+  tabnew
+  call assert_equal(2, tabpagenr())
+  quit
+
+  " Open three tab pages and use ":tabdo"
+  0tabnew
+  1tabnew
+  $tabnew
+  tabdo call append(line('$'), 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
+  call assert_equal(['', '3', '1', '4'], getline(1, '$'))
+  "
+  " 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'])
+  "
+  call assert_true(gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test' && gettabvar(2, 'val_list') == ['red', 'blue', 'green'])
+
+  tabnext 2
+  call assert_true(t:val_num == 100 && t:val_str == 'SetTabVar test'  && t:val_list == ['red', 'blue', 'green'])
+  tabclose
+
+  if has('gui') || has('clientserver')
+    " Test for ":tab drop exist-file" to keep current window.
+    sp test1
+    tab drop test1
+    call assert_true(tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1)
+    close
+    "
+    "
+    " Test for ":tab drop new-file" to keep current window of tabpage 1.
+    split
+    tab drop newfile
+    call assert_true(tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1)
+    tabclose
+    q
+    "
+    "
+    " Test for ":tab drop multi-opend-file" to keep current tabpage and window.
+    new test1
+    tabnew
+    new test1
+    tab drop test1
+    call assert_true(tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1)
+    tabclose
+    q
+  endif
+  "
+  "
+  for i in range(9) | tabnew | endfor
+  normal! 1gt
+  call assert_equal(1, tabpagenr())
+  tabmove 5
+  call assert_equal(5, tabpagenr())
+  .tabmove
+  call assert_equal(5, tabpagenr())
+  tabmove -
+  call assert_equal(4, tabpagenr())
+  tabmove +
+  call assert_equal(5, tabpagenr())
+  tabmove -2
+  call assert_equal(3, tabpagenr())
+  tabmove +4
+  call assert_equal(7, tabpagenr())
+  tabmove
+  call assert_equal(10, tabpagenr())
+  tabmove -20
+  call assert_equal(1, tabpagenr())
+  tabmove +20
+  call assert_equal(10, tabpagenr())
+  0tabmove
+  call assert_equal(1, tabpagenr())
+  $tabmove
+  call assert_equal(10, tabpagenr())
+  tabmove 0
+  call assert_equal(1, tabpagenr())
+  tabmove $
+  call assert_equal(10, tabpagenr())
+  3tabmove
+  call assert_equal(4, tabpagenr())
+  7tabmove 5
+  call assert_equal(5, tabpagenr())
+  call assert_fails("tabmove foo", 'E474:')
+endfunc
+
+" Test autocommands
+function Test_tabpage_with_autocmd()
+  if !has('autocmd')
+    return
+  endif
+  tabonly!
+  command -nargs=1 -bar C :call add(s:li, '=== ' . <q-args> . ' ===')|<args>
+  augroup TestTabpageGroup
+    au!
+    autocmd TabEnter * call add(s:li, 'TabEnter')
+    autocmd WinEnter * call add(s:li, 'WinEnter')
+    autocmd BufEnter * call add(s:li, 'BufEnter')
+    autocmd TabLeave * call add(s:li, 'TabLeave')
+    autocmd WinLeave * call add(s:li, 'WinLeave')
+    autocmd BufLeave * call add(s:li, 'BufLeave')
+  augroup END
+
+  let s:li = []
+  let t:a='a'
+  C tab split
+  call assert_equal(['=== tab split ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter'], s:li)
+  let s:li = []
+  let t:a='b'
+  C tabnew
+  call assert_equal(['=== tabnew ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter'], s:li)
+  let t:a='c'
+  let s:li = split(join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')) , '\s\+')
+  call assert_equal(['a', 'b', 'c'], s:li)
+
+  let s:li = []
+  C call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)')
+  call assert_equal(["=== call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)') ==="], s:li)
+  let s:li = split(join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')) , '\s\+')
+  call assert_equal(['2', '4', '6'], s:li)
+
+  let s:li = []
+  let w:a='a'
+  C vsplit
+  call assert_equal(['=== vsplit ===', 'WinLeave', 'WinEnter'], s:li)
+  let s:li = []
+  let w:a='a'
+  let tabn=tabpagenr()
+  let winr=range(1, winnr('$'))
+  C tabnext 1
+  call assert_equal(['=== tabnext 1 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
+  let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
+  call assert_equal(['a', 'a'], s:li)
+  let s:li = []
+  C call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)')
+  let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
+  call assert_equal(['2', '4'], s:li)
+
+  augroup TabDestructive
+    autocmd TabEnter * :C tabnext 2 | C tabclose 3
+  augroup END
+  let s:li = []
+  C tabnext 3
+  call assert_equal(['=== tabnext 3 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', '=== tabclose 3 ==='], s:li)
+  call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
+
+  autocmd! TabDestructive TabEnter
+  let s:li = []
+  C tabnew
+  call assert_equal(['=== tabnew ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter'], s:li)
+  let s:li = []
+  C tabnext 1
+  call assert_equal(['=== tabnext 1 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
+
+  autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
+  let s:li = []
+  C tabnext 3
+  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)
+  call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
+
+  delcommand C
+  autocmd! TabDestructive
+  augroup! TabDestructive
+  autocmd! TestTabpageGroup
+  augroup! TestTabpageGroup
+  tabonly!
+  bw!
+endfunction
+
+" vim: shiftwidth=2 sts=2 expandtab