lazarus/test/testlpi.pas
vincents 8c67e4df5b update Italian translations from Mario
git-svn-id: trunk@10022 -
2006-10-02 08:14:57 +00:00

154 lines
3.6 KiB
ObjectPascal

unit TestLpi;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpcunit, testregistry, process, FileUtil;
type
{ TLpiTest }
TLpiTest= class(TTestCase)
private
FPath: string;
procedure RunScript;
public
constructor Create(const APath: string; const ATestName: string); overload;
class function Suite(const APath: string): TTestSuite;
class function ExamplesSuite: TTestSuite;
published
procedure TestCompile;
procedure TestRun;
end;
var
Compiler: string;
implementation
var
LazarusDir: string;
ExamplesDir: string;
ScriptEngine: string;
procedure InitDirectories;
begin
LazarusDir := ExpandFileName(ExtractFilePath(ParamStr(0)) + '../');
ExamplesDir := LazarusDir + 'examples' + PathDelim;
ScriptEngine := 'C:\Program Files\AutoHotkey\AutoHotKey.exe';
end;
function GetScriptFileName(const LpiFileName: string): string;
begin
Result := AppendPathDelim(ProgramDirectory) +
ExtractFileNameOnly(LpiFileName) +'.ahk';
end;
procedure TLpiTest.RunScript;
var
ScriptProcess : TProcess;
begin
AssertTrue('ScriptEngine "' + ScriptEngine + '" does not exist.',
FileExists(ScriptEngine));
ScriptProcess := TProcess.Create(nil);
try
ScriptProcess.CommandLine := ScriptEngine + ' ' + GetScriptFileName(FPath);
ScriptProcess.Execute;
ScriptProcess.WaitOnExit;
finally
ScriptProcess.Free;
end;
end;
constructor TLpiTest.Create(const APath: string; const ATestName: string);
begin
inherited CreateWithName(ATestName);
FPath := APath;
end;
class function TLpiTest.Suite(const APath: string): TTestSuite;
var
AhkFileName: String;
begin
Result := TTestSuite.Create(APath);
Result.AddTest(TLpiTest.Create(APath, 'TestCompile'));
{$IFDEF win32}
AhkFileName := GetScriptFileName(APath);
if FileExists(AhkFileName) then
Result.AddTest(TLpiTest.Create(APath, 'TestRun'));
{$ELSE}
{$NOTE scripting is only available on windows}
{$ENDIF}
end;
class function TLpiTest.ExamplesSuite: TTestSuite;
var
SearchMask: String;
FileInfo: TSearchRec;
begin
Result := TTestSuite.Create('Examples');
SearchMask := ExamplesDir + '*.lpi';
if FindFirst(SearchMask,faAnyFile,FileInfo)=0 then begin
repeat
if RightStr(FileInfo.Name,4)='.lpi' then
Result.AddTest(Suite(ExamplesDir + FileInfo.Name));
until FindNext(FileInfo)<>0;
end;
FindClose(FileInfo);
end;
procedure TLpiTest.TestCompile;
var
LazBuildPath: string;
LazBuild: TProcess;
begin
LazBuildPath := LazarusDir + 'lazbuild' + GetExeExt;
AssertTrue(LazBuildPath + ' does not exist', FileExists(LazBuildPath));
LazBuild := TProcess.Create(nil);
try
{$IFDEF win32}
LazBuild.Options := [poNewConsole];
{$ELSE}
LazBuild.Options := [poNoConsole];
{$ENDIF}
LazBuild.ShowWindow := swoHIDE;
LazBuild.CommandLine := LazBuildPath;
if Compiler<>'' then
LazBuild.CommandLine := LazBuild.CommandLine + ' --compiler='+Compiler;
LazBuild.CommandLine := LazBuild.CommandLine + ' ' + FPath;
LazBuild.CurrentDirectory := ExtractFileDir(FPath);
LazBuild.Execute;
LazBuild.WaitOnExit;
AssertEquals('Compilation failed: ExitCode', 0, LazBuild.ExitStatus);
finally
LazBuild.Free;
end;
end;
procedure TLpiTest.TestRun;
var
TestProcess : TProcess;
ExeName: string;
begin
ExeName := ChangeFileExt(FPath, GetExeExt);
AssertTrue(ExeName + 'does not exist.', FileExists(ExeName));
TestProcess := TProcess.Create(nil);
try
TestProcess.CommandLine := ExeName;
TestProcess.Execute;
RunScript;
TestProcess.WaitOnExit;
finally
TestProcess.Free;
end;
end;
initialization
InitDirectories;
GetTestRegistry.AddTest(TLpiTest.ExamplesSuite);
end.