DelphiLua/UnitTests/source/TestAPI.pas

129 lines
2.1 KiB
ObjectPascal
Raw Normal View History

2014-11-30 09:33:17 +00:00
unit TestAPI;
interface
uses
TestFramework;
type
TTestAPI = class(TTestCase)
protected
procedure SetUp; override;
published
procedure NewStateAndClose;
procedure Load;
procedure LoadAndCall;
end;
implementation
uses
Classes,
SysUtils,
2016-02-07 10:58:56 +00:00
Lua.API;
2014-11-30 09:33:17 +00:00
{ TTestAPI }
procedure TTestAPI.SetUp;
begin
inherited;
LoadLuaLib;
end;
procedure TTestAPI.NewStateAndClose;
var
state: lua_State;
begin
state := lua_newstate(@DefaultLuaAlloc, nil);
try
Check(Assigned(state), 'state is not assigned');
finally
lua_close(state);
end;
end;
type
PLuaAPIScript = ^TLuaAPIScript;
TLuaAPIScript = record
2014-11-30 09:33:17 +00:00
Data: AnsiString;
Remaining: Integer;
constructor Create(const AData: string);
end;
{ TLuaAPIScript }
constructor TLuaAPIScript.Create(const AData: string);
2014-11-30 09:33:17 +00:00
begin
Data := AnsiString(AData);
Remaining := Length(Data);
end;
function TestReaderProc(L: lua_State; ud: Pointer; var sz: size_t): PAnsiChar; cdecl;
var
script: PLuaAPIScript;
2014-11-30 09:33:17 +00:00
begin
script := ud;
if script^.Remaining = 0 then
begin
Result := nil;
exit;
end;
sz := script^.Remaining;
script^.Remaining := 0;
Result := PAnsiChar(script^.Data);
end;
procedure TTestAPI.Load;
var
state: lua_State;
script: TLuaAPIScript;
2014-11-30 09:33:17 +00:00
begin
state := lua_newstate(@DefaultLuaAlloc, nil);
try
script := TLuaAPIScript.Create('print("Hello world!")');
2014-11-30 09:33:17 +00:00
CheckEquals(0, lua_load(state, @TestReaderProc, @script, nil, nil), 'lua_load result');
finally
lua_close(state);
end;
end;
procedure TTestAPI.LoadAndCall;
var
state: lua_State;
script: TLuaAPIScript;
2014-11-30 09:33:17 +00:00
begin
state := lua_newstate(@DefaultLuaAlloc, nil);
try
luaopen_base(state);
script := TLuaAPIScript.Create('print("Hello world!")');
2014-11-30 09:33:17 +00:00
CheckEquals(0, lua_load(state, @TestReaderProc, @script, nil, nil), 'lua_load result');
if lua_pcall(state, 0, 0, 0) <> 0 then
Fail(string(lua_tolstring(state, -1, nil)));
finally
lua_close(state);
end;
end;
initialization
RegisterTest(TTestAPI.Suite);
end.