aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/json_spec.lua
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2023-11-29 21:52:58 +0000
committerJosh Rahm <joshuarahm@gmail.com>2023-11-29 21:52:58 +0000
commit931bffbda3668ddc609fc1da8f9eb576b170aa52 (patch)
treed8c1843a95da5ea0bb4acc09f7e37843d9995c86 /test/functional/lua/json_spec.lua
parent142d9041391780ac15b89886a54015fdc5c73995 (diff)
parent4a8bf24ac690004aedf5540fa440e788459e5e34 (diff)
downloadrneovim-931bffbda3668ddc609fc1da8f9eb576b170aa52.tar.gz
rneovim-931bffbda3668ddc609fc1da8f9eb576b170aa52.tar.bz2
rneovim-931bffbda3668ddc609fc1da8f9eb576b170aa52.zip
Merge remote-tracking branch 'upstream/master' into userreguserreg
Diffstat (limited to 'test/functional/lua/json_spec.lua')
-rw-r--r--test/functional/lua/json_spec.lua111
1 files changed, 74 insertions, 37 deletions
diff --git a/test/functional/lua/json_spec.lua b/test/functional/lua/json_spec.lua
index fbb21bfd57..25fdb48eea 100644
--- a/test/functional/lua/json_spec.lua
+++ b/test/functional/lua/json_spec.lua
@@ -1,20 +1,57 @@
local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
-local NIL = helpers.NIL
local exec_lua = helpers.exec_lua
local eq = helpers.eq
+local pcall_err = helpers.pcall_err
-describe('vim.json.decode function', function()
+describe('vim.json.decode()', function()
before_each(function()
clear()
end)
it('parses null, true, false', function()
- eq(NIL, exec_lua([[return vim.json.decode('null')]]))
+ eq(vim.NIL, exec_lua([[return vim.json.decode('null')]]))
eq(true, exec_lua([[return vim.json.decode('true')]]))
eq(false, exec_lua([[return vim.json.decode('false')]]))
end)
+ it('validation', function()
+ eq('Expected object key string but found invalid token at character 2',
+ pcall_err(exec_lua, [[return vim.json.decode('{a:"b"}')]]))
+ end)
+
+ it('options', function()
+ local jsonstr = '{"arr":[1,2,null],"bar":[3,7],"foo":{"a":"b"},"baz":null}'
+ eq({
+ arr = { 1, 2, vim.NIL },
+ bar = { 3, 7 },
+ baz = vim.NIL,
+ foo = { a = 'b' },
+ },
+ exec_lua([[return vim.json.decode(..., {})]], jsonstr))
+ eq({
+ arr = { 1, 2, vim.NIL },
+ bar = { 3, 7 },
+ -- baz = nil,
+ foo = { a = 'b' },
+ },
+ exec_lua([[return vim.json.decode(..., { luanil = { object = true } })]], jsonstr))
+ eq({
+ arr = { 1, 2 },
+ bar = { 3, 7 },
+ baz = vim.NIL,
+ foo = { a = 'b' },
+ },
+ exec_lua([[return vim.json.decode(..., { luanil = { array = true } })]], jsonstr))
+ eq({
+ arr = { 1, 2 },
+ bar = { 3, 7 },
+ -- baz = nil,
+ foo = { a = 'b' },
+ },
+ exec_lua([[return vim.json.decode(..., { luanil = { array = true, object = true } })]], jsonstr))
+ end)
+
it('parses integer numbers', function()
eq(100000, exec_lua([[return vim.json.decode('100000')]]))
eq(-100000, exec_lua([[return vim.json.decode('-100000')]]))
@@ -60,7 +97,7 @@ describe('vim.json.decode function', function()
it('parses containers', function()
eq({1}, exec_lua([[return vim.json.decode('[1]')]]))
- eq({NIL, 1}, exec_lua([[return vim.json.decode('[null, 1]')]]))
+ eq({vim.NIL, 1}, exec_lua([[return vim.json.decode('[null, 1]')]]))
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]}}]}')]]))
@@ -88,43 +125,43 @@ describe('vim.json.decode function', function()
end)
-describe('vim.json.encode function', function()
+describe('vim.json.encode()', function()
before_each(function()
clear()
end)
- it('dumps strings', function()
- eq('"Test"', exec_lua([[return vim.json.encode('Test')]]))
- eq('""', exec_lua([[return vim.json.encode('')]]))
- eq('"\\t"', exec_lua([[return vim.json.encode('\t')]]))
- eq('"\\n"', exec_lua([[return vim.json.encode('\n')]]))
- -- vim.fn.json_encode return \\u001B
- eq('"\\u001b"', exec_lua([[return vim.json.encode('\27')]]))
- eq('"þÿþ"', exec_lua([[return vim.json.encode('þÿþ')]]))
- end)
-
- it('dumps numbers', function()
- eq('0', exec_lua([[return vim.json.encode(0)]]))
- eq('10', exec_lua([[return vim.json.encode(10)]]))
- eq('-10', exec_lua([[return vim.json.encode(-10)]]))
- end)
-
- it('dumps floats', function()
- eq('10.5', exec_lua([[return vim.json.encode(10.5)]]))
- eq('-10.5', exec_lua([[return vim.json.encode(-10.5)]]))
- eq('-1e-05', exec_lua([[return vim.json.encode(-1e-5)]]))
- end)
-
- it('dumps lists', function()
- eq('[]', exec_lua([[return vim.json.encode({})]]))
- eq('[[]]', exec_lua([[return vim.json.encode({{}})]]))
- eq('[[],[]]', exec_lua([[return vim.json.encode({{}, {}})]]))
- end)
-
- it('dumps dictionaries', function()
- eq('{}', exec_lua([[return vim.json.encode(vim.empty_dict())]]))
- eq('{"d":[]}', exec_lua([[return vim.json.encode({d={}})]]))
- end)
+ it('dumps strings', function()
+ eq('"Test"', exec_lua([[return vim.json.encode('Test')]]))
+ eq('""', exec_lua([[return vim.json.encode('')]]))
+ eq('"\\t"', exec_lua([[return vim.json.encode('\t')]]))
+ eq('"\\n"', exec_lua([[return vim.json.encode('\n')]]))
+ -- vim.fn.json_encode return \\u001B
+ eq('"\\u001b"', exec_lua([[return vim.json.encode('\27')]]))
+ eq('"þÿþ"', exec_lua([[return vim.json.encode('þÿþ')]]))
+ end)
+
+ it('dumps numbers', function()
+ eq('0', exec_lua([[return vim.json.encode(0)]]))
+ eq('10', exec_lua([[return vim.json.encode(10)]]))
+ eq('-10', exec_lua([[return vim.json.encode(-10)]]))
+ end)
+
+ it('dumps floats', function()
+ eq('10.5', exec_lua([[return vim.json.encode(10.5)]]))
+ eq('-10.5', exec_lua([[return vim.json.encode(-10.5)]]))
+ eq('-1e-05', exec_lua([[return vim.json.encode(-1e-5)]]))
+ end)
+
+ it('dumps lists', function()
+ eq('[]', exec_lua([[return vim.json.encode({})]]))
+ eq('[[]]', exec_lua([[return vim.json.encode({{}})]]))
+ eq('[[],[]]', exec_lua([[return vim.json.encode({{}, {}})]]))
+ end)
+
+ it('dumps dictionaries', function()
+ eq('{}', exec_lua([[return vim.json.encode(vim.empty_dict())]]))
+ eq('{"d":[]}', exec_lua([[return vim.json.encode({d={}})]]))
+ end)
it('dumps vim.NIL', function()
eq('null', exec_lua([[return vim.json.encode(vim.NIL)]]))