diff options
| -rw-r--r-- | test/functional/legacy/062_tab_pages_spec.lua | 267 | 
1 files changed, 93 insertions, 174 deletions
| diff --git a/test/functional/legacy/062_tab_pages_spec.lua b/test/functional/legacy/062_tab_pages_spec.lua index 8a3b47de46..6bbb06f9a7 100644 --- a/test/functional/legacy/062_tab_pages_spec.lua +++ b/test/functional/legacy/062_tab_pages_spec.lua @@ -1,28 +1,21 @@  -- Tests for tab pages  local helpers = require('test.functional.helpers') -local feed, insert, source = helpers.feed, helpers.insert, helpers.source -local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect +local feed, insert, source, clear, execute, expect, eval, eq = +  helpers.feed, helpers.insert, helpers.source, helpers.clear, +  helpers.execute, helpers.expect, helpers.eval, helpers.eq  describe('tab pages', function() -  setup(clear) +  before_each(clear) -  it('is working', function() -    insert([=[ -      Results:]=]) - -    execute('lang C') - -    -- Simple test for opening and closing a tab page. -    source([[ -      tabnew -      let nr = tabpagenr() -      q -      call append(line('$'), 'tab page ' . nr) -      unlet nr -    ]]) +  it('can be opened and closed', function() +    execute('tabnew') +    eq(2, eval('tabpagenr()')) +    execute('quit') +    eq(1, eval('tabpagenr()')) +  end) -    -- Open three tab pages and use ":tabdo". +  it('can be iterated with :tabdo', function()      source([[        0tabnew        1tabnew @@ -30,142 +23,112 @@ describe('tab pages', function()        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      ]]) +    eq('this is tab page 1', eval("getline('$')")) +    execute('tablast') +    eq('this is tab page 4', eval("getline('$')")) +  end) +  it('have local variables accasible with settabvar()/gettabvar()', function()      -- 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. -    source([=[ +    source([[        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) -    ]=]) +    eq(100, eval('gettabvar(2, "val_num")')) +    eq('SetTabVar test', eval('gettabvar(2, "val_str")')) +    eq({'red', 'blue', 'green'}, eval('gettabvar(2, "val_list")')) +    execute('tabnext 2') +    eq(100, eval('t:val_num')) +    eq('SetTabVar test', eval('t:val_str')) +    eq({'red', 'blue', 'green'}, eval('t:val_list')) +  end) -    -- Test some drop features -    source([[ -      " 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) +  it('work together with the drop feature and loaded buffers', function() +    -- Test for ":tab drop exist-file" to keep current window. +    execute('sp test1') +    execute('tab drop test1') +    eq(1, eval('tabpagenr("$")')) +    eq(2, eval('winnr("$")')) +    eq(1, eval('winnr()')) +  end) -      " 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) +  it('work together with the drop feature and new files', function() +    -- Test for ":tab drop new-file" to keep current window of tabpage 1. +    execute('split') +    execute('tab drop newfile') +    eq(2, eval('tabpagenr("$")')) +    eq(2, eval('tabpagewinnr(1, "$")')) +    eq(1, eval('tabpagewinnr(1)')) +  end) -      " 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) -    ]]) -------- +  it('work together with the drop feature and multi loaded buffers', function() +    -- Test for ":tab drop multi-opend-file" to keep current tabpage and +    -- window. +    execute('new test1') +    execute('tabnew') +    execute('new test1') +    execute('tab drop test1') +    eq(2, eval('tabpagenr()')) +    eq(2, eval('tabpagewinnr(2, "$")')) +    eq(1, eval('tabpagewinnr(2)')) +  end) +  it('can be navigated with :tabmove', function() +    execute('lang C')      execute('for i in range(9) | tabnew | endfor')      feed('1gt') -    feed('Go<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(1, eval('tabpagenr()'))      execute('tabmove 5') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(6, eval('tabpagenr()'))      execute('tabmove -2') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(4, eval('tabpagenr()'))      execute('tabmove +4') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(8, eval('tabpagenr()'))      execute('tabmove') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(10, eval('tabpagenr()'))      execute('tabmove -20') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(1, eval('tabpagenr()'))      execute('tabmove +20') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(10, eval('tabpagenr()'))      execute('3tabmove') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') +    eq(4, eval('tabpagenr()'))      execute('7tabmove 5') -    feed('i<C-R>=tabpagenr()<C-M><C-M><esc>') -    execute([[let a='No error caught.']]) +    eq(6, eval('tabpagenr()')) +    execute('let a="No error caught."')      execute('try')      execute('tabmove foo')      execute('catch E474') -    execute([[let a='E474 caught.']]) +    execute('let a="E474 caught."')      execute('endtry') -    feed('i<C-R>=a<C-M><esc>') +    eq('E474 caught.', eval('a')) +  end) + +  it('can trigger certain autocommands', function() +    insert('Results:')      -- Test autocommands. -    source([=[ +    source([[        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 +	  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')            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")'))) @@ -175,80 +138,36 @@ describe('tab pages', function()  	    \ '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 +	  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('$')]        endfunction        call Test()        $ put =g:r -    ]=]) - - -    --execute('0,/^Results/-1 d') -    --execute('qa!') +    ]])      -- Assert buffer contents. -    expect([=[ +    expect([[        Results: -      tab page 2 -      this is tab page 3 -      this is tab page 1 -      this is tab page 4 -      gettabvar: pass -      settabvar: pass -      tab drop 1: pass -      tab drop 2: pass -      tab drop 3: pass -      1 -      6 -      4 -      8 -      10 -      1 -      10 -      4 -      6 -      E474 caught.        === tab split ===        WinLeave        TabLeave @@ -316,6 +235,6 @@ describe('tab pages', function()        === tabclose 3 ===        BufEnter        === tabclose 3 === -      2/2]=]) +      2/2]])    end)  end) | 
