mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 02:34:59 -07:00
build: enable lintlua for test/ dir
Problem: Not all Lua code is checked by stylua. Automating code-style is an important mechanism for reducing time spent on accidental (non-essential) complexity. Solution: - Enable stylua for entire `test/` directory. - Exclude these high-churn files until this issue is resolved: https://github.com/JohnnyMorganz/StyLua/issues/829 ``` test/functional/ui/decorations_spec.lua | 3560 ++++++++++++++++++++++++++++++++++++---------------- test/functional/ui/float_spec.lua | 5826 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- test/functional/ui/multigrid_spec.lua | 1349 ++++++++++++++------ ``` - Make surgical changes to these files (or add `stylua: ignore` in some small scopes) to improve the result: ``` test/functional/vimscript/msgpack_functions_spec.lua | 1414 +++++++++++++++------ test/functional/api/buffer_spec.lua | 1389 +++++++++++---------- test/functional/api/vim_spec.lua | 2740 +++++++++++++++++++++++----------------- ``` - These "high churn" files are NOT excluded because the changes are largely an improvement: ``` test/functional/plugin/lsp_spec.lua | 2198 ++++++++++++++++++--------------- test/functional/plugin/shada_spec.lua | 4078 +++++++++++++++++++++++++++++++++++------------------------- test/functional/ui/cmdline_spec.lua | 1199 +++++++++++------- test/functional/ui/popupmenu_spec.lua | 1267 +++++++++++-------- test/functional/ui/messages_spec.lua | 1643 +++++++++++++++--------- ``` - TODO: how to check "all directories"? With `GLOB_DIRS *` and `/.deps/` (or `.deps/`) in `.styluaignore`, Lua code in `.deps/` is still checked...
This commit is contained in:
parent
b3eda5e73f
commit
59d117ec99
@ -1,9 +1,12 @@
|
||||
/build
|
||||
/build/
|
||||
/.deps/
|
||||
/runtime/lua/coxpcall.lua
|
||||
/runtime/lua/vim/_meta
|
||||
/runtime/lua/vim/re.lua
|
||||
|
||||
/test/functional
|
||||
test/functional/ui/decorations_spec.lua
|
||||
test/functional/ui/float_spec.lua
|
||||
test/functional/ui/multigrid_spec.lua
|
||||
/test/functional/fixtures/lua/syntax_error.lua
|
||||
/test/functional/legacy/030_fileformats_spec.lua
|
||||
/test/functional/legacy/044_099_regexp_multibyte_magic_spec.lua
|
||||
|
@ -227,7 +227,7 @@ endif()
|
||||
find_program(SHELLCHECK_PRG shellcheck ${LINT_REQUIRED})
|
||||
find_program(STYLUA_PRG stylua ${LINT_REQUIRED})
|
||||
|
||||
set(STYLUA_DIRS runtime scripts src test/unit)
|
||||
set(STYLUA_DIRS runtime scripts src test)
|
||||
|
||||
add_glob_target(
|
||||
TARGET lintlua-luacheck
|
||||
@ -235,7 +235,7 @@ add_glob_target(
|
||||
FLAGS -ll ${PROJECT_SOURCE_DIR}/test/lua_runner.lua ${CMAKE_BINARY_DIR}/usr luacheck -q
|
||||
GLOB_DIRS runtime scripts src test
|
||||
GLOB_PAT *.lua
|
||||
TOUCH_STRATEGY SINGLE)
|
||||
TOUCH_STRATEGY PER_DIR)
|
||||
add_dependencies(lintlua-luacheck lua-dev-deps)
|
||||
|
||||
add_glob_target(
|
||||
@ -244,7 +244,7 @@ add_glob_target(
|
||||
FLAGS --color=always --check --respect-ignores
|
||||
GLOB_DIRS ${STYLUA_DIRS}
|
||||
GLOB_PAT *.lua
|
||||
TOUCH_STRATEGY SINGLE)
|
||||
TOUCH_STRATEGY PER_DIR)
|
||||
|
||||
add_custom_target(lintlua)
|
||||
add_dependencies(lintlua lintlua-luacheck lintlua-stylua)
|
||||
@ -255,7 +255,7 @@ add_glob_target(
|
||||
FLAGS -x -a
|
||||
GLOB_DIRS scripts
|
||||
GLOB_PAT *.sh
|
||||
TOUCH_STRATEGY SINGLE)
|
||||
TOUCH_STRATEGY PER_DIR)
|
||||
|
||||
add_custom_target(lintcommit
|
||||
COMMAND $<TARGET_FILE:nvim> -u NONE -l ${PROJECT_SOURCE_DIR}/scripts/lintcommit.lua main)
|
||||
@ -270,7 +270,8 @@ add_glob_target(
|
||||
COMMAND ${STYLUA_PRG}
|
||||
FLAGS --respect-ignores
|
||||
GLOB_DIRS ${STYLUA_DIRS}
|
||||
GLOB_PAT *.lua)
|
||||
GLOB_PAT *.lua
|
||||
TOUCH_STRATEGY PER_DIR)
|
||||
|
||||
add_custom_target(format)
|
||||
add_dependencies(format formatc formatlua)
|
||||
|
@ -26,7 +26,6 @@ describe('api/buf', function()
|
||||
return request('buffer_' .. method, 0, ...)
|
||||
end
|
||||
|
||||
|
||||
describe('nvim_buf_set_lines, nvim_buf_line_count', function()
|
||||
it('deprecated forms', function()
|
||||
eq(1, curbuf_depr('line_count'))
|
||||
@ -52,54 +51,54 @@ describe('api/buf', function()
|
||||
|
||||
it('cursor position is maintained after lines are inserted #9961', function()
|
||||
-- replace the buffer contents with these three lines.
|
||||
request('nvim_buf_set_lines', 0, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
||||
request('nvim_buf_set_lines', 0, 0, -1, 1, { 'line1', 'line2', 'line3', 'line4' })
|
||||
-- Set the current cursor to {3, 2}.
|
||||
curwin('set_cursor', { 3, 2 })
|
||||
|
||||
-- add 2 lines and delete 1 line above the current cursor position.
|
||||
request('nvim_buf_set_lines', 0, 1, 2, 1, {"line5", "line6"})
|
||||
request('nvim_buf_set_lines', 0, 1, 2, 1, { 'line5', 'line6' })
|
||||
-- check the current set of lines in the buffer.
|
||||
eq({"line1", "line5", "line6", "line3", "line4"}, buffer('get_lines', 0, 0, -1, 1))
|
||||
eq({ 'line1', 'line5', 'line6', 'line3', 'line4' }, buffer('get_lines', 0, 0, -1, 1))
|
||||
-- cursor should be moved below by 1 line.
|
||||
eq({ 4, 2 }, curwin('get_cursor'))
|
||||
|
||||
-- add a line after the current cursor position.
|
||||
request('nvim_buf_set_lines', 0, 5, 5, 1, {"line7"})
|
||||
request('nvim_buf_set_lines', 0, 5, 5, 1, { 'line7' })
|
||||
-- check the current set of lines in the buffer.
|
||||
eq({"line1", "line5", "line6", "line3", "line4", "line7"}, buffer('get_lines', 0, 0, -1, 1))
|
||||
eq({ 'line1', 'line5', 'line6', 'line3', 'line4', 'line7' }, buffer('get_lines', 0, 0, -1, 1))
|
||||
-- cursor position is unchanged.
|
||||
eq({ 4, 2 }, curwin('get_cursor'))
|
||||
|
||||
-- overwrite current cursor line.
|
||||
request('nvim_buf_set_lines', 0, 3, 5, 1, {"line8", "line9"})
|
||||
request('nvim_buf_set_lines', 0, 3, 5, 1, { 'line8', 'line9' })
|
||||
-- check the current set of lines in the buffer.
|
||||
eq({"line1", "line5", "line6", "line8", "line9", "line7"}, buffer('get_lines', 0, 0, -1, 1))
|
||||
eq({ 'line1', 'line5', 'line6', 'line8', 'line9', 'line7' }, buffer('get_lines', 0, 0, -1, 1))
|
||||
-- cursor position is unchanged.
|
||||
eq({ 4, 2 }, curwin('get_cursor'))
|
||||
|
||||
-- delete current cursor line.
|
||||
request('nvim_buf_set_lines', 0, 3, 5, 1, {})
|
||||
-- check the current set of lines in the buffer.
|
||||
eq({"line1", "line5", "line6", "line7"}, buffer('get_lines', 0, 0, -1, 1))
|
||||
eq({ 'line1', 'line5', 'line6', 'line7' }, buffer('get_lines', 0, 0, -1, 1))
|
||||
-- cursor position is unchanged.
|
||||
eq({ 4, 2 }, curwin('get_cursor'))
|
||||
end)
|
||||
|
||||
it('cursor position is maintained in non-current window', function()
|
||||
meths.buf_set_lines(0, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
||||
meths.buf_set_lines(0, 0, -1, 1, { 'line1', 'line2', 'line3', 'line4' })
|
||||
meths.win_set_cursor(0, { 3, 2 })
|
||||
local win = meths.get_current_win()
|
||||
local buf = meths.get_current_buf()
|
||||
|
||||
command('new')
|
||||
|
||||
meths.buf_set_lines(buf, 1, 2, 1, {"line5", "line6"})
|
||||
eq({"line1", "line5", "line6", "line3", "line4"}, meths.buf_get_lines(buf, 0, -1, true))
|
||||
meths.buf_set_lines(buf, 1, 2, 1, { 'line5', 'line6' })
|
||||
eq({ 'line1', 'line5', 'line6', 'line3', 'line4' }, meths.buf_get_lines(buf, 0, -1, true))
|
||||
eq({ 4, 2 }, meths.win_get_cursor(win))
|
||||
end)
|
||||
|
||||
it('cursor position is maintained in TWO non-current windows', function()
|
||||
meths.buf_set_lines(0, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
||||
meths.buf_set_lines(0, 0, -1, 1, { 'line1', 'line2', 'line3', 'line4' })
|
||||
meths.win_set_cursor(0, { 3, 2 })
|
||||
local win = meths.get_current_win()
|
||||
local buf = meths.get_current_buf()
|
||||
@ -109,10 +108,10 @@ describe('api/buf', function()
|
||||
local win2 = meths.get_current_win()
|
||||
|
||||
-- set current window to third one with another buffer
|
||||
command("new")
|
||||
command('new')
|
||||
|
||||
meths.buf_set_lines(buf, 1, 2, 1, {"line5", "line6"})
|
||||
eq({"line1", "line5", "line6", "line3", "line4"}, meths.buf_get_lines(buf, 0, -1, true))
|
||||
meths.buf_set_lines(buf, 1, 2, 1, { 'line5', 'line6' })
|
||||
eq({ 'line1', 'line5', 'line6', 'line3', 'line4' }, meths.buf_get_lines(buf, 0, -1, true))
|
||||
eq({ 4, 2 }, meths.win_get_cursor(win))
|
||||
eq({ 5, 2 }, meths.win_get_cursor(win2))
|
||||
end)
|
||||
@ -121,7 +120,7 @@ describe('api/buf', function()
|
||||
-- we'll need to know our bufnr for when it gets unloaded
|
||||
local bufnr = curbuf('get_number')
|
||||
-- replace the buffer contents with these three lines
|
||||
request('nvim_buf_set_lines', bufnr, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
||||
request('nvim_buf_set_lines', bufnr, 0, -1, 1, { 'line1', 'line2', 'line3', 'line4' })
|
||||
-- check the line count is correct
|
||||
eq(4, request('nvim_buf_line_count', bufnr))
|
||||
-- force unload the buffer (this will discard changes)
|
||||
@ -135,9 +134,9 @@ describe('api/buf', function()
|
||||
-- we'll need to know our bufnr for when it gets unloaded
|
||||
local bufnr = curbuf('get_number')
|
||||
-- replace the buffer contents with these three lines
|
||||
buffer('set_lines', bufnr, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
||||
buffer('set_lines', bufnr, 0, -1, 1, { 'line1', 'line2', 'line3', 'line4' })
|
||||
-- confirm that getting lines works
|
||||
eq({"line2", "line3"}, buffer('get_lines', bufnr, 1, 3, 1))
|
||||
eq({ 'line2', 'line3' }, buffer('get_lines', bufnr, 1, 3, 1))
|
||||
-- force unload the buffer (this will discard changes)
|
||||
command('new')
|
||||
command('bunload! ' .. bufnr)
|
||||
@ -152,12 +151,12 @@ describe('api/buf', function()
|
||||
before_each(function()
|
||||
screen = Screen.new(20, 12)
|
||||
screen:set_default_attr_ids {
|
||||
[1] = {bold = true, foreground = Screen.colors.Blue1};
|
||||
[2] = {reverse = true, bold = true};
|
||||
[3] = {reverse = true};
|
||||
[1] = { bold = true, foreground = Screen.colors.Blue1 },
|
||||
[2] = { reverse = true, bold = true },
|
||||
[3] = { reverse = true },
|
||||
}
|
||||
screen:attach()
|
||||
meths.buf_set_lines(0, 0, -1, 1, {"aaa", "bbb", "ccc", "ddd", "www", "xxx", "yyy", "zzz"})
|
||||
meths.buf_set_lines(0, 0, -1, 1, { 'aaa', 'bbb', 'ccc', 'ddd', 'www', 'xxx', 'yyy', 'zzz' })
|
||||
meths.set_option_value('modified', false, {})
|
||||
end)
|
||||
|
||||
@ -168,7 +167,8 @@ describe('api/buf', function()
|
||||
command('new | wincmd w')
|
||||
meths.win_set_cursor(win, { 8, 0 })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -178,10 +178,12 @@ describe('api/buf', function()
|
||||
^zzz |
|
||||
{2:[No Name] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
meths.buf_set_lines(buf, 0, 2, true, {"aaabbb"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 0, 2, true, { 'aaabbb' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -191,11 +193,13 @@ describe('api/buf', function()
|
||||
^zzz |
|
||||
{2:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
-- replacing topline keeps it the topline
|
||||
meths.buf_set_lines(buf, 3, 4, true, {"wwweeee"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 3, 4, true, { 'wwweeee' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -205,11 +209,13 @@ describe('api/buf', function()
|
||||
^zzz |
|
||||
{2:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
-- inserting just before topline does not scroll up if cursor would be moved
|
||||
meths.buf_set_lines(buf, 3, 3, true, {"mmm"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 3, 3, true, { 'mmm' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -219,10 +225,13 @@ describe('api/buf', function()
|
||||
^zzz |
|
||||
{2:[No Name] [+] }|
|
||||
|
|
||||
]], unchanged=true}
|
||||
]],
|
||||
unchanged = true,
|
||||
}
|
||||
|
||||
meths.win_set_cursor(0, { 7, 0 })
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -232,10 +241,12 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{2:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
meths.buf_set_lines(buf, 4, 4, true, {"mmmeeeee"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 4, 4, true, { 'mmmeeeee' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -245,7 +256,8 @@ describe('api/buf', function()
|
||||
^yyy |
|
||||
{2:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
end)
|
||||
|
||||
it('of non-current window', function()
|
||||
@ -255,7 +267,8 @@ describe('api/buf', function()
|
||||
command('new')
|
||||
meths.win_set_cursor(win, { 8, 0 })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^ |
|
||||
{1:~ }|*4
|
||||
{2:[No Name] }|
|
||||
@ -265,10 +278,12 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
meths.buf_set_lines(buf, 0, 2, true, {"aaabbb"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 0, 2, true, { 'aaabbb' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^ |
|
||||
{1:~ }|*4
|
||||
{2:[No Name] }|
|
||||
@ -278,11 +293,13 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
-- replacing topline keeps it the topline
|
||||
meths.buf_set_lines(buf, 3, 4, true, {"wwweeee"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 3, 4, true, { 'wwweeee' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^ |
|
||||
{1:~ }|*4
|
||||
{2:[No Name] }|
|
||||
@ -292,11 +309,13 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
-- inserting just before topline scrolls up
|
||||
meths.buf_set_lines(buf, 3, 3, true, {"mmm"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 3, 3, true, { 'mmm' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^ |
|
||||
{1:~ }|*4
|
||||
{2:[No Name] }|
|
||||
@ -306,7 +325,8 @@ describe('api/buf', function()
|
||||
yyy |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
end)
|
||||
|
||||
it('of split windows with same buffer', function()
|
||||
@ -317,7 +337,8 @@ describe('api/buf', function()
|
||||
meths.win_set_cursor(win, { 8, 0 })
|
||||
meths.win_set_cursor(0, { 1, 0 })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^aaa |
|
||||
bbb |
|
||||
ccc |
|
||||
@ -330,10 +351,12 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] }|
|
||||
|
|
||||
]]}
|
||||
meths.buf_set_lines(buf, 0, 2, true, {"aaabbb"})
|
||||
]],
|
||||
}
|
||||
meths.buf_set_lines(buf, 0, 2, true, { 'aaabbb' })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^aaabbb |
|
||||
ccc |
|
||||
ddd |
|
||||
@ -346,11 +369,13 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
-- replacing topline keeps it the topline
|
||||
meths.buf_set_lines(buf, 3, 4, true, {"wwweeee"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 3, 4, true, { 'wwweeee' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^aaabbb |
|
||||
ccc |
|
||||
ddd |
|
||||
@ -363,11 +388,13 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
-- inserting just before topline scrolls up
|
||||
meths.buf_set_lines(buf, 3, 3, true, {"mmm"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_lines(buf, 3, 3, true, { 'mmm' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^aaabbb |
|
||||
ccc |
|
||||
ddd |
|
||||
@ -380,19 +407,20 @@ describe('api/buf', function()
|
||||
yyy |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
end)
|
||||
end)
|
||||
|
||||
it('handles clearing out non-current buffer #24911', function()
|
||||
local buf = meths.get_current_buf()
|
||||
meths.buf_set_lines(buf, 0, -1, true, {"aaa", "bbb", "ccc"})
|
||||
command("new")
|
||||
meths.buf_set_lines(buf, 0, -1, true, { 'aaa', 'bbb', 'ccc' })
|
||||
command('new')
|
||||
|
||||
meths.buf_set_lines(0, 0, -1, true, {"xxx", "yyy", "zzz"})
|
||||
meths.buf_set_lines(0, 0, -1, true, { 'xxx', 'yyy', 'zzz' })
|
||||
|
||||
meths.buf_set_lines(buf, 0, -1, true, {})
|
||||
eq({"xxx", "yyy", "zzz"}, meths.buf_get_lines(0, 0, -1, true))
|
||||
eq({ 'xxx', 'yyy', 'zzz' }, meths.buf_get_lines(0, 0, -1, true))
|
||||
eq({ '' }, meths.buf_get_lines(buf, 0, -1, true))
|
||||
end)
|
||||
end)
|
||||
@ -467,8 +495,7 @@ describe('api/buf', function()
|
||||
curbuf_depr('set_line_slice', 1, 2, true, false, { 'a', 'b', 'c' })
|
||||
eq({ 'a', 'a', 'b', 'c', 'c' }, curbuf_depr('get_line_slice', 0, -1, true, true))
|
||||
curbuf_depr('set_line_slice', -1, -1, true, true, { 'a', 'b', 'c' })
|
||||
eq({'a', 'a', 'b', 'c', 'a', 'b', 'c'},
|
||||
curbuf_depr('get_line_slice', 0, -1, true, true))
|
||||
eq({ 'a', 'a', 'b', 'c', 'a', 'b', 'c' }, curbuf_depr('get_line_slice', 0, -1, true, true))
|
||||
curbuf_depr('set_line_slice', 0, -3, true, false, {})
|
||||
eq({ 'a', 'b', 'c' }, curbuf_depr('get_line_slice', 0, -1, true, true))
|
||||
curbuf_depr('set_line_slice', 0, -1, true, true, {})
|
||||
@ -483,14 +510,18 @@ describe('api/buf', function()
|
||||
|
||||
it('fails correctly when input is not valid', function()
|
||||
eq(1, api.curbufmeths.get_number())
|
||||
eq([['replacement string' item contains newlines]],
|
||||
pcall_err(bufmeths.set_lines, 1, 1, 2, false, {'b\na'}))
|
||||
eq(
|
||||
[['replacement string' item contains newlines]],
|
||||
pcall_err(bufmeths.set_lines, 1, 1, 2, false, { 'b\na' })
|
||||
)
|
||||
end)
|
||||
|
||||
it("fails if 'nomodifiable'", function()
|
||||
command('set nomodifiable')
|
||||
eq([[Buffer is not 'modifiable']],
|
||||
pcall_err(api.bufmeths.set_lines, 1, 1, 2, false, {'a','b'}))
|
||||
eq(
|
||||
[[Buffer is not 'modifiable']],
|
||||
pcall_err(api.bufmeths.set_lines, 1, 1, 2, false, { 'a', 'b' })
|
||||
)
|
||||
end)
|
||||
|
||||
it('has correct line_count when inserting and deleting', function()
|
||||
@ -571,8 +602,7 @@ describe('api/buf', function()
|
||||
set_lines(1, 2, mode, { 'a', 'b', 'c' })
|
||||
eq({ 'a', 'a', 'b', 'c', 'c' }, get_lines(0, -1, mode))
|
||||
set_lines(-2, -1, mode, { 'a', 'b', 'c' })
|
||||
eq({'a', 'a', 'b', 'c', 'a', 'b', 'c'},
|
||||
get_lines(0, -1, mode))
|
||||
eq({ 'a', 'a', 'b', 'c', 'a', 'b', 'c' }, get_lines(0, -1, mode))
|
||||
set_lines(0, -4, mode, {})
|
||||
eq({ 'a', 'b', 'c' }, get_lines(0, -1, mode))
|
||||
set_lines(0, -1, mode, {})
|
||||
@ -617,7 +647,7 @@ describe('api/buf', function()
|
||||
eq({ 'e', 'a', 'b', 'c', 'd' }, get_lines(0, -1, true))
|
||||
end)
|
||||
|
||||
it("set_lines on alternate buffer does not access invalid line (E315)", function()
|
||||
it('set_lines on alternate buffer does not access invalid line (E315)', function()
|
||||
feed_command('set hidden')
|
||||
insert('Initial file')
|
||||
command('enew')
|
||||
@ -678,8 +708,7 @@ describe('api/buf', function()
|
||||
eq(3, funcs.winnr())
|
||||
feed('<c-w>h')
|
||||
eq(2, funcs.winnr())
|
||||
api.meths.buf_set_lines(hiddenbuf, 0, -1, true,
|
||||
{'hidden buffer line 1', 'line 2'})
|
||||
api.meths.buf_set_lines(hiddenbuf, 0, -1, true, { 'hidden buffer line 1', 'line 2' })
|
||||
feed('<c-w>p')
|
||||
eq(3, funcs.winnr())
|
||||
end)
|
||||
@ -711,7 +740,6 @@ describe('api/buf', function()
|
||||
|
||||
eq({ 'hello foo!' }, get_lines(0, 1, true))
|
||||
|
||||
|
||||
-- can replace a single word
|
||||
set_text(0, 6, 0, 9, { 'world' })
|
||||
eq({ 'hello world!', 'text' }, get_lines(0, 2, true))
|
||||
@ -799,7 +827,7 @@ describe('api/buf', function()
|
||||
local win = meths.get_current_win()
|
||||
local buf = meths.get_current_buf()
|
||||
|
||||
command("new")
|
||||
command('new')
|
||||
|
||||
-- replace 'world' with 'foo'
|
||||
meths.buf_set_text(buf, 0, 6, 0, 11, { 'foo' })
|
||||
@ -817,12 +845,12 @@ describe('api/buf', function()
|
||||
local win = meths.get_current_win()
|
||||
local buf = meths.get_current_buf()
|
||||
|
||||
command("split")
|
||||
command('split')
|
||||
local win2 = meths.get_current_win()
|
||||
-- position the cursor on `w`
|
||||
meths.win_set_cursor(0, { 1, 6 })
|
||||
|
||||
command("new")
|
||||
command('new')
|
||||
|
||||
-- replace 'hello' with 'foo'
|
||||
meths.buf_set_text(buf, 0, 0, 0, 5, { 'foo' })
|
||||
@ -886,7 +914,7 @@ describe('api/buf', function()
|
||||
eq({ 1, 1 }, curwin('get_cursor'))
|
||||
end)
|
||||
|
||||
it('leaves cursor at the same position in INSERT mode in current and non-current window', function()
|
||||
it('maintains INSERT-mode cursor position current/non-current window', function()
|
||||
insert([[
|
||||
abcd]])
|
||||
|
||||
@ -912,7 +940,7 @@ describe('api/buf', function()
|
||||
end)
|
||||
|
||||
describe('when cursor is inside replaced row range', function()
|
||||
it('keeps cursor at the same position if cursor is at start_row, but before start_col', function()
|
||||
it('maintains cursor position if at start_row, but before start_col', function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -934,7 +962,7 @@ describe('api/buf', function()
|
||||
eq({ 1, 14 }, curwin('get_cursor'))
|
||||
end)
|
||||
|
||||
it('keeps cursor at the same position if cursor is at start_row and column is still valid', function()
|
||||
it('maintains cursor position if at start_row and column is still valid', function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -977,7 +1005,7 @@ describe('api/buf', function()
|
||||
eq({ 1, 18 }, cursor)
|
||||
end)
|
||||
|
||||
it('adjusts cursor column to keep it valid if start_row got smaller in INSERT mode', function()
|
||||
it('adjusts cursor column to keep it valid if start_row decreased in INSERT mode', function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1000,7 +1028,7 @@ describe('api/buf', function()
|
||||
eq({ 1, 19 }, cursor)
|
||||
end)
|
||||
|
||||
it('adjusts cursor column to keep it valid in a row after start_row if it got smaller', function()
|
||||
it('adjusts cursor to valid column in row after start_row if it got smaller', function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1029,7 +1057,9 @@ describe('api/buf', function()
|
||||
eq({ 2, 5 }, cursor)
|
||||
end)
|
||||
|
||||
it('adjusts cursor column to keep it valid in a row after start_row if it got smaller in INSERT mode', function()
|
||||
it(
|
||||
'adjusts cursor to valid column in row after start_row if it got smaller in INSERT mode',
|
||||
function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1058,7 +1088,8 @@ describe('api/buf', function()
|
||||
eq({ 2, 6 }, curwin('get_cursor'))
|
||||
-- immediate call to nvim_win_get_cursor should have returned the same position
|
||||
eq({ 2, 6 }, cursor)
|
||||
end)
|
||||
end
|
||||
)
|
||||
|
||||
it('adjusts cursor line and column to keep it inside replacement range', function()
|
||||
insert([[
|
||||
@ -1149,7 +1180,9 @@ describe('api/buf', function()
|
||||
eq({ 3, 7 }, curwin('get_cursor'))
|
||||
end)
|
||||
|
||||
it('adjusts cursor column if replacement ends at cursor row, at cursor column in INSERT mode', function()
|
||||
it(
|
||||
'adjusts cursor column if replacement ends at cursor row, at cursor column in INSERT mode',
|
||||
function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1168,7 +1201,8 @@ describe('api/buf', function()
|
||||
}, get_lines(0, -1, true))
|
||||
-- cursor should end up after 'n' in 'then'
|
||||
eq({ 3, 8 }, curwin('get_cursor'))
|
||||
end)
|
||||
end
|
||||
)
|
||||
|
||||
it('adjusts cursor column if replacement is inside of a single line', function()
|
||||
insert([[
|
||||
@ -1228,7 +1262,7 @@ describe('api/buf', function()
|
||||
end)
|
||||
|
||||
describe('with virtualedit', function()
|
||||
it('adjusts cursor line and column to keep it inside replacement range if cursor is not after eol', function()
|
||||
it('adjusts cursor line/col to keep inside replacement range if not after eol', function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1257,12 +1291,15 @@ describe('api/buf', function()
|
||||
-- immediate call to nvim_win_get_cursor should have returned the same position
|
||||
eq({ 2, 12 }, cursor)
|
||||
-- coladd should be 0
|
||||
eq(0, exec_lua([[
|
||||
eq(
|
||||
0,
|
||||
exec_lua([[
|
||||
return vim.fn.winsaveview().coladd
|
||||
]]))
|
||||
]])
|
||||
)
|
||||
end)
|
||||
|
||||
it('does not change cursor screen column when cursor is after eol and row got shorter', function()
|
||||
it('does not change cursor screen column when cursor >EOL and row got shorter', function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1294,12 +1331,17 @@ describe('api/buf', function()
|
||||
-- immediate call to nvim_win_get_cursor should have returned the same position
|
||||
eq({ 2, 26 }, cursor)
|
||||
-- coladd should be increased so that cursor stays in the same screen column
|
||||
eq(13, exec_lua([[
|
||||
eq(
|
||||
13,
|
||||
exec_lua([[
|
||||
return vim.fn.winsaveview().coladd
|
||||
]]))
|
||||
]])
|
||||
)
|
||||
end)
|
||||
|
||||
it('does not change cursor screen column when cursor is after eol and row got longer', function()
|
||||
it(
|
||||
'does not change cursor screen column when cursor is after eol and row got longer',
|
||||
function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1331,12 +1373,18 @@ describe('api/buf', function()
|
||||
-- immediate call to nvim_win_get_cursor should have returned the same position
|
||||
eq({ 1, 38 }, cursor)
|
||||
-- coladd should be increased so that cursor stays in the same screen column
|
||||
eq(2, exec_lua([[
|
||||
eq(
|
||||
2,
|
||||
exec_lua([[
|
||||
return vim.fn.winsaveview().coladd
|
||||
]]))
|
||||
end)
|
||||
]])
|
||||
)
|
||||
end
|
||||
)
|
||||
|
||||
it('does not change cursor screen column when cursor is after eol and row extended past cursor column', function()
|
||||
it(
|
||||
'does not change cursor screen column when cursor is after eol and row extended past cursor column',
|
||||
function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1368,12 +1416,18 @@ describe('api/buf', function()
|
||||
-- immediate call to nvim_win_get_cursor should have returned the same position
|
||||
eq({ 1, 22 }, cursor)
|
||||
-- coladd should become 0
|
||||
eq(0, exec_lua([[
|
||||
eq(
|
||||
0,
|
||||
exec_lua([[
|
||||
return vim.fn.winsaveview().coladd
|
||||
]]))
|
||||
end)
|
||||
]])
|
||||
)
|
||||
end
|
||||
)
|
||||
|
||||
it('does not change cursor screen column when cursor is after eol and row range decreased', function()
|
||||
it(
|
||||
'does not change cursor screen column when cursor is after eol and row range decreased',
|
||||
function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1406,10 +1460,14 @@ describe('api/buf', function()
|
||||
-- immediate call to nvim_win_get_cursor should have returned the same position
|
||||
eq({ 2, 26 }, cursor)
|
||||
-- coladd should be increased so that cursor stays in the same screen column
|
||||
eq(13, exec_lua([[
|
||||
eq(
|
||||
13,
|
||||
exec_lua([[
|
||||
return vim.fn.winsaveview().coladd
|
||||
]]))
|
||||
end)
|
||||
]])
|
||||
)
|
||||
end
|
||||
)
|
||||
end)
|
||||
end)
|
||||
|
||||
@ -1434,7 +1492,9 @@ describe('api/buf', function()
|
||||
eq({ 3, 2 }, curwin('get_cursor'))
|
||||
end)
|
||||
|
||||
it('adjusts cursor column if the range is not bound to either start or end of a line', function()
|
||||
it(
|
||||
'adjusts cursor column if the range is not bound to either start or end of a line',
|
||||
function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1459,9 +1519,12 @@ describe('api/buf', function()
|
||||
}, get_lines(0, -1, true))
|
||||
-- cursor should return back to the original position
|
||||
eq({ 3, 13 }, curwin('get_cursor'))
|
||||
end)
|
||||
end
|
||||
)
|
||||
|
||||
it('adjusts cursor column if replacing lines in range, not just deleting and adding', function()
|
||||
it(
|
||||
'adjusts cursor column if replacing lines in range, not just deleting and adding',
|
||||
function()
|
||||
insert([[
|
||||
This should be first
|
||||
then there is a line we do not want
|
||||
@ -1494,7 +1557,8 @@ describe('api/buf', function()
|
||||
}, get_lines(0, -1, true))
|
||||
-- cursor should return back to the original position
|
||||
eq({ 3, 18 }, curwin('get_cursor'))
|
||||
end)
|
||||
end
|
||||
)
|
||||
|
||||
it('does not move cursor column after end of a line', function()
|
||||
insert([[
|
||||
@ -1543,7 +1607,7 @@ describe('api/buf', function()
|
||||
end)
|
||||
|
||||
it('adjusts extmarks', function()
|
||||
local ns = request('nvim_create_namespace', "my-fancy-plugin")
|
||||
local ns = request('nvim_create_namespace', 'my-fancy-plugin')
|
||||
insert([[
|
||||
foo bar
|
||||
baz
|
||||
@ -1551,7 +1615,7 @@ describe('api/buf', function()
|
||||
local id1 = curbufmeths.set_extmark(ns, 0, 1, {})
|
||||
local id2 = curbufmeths.set_extmark(ns, 0, 7, {})
|
||||
local id3 = curbufmeths.set_extmark(ns, 1, 1, {})
|
||||
set_text(0, 4, 0, 7, {"q"})
|
||||
set_text(0, 4, 0, 7, { 'q' })
|
||||
|
||||
eq({ 'foo q', 'baz' }, get_lines(0, 2, true))
|
||||
-- mark before replacement point is unaffected
|
||||
@ -1562,7 +1626,7 @@ describe('api/buf', function()
|
||||
eq({ 1, 1 }, curbufmeths.get_extmark_by_id(ns, id3, {}))
|
||||
|
||||
-- replacing the text spanning two lines will adjust the mark on the next line
|
||||
set_text(0, 3, 1, 3, {"qux"})
|
||||
set_text(0, 3, 1, 3, { 'qux' })
|
||||
eq({ 'fooqux', '' }, get_lines(0, 2, true))
|
||||
eq({ 0, 6 }, curbufmeths.get_extmark_by_id(ns, id3, {}))
|
||||
-- but mark before replacement point is still unaffected
|
||||
@ -1585,7 +1649,7 @@ describe('api/buf', function()
|
||||
eq({ 0, 8 }, curbufmeths.get_extmark_by_id(ns, id3, {}))
|
||||
end)
|
||||
|
||||
it("correctly marks changed region for redraw #13890", function()
|
||||
it('correctly marks changed region for redraw #13890', function()
|
||||
local screen = Screen.new(20, 5)
|
||||
screen:attach()
|
||||
|
||||
@ -1642,12 +1706,12 @@ describe('api/buf', function()
|
||||
before_each(function()
|
||||
screen = Screen.new(20, 12)
|
||||
screen:set_default_attr_ids {
|
||||
[1] = {bold = true, foreground = Screen.colors.Blue1};
|
||||
[2] = {reverse = true, bold = true};
|
||||
[3] = {reverse = true};
|
||||
[1] = { bold = true, foreground = Screen.colors.Blue1 },
|
||||
[2] = { reverse = true, bold = true },
|
||||
[3] = { reverse = true },
|
||||
}
|
||||
screen:attach()
|
||||
meths.buf_set_lines(0, 0, -1, 1, {"aaa", "bbb", "ccc", "ddd", "www", "xxx", "yyy", "zzz"})
|
||||
meths.buf_set_lines(0, 0, -1, 1, { 'aaa', 'bbb', 'ccc', 'ddd', 'www', 'xxx', 'yyy', 'zzz' })
|
||||
meths.set_option_value('modified', false, {})
|
||||
end)
|
||||
|
||||
@ -1658,7 +1722,8 @@ describe('api/buf', function()
|
||||
command('new | wincmd w')
|
||||
meths.win_set_cursor(win, { 8, 0 })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -1668,10 +1733,12 @@ describe('api/buf', function()
|
||||
^zzz |
|
||||
{2:[No Name] }|
|
||||
|
|
||||
]]}
|
||||
meths.buf_set_text(buf, 0,3, 1,0, {"X"})
|
||||
]],
|
||||
}
|
||||
meths.buf_set_text(buf, 0, 3, 1, 0, { 'X' })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
|
|
||||
{1:~ }|*4
|
||||
{3:[No Name] }|
|
||||
@ -1681,7 +1748,8 @@ describe('api/buf', function()
|
||||
^zzz |
|
||||
{2:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
end)
|
||||
|
||||
it('of non-current window', function()
|
||||
@ -1691,7 +1759,8 @@ describe('api/buf', function()
|
||||
command('new')
|
||||
meths.win_set_cursor(win, { 8, 0 })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^ |
|
||||
{1:~ }|*4
|
||||
{2:[No Name] }|
|
||||
@ -1701,10 +1770,12 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
|
||||
meths.buf_set_text(buf, 0,3, 1,0, {"X"})
|
||||
screen:expect{grid=[[
|
||||
meths.buf_set_text(buf, 0, 3, 1, 0, { 'X' })
|
||||
screen:expect {
|
||||
grid = [[
|
||||
^ |
|
||||
{1:~ }|*4
|
||||
{2:[No Name] }|
|
||||
@ -1714,7 +1785,8 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
end)
|
||||
|
||||
it('of split windows with same buffer', function()
|
||||
@ -1725,7 +1797,8 @@ describe('api/buf', function()
|
||||
meths.win_set_cursor(win, { 8, 0 })
|
||||
meths.win_set_cursor(0, { 1, 1 })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
a^aa |
|
||||
bbb |
|
||||
ccc |
|
||||
@ -1738,10 +1811,12 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] }|
|
||||
|
|
||||
]]}
|
||||
meths.buf_set_text(buf, 0,3, 1,0, {"X"})
|
||||
]],
|
||||
}
|
||||
meths.buf_set_text(buf, 0, 3, 1, 0, { 'X' })
|
||||
|
||||
screen:expect{grid=[[
|
||||
screen:expect {
|
||||
grid = [[
|
||||
a^aaXbbb |
|
||||
ccc |
|
||||
ddd |
|
||||
@ -1754,7 +1829,8 @@ describe('api/buf', function()
|
||||
zzz |
|
||||
{3:[No Name] [+] }|
|
||||
|
|
||||
]]}
|
||||
]],
|
||||
}
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
@ -1823,10 +1899,10 @@ describe('api/buf', function()
|
||||
meths.set_option_value('eol', true, {})
|
||||
eq(29, get_offset(5))
|
||||
|
||||
command("set hidden")
|
||||
command("enew")
|
||||
command('set hidden')
|
||||
command('enew')
|
||||
eq(6, bufmeths.get_offset(1, 1))
|
||||
command("bunload! 1")
|
||||
command('bunload! 1')
|
||||
eq(-1, bufmeths.get_offset(1, 1))
|
||||
eq(-1, bufmeths.get_offset(1, 0))
|
||||
end)
|
||||
@ -1857,10 +1933,8 @@ describe('api/buf', function()
|
||||
command('lockvar b:lua')
|
||||
eq('Key is locked: lua', pcall_err(curbufmeths.del_var, 'lua'))
|
||||
eq('Key is locked: lua', pcall_err(curbufmeths.set_var, 'lua', 1))
|
||||
eq('Key is read-only: changedtick',
|
||||
pcall_err(curbufmeths.del_var, 'changedtick'))
|
||||
eq('Key is read-only: changedtick',
|
||||
pcall_err(curbufmeths.set_var, 'changedtick', 1))
|
||||
eq('Key is read-only: changedtick', pcall_err(curbufmeths.del_var, 'changedtick'))
|
||||
eq('Key is read-only: changedtick', pcall_err(curbufmeths.set_var, 'changedtick', 1))
|
||||
end)
|
||||
end)
|
||||
|
||||
@ -1897,7 +1971,7 @@ describe('api/buf', function()
|
||||
nvim('set_option_value', 'define', 'test', { buf = 0 })
|
||||
eq('test', nvim('get_option_value', 'define', { buf = 0 }))
|
||||
-- Doesn't change the global value
|
||||
eq("", nvim('get_option_value', 'define', {scope='global'}))
|
||||
eq('', nvim('get_option_value', 'define', { scope = 'global' }))
|
||||
end)
|
||||
|
||||
it('returns values for unset local options', function()
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -25,6 +25,7 @@ describe('spellfile', function()
|
||||
local spellheader = 'VIMspell\050'
|
||||
it('errors out when prefcond section is truncated', function()
|
||||
meths.set_option_value('runtimepath', testdir, {})
|
||||
-- stylua: ignore
|
||||
write_file(testdir .. '/spell/en.ascii.spl',
|
||||
-- ┌ Section identifier (#SN_PREFCOND)
|
||||
-- │ ┌ Section flags (#SNF_REQUIRED or zero)
|
||||
@ -35,11 +36,11 @@ describe('spellfile', function()
|
||||
-- │ │ ┌ Condition regex (missing!)
|
||||
.. '\000\001\001')
|
||||
meths.set_option_value('spelllang', 'en', {})
|
||||
eq('Vim(set):E758: Truncated spell file',
|
||||
exc_exec('set spell'))
|
||||
eq('Vim(set):E758: Truncated spell file', exc_exec('set spell'))
|
||||
end)
|
||||
it('errors out when prefcond regexp contains NUL byte', function()
|
||||
meths.set_option_value('runtimepath', testdir, {})
|
||||
-- stylua: ignore
|
||||
write_file(testdir .. '/spell/en.ascii.spl',
|
||||
-- ┌ Section identifier (#SN_PREFCOND)
|
||||
-- │ ┌ Section flags (#SNF_REQUIRED or zero)
|
||||
@ -55,11 +56,11 @@ describe('spellfile', function()
|
||||
-- │ │ ┌ PREFIXTREE tree length
|
||||
.. '\000\000\000\000\000\000\000\000\000\000\000\000')
|
||||
meths.set_option_value('spelllang', 'en', {})
|
||||
eq('Vim(set):E759: Format error in spell file',
|
||||
exc_exec('set spell'))
|
||||
eq('Vim(set):E759: Format error in spell file', exc_exec('set spell'))
|
||||
end)
|
||||
it('errors out when region contains NUL byte', function()
|
||||
meths.set_option_value('runtimepath', testdir, {})
|
||||
-- stylua: ignore
|
||||
write_file(testdir .. '/spell/en.ascii.spl',
|
||||
-- ┌ Section identifier (#SN_REGION)
|
||||
-- │ ┌ Section flags (#SNF_REQUIRED or zero)
|
||||
@ -72,11 +73,11 @@ describe('spellfile', function()
|
||||
-- │ │ ┌ PREFIXTREE tree length
|
||||
.. '\000\000\000\000\000\000\000\000\000\000\000\000')
|
||||
meths.set_option_value('spelllang', 'en', {})
|
||||
eq('Vim(set):E759: Format error in spell file',
|
||||
exc_exec('set spell'))
|
||||
eq('Vim(set):E759: Format error in spell file', exc_exec('set spell'))
|
||||
end)
|
||||
it('errors out when SAL section contains NUL byte', function()
|
||||
meths.set_option_value('runtimepath', testdir, {})
|
||||
-- stylua: ignore
|
||||
write_file(testdir .. '/spell/en.ascii.spl',
|
||||
-- ┌ Section identifier (#SN_SAL)
|
||||
-- │ ┌ Section flags (#SNF_REQUIRED or zero)
|
||||
@ -96,15 +97,12 @@ describe('spellfile', function()
|
||||
-- │ │ ┌ PREFIXTREE tree length
|
||||
.. '\000\000\000\000\000\000\000\000\000\000\000\000')
|
||||
meths.set_option_value('spelllang', 'en', {})
|
||||
eq('Vim(set):E759: Format error in spell file',
|
||||
exc_exec('set spell'))
|
||||
eq('Vim(set):E759: Format error in spell file', exc_exec('set spell'))
|
||||
end)
|
||||
it('errors out when spell header contains NUL bytes', function()
|
||||
meths.set_option_value('runtimepath', testdir, {})
|
||||
write_file(testdir .. '/spell/en.ascii.spl',
|
||||
spellheader:sub(1, -3) .. '\000\000')
|
||||
write_file(testdir .. '/spell/en.ascii.spl', spellheader:sub(1, -3) .. '\000\000')
|
||||
meths.set_option_value('spelllang', 'en', {})
|
||||
eq('Vim(set):E757: This does not look like a spell file',
|
||||
exc_exec('set spell'))
|
||||
eq('Vim(set):E757: This does not look like a spell file', exc_exec('set spell'))
|
||||
end)
|
||||
end)
|
||||
|
@ -31,6 +31,7 @@ describe('msgpack*() functions', function()
|
||||
-- Test that big objects (requirement: dump to something that is bigger then
|
||||
-- IOSIZE) are also fine. This particular object is obtained by concatenating
|
||||
-- 5 identical shada files.
|
||||
-- stylua: ignore
|
||||
local big_obj = {
|
||||
1, 1436711454, 78, {
|
||||
encoding="utf-8",
|
||||
@ -336,8 +337,7 @@ describe('msgpack*() functions', function()
|
||||
command('let dumped = ["\\xCF" . repeat("\\xFF", 8)]')
|
||||
command('let parsed = msgpackparse(dumped)')
|
||||
command('let dumped2 = msgpackdump(parsed)')
|
||||
eq(1, eval('type(parsed[0]) == type(0) ' ..
|
||||
'|| parsed[0]._TYPE is v:msgpack_types.integer'))
|
||||
eq(1, eval('type(parsed[0]) == type(0) ' .. '|| parsed[0]._TYPE is v:msgpack_types.integer'))
|
||||
if eval('type(parsed[0]) == type(0)') == 1 then
|
||||
command('call assert_equal(0xFFFFFFFFFFFFFFFF, parsed[0])')
|
||||
eq({}, eval('v:errors'))
|
||||
@ -351,8 +351,7 @@ describe('msgpack*() functions', function()
|
||||
command('let dumped = ["\\xD3\\x80" . repeat("\\n", 7)]')
|
||||
command('let parsed = msgpackparse(dumped)')
|
||||
command('let dumped2 = msgpackdump(parsed)')
|
||||
eq(1, eval('type(parsed[0]) == type(0) ' ..
|
||||
'|| parsed[0]._TYPE is v:msgpack_types.integer'))
|
||||
eq(1, eval('type(parsed[0]) == type(0) ' .. '|| parsed[0]._TYPE is v:msgpack_types.integer'))
|
||||
if eval('type(parsed[0]) == type(0)') == 1 then
|
||||
command('call assert_equal(-0x7fffffffffffffff - 1, parsed[0])')
|
||||
eq({}, eval('v:errors'))
|
||||
@ -383,7 +382,7 @@ describe('msgpack*() functions', function()
|
||||
command('let dumped = ["\\xC4\\x01", ""]')
|
||||
command('let parsed = msgpackparse(dumped)')
|
||||
command('let dumped2 = msgpackdump(parsed)')
|
||||
eq({"\n"}, eval('parsed'))
|
||||
eq({ '\n' }, eval('parsed'))
|
||||
eq(1, eval('dumped ==# dumped2'))
|
||||
end)
|
||||
|
||||
@ -403,7 +402,8 @@ end
|
||||
|
||||
-- Test msgpackparse() with a readfile()-style list and a blob argument
|
||||
local parse_eq = function(expect, list_arg)
|
||||
local blob_expr = '0z' .. blobstr(list_arg):gsub('(.)', function(c)
|
||||
local blob_expr = '0z'
|
||||
.. blobstr(list_arg):gsub('(.)', function(c)
|
||||
return ('%.2x'):format(c:byte())
|
||||
end)
|
||||
eq(expect, funcs.msgpackparse(list_arg))
|
||||
@ -436,7 +436,7 @@ describe('msgpackparse() function', function()
|
||||
end)
|
||||
|
||||
it('restores FIXEXT1 as special dictionary', function()
|
||||
parse_eq({{_TYPE={}, _VAL={0x10, {"", ""}}}}, {'\212\016', ''})
|
||||
parse_eq({ { _TYPE = {}, _VAL = { 0x10, { '', '' } } } }, { '\212\016', '' })
|
||||
eq(1, eval('g:parsed[0]._TYPE is v:msgpack_types.ext'))
|
||||
end)
|
||||
|
||||
@ -449,8 +449,15 @@ describe('msgpackparse() function', function()
|
||||
command('let dumped = ["\\x82\\xA1a\\xC4\\n\\xA1a\\xC4\\n"]')
|
||||
-- FIXME Internal error bug, can't use parse_eq() here
|
||||
command('silent! let parsed = msgpackparse(dumped)')
|
||||
eq({{_TYPE={}, _VAL={ {{_TYPE={}, _VAL={'a'}}, ''},
|
||||
{{_TYPE={}, _VAL={'a'}}, ''}}} }, eval('parsed'))
|
||||
eq({
|
||||
{
|
||||
_TYPE = {},
|
||||
_VAL = {
|
||||
{ { _TYPE = {}, _VAL = { 'a' } }, '' },
|
||||
{ { _TYPE = {}, _VAL = { 'a' } }, '' },
|
||||
},
|
||||
},
|
||||
}, eval('parsed'))
|
||||
eq(1, eval('g:parsed[0]._TYPE is v:msgpack_types.map'))
|
||||
eq(1, eval('g:parsed[0]._VAL[0][0]._TYPE is v:msgpack_types.string'))
|
||||
eq(1, eval('g:parsed[0]._VAL[1][0]._TYPE is v:msgpack_types.string'))
|
||||
@ -462,8 +469,7 @@ describe('msgpackparse() function', function()
|
||||
end)
|
||||
|
||||
it('msgpackparse(systemlist(...)) does not segfault. #3135', function()
|
||||
local cmd = "sort(keys(msgpackparse(systemlist('"
|
||||
..helpers.nvim_prog.." --api-info'))[0]))"
|
||||
local cmd = "sort(keys(msgpackparse(systemlist('" .. helpers.nvim_prog .. " --api-info'))[0]))"
|
||||
eval(cmd)
|
||||
eval(cmd) -- do it again (try to force segfault)
|
||||
local api_info = eval(cmd) -- do it again
|
||||
@ -472,49 +478,64 @@ describe('msgpackparse() function', function()
|
||||
pending('msgpackparse() has a bug on windows')
|
||||
return
|
||||
end
|
||||
eq({'error_types', 'functions', 'types',
|
||||
'ui_events', 'ui_options', 'version'}, api_info)
|
||||
eq({ 'error_types', 'functions', 'types', 'ui_events', 'ui_options', 'version' }, api_info)
|
||||
end)
|
||||
|
||||
it('fails when called with no arguments', function()
|
||||
eq('Vim(call):E119: Not enough arguments for function: msgpackparse',
|
||||
exc_exec('call msgpackparse()'))
|
||||
eq(
|
||||
'Vim(call):E119: Not enough arguments for function: msgpackparse',
|
||||
exc_exec('call msgpackparse()')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails when called with two arguments', function()
|
||||
eq('Vim(call):E118: Too many arguments for function: msgpackparse',
|
||||
exc_exec('call msgpackparse(["", ""], 1)'))
|
||||
eq(
|
||||
'Vim(call):E118: Too many arguments for function: msgpackparse',
|
||||
exc_exec('call msgpackparse(["", ""], 1)')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to parse a string', function()
|
||||
eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse("abcdefghijklmnopqrstuvwxyz")'))
|
||||
eq(
|
||||
'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse("abcdefghijklmnopqrstuvwxyz")')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to parse a number', function()
|
||||
eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(127)'))
|
||||
eq(
|
||||
'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(127)')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to parse a dictionary', function()
|
||||
eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse({})'))
|
||||
eq(
|
||||
'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse({})')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to parse a funcref', function()
|
||||
eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(function("tr"))'))
|
||||
eq(
|
||||
'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(function("tr"))')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to parse a partial', function()
|
||||
command('function T() dict\nendfunction')
|
||||
eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(function("T", [1, 2], {}))'))
|
||||
eq(
|
||||
'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(function("T", [1, 2], {}))')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to parse a float', function()
|
||||
eq('Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(0.0)'))
|
||||
eq(
|
||||
'Vim(call):E899: Argument of msgpackparse() must be a List or Blob',
|
||||
exc_exec('call msgpackparse(0.0)')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails on incomplete msgpack string', function()
|
||||
@ -607,137 +628,173 @@ describe('msgpackdump() function', function()
|
||||
|
||||
it('fails to dump a function reference', function()
|
||||
command('let Todump = function("tr")')
|
||||
eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
|
||||
exc_exec('call msgpackdump([Todump])'))
|
||||
eq(
|
||||
'Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
|
||||
exc_exec('call msgpackdump([Todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a partial', function()
|
||||
command('function T() dict\nendfunction')
|
||||
command('let Todump = function("T", [1, 2], {})')
|
||||
eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
|
||||
exc_exec('call msgpackdump([Todump])'))
|
||||
eq(
|
||||
'Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, itself: attempt to dump function reference',
|
||||
exc_exec('call msgpackdump([Todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a function reference in a list', function()
|
||||
command('let todump = [function("tr")]')
|
||||
eq('Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, index 0: attempt to dump function reference',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5004: Error while dumping msgpackdump() argument, index 0, index 0: attempt to dump function reference',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive list', function()
|
||||
command('let todump = [[[]]]')
|
||||
command('call add(todump[0][0], todump)')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 0, index 0',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 0, index 0',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive dict', function()
|
||||
command('let todump = {"d": {"d": {}}}')
|
||||
command('call extend(todump.d.d, {"d": todump})')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key \'d\', key \'d\', key \'d\'',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
"Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key 'd', key 'd', key 'd'",
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('can dump dict with two same dicts inside', function()
|
||||
command('let inter = {}')
|
||||
command('let todump = {"a": inter, "b": inter}')
|
||||
dump_eq({"\130\161a\128\161b\128"}, '[todump]')
|
||||
dump_eq({ '\130\161a\128\161b\128' }, '[todump]')
|
||||
end)
|
||||
|
||||
it('can dump list with two same lists inside', function()
|
||||
command('let inter = []')
|
||||
command('let todump = [inter, inter]')
|
||||
dump_eq({"\146\144\144"}, '[todump]')
|
||||
dump_eq({ '\146\144\144' }, '[todump]')
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive list in a special dict', function()
|
||||
command('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}')
|
||||
command('call add(todump._VAL, todump)')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive (key) map in a special dict', function()
|
||||
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
|
||||
command('call add(todump._VAL, [todump, 0])')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive (val) map in a special dict', function()
|
||||
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": []}')
|
||||
command('call add(todump._VAL, [0, todump])')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key 0 at index 0 from special map',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key 0 at index 0 from special map',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive (key) map in a special dict, _VAL reference', function()
|
||||
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": [[[], []]]}')
|
||||
command('call add(todump._VAL[0][0], todump._VAL)')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [[[[...@0], []]]] at index 0 from special map, index 0',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [[[[...@0], []]]] at index 0 from special map, index 0',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive (val) map in a special dict, _VAL reference', function()
|
||||
command('let todump = {"_TYPE": v:msgpack_types.map, "_VAL": [[[], []]]}')
|
||||
command('call add(todump._VAL[0][1], todump._VAL)')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [] at index 0 from special map, index 0',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in key [] at index 0 from special map, index 0',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a recursive (val) special list in a special dict',
|
||||
function()
|
||||
it('fails to dump a recursive (val) special list in a special dict', function()
|
||||
command('let todump = {"_TYPE": v:msgpack_types.array, "_VAL": []}')
|
||||
command('call add(todump._VAL, [0, todump._VAL])')
|
||||
eq('Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 1',
|
||||
exc_exec('call msgpackdump([todump])'))
|
||||
eq(
|
||||
'Vim(call):E5005: Unable to dump msgpackdump() argument, index 0: container references itself in index 0, index 1',
|
||||
exc_exec('call msgpackdump([todump])')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails when called with no arguments', function()
|
||||
eq('Vim(call):E119: Not enough arguments for function: msgpackdump',
|
||||
exc_exec('call msgpackdump()'))
|
||||
eq(
|
||||
'Vim(call):E119: Not enough arguments for function: msgpackdump',
|
||||
exc_exec('call msgpackdump()')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails when called with three arguments', function()
|
||||
eq('Vim(call):E118: Too many arguments for function: msgpackdump',
|
||||
exc_exec('call msgpackdump(["", ""], 1, 2)'))
|
||||
eq(
|
||||
'Vim(call):E118: Too many arguments for function: msgpackdump',
|
||||
exc_exec('call msgpackdump(["", ""], 1, 2)')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a string', function()
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump("abcdefghijklmnopqrstuvwxyz")'))
|
||||
eq(
|
||||
'Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump("abcdefghijklmnopqrstuvwxyz")')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a number', function()
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(127)'))
|
||||
eq(
|
||||
'Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(127)')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a dictionary', function()
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump({})'))
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List', exc_exec('call msgpackdump({})'))
|
||||
end)
|
||||
|
||||
it('fails to dump a funcref', function()
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(function("tr"))'))
|
||||
eq(
|
||||
'Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(function("tr"))')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a partial', function()
|
||||
command('function T() dict\nendfunction')
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(function("T", [1, 2], {}))'))
|
||||
eq(
|
||||
'Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(function("T", [1, 2], {}))')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump a float', function()
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(0.0)'))
|
||||
eq(
|
||||
'Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(0.0)')
|
||||
)
|
||||
end)
|
||||
|
||||
it('fails to dump special value', function()
|
||||
for _, val in ipairs({ 'v:true', 'v:false', 'v:null' }) do
|
||||
eq('Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(' .. val .. ')'))
|
||||
eq(
|
||||
'Vim(call):E686: Argument of msgpackdump() must be a List',
|
||||
exc_exec('call msgpackdump(' .. val .. ')')
|
||||
)
|
||||
end
|
||||
end)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user