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).
146 lines
3.8 KiB
Lua
146 lines
3.8 KiB
Lua
|
|
--[[--------------------------------------------------------------------------
|
|
|
|
This file is part of lunitx.
|
|
|
|
For Details about lunit look at: http://www.mroth.net/lunit/
|
|
|
|
Author: Michael Roth <[email protected]>
|
|
|
|
Copyright (c) 2006-2008 Michael Roth <[email protected]>
|
|
|
|
Permission is hereby granted, free of charge, to any person
|
|
obtaining a copy of this software and associated documentation
|
|
files (the "Software"), to deal in the Software without restriction,
|
|
including without limitation the rights to use, copy, modify, merge,
|
|
publish, distribute, sublicense, and/or sell copies of the Software,
|
|
and to permit persons to whom the Software is furnished to do so,
|
|
subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
--]]--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
--[[
|
|
|
|
begin()
|
|
run(testcasename, testname)
|
|
err(fullname, message, traceback)
|
|
fail(fullname, where, message, usermessage)
|
|
pass(testcasename, testname)
|
|
done()
|
|
|
|
Fullname:
|
|
testcase.testname
|
|
testcase.testname:setupname
|
|
testcase.testname:teardownname
|
|
|
|
--]]
|
|
|
|
|
|
local lunit = require "lunit"
|
|
local string = require "string"
|
|
local io = require "io"
|
|
local table = require "table"
|
|
|
|
local _M = {}
|
|
|
|
local function printformat(format, ...)
|
|
io.write( string.format(format, ...) )
|
|
end
|
|
|
|
local columns_printed = 0
|
|
|
|
local function writestatus(char)
|
|
if columns_printed == 0 then
|
|
io.write(" ")
|
|
end
|
|
if columns_printed == 60 then
|
|
io.write("\n ")
|
|
columns_printed = 0
|
|
end
|
|
io.write(char)
|
|
io.flush()
|
|
columns_printed = columns_printed + 1
|
|
end
|
|
|
|
local msgs = {}
|
|
|
|
function _M.begin()
|
|
local total_tc = 0
|
|
local total_tests = 0
|
|
|
|
msgs = {} -- e
|
|
|
|
for tcname in lunit.testcases() do
|
|
total_tc = total_tc + 1
|
|
for testname, test in lunit.tests(tcname) do
|
|
total_tests = total_tests + 1
|
|
end
|
|
end
|
|
|
|
printformat("Loaded testsuite with %d tests in %d testcases.\n\n", total_tests, total_tc)
|
|
end
|
|
|
|
function _M.run(testcasename, testname)
|
|
-- NOP
|
|
end
|
|
|
|
function _M.err(fullname, message, traceback)
|
|
writestatus("E")
|
|
msgs[#msgs+1] = "Error! ("..fullname.."):\n"..message.."\n\t"..table.concat(traceback, "\n\t") .. "\n"
|
|
end
|
|
|
|
function _M.fail(fullname, where, message, usermessage)
|
|
writestatus("F")
|
|
local text = "Failure ("..fullname.."):\n"..
|
|
where..": "..message.."\n"
|
|
|
|
if usermessage then
|
|
text = text .. where..": "..usermessage.."\n"
|
|
end
|
|
|
|
msgs[#msgs+1] = text
|
|
end
|
|
|
|
function _M.skip(fullname, where, message, usermessage)
|
|
writestatus("S")
|
|
local text = "Skip ("..fullname.."):\n"..
|
|
where..": "..message.."\n"
|
|
|
|
if usermessage then
|
|
text = text .. where..": "..usermessage.."\n"
|
|
end
|
|
|
|
msgs[#msgs+1] = text
|
|
end
|
|
|
|
function _M.pass(testcasename, testname)
|
|
writestatus(".")
|
|
end
|
|
|
|
function _M.done()
|
|
printformat("\n\n%d Assertions checked.\n", lunit.stats.assertions )
|
|
print()
|
|
|
|
for i, msg in ipairs(msgs) do
|
|
printformat( "%3d) %s\n", i, msg )
|
|
end
|
|
|
|
printformat("Testsuite finished (%d passed, %d failed, %d errors, %d skipped).\n",
|
|
lunit.stats.passed, lunit.stats.failed, lunit.stats.errors, lunit.stats.skipped )
|
|
end
|
|
|
|
return _M
|