mirror of
https://github.com/zap-proto/lua.git
synced 2026-10-30 15:04:38 +00:00
Rename the Cap'n Proto Lua port to ZAP, brand-neutral throughout: - capnp.lua -> zap.lua, capnp/ -> zap/, *.capnp -> *.zap, compiler bins capnpc-* -> zapc-*, schema/handwritten modules -> *_zap.lua. Zero capnp/Cap'n Proto leftovers in zap-native source/build (upstream-fork Kenton Varda copyright headers in proto/c++.zap and bin/schema.zap stay). Generated-code header and doc links point at github.com/zap-proto/lua and zap-proto.io. Tests now run with no extra install: - Vendor the lunitx test framework (Michael Roth / Doug Currie, MIT) under vendor/ (lunit, lunit.console, lunitx, lunitx.atexit). Its __gc atexit hook drives each test file under LuaJIT and exits nonzero on any failure. - tests/run_tests.sh and test.sh are self-contained (set LUA_PATH incl vendor/), generate proto/example_zap.lua via the `zap` compiler when present, and skip 01/10 with a clear note (never a false pass) when it is absent. 02-util and 03-compile are pure-Lua and always run. - Verified under LuaJIT 2.1: 01(20) + 02(7) + 03(1) + 10(31) = 59 tests pass, 0 failed; runner returns nonzero on an injected failure. Decouple optional cjson so the runtime/compiler load under a bare LuaJIT: - zap/compile.lua loads cjson lazily and only for debug logging (guarded by the debug flag); bin/zapc-llua makes the schema JSON dump optional. Rockspec: bump lua-zap to 0.1.3-4, declare lua-cjson >= 2.1.0, and install the vendored lunitx modules. .gitignore: scope the rockspec-pack ignore to repo root so rockspec/ specs are tracked; ignore the `dump` test artifact. TODO trimmed to the genuinely remaining items (AnyPointer set/decode, packed serialization, schema_zap regeneration, multi-file compile, perf).
117 lines
3.3 KiB
Lua
117 lines
3.3 KiB
Lua
local util = require "zap.util"
|
|
local lunit = require "lunitx"
|
|
local hw_zap = require "handwritten_zap"
|
|
|
|
if _VERSION >= 'Lua 5.2' then
|
|
_ENV = lunit.module('simple','seeall')
|
|
else
|
|
module( "simple", package.seeall, lunit.testcase )
|
|
end
|
|
|
|
function test_underscore_naming()
|
|
assert_equal("request_uri", util.lower_underscore_naming("requestURI"))
|
|
assert_equal("REQUEST_URI", util.upper_underscore_naming("requestURI"))
|
|
assert_equal("REQUEST", util.upper_underscore_naming("request"))
|
|
assert_equal("TEST_RES", util.upper_underscore_naming("testRes"))
|
|
assert_equal("request_uri", util.lower_underscore_naming("requestURI"))
|
|
assert_equal("REQUEST_URI", util.upper_underscore_naming("requestURI"))
|
|
assert_equal("REQUEST", util.upper_underscore_naming("request"))
|
|
assert_equal("TEST_RES", util.upper_underscore_naming("testRes"))
|
|
assert_equal("request_uri", util.lower_underscore_naming("requestURI"))
|
|
assert_equal("VERSION-CONTROL", util.upper_dash_naming("versionControl"))
|
|
assert_equal("VERSION-CONTROL", util.upper_dash_naming("versionControl"))
|
|
assert_equal("foo bar", util.lower_space_naming("fooBar"))
|
|
assert_equal("foo", util.lower_space_naming("foo"))
|
|
end
|
|
|
|
function test_hex_utils()
|
|
local buf = util.new_buf({ 01, 02, 03, 04, 10, 11, 12, 13 })
|
|
assert_equal("01 02 03 04 0a 0b 0c 0d", util.hex_buf_str(buf, 8))
|
|
end
|
|
|
|
|
|
function test_to_text()
|
|
local T1 = hw_zap.T1
|
|
local val = {
|
|
b0 = true, -- default 0
|
|
db0 = true, -- default 1
|
|
}
|
|
|
|
assert_equal("(b0 = true, db0 = true)", util.to_text(val, T1))
|
|
end
|
|
|
|
function test_to_text1()
|
|
local T1 = hw_zap.T1
|
|
local val = {
|
|
b0 = false, -- default 0
|
|
db0 = false, -- default 1
|
|
}
|
|
|
|
assert_equal("(b0 = false, db0 = false)", util.to_text(val, T1))
|
|
end
|
|
|
|
function test_get_field_type(field)
|
|
local field = {
|
|
name = "lt0",
|
|
codeOrder = 22,
|
|
discriminantValue = 65535,
|
|
slot = {
|
|
offset = 6,
|
|
["type"] = {
|
|
list = {
|
|
elementType = {text = "void"} }
|
|
},
|
|
defaultValue = {list = 'opaque pointer'},
|
|
hadExplicitDefault = false
|
|
},
|
|
ordinal = {explicit = 25}
|
|
}
|
|
|
|
local typ = util.get_field_type(field)
|
|
assert_equal(2, #typ)
|
|
assert_equal("list", typ[1])
|
|
assert_equal("text", typ[2])
|
|
end
|
|
|
|
function test_get_field_type1(field)
|
|
local field = {
|
|
name = "o0",
|
|
codeOrder = 21,
|
|
discriminantValue = 65535,
|
|
slot = {
|
|
offset = 5,
|
|
["type"] = {anyPointer = "void"},
|
|
defaultValue = {
|
|
anyPointer = 'opaque pointer' },
|
|
hadExplicitDefault = false },
|
|
ordinal = {explicit = 24}
|
|
}
|
|
|
|
local typ = util.get_field_type(field)
|
|
assert_equal(1, #typ)
|
|
assert_equal("anyPointer", typ[1])
|
|
end
|
|
|
|
function test_get_field_type2(field)
|
|
local field = { name = "ls0",
|
|
codeOrder = 17,
|
|
discriminantValue = 65535,
|
|
slot = {
|
|
offset = 4,
|
|
["type"] = {
|
|
list = {
|
|
elementType = {
|
|
struct = {
|
|
typeId = "17202330444354522981" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
local typ = util.get_field_type(field)
|
|
assert_equal(3, #typ)
|
|
assert_equal("list", typ[1])
|
|
assert_equal("struct", typ[2])
|
|
assert_equal("17202330444354522981", typ[3])
|
|
end
|