mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
feat(decode_string): decode binary string with NULs to Blob
Strings that previously decoded into a msgpack special for representing BINs with NULs now convert to Blobs. It shouldn't be possible to decode into this special anymore after this change? Notably, Lua strings with NULs now convert to Blobs when passed to VimL.
This commit is contained in:
@@ -63,11 +63,10 @@ describe('luaeval()', function()
|
||||
eq('\n[[...@0]]', funcs.execute('echo luaeval("l")'))
|
||||
end)
|
||||
end)
|
||||
describe('strings', function()
|
||||
it('are successfully converted to special dictionaries', function()
|
||||
describe('strings with NULs', function()
|
||||
it('are successfully converted to blobs', function()
|
||||
command([[let s = luaeval('"\0"')]])
|
||||
eq({_TYPE={}, _VAL={'\n'}}, meths.get_var('s'))
|
||||
eq(1, funcs.eval('s._TYPE is v:msgpack_types.binary'))
|
||||
eq('\000', meths.get_var('s'))
|
||||
end)
|
||||
it('are successfully converted to special dictionaries in table keys',
|
||||
function()
|
||||
@@ -76,13 +75,10 @@ describe('luaeval()', function()
|
||||
eq(1, funcs.eval('d._TYPE is v:msgpack_types.map'))
|
||||
eq(1, funcs.eval('d._VAL[0][0]._TYPE is v:msgpack_types.string'))
|
||||
end)
|
||||
it('are successfully converted to special dictionaries from a list',
|
||||
it('are successfully converted to blobs from a list',
|
||||
function()
|
||||
command([[let l = luaeval('{"abc", "a\0b", "c\0d", "def"}')]])
|
||||
eq({'abc', {_TYPE={}, _VAL={'a\nb'}}, {_TYPE={}, _VAL={'c\nd'}}, 'def'},
|
||||
meths.get_var('l'))
|
||||
eq(1, funcs.eval('l[1]._TYPE is v:msgpack_types.binary'))
|
||||
eq(1, funcs.eval('l[2]._TYPE is v:msgpack_types.binary'))
|
||||
eq({'abc', 'a\000b', 'c\000d', 'def'}, meths.get_var('l'))
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -100,9 +96,9 @@ describe('luaeval()', function()
|
||||
eq(1, eval('type(luaeval("\'test\'"))'))
|
||||
|
||||
eq('', funcs.luaeval('""'))
|
||||
eq({_TYPE={}, _VAL={'\n'}}, funcs.luaeval([['\0']]))
|
||||
eq({_TYPE={}, _VAL={'\n', '\n'}}, funcs.luaeval([['\0\n\0']]))
|
||||
eq(1, eval([[luaeval('"\0\n\0"')._TYPE is v:msgpack_types.binary]]))
|
||||
eq('\000', funcs.luaeval([['\0']]))
|
||||
eq('\000\n\000', funcs.luaeval([['\0\n\0']]))
|
||||
eq(10, eval([[type(luaeval("'\\0\\n\\0'"))]]))
|
||||
|
||||
eq(true, funcs.luaeval('true'))
|
||||
eq(false, funcs.luaeval('false'))
|
||||
@@ -122,12 +118,11 @@ describe('luaeval()', function()
|
||||
local level = 30
|
||||
eq(nested_by_level[level].o, funcs.luaeval(nested_by_level[level].s))
|
||||
|
||||
eq({_TYPE={}, _VAL={{{_TYPE={}, _VAL={'\n', '\n'}}, {_TYPE={}, _VAL={'\n', '\n\n'}}}}},
|
||||
eq({_TYPE={}, _VAL={{{_TYPE={}, _VAL={'\n', '\n'}}, '\000\n\000\000'}}},
|
||||
funcs.luaeval([[{['\0\n\0']='\0\n\0\0'}]]))
|
||||
eq(1, eval([[luaeval('{["\0\n\0"]="\0\n\0\0"}')._TYPE is v:msgpack_types.map]]))
|
||||
eq(1, eval([[luaeval('{["\0\n\0"]="\0\n\0\0"}')._VAL[0][0]._TYPE is v:msgpack_types.string]]))
|
||||
eq(1, eval([[luaeval('{["\0\n\0"]="\0\n\0\0"}')._VAL[0][1]._TYPE is v:msgpack_types.binary]]))
|
||||
eq({nested={{_TYPE={}, _VAL={{{_TYPE={}, _VAL={'\n', '\n'}}, {_TYPE={}, _VAL={'\n', '\n\n'}}}}}}},
|
||||
eq({nested={{_TYPE={}, _VAL={{{_TYPE={}, _VAL={'\n', '\n'}}, '\000\n\000\000'}}}}},
|
||||
funcs.luaeval([[{nested={{['\0\n\0']='\0\n\0\0'}}}]]))
|
||||
end)
|
||||
|
||||
@@ -175,8 +170,8 @@ describe('luaeval()', function()
|
||||
end
|
||||
|
||||
it('correctly passes special dictionaries', function()
|
||||
eq({'binary', {'\n', '\n'}}, luaevalarg(sp('binary', '["\\n", "\\n"]')))
|
||||
eq({'binary', {'\n', '\n'}}, luaevalarg(sp('string', '["\\n", "\\n"]')))
|
||||
eq({0, '\000\n\000'}, luaevalarg(sp('binary', '["\\n", "\\n"]')))
|
||||
eq({0, '\000\n\000'}, luaevalarg(sp('string', '["\\n", "\\n"]')))
|
||||
eq({0, true}, luaevalarg(sp('boolean', 1)))
|
||||
eq({0, false}, luaevalarg(sp('boolean', 0)))
|
||||
eq({0, NIL}, luaevalarg(sp('nil', 0)))
|
||||
|
Reference in New Issue
Block a user