aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--tests/test.lua1
-rw-r--r--tests/test_util_json.lua21
-rw-r--r--util/json.lua4
4 files changed, 26 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 4e4a407d..a5cdbb37 100644
--- a/Makefile
+++ b/Makefile
@@ -53,7 +53,7 @@ clean:
$(MAKE) clean -C util-src
test:
- cd tests && $(RUNWITH) test.lua
+ cd tests && $(RUNWITH) test.lua 0
util/%.so:
$(MAKE) install -C util-src
diff --git a/tests/test.lua b/tests/test.lua
index 0fcc4907..4172b363 100644
--- a/tests/test.lua
+++ b/tests/test.lua
@@ -18,6 +18,7 @@ function run_all_tests()
dotest "core.s2smanager"
dotest "core.configmanager"
dotest "util.ip"
+ dotest "util.json"
dotest "util.stanza"
dotest "util.sasl.scram"
dotest "util.cache"
diff --git a/tests/test_util_json.lua b/tests/test_util_json.lua
new file mode 100644
index 00000000..2c1a9ce9
--- /dev/null
+++ b/tests/test_util_json.lua
@@ -0,0 +1,21 @@
+
+function encode(encode, json)
+ local function test(f, j, e)
+ if e then
+ assert_equal(f(j), e);
+ end
+ assert_equal(f(j), f(json.decode(f(j))));
+ end
+ test(encode, json.null, "null")
+ test(encode, {}, "{}")
+ test(encode, {a=1});
+ test(encode, {a={1,2,3}});
+ test(encode, {1}, "[1]");
+end
+
+function decode(decode)
+ local empty_array = decode("[]");
+ assert_equal(type(empty_array), "table");
+ assert_equal(#empty_array, 0);
+ assert_equal(next(empty_array), nil);
+end
diff --git a/util/json.lua b/util/json.lua
index becd295d..2c598446 100644
--- a/util/json.lua
+++ b/util/json.lua
@@ -145,7 +145,9 @@ end
function simplesave(o, buffer)
local t = type(o);
- if t == "number" then
+ if o == null then
+ t_insert(buffer, "null");
+ elseif t == "number" then
t_insert(buffer, tostring(o));
elseif t == "string" then
stringsave(o, buffer);