mirror of
https://github.com/neovim/neovim.git
synced 2024-12-25 21:55:17 -07:00
65fb622000
Hope this will make people using feed_command less likely: this hides bugs. Already found at least two: 1. msgpackparse() will show internal error: hash_add() in case of duplicate keys, though it will still work correctly. Currently silenced. 2. ttimeoutlen was spelled incorrectly, resulting in option not being set when expected. Test was still functioning somehow though. Currently fixed.
244 lines
6.6 KiB
Lua
244 lines
6.6 KiB
Lua
-- Test for user command counts
|
|
|
|
local helpers = require('test.functional.helpers')(after_each)
|
|
local clear, source, expect = helpers.clear, helpers.source, helpers.expect
|
|
local feed_command = helpers.feed_command
|
|
|
|
describe('command_count', function()
|
|
it('is working', function()
|
|
-- It is relevant for the test to load a file initially. If this is
|
|
-- emulated with :arg the buffer count is wrong as nvim creates an empty
|
|
-- buffer if it was started without a filename.
|
|
clear('test_command_count.in')
|
|
|
|
source([[
|
|
let g:tmpname = tempname()
|
|
call mkdir(g:tmpname)
|
|
execute "cd ".g:tmpname
|
|
lang C
|
|
let g:lines = []
|
|
com -range=% RangeLines
|
|
\ :call add(g:lines, 'RangeLines '.<line1>.' '.<line2>)
|
|
com -range -addr=arguments RangeArguments
|
|
\ :call add(g:lines, 'RangeArguments '.<line1>.' '.<line2>)
|
|
com -range=% -addr=arguments RangeArgumentsAll
|
|
\ :call add(g:lines, 'RangeArgumentsAll '.<line1>.' '.<line2>)
|
|
com -range -addr=loaded_buffers RangeLoadedBuffers
|
|
\ :call add(g:lines, 'RangeLoadedBuffers '.<line1>.' '.<line2>)
|
|
com -range=% -addr=loaded_buffers RangeLoadedBuffersAll
|
|
\ :call add(g:lines, 'RangeLoadedBuffersAll '.<line1>.' '.<line2>)
|
|
com -range -addr=buffers RangeBuffers
|
|
\ :call add(g:lines, 'RangeBuffers '.<line1>.' '.<line2>)
|
|
com -range=% -addr=buffers RangeBuffersAll
|
|
\ :call add(g:lines, 'RangeBuffersAll '.<line1>.' '.<line2>)
|
|
com -range -addr=windows RangeWindows
|
|
\ :call add(g:lines, 'RangeWindows '.<line1>.' '.<line2>)
|
|
com -range=% -addr=windows RangeWindowsAll
|
|
\ :call add(g:lines, 'RangeWindowsAll '.<line1>.' '.<line2>)
|
|
com -range -addr=tabs RangeTabs
|
|
\ :call add(g:lines, 'RangeTabs '.<line1>.' '.<line2>)
|
|
com -range=% -addr=tabs RangeTabsAll
|
|
\ :call add(g:lines, 'RangeTabsAll '.<line1>.' '.<line2>)
|
|
set hidden
|
|
arga a b c d
|
|
argdo echo "loading buffers"
|
|
argu 3
|
|
.-,$-RangeArguments
|
|
%RangeArguments
|
|
RangeArgumentsAll
|
|
N
|
|
.RangeArguments
|
|
split
|
|
split
|
|
split
|
|
split
|
|
3wincmd w
|
|
.,$RangeWindows
|
|
%RangeWindows
|
|
RangeWindowsAll
|
|
only
|
|
blast
|
|
bd
|
|
.,$RangeLoadedBuffers
|
|
%RangeLoadedBuffers
|
|
RangeLoadedBuffersAll
|
|
.,$RangeBuffers
|
|
%RangeBuffers
|
|
RangeBuffersAll
|
|
tabe
|
|
tabe
|
|
tabe
|
|
tabe
|
|
normal 2gt
|
|
.,$RangeTabs
|
|
%RangeTabs
|
|
RangeTabsAll
|
|
1tabonly
|
|
s/\n/\r\r\r\r\r/
|
|
2ma<
|
|
$-ma>
|
|
'<,'>RangeLines
|
|
com -range=% -buffer LocalRangeLines
|
|
\ :call add(g:lines, 'LocalRangeLines '.<line1>.' '.<line2>)
|
|
'<,'>LocalRangeLines
|
|
b1
|
|
call add(g:lines, '')
|
|
%argd
|
|
arga a b c d
|
|
]])
|
|
-- This can not be in the source() call as it will produce errors.
|
|
feed_command([[let v:errmsg = '']])
|
|
feed_command('5argu')
|
|
feed_command([[call add(g:lines, '5argu ' . v:errmsg)]])
|
|
feed_command('$argu')
|
|
feed_command([[call add(g:lines, '4argu ' . expand('%:t'))]])
|
|
feed_command([[let v:errmsg = '']])
|
|
feed_command('1argu')
|
|
feed_command([[call add(g:lines, '1argu ' . expand('%:t'))]])
|
|
feed_command([[let v:errmsg = '']])
|
|
feed_command('100b')
|
|
feed_command([[call add(g:lines, '100b ' . v:errmsg)]])
|
|
feed_command('split')
|
|
feed_command('split')
|
|
feed_command('split')
|
|
feed_command('split')
|
|
feed_command([[let v:errmsg = '']])
|
|
feed_command('0close')
|
|
feed_command([[call add(g:lines, '0close ' . v:errmsg)]])
|
|
feed_command('$wincmd w')
|
|
feed_command('$close')
|
|
feed_command([[call add(g:lines, '$close ' . winnr())]])
|
|
feed_command([[let v:errmsg = '']])
|
|
feed_command('$+close')
|
|
feed_command([[call add(g:lines, '$+close ' . v:errmsg)]])
|
|
feed_command('$tabe')
|
|
feed_command([[call add(g:lines, '$tabe ' . tabpagenr())]])
|
|
feed_command([[let v:errmsg = '']])
|
|
feed_command('$+tabe')
|
|
feed_command([[call add(g:lines, '$+tabe ' . v:errmsg)]])
|
|
source([[
|
|
only!
|
|
e x
|
|
0tabm
|
|
normal 1gt
|
|
call add(g:lines, '0tabm ' . expand('%:t'))
|
|
tabonly!
|
|
only!
|
|
e! test.out
|
|
call append(0, g:lines)
|
|
unlet g:lines
|
|
w
|
|
bd
|
|
b1
|
|
let g:lines = []
|
|
func BufStatus()
|
|
call add(g:lines,
|
|
\ 'aaa: ' . buflisted(g:buf_aaa) .
|
|
\ ' bbb: ' . buflisted(g:buf_bbb) .
|
|
\ ' ccc: ' . buflisted(g:buf_ccc))
|
|
endfunc
|
|
se nohidden
|
|
e aaa
|
|
let buf_aaa = bufnr('%')
|
|
e bbb
|
|
let buf_bbb = bufnr('%')
|
|
e ccc
|
|
let buf_ccc = bufnr('%')
|
|
b1
|
|
call BufStatus()
|
|
exe buf_bbb . "," . buf_ccc . "bdelete"
|
|
call BufStatus()
|
|
exe buf_aaa . "bdelete"
|
|
call BufStatus()
|
|
e! test.out
|
|
call append('$', g:lines)
|
|
unlet g:lines
|
|
delfunc BufStatus
|
|
w
|
|
bd
|
|
b1
|
|
se hidden
|
|
only!
|
|
let g:lines = []
|
|
%argd
|
|
arga a b c d e f
|
|
3argu
|
|
let args = ''
|
|
.,$-argdo let args .= ' '.expand('%')
|
|
call add(g:lines, 'argdo:' . args)
|
|
split
|
|
split
|
|
split
|
|
split
|
|
2wincmd w
|
|
let windows = ''
|
|
.,$-windo let windows .= ' '.winnr()
|
|
call add(g:lines, 'windo:'. windows)
|
|
b2
|
|
let buffers = ''
|
|
.,$-bufdo let buffers .= ' '.bufnr('%')
|
|
call add(g:lines, 'bufdo:' . buffers)
|
|
3bd
|
|
let buffers = ''
|
|
3,7bufdo let buffers .= ' '.bufnr('%')
|
|
call add(g:lines, 'bufdo:' . buffers)
|
|
tabe
|
|
tabe
|
|
tabe
|
|
tabe
|
|
normal! 2gt
|
|
let tabpages = ''
|
|
.,$-tabdo let tabpages .= ' '.tabpagenr()
|
|
call add(g:lines, 'tabdo:' . tabpages)
|
|
e! test.out
|
|
call append('$', g:lines)
|
|
]])
|
|
|
|
-- Assert buffer contents.
|
|
expect([[
|
|
RangeArguments 2 4
|
|
RangeArguments 1 5
|
|
RangeArgumentsAll 1 5
|
|
RangeArguments 2 2
|
|
RangeWindows 3 5
|
|
RangeWindows 1 5
|
|
RangeWindowsAll 1 5
|
|
RangeLoadedBuffers 2 4
|
|
RangeLoadedBuffers 1 4
|
|
RangeLoadedBuffersAll 1 4
|
|
RangeBuffers 2 5
|
|
RangeBuffers 1 5
|
|
RangeBuffersAll 1 5
|
|
RangeTabs 2 5
|
|
RangeTabs 1 5
|
|
RangeTabsAll 1 5
|
|
RangeLines 2 5
|
|
LocalRangeLines 2 5
|
|
|
|
5argu E16: Invalid range
|
|
4argu d
|
|
1argu a
|
|
100b E16: Invalid range
|
|
0close
|
|
$close 3
|
|
$+close E16: Invalid range
|
|
$tabe 2
|
|
$+tabe E16: Invalid range
|
|
0tabm x
|
|
|
|
aaa: 1 bbb: 1 ccc: 1
|
|
aaa: 1 bbb: 0 ccc: 0
|
|
aaa: 0 bbb: 0 ccc: 0
|
|
argdo: c d e
|
|
windo: 2 3 4
|
|
bufdo: 2 3 4 5 6 7 8 9 10 15
|
|
bufdo: 4 5 6 7
|
|
tabdo: 2 3 4]])
|
|
|
|
source([[
|
|
cd ..
|
|
call delete(g:tmpname, 'rf')
|
|
]])
|
|
end)
|
|
end)
|