neovim/test/functional/shada/compatibility_spec.lua

453 lines
14 KiB
Lua
Raw Normal View History

shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
-- ShaDa compatibility support
local helpers = require('test.functional.helpers')
local nvim, nvim_window, nvim_curwin, nvim_command, nvim_feed, nvim_eval, eq =
helpers.nvim, helpers.window, helpers.curwin, helpers.command, helpers.feed,
helpers.eval, helpers.eq
local exc_exec = helpers.exc_exec
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
local shada_helpers = require('test.functional.shada.helpers')
local reset, set_additional_cmd, clear, get_shada_rw =
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
local wshada, sdrcmd, shada_fname = get_shada_rw('Xtest-functional-shada-compatibility.shada')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
eq(nil, v.value.sX)
found = true
end
end
eq(true, found)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada! ' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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', nvim_eval('bufname("%")'))
nvim_command('call 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!')
nvim_eval('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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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', nvim_eval('bufname("%")'))
nvim_command('call 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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)))
eq({{}, ''}, nvim_eval('[getreg("a", 1, 1)[:], 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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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, nvim_eval('bufnr("$")'))
eq('/a/b/c', nvim_eval('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!')
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)
nvim_eval('histadd(":", "--")')
nvim_eval('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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
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)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
nvim_command('rshada!' .. shada_fname)
nvim_eval('garbagecollect(1)')
nvim_eval('garbagecollect(1)')
shada,functests: Test compatibility support For compatibility the following things are done: 1. Items with type greater then greatest type are ignored when reading and copied when writing. 2. Registers with unknown name are ignored when reading and blindly copied when writing. 3. Registers with unknown type are ignored when reading and merged as usual when writing. 4. Local and global marks with unknown names are ignored when reading. When writing global marks are blindly copied and local marks are also blindly copied, but only if file they are attached to fits in the `'N` limit defined in &shada. Unknown local mark’s timestamp is also taken into account when calculating which files exactly should fit into this limit. 5. History items with unknown type are ignored when reading and blindly copied when writing. 6. Unknown keys found in register, local marks, global marks, changes, jumps and search pattern entries are read to additional_data Dictionary and dumped (of course, unless any of these elements were not overwritten later). It obviously works only for values conversible to Object type. 7. Additional elements found in replacement string and history entries are read to additional_elements Array and dumped (same: only if they were not overwritten later). Again this works only for elements conversible to Object type. 8. Additional elements found in variable entries are simply ignored when reading. When writing *new* variables they will be preserved during merging, but that’s all. Variable values dumped from current NeoVim session never have additional elements.
2015-07-26 10:46:40 -07:00
end)
end)