aboutsummaryrefslogtreecommitdiff
path: root/test/functional/shada/testutil.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/shada/testutil.lua')
-rw-r--r--test/functional/shada/testutil.lua87
1 files changed, 87 insertions, 0 deletions
diff --git a/test/functional/shada/testutil.lua b/test/functional/shada/testutil.lua
new file mode 100644
index 0000000000..9cf81ec87b
--- /dev/null
+++ b/test/functional/shada/testutil.lua
@@ -0,0 +1,87 @@
+local t = require('test.functional.testutil')(nil)
+local api = t.api
+local write_file = t.write_file
+local concat_tables = t.concat_tables
+
+local tmpname = t.tmpname()
+
+-- o={
+-- args=…,
+-- args_rm=…,
+-- shadafile=…,
+-- }
+local function reset(o)
+ assert(o == nil or type(o) == 'table' or type(o) == 'string')
+ o = o and o or {}
+ local args_rm = o.args_rm or {}
+ table.insert(args_rm, '-i')
+ local args = {
+ '-i',
+ o.shadafile or tmpname,
+ }
+ if type(o) == 'string' then
+ args = concat_tables(args, { '--cmd', o })
+ elseif o.args then
+ args = concat_tables(args, o.args)
+ end
+ t.clear {
+ args_rm = args_rm,
+ args = args,
+ }
+ api.nvim_set_var('tmpname', tmpname)
+end
+
+local clear = function()
+ t.expect_exit(t.command, 'qall!')
+ os.remove(tmpname)
+end
+
+local get_shada_rw = function(fname)
+ local wshada = function(text)
+ write_file(fname, text, true)
+ end
+ local sdrcmd = function(bang)
+ return 'rshada' .. (bang and '!' or '') .. ' ' .. fname
+ end
+ local clean = function()
+ os.remove(fname)
+ local i = ('a'):byte()
+ while i <= ('z'):byte() do
+ if not os.remove(fname .. ('.tmp.%c'):format(i)) then
+ break
+ end
+ i = i + 1
+ end
+ end
+ return wshada, sdrcmd, fname, clean
+end
+
+local mpack_keys = { 'type', 'timestamp', 'length', 'value' }
+
+local read_shada_file = function(fname)
+ local fd = io.open(fname, 'r')
+ local mstring = fd:read('*a')
+ fd:close()
+ local unpack = vim.mpack.Unpacker()
+ local ret = {}
+ local cur, val
+ local i = 0
+ local off = 1
+ while off <= #mstring do
+ val, off = unpack(mstring, off)
+ if i % 4 == 0 then
+ cur = {}
+ ret[#ret + 1] = cur
+ end
+ cur[mpack_keys[(i % 4) + 1]] = val
+ i = i + 1
+ end
+ return ret
+end
+
+return {
+ reset = reset,
+ clear = clear,
+ get_shada_rw = get_shada_rw,
+ read_shada_file = read_shada_file,
+}