mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
e61228a214
Before calling "attach" a screen object is just a dummy container for (row, col) values whose purpose is to be sent as part of the "attach" function call anyway. Just create the screen in an attached state directly. Keep the complete (row, col, options) config together. It is still completely valid to later detach and re-attach as needed, including to another session.
140 lines
3.9 KiB
Lua
140 lines
3.9 KiB
Lua
local t = require('test.testutil')
|
|
local n = require('test.functional.testnvim')()
|
|
local Screen = require('test.functional.ui.screen')
|
|
|
|
local clear = n.clear
|
|
local command = n.command
|
|
local expect_exit = n.expect_exit
|
|
local api, eq, feed_command = n.api, t.eq, n.feed_command
|
|
local feed, poke_eventloop = n.feed, n.poke_eventloop
|
|
local ok = t.ok
|
|
local eval = n.eval
|
|
|
|
local shada_file = 'Xtest.shada'
|
|
|
|
local function _clear()
|
|
clear {
|
|
args = {
|
|
'-i',
|
|
shada_file, -- Need shada for these tests.
|
|
'--cmd',
|
|
'set noswapfile undodir=. directory=. viewdir=. backupdir=. belloff= noshowcmd noruler',
|
|
},
|
|
args_rm = { '-i', '--cmd' },
|
|
}
|
|
end
|
|
|
|
describe(':oldfiles', function()
|
|
before_each(_clear)
|
|
|
|
after_each(function()
|
|
expect_exit(command, 'qall!')
|
|
os.remove(shada_file)
|
|
end)
|
|
|
|
local function add_padding(s)
|
|
return s .. string.rep(' ', 96 - string.len(s))
|
|
end
|
|
|
|
it('shows most recently used files', function()
|
|
local screen = Screen.new(100, 5)
|
|
screen._default_attr_ids = nil
|
|
feed_command('edit testfile1')
|
|
feed_command('edit testfile2')
|
|
feed_command('wshada')
|
|
feed_command('rshada!')
|
|
local oldfiles = api.nvim_get_vvar('oldfiles')
|
|
feed_command('oldfiles')
|
|
screen:expect([[
|
|
|
|
|
1: ]] .. add_padding(oldfiles[1]) .. [[ |
|
|
2: ]] .. add_padding(oldfiles[2]) .. [[ |
|
|
|
|
|
Press ENTER or type command to continue^ |
|
|
]])
|
|
feed('<CR>')
|
|
end)
|
|
|
|
it('can be filtered with :filter', function()
|
|
feed_command('edit file_one.txt')
|
|
local file1 = api.nvim_buf_get_name(0)
|
|
feed_command('edit file_two.txt')
|
|
local file2 = api.nvim_buf_get_name(0)
|
|
feed_command('edit another.txt')
|
|
local another = api.nvim_buf_get_name(0)
|
|
feed_command('wshada')
|
|
feed_command('rshada!')
|
|
|
|
local function get_oldfiles(cmd)
|
|
local q = eval([[split(execute(']] .. cmd .. [['), "\n")]])
|
|
for i, _ in ipairs(q) do
|
|
q[i] = q[i]:gsub('^%d+:%s+', '')
|
|
end
|
|
table.sort(q)
|
|
return q
|
|
end
|
|
|
|
local oldfiles = get_oldfiles('oldfiles')
|
|
eq({ another, file1, file2 }, oldfiles)
|
|
|
|
oldfiles = get_oldfiles('filter file_ oldfiles')
|
|
eq({ file1, file2 }, oldfiles)
|
|
|
|
oldfiles = get_oldfiles('filter /another/ oldfiles')
|
|
eq({ another }, oldfiles)
|
|
|
|
oldfiles = get_oldfiles('filter! file_ oldfiles')
|
|
eq({ another }, oldfiles)
|
|
end)
|
|
end)
|
|
|
|
describe(':browse oldfiles', function()
|
|
local filename
|
|
local filename2
|
|
local oldfiles
|
|
|
|
before_each(function()
|
|
_clear()
|
|
feed_command('edit testfile1')
|
|
filename = api.nvim_buf_get_name(0)
|
|
feed_command('edit testfile2')
|
|
filename2 = api.nvim_buf_get_name(0)
|
|
feed_command('wshada')
|
|
poke_eventloop()
|
|
_clear()
|
|
|
|
-- Ensure nvim is out of "Press ENTER..." prompt.
|
|
feed('<cr>')
|
|
|
|
-- Ensure v:oldfiles isn't busted. Since things happen so fast,
|
|
-- the ordering of v:oldfiles is unstable (it uses qsort() under-the-hood).
|
|
-- Let's verify the contents and the length of v:oldfiles before moving on.
|
|
oldfiles = n.api.nvim_get_vvar('oldfiles')
|
|
eq(2, #oldfiles)
|
|
ok(filename == oldfiles[1] or filename == oldfiles[2])
|
|
ok(filename2 == oldfiles[1] or filename2 == oldfiles[2])
|
|
|
|
feed_command('browse oldfiles')
|
|
end)
|
|
|
|
after_each(function()
|
|
expect_exit(command, 'qall!')
|
|
os.remove(shada_file)
|
|
end)
|
|
|
|
it('provides a prompt and edits the chosen file', function()
|
|
feed('2<cr>')
|
|
eq(oldfiles[2], api.nvim_buf_get_name(0))
|
|
end)
|
|
|
|
it('provides a prompt and does nothing on <cr>', function()
|
|
feed('<cr>')
|
|
eq('', api.nvim_buf_get_name(0))
|
|
end)
|
|
|
|
it('provides a prompt and does nothing if choice is out-of-bounds', function()
|
|
feed('3<cr>')
|
|
eq('', api.nvim_buf_get_name(0))
|
|
end)
|
|
end)
|