aboutsummaryrefslogtreecommitdiff
path: root/test/functional/api/vim_spec.lua
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2023-12-06 17:02:13 +0100
committerJustin M. Keyes <justinkz@gmail.com>2023-12-07 12:57:25 +0100
commitcca6c4c6986abc67cd213ad1d32d329384a57790 (patch)
tree7582bde2a49bcd6c171e7a008aef075cb63a5da8 /test/functional/api/vim_spec.lua
parent5fa88a7ae13effc02d42070313d3082bf98e22a7 (diff)
downloadrneovim-cca6c4c6986abc67cd213ad1d32d329384a57790.tar.gz
rneovim-cca6c4c6986abc67cd213ad1d32d329384a57790.tar.bz2
rneovim-cca6c4c6986abc67cd213ad1d32d329384a57790.zip
feat(rpc): allow empty string key in msgpack => Vim conversion
Problem: Since e057b38e7037 #20757 we support empty key in JSON encode/decode, but we don't allow it in RPC object => Vim dict conversion. But empty string is a valid key in Vim dicts and the msgpack spec. Empty string key was disallowed in 7c01d5ff9286 (2014) but that commit/PR doesn't explicitly discuss it, so presumably it was a "seems reasonable" decision (or Vimscript didn't allow empty keys until later). Solution: Remove the check in `object_to_vim()`. Note that `tv_dict_item_alloc_len` will invoke `memcpy(…, 0)` but that's allowed by the C spec: https://stackoverflow.com/a/3751937/152142
Diffstat (limited to 'test/functional/api/vim_spec.lua')
-rw-r--r--test/functional/api/vim_spec.lua6
1 files changed, 5 insertions, 1 deletions
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index 7287666190..abae346701 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -1319,6 +1319,10 @@ describe('API', function()
eq("Key not found: lua", pcall_err(meths.del_var, 'lua'))
meths.set_var('lua', 1)
+ -- Empty keys are allowed in Vim dicts (and msgpack).
+ nvim('set_var', 'dict_empty_key', {[''] = 'empty key'})
+ eq({[''] = 'empty key'}, nvim('get_var', 'dict_empty_key'))
+
-- Set locked g: var.
command('lockvar lua')
eq('Key is locked: lua', pcall_err(meths.del_var, 'lua'))
@@ -1983,7 +1987,7 @@ describe('API', function()
it('errors when context dictionary is invalid', function()
eq('E474: Failed to convert list to msgpack string buffer',
pcall_err(nvim, 'load_context', { regs = { {} }, jumps = { {} } }))
- eq("Empty dictionary keys aren't allowed",
+ eq('E474: Failed to convert list to msgpack string buffer',
pcall_err(nvim, 'load_context', { regs = { { [''] = '' } } }))
end)
end)