mirror of
https://github.com/neovim/neovim.git
synced 2025-09-30 15:08:35 +00:00

- Remove unused variables. - Do not use helpers.nvim_feed in most cases. - Do not use helpers.nvim and helpers.nvim_eval at all. - Add helpers.funcs and helpers.\*meths special tables. Indexing such table creates functions which call helpers.call or helpers.nvim (and similar) with first argument equal to table index.
454 lines
14 KiB
Lua
454 lines
14 KiB
Lua
-- ShaDa compatibility support
|
|
local helpers = require('test.functional.helpers')
|
|
local nvim_command, funcs, eq = helpers.command, helpers.funcs, helpers.eq
|
|
local exc_exec = helpers.exc_exec
|
|
|
|
local shada_helpers = require('test.functional.shada.helpers')
|
|
local reset, set_additional_cmd, clear, get_shada_rw =
|
|
shada_helpers.reset, shada_helpers.set_additional_cmd,
|
|
shada_helpers.clear, shada_helpers.get_shada_rw
|
|
local read_shada_file = shada_helpers.read_shada_file
|
|
|
|
local wshada, sdrcmd, shada_fname = get_shada_rw('Xtest-functional-shada-compatibility.shada')
|
|
|
|
describe('ShaDa forward compatibility support code', function()
|
|
before_each(reset)
|
|
after_each(function()
|
|
clear()
|
|
os.remove(shada_fname)
|
|
end)
|
|
|
|
it('works with search pattern item with BOOL unknown (sX) key value', function()
|
|
wshada('\002\001\011\130\162sX\194\162sp\196\001-')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 2 and not v.value.ss then
|
|
eq(false, v.value.sX)
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('silent! /---/')
|
|
nvim_command('wshada ' .. shada_fname)
|
|
found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 2 and not v.value.ss then
|
|
eq(nil, v.value.sX)
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada! ' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with s/search pattern item with BOOL unknown (sX) key value', function()
|
|
wshada('\002\001\015\131\162sX\194\162ss\195\162sp\196\001-')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 2 and v.value.ss then
|
|
eq(false, v.value.sX)
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('silent! s/--/---/ge')
|
|
nvim_command('wshada ' .. shada_fname)
|
|
found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 2 and v.value.ss then
|
|
eq(nil, v.value.sX)
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with replacement item with BOOL additional value in list', function()
|
|
wshada('\003\000\005\146\196\001-\194')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 3 then
|
|
eq(2, #v.value)
|
|
eq(false, v.value[2])
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('silent! s/--/---/ge')
|
|
nvim_command('wshada ' .. shada_fname)
|
|
found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 3 then
|
|
eq(1, #v.value)
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
for _, v in ipairs({{name='global mark', mpack='\007\001\018\131\162mX\195\161f\196\006/a/b/c\161nA'},
|
|
{name='jump', mpack='\008\001\018\131\162mX\195\161f\196\006/a/b/c\161l\002'},
|
|
{name='local mark', mpack='\010\001\018\131\162mX\195\161f\196\006/a/b/c\161na'},
|
|
{name='change', mpack='\011\001\015\130\162mX\195\161f\196\006/a/b/c'},
|
|
}) do
|
|
it('works with ' .. v.name .. ' item with BOOL unknown (mX) key value', function()
|
|
nvim_command('silent noautocmd edit /a/b/c')
|
|
eq('/a/b/c', funcs.bufname('%'))
|
|
funcs.setline('.', {'1', '2', '3'})
|
|
wshada(v.mpack)
|
|
eq(0, exc_exec(sdrcmd(true)))
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = false
|
|
for _, subv in ipairs(read_shada_file(shada_fname)) do
|
|
if subv.type == v.mpack:byte() then
|
|
if subv.value.mX == true then
|
|
found = true
|
|
end
|
|
end
|
|
end
|
|
eq(true, found)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
nvim_command('bwipeout!')
|
|
funcs.setpos('\'A', {0, 1, 1, 0})
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
found = false
|
|
for _, subv in ipairs(read_shada_file(shada_fname)) do
|
|
if subv.type == v.mpack:byte() then
|
|
if subv.value.mX == true then
|
|
found = true
|
|
end
|
|
end
|
|
end
|
|
eq(false, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
if v.name == 'global mark' or v.name == 'local mark' then
|
|
it('works with ' .. v.name .. ' item with <C-a> name', function()
|
|
nvim_command('silent noautocmd edit /a/b/c')
|
|
eq('/a/b/c', funcs.bufname('%'))
|
|
funcs.setline('.', {'1', '2', '3'})
|
|
wshada(v.mpack:gsub('n.$', 'n\001')
|
|
.. v.mpack:gsub('n.$', 'n\002')
|
|
.. v.mpack:gsub('n.$', 'n\003'):gsub('/a/b/c', '/d/e/f'))
|
|
eq(0, exc_exec(sdrcmd(true)))
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = 0
|
|
for i, subv in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, subv.type)
|
|
end
|
|
if subv.type == v.mpack:byte() then
|
|
if subv.value.mX == true and subv.value.n <= 3 then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(3, found)
|
|
nvim_command('wshada! ' .. shada_fname)
|
|
local found = 0
|
|
for i, subv in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, subv.type)
|
|
end
|
|
if subv.type == v.mpack:byte() then
|
|
if subv.value.mX == true and subv.value.n <= 3 then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(0, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
end
|
|
end
|
|
|
|
it('works with register item with BOOL unknown (rX) key', function()
|
|
wshada('\005\001\015\131\161na\162rX\194\162rc\145\196\001-')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 5 and v.value.rX == false then
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('let @a = "Test"')
|
|
nvim_command('wshada ' .. shada_fname)
|
|
found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 5 and v.value.rX == false then
|
|
found = true
|
|
end
|
|
end
|
|
eq(false, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with register item with <C-a> name', function()
|
|
wshada('\005\001\015\131\161n\001\162rX\194\162rc\145\196\001-')
|
|
eq(0, exc_exec(sdrcmd(true)))
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 5 then
|
|
if v.value.rX == false and v.value.n == 1 then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(1, found)
|
|
nvim_command('wshada! ' .. shada_fname)
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 5 then
|
|
if v.value.rX == false and v.value.n == 1 then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(0, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with register item with type 10', function()
|
|
wshada('\005\001\019\132\161na\162rX\194\162rc\145\196\001-\162rt\010')
|
|
eq(0, exc_exec(sdrcmd(true)))
|
|
-- getreg may return empty list as list with NULL pointer which API
|
|
-- translates into nil for some reason.
|
|
eq({}, funcs.getreg('a', 1, 1) or {})
|
|
eq('', funcs.getregtype('a'))
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 5 then
|
|
if v.value.rX == false and v.value.rt == 10 then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(1, found)
|
|
nvim_command('wshada! ' .. shada_fname)
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 5 then
|
|
if v.value.rX == false and v.value.rt == 10 then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(0, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with buffer list item with BOOL unknown (bX) key', function()
|
|
nvim_command('set shada+=%')
|
|
wshada('\009\000\016\145\130\161f\196\006/a/b/c\162bX\195')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
eq(2, funcs.bufnr('$'))
|
|
eq('/a/b/c', funcs.bufname(2))
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 9 and #v.value == 1 and v.value[1].bX == true then
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('buffer 2')
|
|
nvim_command('edit!')
|
|
nvim_command('wshada ' .. shada_fname)
|
|
found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 5 and v.value.rX == false then
|
|
found = true
|
|
end
|
|
end
|
|
eq(false, found)
|
|
nvim_command('bwipeout!')
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with history item with BOOL additional value in list', function()
|
|
wshada('\004\000\006\147\000\196\001-\194')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
nvim_command('wshada ' .. shada_fname)
|
|
local found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 4 and v.value[1] == 0 and v.value[2] == '-' then
|
|
eq(false, v.value[3])
|
|
eq(3, #v.value)
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
os.remove(shada_fname)
|
|
funcs.histadd(':', '--')
|
|
funcs.histadd(':', '-')
|
|
nvim_command('wshada ' .. shada_fname)
|
|
found = false
|
|
for _, v in ipairs(read_shada_file(shada_fname)) do
|
|
if v.type == 4 and v.value[1] == 0 and v.value[2] == '-' then
|
|
eq(2, #v.value)
|
|
found = true
|
|
end
|
|
end
|
|
eq(true, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with history item with type 10', function()
|
|
wshada('\004\000\006\147\010\196\001-\194')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
nvim_command('wshada ' .. shada_fname)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 4 then
|
|
if v.value[1] == 10 and #v.value == 3 and v.value[3] == false then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(1, found)
|
|
nvim_command('wshada! ' .. shada_fname)
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 4 then
|
|
if v.value[1] == 10 and #v.value == 3 and v.value[3] == false then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(0, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
|
|
it('works with item with 100 type', function()
|
|
wshada('\100\000\006\147\010\196\001-\194')
|
|
eq(0, exc_exec(sdrcmd()))
|
|
nvim_command('wshada ' .. shada_fname)
|
|
eq(0, exc_exec(sdrcmd()))
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 100 then
|
|
if v.value[1] == 10 and #v.value == 3 and v.value[3] == false then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(1, found)
|
|
nvim_command('wshada! ' .. shada_fname)
|
|
local found = 0
|
|
for i, v in ipairs(read_shada_file(shada_fname)) do
|
|
if i == 1 then
|
|
eq(1, v.type)
|
|
end
|
|
if v.type == 100 then
|
|
if v.value[1] == 10 and #v.value == 3 and v.value[3] == false then
|
|
found = found + 1
|
|
end
|
|
end
|
|
end
|
|
eq(0, found)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
nvim_command('rshada!' .. shada_fname)
|
|
funcs.garbagecollect(1)
|
|
funcs.garbagecollect(1)
|
|
end)
|
|
end)
|