2024-04-20 08:44:13 -07:00
|
|
|
local t = require('test.testutil')
|
|
|
|
local n = require('test.functional.testnvim')()
|
2022-08-02 05:48:41 -07:00
|
|
|
local Screen = require('test.functional.ui.screen')
|
2020-01-01 10:52:13 -07:00
|
|
|
|
2024-04-20 08:44:13 -07:00
|
|
|
local clear = n.clear
|
|
|
|
local command = n.command
|
2024-04-08 02:03:20 -07:00
|
|
|
local eq = t.eq
|
|
|
|
local neq = t.neq
|
2024-04-20 08:44:13 -07:00
|
|
|
local feed = n.feed
|
|
|
|
local eval = n.eval
|
|
|
|
local exec = n.exec
|
|
|
|
local fn = n.fn
|
|
|
|
local api = n.api
|
|
|
|
local curwin = n.api.nvim_get_current_win
|
|
|
|
local assert_alive = n.assert_alive
|
2020-01-01 10:52:13 -07:00
|
|
|
|
|
|
|
describe('tabpage', function()
|
|
|
|
before_each(clear)
|
|
|
|
|
|
|
|
it('advances to the next page via <C-W>gt', function()
|
|
|
|
-- add some tabpages
|
|
|
|
command('tabnew')
|
|
|
|
command('tabnew')
|
|
|
|
command('tabnew')
|
|
|
|
|
|
|
|
eq(4, eval('tabpagenr()'))
|
|
|
|
|
|
|
|
feed('<C-W>gt')
|
|
|
|
|
|
|
|
eq(1, eval('tabpagenr()'))
|
|
|
|
end)
|
2020-01-01 11:08:06 -07:00
|
|
|
|
|
|
|
it('retreats to the previous page via <C-W>gT', function()
|
|
|
|
-- add some tabpages
|
|
|
|
command('tabnew')
|
|
|
|
command('tabnew')
|
|
|
|
command('tabnew')
|
|
|
|
|
|
|
|
eq(4, eval('tabpagenr()'))
|
|
|
|
|
|
|
|
feed('<C-W>gT')
|
|
|
|
|
|
|
|
eq(3, eval('tabpagenr()'))
|
|
|
|
end)
|
2022-03-26 18:19:56 -07:00
|
|
|
|
|
|
|
it('does not crash or loop 999 times if BufWipeout autocommand switches window #17868', function()
|
|
|
|
exec([[
|
|
|
|
tabedit
|
|
|
|
let s:window_id = win_getid()
|
|
|
|
botright new
|
|
|
|
setlocal bufhidden=wipe
|
|
|
|
let g:win_closed = 0
|
|
|
|
autocmd WinClosed * let g:win_closed += 1
|
|
|
|
autocmd BufWipeout <buffer> call win_gotoid(s:window_id)
|
|
|
|
tabprevious
|
|
|
|
+tabclose
|
|
|
|
]])
|
|
|
|
neq(999, eval('g:win_closed'))
|
|
|
|
end)
|
2020-01-01 10:52:13 -07:00
|
|
|
|
2022-09-22 16:21:51 -07:00
|
|
|
it('no segfault with strange WinClosed autocommand #20290', function()
|
|
|
|
pcall(
|
|
|
|
exec,
|
|
|
|
[[
|
|
|
|
set nohidden
|
|
|
|
edit Xa
|
|
|
|
split Xb
|
|
|
|
tab split
|
|
|
|
new
|
|
|
|
autocmd WinClosed * tabprev | bwipe!
|
|
|
|
close
|
|
|
|
]]
|
|
|
|
)
|
|
|
|
assert_alive()
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('nvim_win_close and nvim_win_hide update tabline #20285', function()
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(1, #api.nvim_list_tabpages())
|
|
|
|
eq({ 1, 1 }, fn.win_screenpos(0))
|
2024-01-16 06:26:21 -07:00
|
|
|
local win1 = curwin()
|
2022-09-22 16:21:51 -07:00
|
|
|
|
|
|
|
command('tabnew')
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(2, #api.nvim_list_tabpages())
|
|
|
|
eq({ 2, 1 }, fn.win_screenpos(0))
|
2024-01-16 06:26:21 -07:00
|
|
|
local win2 = curwin()
|
2022-09-22 16:21:51 -07:00
|
|
|
|
2024-01-12 10:59:57 -07:00
|
|
|
api.nvim_win_close(win1, true)
|
2024-01-16 06:26:21 -07:00
|
|
|
eq(win2, curwin())
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(1, #api.nvim_list_tabpages())
|
|
|
|
eq({ 1, 1 }, fn.win_screenpos(0))
|
2022-09-22 16:21:51 -07:00
|
|
|
|
|
|
|
command('tabnew')
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(2, #api.nvim_list_tabpages())
|
|
|
|
eq({ 2, 1 }, fn.win_screenpos(0))
|
2024-01-16 06:26:21 -07:00
|
|
|
local win3 = curwin()
|
2022-09-22 16:21:51 -07:00
|
|
|
|
2024-01-12 10:59:57 -07:00
|
|
|
api.nvim_win_hide(win2)
|
2024-01-16 06:26:21 -07:00
|
|
|
eq(win3, curwin())
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(1, #api.nvim_list_tabpages())
|
|
|
|
eq({ 1, 1 }, fn.win_screenpos(0))
|
2022-09-22 16:21:51 -07:00
|
|
|
end)
|
|
|
|
|
2022-08-02 05:48:41 -07:00
|
|
|
it('switching tabpage after setting laststatus=3 #19591', function()
|
|
|
|
local screen = Screen.new(40, 8)
|
2024-05-26 00:34:29 -07:00
|
|
|
screen:add_extra_attr_ids {
|
|
|
|
[100] = { bold = true, foreground = Screen.colors.Fuchsia },
|
|
|
|
}
|
2022-08-02 05:48:41 -07:00
|
|
|
|
|
|
|
command('tabnew')
|
|
|
|
command('tabprev')
|
|
|
|
command('set laststatus=3')
|
|
|
|
command('tabnext')
|
|
|
|
feed('<C-G>')
|
|
|
|
screen:expect([[
|
2024-05-26 00:34:29 -07:00
|
|
|
{24: [No Name] }{5: [No Name] }{2: }{24:X}|
|
2022-08-02 05:48:41 -07:00
|
|
|
^ |
|
2024-05-26 00:34:29 -07:00
|
|
|
{1:~ }|*4
|
|
|
|
{3:[No Name] }|
|
2022-08-02 05:48:41 -07:00
|
|
|
"[No Name]" --No lines in buffer-- |
|
|
|
|
]])
|
|
|
|
command('vnew')
|
|
|
|
screen:expect([[
|
2024-05-26 00:34:29 -07:00
|
|
|
{24: [No Name] }{5: }{100:2}{5: [No Name] }{2: }{24:X}|
|
2022-08-02 05:48:41 -07:00
|
|
|
^ │ |
|
2024-05-26 00:34:29 -07:00
|
|
|
{1:~ }│{1:~ }|*4
|
|
|
|
{3:[No Name] }|
|
2022-08-02 05:48:41 -07:00
|
|
|
"[No Name]" --No lines in buffer-- |
|
|
|
|
]])
|
|
|
|
end)
|
|
|
|
|
2022-05-12 07:43:20 -07:00
|
|
|
it(':tabmove handles modifiers and addr', function()
|
|
|
|
command('tabnew | tabnew | tabnew')
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(4, fn.nvim_tabpage_get_number(0))
|
2022-05-12 07:43:20 -07:00
|
|
|
command(' silent :keepalt :: ::: silent! - tabmove')
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(3, fn.nvim_tabpage_get_number(0))
|
2022-05-12 07:43:20 -07:00
|
|
|
command(' silent :keepalt :: ::: silent! -2 tabmove')
|
2024-01-12 10:59:57 -07:00
|
|
|
eq(1, fn.nvim_tabpage_get_number(0))
|
2022-05-12 07:43:20 -07:00
|
|
|
end)
|
2022-10-29 15:49:39 -07:00
|
|
|
|
|
|
|
it(':tabs does not overflow IObuff with long path with comma #20850', function()
|
2024-01-12 10:59:57 -07:00
|
|
|
api.nvim_buf_set_name(0, ('x'):rep(1024) .. ',' .. ('x'):rep(1024))
|
2022-10-29 15:49:39 -07:00
|
|
|
command('tabs')
|
|
|
|
assert_alive()
|
|
|
|
end)
|
2022-05-12 07:43:20 -07:00
|
|
|
end)
|