aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/json_spec.lua
diff options
context:
space:
mode:
authorEmanuel <emanuel@empa.xyz>2023-12-06 16:56:04 +0100
committerGitHub <noreply@github.com>2023-12-06 07:56:04 -0800
commite057b38e7037808b3593fb1035794595b4e4a45e (patch)
treec746a875319d527094eafd2143b0d89296250463 /test/functional/lua/json_spec.lua
parentc84af395e88ba143c19f7e34674bd222622e08ee (diff)
downloadrneovim-e057b38e7037808b3593fb1035794595b4e4a45e.tar.gz
rneovim-e057b38e7037808b3593fb1035794595b4e4a45e.tar.bz2
rneovim-e057b38e7037808b3593fb1035794595b4e4a45e.zip
fix(json): allow objects with empty keys #25564
Problem: Empty string is a valid JSON key, but json_decode() treats an object with empty key as ":help msgpack-special-dict". #20757 :echo json_decode('{"": "1"}') {'_TYPE': [], '_VAL': [['', '1']]} Note: vim returns `{'': '1'}`. Solution: Allow empty string as an object key. Note that we still (currently) disallow empty keys in object_to_vim() (since 7c01d5ff9286d262097484c680e3a4eab49e2911): https://github.com/neovim/neovim/blob/f64e4b43e1191ff30d902730f752875aa55682ce/src/nvim/api/private/converter.c#L333-L334 Fix #20757 Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
Diffstat (limited to 'test/functional/lua/json_spec.lua')
-rw-r--r--test/functional/lua/json_spec.lua4
1 files changed, 4 insertions, 0 deletions
diff --git a/test/functional/lua/json_spec.lua b/test/functional/lua/json_spec.lua
index 25fdb48eea..705bfcf2f9 100644
--- a/test/functional/lua/json_spec.lua
+++ b/test/functional/lua/json_spec.lua
@@ -101,6 +101,8 @@ describe('vim.json.decode()', function()
eq({['1']=2}, exec_lua([[return vim.json.decode('{"1": 2}')]]))
eq({['1']=2, ['3']={{['4']={['5']={{}, 1}}}}},
exec_lua([[return vim.json.decode('{"1": 2, "3": [{"4": {"5": [ [], 1]}}]}')]]))
+ -- Empty string is a valid key. #20757
+ eq({['']=42}, exec_lua([[return vim.json.decode('{"": 42}')]]))
end)
it('parses strings properly', function()
@@ -161,6 +163,8 @@ describe('vim.json.encode()', function()
it('dumps dictionaries', function()
eq('{}', exec_lua([[return vim.json.encode(vim.empty_dict())]]))
eq('{"d":[]}', exec_lua([[return vim.json.encode({d={}})]]))
+ -- Empty string is a valid key. #20757
+ eq('{"":42}', exec_lua([[return vim.json.encode({['']=42})]]))
end)
it('dumps vim.NIL', function()