diff --git a/tests/test_utils.lua b/tests/test_utils.lua new file mode 100644 index 0000000..e934dbb --- /dev/null +++ b/tests/test_utils.lua @@ -0,0 +1,198 @@ +local lu = require"luaunit.luaunit" +local utils = require"lua.jsonfly.utils" + +function testBasicKey() + local key = "foo.bar" + ---@type KeyDescription[] + local EXPECTED = { + { + type = "object_wrapper", + }, + { + type = "key", + key = "foo", + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "bar", + } + } + + local descriptor = utils:extract_key_description(key) + + lu.assertEquals(descriptor, EXPECTED) +end + +function testArrayKey() + local key = "foo.0.bar" + ---@type KeyDescription[] + local EXPECTED = { + { + type = "object_wrapper", + }, + { + type = "key", + key = "foo", + }, + { + type = "array_wrapper", + }, + { + type = "array_index", + key = 0, + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "bar", + } + } + + local descriptor = utils:extract_key_description(key) + + lu.assertEquals(descriptor, EXPECTED) +end + +function testNestedArrayKey() + local key = "foo.0.bar.1.baz" + ---@type KeyDescription[] + local EXPECTED = { + { + type = "object_wrapper", + }, + { + type = "key", + key = "foo", + }, + { + type = "array_wrapper", + }, + { + type = "array_index", + key = 0, + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "bar", + }, + { + type = "array_wrapper", + }, + { + type = "array_index", + key = 1, + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "baz", + } + } + + local descriptor = utils:extract_key_description(key) + + lu.assertEquals(descriptor, EXPECTED) +end + +function testEscapedArrayDoesNotCreateArray() + local key = "foo.\\0.bar" + ---@type KeyDescription[] + local EXPECTED = { + { + type = "object_wrapper", + }, + { + type = "key", + key = "foo", + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "0", + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "bar", + } + } + + local descriptor = utils:extract_key_description(key) + + lu.assertEquals(descriptor, EXPECTED) +end + +function testBracketArrayKey() + local key = "foo.[0].bar" + ---@type KeyDescription[] + local EXPECTED = { + { + type = "object_wrapper", + }, + { + type = "key", + key = "foo", + }, + { + type = "array_wrapper", + }, + { + type = "array_index", + key = 0, + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "bar", + } + } + + local descriptor = utils:extract_key_description(key) + + lu.assertEquals(descriptor, EXPECTED) +end + +function testRootArrayKey() + local key = "0.foo" + ---@type KeyDescription[] + local EXPECTED = { + { + type = "array_wrapper", + }, + { + type = "array_index", + key = 0, + }, + { + type = "object_wrapper", + }, + { + type = "key", + key = "foo", + } + } + + local descriptor = utils:extract_key_description(key) + + lu.assertEquals(descriptor, EXPECTED) +end + + +os.exit( lu.LuaUnit.run() ) + diff --git a/tests/tests.lua b/tests/tests.lua deleted file mode 100644 index fb7f278..0000000 --- a/tests/tests.lua +++ /dev/null @@ -1,5 +0,0 @@ -local lu = require"luaunit.luaunit" - - -os.exit( lu.LuaUnit.run() ) -