mirror of
https://github.com/vxcontrol/lualibs-lrexlib.git
synced 2026-07-01 09:25:08 -04:00
Add _newmembuffer function for testing buffer subjects.
This commit is contained in:
@@ -736,4 +736,8 @@ static void alg_register (lua_State *L, const luaL_Reg *r_methods,
|
||||
#endif
|
||||
lua_pushfstring (L, REX_VERSION" (for %s)", name);
|
||||
lua_setfield (L, -2, "_VERSION");
|
||||
#ifndef REX_NOEMBEDDEDTEST
|
||||
lua_pushcfunction (L, newmembuffer);
|
||||
lua_setfield (L, -2, "_newmembuffer");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -264,3 +264,32 @@ int luaL_typerror (lua_State *L, int narg, const char *tname) {
|
||||
return luaL_argerror(L, narg, msg);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef REX_NOEMBEDDEDTEST
|
||||
static int ud_topointer (lua_State *L) {
|
||||
lua_pushlightuserdata (L, lua_touserdata (L, 1));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ud_len (lua_State *L) {
|
||||
lua_pushinteger (L, lua_objlen (L, 1));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* for testing purposes only */
|
||||
int newmembuffer (lua_State *L) {
|
||||
size_t len;
|
||||
const char* s = luaL_checklstring (L, 1, &len);
|
||||
void *ud = lua_newuserdata (L, len);
|
||||
memcpy (ud, s, len);
|
||||
lua_newtable (L); /* metatable */
|
||||
lua_pushvalue (L, -1);
|
||||
lua_setfield (L, -2, "__index"); /* metatable.__index = metatable */
|
||||
lua_pushcfunction (L, ud_topointer);
|
||||
lua_setfield (L, -2, "topointer");
|
||||
lua_pushcfunction (L, ud_len);
|
||||
lua_setfield (L, -2, "__len");
|
||||
lua_setmetatable (L, -2);
|
||||
return 1;
|
||||
}
|
||||
#endif /* #ifndef REX_NOEMBEDDEDTEST */
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "lua.h"
|
||||
|
||||
#if LUA_VERSION_NUM > 501
|
||||
# define lua_objlen lua_rawlen
|
||||
int luaL_typerror (lua_State *L, int narg, const char *tname);
|
||||
#endif
|
||||
|
||||
@@ -95,4 +96,8 @@ void *Lmalloc (lua_State *L, size_t size);
|
||||
void *Lrealloc (lua_State *L, void *p, size_t osize, size_t nsize);
|
||||
void Lfree (lua_State *L, void *p, size_t size);
|
||||
|
||||
#ifndef REX_NOEMBEDDEDTEST
|
||||
int newmembuffer (lua_State *L);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
+3
-1
@@ -1,5 +1,7 @@
|
||||
To test Lrexlib, execute the following command line:
|
||||
|
||||
lua ./runtest.lua [-v] LIBRARY...
|
||||
lua ./runtest.lua [-a] [-v] LIBRARY...
|
||||
|
||||
-a use the external "Alien" library for "buffer subject" tests,
|
||||
rather than the internal function
|
||||
-v gives verbose output
|
||||
|
||||
+6
-11
@@ -67,25 +67,20 @@ end
|
||||
-- returns:
|
||||
-- 1) true, if success; false, if failure
|
||||
-- 2) test results table or error_message
|
||||
local function test_function (test, func)
|
||||
local function test_function (test, func, newmembuffer)
|
||||
local res
|
||||
local t = packNT (pcall (func, unpackNT (test[1])))
|
||||
if t[1] then
|
||||
table.remove (t, 1)
|
||||
res = t
|
||||
if alien then
|
||||
local subject = test[1][1]
|
||||
local buf = alien.buffer (#subject)
|
||||
if #subject > 0 then
|
||||
alien.memmove (buf:topointer (), subject, #subject)
|
||||
end
|
||||
test[1][1] = buf
|
||||
if newmembuffer then
|
||||
test[1][1] = newmembuffer (test[1][1])
|
||||
local t = packNT (pcall (func, unpackNT (test[1])))
|
||||
if t[1] then
|
||||
table.remove (t, 1)
|
||||
res = t
|
||||
else
|
||||
print "alien test failed"
|
||||
print "buffer subjects test failed"
|
||||
res = t[2] --> error_message
|
||||
end
|
||||
end
|
||||
@@ -120,13 +115,13 @@ local function test_method (test, constructor, name)
|
||||
end
|
||||
|
||||
-- returns: a list of failed tests
|
||||
local function test_set (set, lib)
|
||||
local function test_set (set, lib, newmembuffer)
|
||||
local list = {}
|
||||
|
||||
if type (set.Func) == "function" then
|
||||
local func = set.Func
|
||||
for i,test in ipairs (set) do
|
||||
local ok, res = test_function (test, func)
|
||||
local ok, res = test_function (test, func, newmembuffer)
|
||||
if not ok then
|
||||
table.insert (list, {i=i, res})
|
||||
end
|
||||
|
||||
+25
-16
@@ -1,13 +1,5 @@
|
||||
-- See Copyright Notice in the file LICENSE
|
||||
|
||||
-- See if we have alien, so we can do tests with buffer subjects
|
||||
local ok
|
||||
ok, alien = pcall (require, "alien")
|
||||
if not ok then
|
||||
io.stderr:write ("Warning: alien not found, so cannot run tests with buffer subjects\n")
|
||||
alien = nil
|
||||
end
|
||||
|
||||
do
|
||||
local path = "./?.lua;"
|
||||
if package.path:sub(1, #path) ~= path then
|
||||
@@ -16,8 +8,17 @@ do
|
||||
end
|
||||
local luatest = require "luatest"
|
||||
|
||||
local function newalienbuffer (str)
|
||||
local alien = require "alien"
|
||||
local buf = alien.buffer (#str)
|
||||
if #str > 0 then
|
||||
alien.memmove (buf:topointer (), str, #str)
|
||||
end
|
||||
return buf
|
||||
end
|
||||
|
||||
-- returns: number of failures
|
||||
local function test_library (libname, setfile, verbose)
|
||||
local function test_library (libname, setfile, verbose, use_alien)
|
||||
if verbose then
|
||||
print (("[lib: %s; file: %s]"):format (libname, setfile))
|
||||
end
|
||||
@@ -25,10 +26,14 @@ local function test_library (libname, setfile, verbose)
|
||||
local f = require (setfile)
|
||||
local sets = f (libname)
|
||||
|
||||
local realalien = alien
|
||||
if libname == "rex_posix" and not lib.flags ().STARTEND and alien then
|
||||
alien = nil
|
||||
io.stderr:write ("Cannot run posix tests with alien without REG_STARTEND\n")
|
||||
local newmembuffer = use_alien and newalienbuffer or lib._newmembuffer
|
||||
if newmembuffer then
|
||||
if libname == "rex_posix" and not lib.flags ().STARTEND then
|
||||
newmembuffer = nil
|
||||
io.stderr:write ("Cannot run posix tests with buffer subjects without REG_STARTEND\n")
|
||||
end
|
||||
else
|
||||
io.stderr:write ("Warning: cannot run tests with buffer subjects\n")
|
||||
end
|
||||
|
||||
local n = 0 -- number of failures
|
||||
@@ -36,7 +41,7 @@ local function test_library (libname, setfile, verbose)
|
||||
if verbose then
|
||||
print (set.Name or "Unnamed set")
|
||||
end
|
||||
local err = luatest.test_set (set, lib)
|
||||
local err = luatest.test_set (set, lib, newmembuffer)
|
||||
if verbose then
|
||||
for _,v in ipairs (err) do
|
||||
print (" Test " .. v.i)
|
||||
@@ -48,7 +53,6 @@ local function test_library (libname, setfile, verbose)
|
||||
if verbose then
|
||||
print ""
|
||||
end
|
||||
alien = realalien
|
||||
return n
|
||||
end
|
||||
|
||||
@@ -64,14 +68,19 @@ local avail_tests = {
|
||||
do
|
||||
local verbose, tests, nerr = false, {}, 0
|
||||
local dir
|
||||
local use_alien
|
||||
-- check arguments
|
||||
for i = 1, select ("#", ...) do
|
||||
local arg = select (i, ...)
|
||||
if arg:sub(1,1) == "-" then
|
||||
if arg == "-v" then
|
||||
verbose = true
|
||||
elseif arg == "-a" then
|
||||
use_alien = true
|
||||
elseif arg:sub(1,2) == "-d" then
|
||||
dir = arg:sub(3)
|
||||
else
|
||||
error ("invalid argument: [" .. arg .. "]")
|
||||
end
|
||||
else
|
||||
if avail_tests[arg] then
|
||||
@@ -99,7 +108,7 @@ do
|
||||
for _, test in ipairs (tests) do
|
||||
package.loaded[test.lib] = nil -- to force-reload the tested library
|
||||
for _, setfile in ipairs (test) do
|
||||
nerr = nerr + test_library (test.lib, setfile, verbose)
|
||||
nerr = nerr + test_library (test.lib, setfile, verbose, use_alien)
|
||||
end
|
||||
end
|
||||
print ("Total number of failures: " .. nerr)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Use with GNU Make.
|
||||
|
||||
VERSION = 2.7.2
|
||||
|
||||
# User Settings ------------------------------------------------------------
|
||||
|
||||
# Target Lua version (51 for Lua 5.1; 52 for Lua 5.2).
|
||||
@@ -9,18 +11,21 @@ LUAVERSION = 51
|
||||
# LUADLL : Name of Lua DLL to link to (.dll should be omitted).
|
||||
# LUAEXE : Name of Lua interpreter.
|
||||
# LUAINC : Path of Lua include files.
|
||||
# LIBPATH : Path of lua5.1.dll, lua52.dll, pcre.dll, etc.
|
||||
|
||||
LIBPATH = c:\exe32
|
||||
|
||||
ifeq ($(LUAVERSION),51)
|
||||
INSTALLPATH = s:\exe\lib32\lua51
|
||||
INSTALLPATH = s:\exe\lib32\lua\5.1
|
||||
LUADLL = lua5.1
|
||||
LUAEXE = lua.exe
|
||||
LUAINC = s:\progr\work\system\include\lua51
|
||||
LUAINC = s:\progr\work\system\include\lua\5.1
|
||||
MYCFLAGS += -DREX_CREATEGLOBALVAR
|
||||
else
|
||||
INSTALLPATH = s:\exe\lib32\lua52
|
||||
INSTALLPATH = s:\exe\lib32\lua\5.2
|
||||
LUADLL = lua52
|
||||
LUAEXE = lua52.exe
|
||||
LUAINC = s:\progr\work\system\include\lua52
|
||||
LUAINC = s:\progr\work\system\include\lua\5.2
|
||||
# MYCFLAGS += -DREX_CREATEGLOBALVAR
|
||||
endif
|
||||
|
||||
@@ -28,9 +33,9 @@ endif
|
||||
|
||||
BIN = $(PROJECT).dll
|
||||
BININSTALL = $(INSTALLPATH)\$(BIN)
|
||||
CC = gcc
|
||||
CC = mingw32-gcc
|
||||
CFLAGS = -W -Wall -O2 $(INCS) -DREX_OPENLIB=luaopen_$(PROJECT) \
|
||||
-DREX_LIBNAME=\"$(PROJECT)\" $(MYCFLAGS)
|
||||
-DREX_LIBNAME=\"$(PROJECT)\" -DVERSION=\"$(VERSION)\" $(MYCFLAGS)
|
||||
DEFFILE = $(PROJECT).def
|
||||
EXPORTED = luaopen_$(PROJECT)
|
||||
INCS = -I$(LUAINC) $(MYINCS)
|
||||
@@ -54,7 +59,7 @@ test:
|
||||
cd $(TESTPATH) && $(LUAEXE) runtest.lua $(TESTNAME) -d$(CURDIR)
|
||||
|
||||
$(BIN): $(OBJ) $(DEFFILE)
|
||||
$(CC) $(DEFFILE) $(OBJ) $(LIBS) -o $@ -shared
|
||||
$(CC) $(DEFFILE) $(OBJ) -L$(LIBPATH) $(LIBS) -o $@ -shared
|
||||
|
||||
$(DEFFILE):
|
||||
echo EXPORTS > $@
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# User Settings ------------------------------------------------------------
|
||||
# path of Oniguruma include files
|
||||
REGEXINC = s:\progr\work\system\include
|
||||
REGEXINC = s:\progr\work\system\include\oniguruma
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
PROJECT = rex_onig
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# User Settings ------------------------------------------------------------
|
||||
# path of PCRE include files
|
||||
REGEXINC = s:\progr\work\system\include
|
||||
REGEXINC = s:\progr\work\system\include\pcre
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
PROJECT = rex_pcre
|
||||
|
||||
Reference in New Issue
Block a user