diff --git a/.github/workflows/run-tests.yaml b/.github/workflows/run-tests.yaml new file mode 100644 index 0000000..8e18e29 --- /dev/null +++ b/.github/workflows/run-tests.yaml @@ -0,0 +1,21 @@ +name: Run tests + +on: + pull_request: + +jobs: + debug-builds: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: "recursive" + + - name: Install Lua + uses: leafo/gh-actions-lua@v10 + with: + luaVersion: "5.4.6" + + - name: Run tests + run: lua -v ./tests/$(ls ./tests) + diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4b72ba1 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "luaunit"] + path = luaunit + url = https://github.com/bluebird75/luaunit diff --git a/luaunit b/luaunit new file mode 160000 index 0000000..0e0d3dd --- /dev/null +++ b/luaunit @@ -0,0 +1 @@ +Subproject commit 0e0d3dd06fe1955a01f0e6763bc8dc6847ee3e8d 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() ) +