const str optimization
This commit is contained in:
96
AG.Logs.pas
96
AG.Logs.pas
@@ -2,17 +2,17 @@ unit AG.Logs;
|
||||
|
||||
interface
|
||||
|
||||
{$IFDEF FPC}
|
||||
{$UNDEF MSWINDOWS}
|
||||
{$ENDIF}
|
||||
//{$UNDEF MSWINDOWS}
|
||||
|
||||
uses
|
||||
{$IFDEF MSWINDOWS}{$IFDEF FPC}Windows{$ELSE}Winapi.Windows{$ENDIF},{$ENDIF}
|
||||
{$IFDEF FPC}FGL{$ELSE}System.Generics.Collections{$ENDIF},
|
||||
{$IFDEF FPC}SysUtils{$ELSE}System.SysUtils{$ENDIF},
|
||||
{$IFDEF FPC}Classes{$ELSE}System.Classes{$ENDIF},
|
||||
{$IFDEF FPC}DateUtils{$ELSE}System.DateUtils{$ENDIF},
|
||||
{$IFDEF FPC}DateUtils{$ELSE}System.DateUtils{$ENDIF}
|
||||
{$IF defined(MSWINDOWS) and not defined(FPC)},
|
||||
{$IFDEF FPC}SyncObjs{$ELSE}System.SyncObjs{$ENDIF}
|
||||
{$ENDIF}
|
||||
{$IFNDEF MSWINDOWS}{$IFNDEF FPC},System.IOUtils{$ENDIF}{$ENDIF};
|
||||
|
||||
type
|
||||
@@ -24,46 +24,46 @@ type
|
||||
const
|
||||
CBaseTab='--------------------------';
|
||||
public
|
||||
class function SisebleWordtoStr(i:word;size:int8):string;static;inline;
|
||||
class function GenerateLogString(s:string;o:TObject=nil):string;static;inline;
|
||||
class function SizeableWordtoStr(i:word;size:int8):string;static;inline;
|
||||
class function GenerateLogString(const s:string;o:TObject=nil):string;static;inline;
|
||||
procedure Tab();virtual;
|
||||
procedure UnTab();virtual;
|
||||
procedure Write(Text:string;o:TObject=nil);overload;virtual;abstract;
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;virtual;abstract;
|
||||
destructor Destroy();override;
|
||||
end;
|
||||
|
||||
TAGRamLog=class(TAGLog)
|
||||
public
|
||||
buf:WideString;
|
||||
constructor Create();overload;
|
||||
procedure Write(Text:string;o:TObject=nil);overload;override;
|
||||
buf:String;
|
||||
constructor Create();
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;override;
|
||||
end;
|
||||
|
||||
TAGDiskLog=class(TAGLog)
|
||||
strict protected
|
||||
{$IFNDEF MSWINDOWS}
|
||||
Stream:TFileStream;//TStream;
|
||||
{$ELSE}
|
||||
buf1:WideString;
|
||||
{$IF defined(MSWINDOWS) and not defined(FPC)}
|
||||
buf1:String;
|
||||
onbuf:boolean;
|
||||
LogHandle,ThreadHandle:NativeUInt;
|
||||
ThreadID:cardinal;
|
||||
Lock:TCriticalSection;
|
||||
WantTerminate:Boolean;
|
||||
{$ELSE}
|
||||
Stream:TStream;
|
||||
{$ENDIF}
|
||||
public
|
||||
constructor Create(FileName:WideString);overload;
|
||||
{$IFDEF MSWINDOWS}
|
||||
constructor Create(const FileName:String);overload;
|
||||
{$IF defined(MSWINDOWS) and not defined(FPC)}
|
||||
procedure Init();stdcall;
|
||||
{$ENDIF}
|
||||
procedure Write(Text:string;o:TObject=nil);overload;override;
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;override;
|
||||
destructor Destroy();overload;override;
|
||||
end;
|
||||
|
||||
TAGNullLog=class(TAGLog)
|
||||
public
|
||||
constructor Create();overload;
|
||||
procedure Write(Text:string;o:TObject=nil);overload;override;
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;override;
|
||||
end;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
@@ -72,7 +72,7 @@ type
|
||||
CommandLine:THandle;
|
||||
public
|
||||
constructor Create(Handele:THandle);overload;
|
||||
procedure Write(Text:string;o:TObject=nil);overload;override;
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;override;
|
||||
destructor Destroy();overload;override;
|
||||
end;
|
||||
{$ENDIF}
|
||||
@@ -82,7 +82,7 @@ type
|
||||
stream:TStream;
|
||||
public
|
||||
constructor Create(Astream:TStream);overload;
|
||||
procedure Write(Text:string;o:TObject=nil);overload;override;
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;override;
|
||||
end;
|
||||
|
||||
TAGCallBackLog=class(TAGLog)
|
||||
@@ -92,7 +92,7 @@ type
|
||||
CallBack:TCallBack;
|
||||
public
|
||||
constructor Create(ACallBack:TCallBack);overload;
|
||||
procedure Write(Text:string;o:TObject=nil);overload;override;
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;override;
|
||||
end;
|
||||
|
||||
TAGMultiLog=class(TAGLog)
|
||||
@@ -102,7 +102,7 @@ type
|
||||
var
|
||||
Logs:TLogsList;
|
||||
constructor Create(Default:TLogsList);overload;
|
||||
procedure Write(Text:string;o:TObject=nil);overload;override;
|
||||
procedure Write(const Text:string;o:TObject=nil);overload;override;
|
||||
procedure Tab();override;
|
||||
procedure UnTab();override;
|
||||
destructor Destroy();overload;override;
|
||||
@@ -118,7 +118,7 @@ begin
|
||||
Self.Write(CBaseTab+'Logging init-'+CBaseTab);
|
||||
end;
|
||||
|
||||
class function TAGLog.SisebleWordtoStr(i:word;size:int8):string;
|
||||
class function TAGLog.SizeableWordtoStr(i:word;size:int8):string;
|
||||
begin
|
||||
Result:=IntToStr(i);
|
||||
size:=size-Length(Result);
|
||||
@@ -131,7 +131,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
class function TAGLog.GenerateLogString(s:string;o:TObject=nil):string;
|
||||
class function TAGLog.GenerateLogString(const s:string;o:TObject=nil):string;
|
||||
var
|
||||
D:TDateTime;
|
||||
begin
|
||||
@@ -144,10 +144,10 @@ if o<>nil then
|
||||
{$ENDIF}
|
||||
else
|
||||
Result:='';
|
||||
Result:='['+Siseblewordtostr(DayOfTheMonth(D),2)+'.'+Siseblewordtostr(MonthOfTheYear(D),2)+'.'+
|
||||
Siseblewordtostr(YearOf(D),4)+' '+Siseblewordtostr(HourOfTheDay(D),2)+':'+
|
||||
Siseblewordtostr(MinuteOfTheHour(D),2)+':'+Siseblewordtostr(SecondOfTheMinute(D),2)+'.'
|
||||
+Siseblewordtostr(MilliSecondOfTheSecond(D),3)+'] '+Result+s+sLineBreak;
|
||||
Result:='['+SizeableWordtoStr(DayOfTheMonth(D),2)+'.'+SizeableWordtoStr(MonthOfTheYear(D),2)+'.'+
|
||||
SizeableWordtoStr(YearOf(D),4)+' '+SizeableWordtoStr(HourOfTheDay(D),2)+':'+
|
||||
SizeableWordtoStr(MinuteOfTheHour(D),2)+':'+SizeableWordtoStr(SecondOfTheMinute(D),2)+'.'
|
||||
+SizeableWordtoStr(MilliSecondOfTheSecond(D),3)+'] '+Result+s+sLineBreak;
|
||||
end;
|
||||
|
||||
procedure TAGLog.Tab();
|
||||
@@ -158,6 +158,8 @@ end;
|
||||
|
||||
procedure TAGLog.UnTab();
|
||||
begin
|
||||
if tabs=0 then
|
||||
Exit;
|
||||
dec(tabs);
|
||||
Delete(tabstr,1,2);
|
||||
end;
|
||||
@@ -176,13 +178,13 @@ tabstr:='';
|
||||
inherited Create;
|
||||
end;
|
||||
|
||||
procedure TAGRamLog.Write(Text:string;o:TObject=nil);
|
||||
procedure TAGRamLog.Write(const Text:string;o:TObject=nil);
|
||||
begin
|
||||
buf:=buf+GenerateLogString(tabstr+Text,o);
|
||||
end;
|
||||
|
||||
constructor TAGDiskLog.Create(FileName:WideString);
|
||||
{$IFDEF MSWINDOWS}
|
||||
constructor TAGDiskLog.Create(const FileName:String);
|
||||
{$IF defined(MSWINDOWS) and not defined(FPC)}
|
||||
begin
|
||||
Lock:=TCriticalSection.Create;
|
||||
WantTerminate:=False;
|
||||
@@ -199,7 +201,7 @@ begin
|
||||
{$IFDEF FPC}
|
||||
Stream:=nil;
|
||||
try
|
||||
Stream:=TFileStream.Create('test2.log',fmOpenRead);
|
||||
Stream:=TFileStream.Create('test2.log',fmOpenRead+fmShareDenyNone);
|
||||
SetLength(s,Stream.Size);
|
||||
Stream.Read(s[0],Stream.Size);
|
||||
except
|
||||
@@ -220,7 +222,7 @@ begin
|
||||
inherited Create;
|
||||
end;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$IF defined(MSWINDOWS) and not defined(FPC)}
|
||||
procedure TAGDiskLog.Init();stdcall;
|
||||
var
|
||||
n:cardinal;
|
||||
@@ -254,8 +256,8 @@ end;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
procedure TAGDiskLog.Write(Text:string;o:TObject=nil);
|
||||
{$IFDEF MSWINDOWS}
|
||||
procedure TAGDiskLog.Write(const Text:string;o:TObject=nil);
|
||||
{$IF defined(MSWINDOWS) and not defined(FPC)}
|
||||
begin
|
||||
Lock.Enter;
|
||||
buf1:=buf1+GenerateLogString(tabstr+text,o);
|
||||
@@ -276,7 +278,7 @@ end;
|
||||
destructor TAGDiskLog.Destroy();
|
||||
begin
|
||||
inherited;
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$IF defined(MSWINDOWS) and not defined(FPC)}
|
||||
WantTerminate:=True;
|
||||
While WantTerminate do
|
||||
sleep(0);
|
||||
@@ -294,7 +296,7 @@ begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TAGNullLog.Write(Text:string;o:TObject=nil);
|
||||
procedure TAGNullLog.Write(const Text:string;o:TObject=nil);
|
||||
begin
|
||||
end;
|
||||
|
||||
@@ -307,18 +309,19 @@ CommandLine:=Handele;
|
||||
inherited Create;
|
||||
end;
|
||||
|
||||
procedure TAGCommandLineLog.Write(Text:string;o:TObject=nil);
|
||||
procedure TAGCommandLineLog.Write(const Text:string;o:TObject=nil);
|
||||
var
|
||||
p:PWideChar;
|
||||
p:PChar;
|
||||
temptext:string;
|
||||
a,b:cardinal;
|
||||
begin
|
||||
Text:=GenerateLogString(tabstr+text,o);
|
||||
p:=addr(Text[1]);
|
||||
a:=length(Text);
|
||||
temptext:=GenerateLogString(tabstr+text,o);
|
||||
p:=addr(temptext[1]);
|
||||
a:=length(temptext);
|
||||
while a<>0 do
|
||||
begin
|
||||
b:=0;
|
||||
WriteConsoleW(CommandLine,p,a,b,nil);
|
||||
{$IFDEF FPC}WriteConsoleA(CommandLine,p,a,b,nil);{$ELSE}WriteConsoleW(CommandLine,p,a,b,nil);{$ENDIF}
|
||||
inc(p,b);
|
||||
dec(a,b);
|
||||
end;
|
||||
@@ -327,6 +330,7 @@ end;
|
||||
destructor TAGCommandLineLog.Destroy();
|
||||
begin
|
||||
inherited;
|
||||
if CommandLine<>GetStdHandle(STD_OUTPUT_HANDLE) then
|
||||
CloseHandle(CommandLine);
|
||||
end;
|
||||
{$ENDIF}
|
||||
@@ -339,7 +343,7 @@ stream:=Astream;
|
||||
inherited Create;
|
||||
end;
|
||||
|
||||
procedure TAGStreamLog.Write(Text:string;o:TObject=nil);
|
||||
procedure TAGStreamLog.Write(const Text:string;o:TObject=nil);
|
||||
var
|
||||
s:string;
|
||||
begin
|
||||
@@ -355,7 +359,7 @@ CallBack:=ACallBack;
|
||||
inherited Create;
|
||||
end;
|
||||
|
||||
procedure TAGCallBackLog.Write(Text:string;o:TObject=nil);
|
||||
procedure TAGCallBackLog.Write(const Text:string;o:TObject=nil);
|
||||
begin
|
||||
CallBack(GenerateLogString(Text,o));
|
||||
end;
|
||||
@@ -371,7 +375,7 @@ else
|
||||
Logs:=TLogsList.Create;
|
||||
end;
|
||||
|
||||
procedure TAGMultiLog.Write(Text:string;o:TObject=nil);
|
||||
procedure TAGMultiLog.Write(const Text:string;o:TObject=nil);
|
||||
var
|
||||
i:TAGLog;
|
||||
begin
|
||||
|
||||
@@ -3,7 +3,9 @@ program fpcunitproject1;
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
Classes, consoletestrunner, TestCase1;
|
||||
Classes,
|
||||
consoletestrunner,
|
||||
TestCase1;
|
||||
|
||||
type
|
||||
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
<Filename Value="fpcunitproject1.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<EditorIndex Value="-1"/>
|
||||
<CursorPos Y="23"/>
|
||||
<UsageCount Value="194"/>
|
||||
<UsageCount Value="195"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="TestCase1"/>
|
||||
<CursorPos X="116" Y="32"/>
|
||||
<UsageCount Value="194"/>
|
||||
<TopLine Value="22"/>
|
||||
<CursorPos X="5" Y="35"/>
|
||||
<UsageCount Value="195"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit1>
|
||||
<Unit2>
|
||||
@@ -25,9 +25,8 @@
|
||||
<IsPartOfProject Value="True"/>
|
||||
<IsVisibleTab Value="True"/>
|
||||
<EditorIndex Value="1"/>
|
||||
<TopLine Value="362"/>
|
||||
<CursorPos X="34" Y="376"/>
|
||||
<UsageCount Value="194"/>
|
||||
<CursorPos X="69" Y="22"/>
|
||||
<UsageCount Value="195"/>
|
||||
<Loaded Value="True"/>
|
||||
</Unit2>
|
||||
<Unit3>
|
||||
@@ -38,22 +37,22 @@
|
||||
<UsageCount Value="4"/>
|
||||
</Unit3>
|
||||
</Units>
|
||||
<JumpHistory Count="30" HistoryIndex="29">
|
||||
<JumpHistory Count="29" HistoryIndex="28">
|
||||
<Position1>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="34" Column="38" TopLine="10"/>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="48" Column="58" TopLine="34"/>
|
||||
</Position1>
|
||||
<Position2>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="29" TopLine="4"/>
|
||||
<Caret Line="17" Column="26" TopLine="5"/>
|
||||
</Position2>
|
||||
<Position3>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="41" Column="51" TopLine="28"/>
|
||||
<Caret Line="50" Column="58" TopLine="35"/>
|
||||
</Position3>
|
||||
<Position4>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="48" Column="53" TopLine="9"/>
|
||||
<Caret Line="48" Column="63" TopLine="24"/>
|
||||
</Position4>
|
||||
<Position5>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
@@ -61,104 +60,98 @@
|
||||
</Position5>
|
||||
<Position6>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="48" Column="58" TopLine="34"/>
|
||||
<Caret Line="48" Column="59" TopLine="33"/>
|
||||
</Position6>
|
||||
<Position7>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="17" Column="26" TopLine="5"/>
|
||||
<Caret Line="21" TopLine="6"/>
|
||||
</Position7>
|
||||
<Position8>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="50" Column="58" TopLine="35"/>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="25" Column="27" TopLine="13"/>
|
||||
</Position8>
|
||||
<Position9>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="48" Column="63" TopLine="24"/>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="32" Column="57" TopLine="11"/>
|
||||
</Position9>
|
||||
<Position10>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="19" Column="11" TopLine="5"/>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="328" Column="7" TopLine="305"/>
|
||||
</Position10>
|
||||
<Position11>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="48" Column="59" TopLine="33"/>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="317" Column="25" TopLine="315"/>
|
||||
</Position11>
|
||||
<Position12>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="21" TopLine="6"/>
|
||||
<Caret Line="28" Column="50" TopLine="15"/>
|
||||
</Position12>
|
||||
<Position13>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="25" Column="27" TopLine="13"/>
|
||||
<Caret Line="21" Column="7" TopLine="7"/>
|
||||
</Position13>
|
||||
<Position14>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="32" Column="57" TopLine="11"/>
|
||||
<Caret Line="64" Column="35" TopLine="50"/>
|
||||
</Position14>
|
||||
<Position15>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="328" Column="7" TopLine="305"/>
|
||||
<Caret Line="28" Column="30" TopLine="10"/>
|
||||
</Position15>
|
||||
<Position16>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="317" Column="25" TopLine="315"/>
|
||||
<Caret Line="134" Column="47" TopLine="134"/>
|
||||
</Position16>
|
||||
<Position17>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
<Caret Line="28" Column="50" TopLine="15"/>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="179" Column="32" TopLine="165"/>
|
||||
</Position17>
|
||||
<Position18>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="21" Column="7" TopLine="7"/>
|
||||
<Caret Line="184" Column="37" TopLine="170"/>
|
||||
</Position18>
|
||||
<Position19>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="64" Column="35" TopLine="50"/>
|
||||
<Caret Line="257" Column="33" TopLine="243"/>
|
||||
</Position19>
|
||||
<Position20>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="28" Column="30" TopLine="10"/>
|
||||
<Caret Line="297" Column="33" TopLine="283"/>
|
||||
</Position20>
|
||||
<Position21>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="134" Column="47" TopLine="134"/>
|
||||
<Caret Line="310" Column="40" TopLine="296"/>
|
||||
</Position21>
|
||||
<Position22>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="179" Column="32" TopLine="165"/>
|
||||
<Caret Line="312" Column="6" TopLine="301"/>
|
||||
</Position22>
|
||||
<Position23>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="184" Column="37" TopLine="170"/>
|
||||
<Caret Line="324" Column="21" TopLine="301"/>
|
||||
</Position23>
|
||||
<Position24>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="257" Column="33" TopLine="243"/>
|
||||
<Caret Line="344" Column="35" TopLine="330"/>
|
||||
</Position24>
|
||||
<Position25>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="297" Column="33" TopLine="283"/>
|
||||
<Caret Line="360" Column="37" TopLine="346"/>
|
||||
</Position25>
|
||||
<Position26>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="310" Column="40" TopLine="296"/>
|
||||
<Caret Line="368" Column="34" TopLine="362"/>
|
||||
</Position26>
|
||||
<Position27>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="312" Column="6" TopLine="301"/>
|
||||
<Filename Value="testcase1.pas"/>
|
||||
</Position27>
|
||||
<Position28>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="324" Column="21" TopLine="301"/>
|
||||
</Position28>
|
||||
<Position29>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="344" Column="35" TopLine="330"/>
|
||||
<Caret Line="8" Column="47"/>
|
||||
</Position29>
|
||||
<Position30>
|
||||
<Filename Value="..\AG.Logs.pas"/>
|
||||
<Caret Line="360" Column="37" TopLine="346"/>
|
||||
</Position30>
|
||||
</JumpHistory>
|
||||
</ProjectSession>
|
||||
<Debugging>
|
||||
|
||||
@@ -5,50 +5,53 @@ unit TestCase1;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, fpcunit, testutils, testregistry, AG.Logs{$IFDEF MSWINDOWS},Windows{$ENDIF};
|
||||
Classes, SysUtils, fpcunit, testutils, testregistry,
|
||||
AG.Logs{$IFDEF MSWINDOWS}, Windows{$ENDIF};
|
||||
|
||||
type
|
||||
|
||||
TTestCase1= class(TTestCase)
|
||||
TTestCase1 = class(TTestCase)
|
||||
published
|
||||
procedure TestHookUp;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
procedure Test(s:string);
|
||||
procedure Test(s: string);
|
||||
begin
|
||||
Write(s);
|
||||
end;
|
||||
|
||||
procedure TTestCase1.TestHookUp;
|
||||
var
|
||||
MultiLog:TAGLog;
|
||||
Stream:TStream;
|
||||
s:TBytes;
|
||||
MultiLog: TAGLog;
|
||||
Stream: TStream;
|
||||
s: TBytes;
|
||||
begin
|
||||
MultiLog:=TAGMultiLog.Create(nil);
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGNullLog.Create());
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGDiskLog.Create('test.log'));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGRamLog.Create());
|
||||
{$IFDEF MSWINDOWS}(MultiLog as TAGMultiLog).Logs.Add(TAGCommandLineLog.Create(GetStdHandle(STD_OUTPUT_HANDLE))){$ENDIF};
|
||||
Stream:=nil;
|
||||
try
|
||||
Stream:=TFileStream.Create('test2.log',fmOpenRead+fmShareDenyNone);
|
||||
SetLength(s,Stream.Size);
|
||||
Stream.Read(s[0],Stream.Size);
|
||||
except
|
||||
SetLength(s,0);
|
||||
end;
|
||||
FreeAndNil(Stream);
|
||||
Stream:=TFileStream.Create('test2.log',fmCreate+fmOpenReadWrite+fmShareDenyWrite);
|
||||
Stream.Write(s[0],Length(s));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGStreamLog.Create(Stream));
|
||||
SetLength(s,0);
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGCallBackLog.Create(@Test));
|
||||
MultiLog.Write('Str Test');
|
||||
MultiLog.Write('Str+Object Test',self);
|
||||
FreeAndNil(MultiLog);
|
||||
MultiLog := TAGMultiLog.Create(nil);
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGNullLog.Create());
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGDiskLog.Create('test.log'));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGRamLog.Create());
|
||||
{$IFDEF MSWINDOWS}
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGCommandLineLog.Create(GetStdHandle(STD_OUTPUT_HANDLE)));
|
||||
{$ENDIF}
|
||||
Stream := nil;
|
||||
try
|
||||
Stream := TFileStream.Create('test2.log', fmOpenRead + fmShareDenyNone);
|
||||
SetLength(s, Stream.Size);
|
||||
Stream.Read(s[0], Stream.Size);
|
||||
except
|
||||
SetLength(s, 0);
|
||||
end;
|
||||
FreeAndNil(Stream);
|
||||
Stream := TFileStream.Create('test2.log', fmCreate + fmOpenReadWrite +
|
||||
fmShareDenyWrite);
|
||||
Stream.Write(s[0], Length(s));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGStreamLog.Create(Stream));
|
||||
SetLength(s, 0);
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGCallBackLog.Create(@Test));
|
||||
MultiLog.Write('Str Test');
|
||||
MultiLog.Write('Str+Object Test', self);
|
||||
FreeAndNil(MultiLog);
|
||||
end;
|
||||
|
||||
|
||||
@@ -57,4 +60,3 @@ initialization
|
||||
|
||||
RegisterTest(TTestCase1);
|
||||
end.
|
||||
|
||||
|
||||
@@ -3,11 +3,12 @@ program Project2;
|
||||
{$IFNDEF TESTINSIGHT}
|
||||
{$APPTYPE CONSOLE}
|
||||
{$ENDIF}{$STRONGLINKTYPES ON}
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
{$IFDEF TESTINSIGHT}
|
||||
{$IFDEF TESTINSIGHT}
|
||||
TestInsight.DUnitX,
|
||||
{$ENDIF }
|
||||
{$ENDIF }
|
||||
DUnitX.Loggers.Console,
|
||||
DUnitX.Loggers.Xml.NUnit,
|
||||
DUnitX.TestFramework,
|
||||
@@ -15,46 +16,50 @@ uses
|
||||
AG.Logs in '..\AG.Logs.pas';
|
||||
|
||||
var
|
||||
runner : ITestRunner;
|
||||
results : IRunResults;
|
||||
logger : ITestLogger;
|
||||
nunitLogger : ITestLogger;
|
||||
runner: ITestRunner;
|
||||
results: IRunResults;
|
||||
logger: ITestLogger;
|
||||
nunitLogger: ITestLogger;
|
||||
|
||||
begin
|
||||
{$IFDEF TESTINSIGHT}
|
||||
TestInsight.DUnitX.RunRegisteredTests;
|
||||
exit;
|
||||
{$ENDIF}
|
||||
try
|
||||
//Check command line options, will exit if invalid
|
||||
// Check command line options, will exit if invalid
|
||||
TDUnitX.CheckCommandLine;
|
||||
//Create the test runner
|
||||
// Create the test runner
|
||||
runner := TDUnitX.CreateRunner;
|
||||
//Tell the runner to use RTTI to find Fixtures
|
||||
// Tell the runner to use RTTI to find Fixtures
|
||||
runner.UseRTTI := True;
|
||||
//tell the runner how we will log things
|
||||
//Log to the console window
|
||||
logger := TDUnitXConsoleLogger.Create(true);
|
||||
// tell the runner how we will log things
|
||||
// Log to the console window
|
||||
logger := TDUnitXConsoleLogger.Create(True);
|
||||
runner.AddLogger(logger);
|
||||
//Generate an NUnit compatible XML File
|
||||
nunitLogger := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile);
|
||||
// Generate an NUnit compatible XML File
|
||||
nunitLogger := TDUnitXXMLNUnitFileLogger.Create
|
||||
(TDUnitX.Options.XMLOutputFile);
|
||||
runner.AddLogger(nunitLogger);
|
||||
runner.FailsOnNoAsserts := False; //When true, Assertions must be made during tests;
|
||||
runner.FailsOnNoAsserts := False;
|
||||
// When true, Assertions must be made during tests;
|
||||
|
||||
//Run tests
|
||||
// Run tests
|
||||
results := runner.Execute;
|
||||
if not results.AllPassed then
|
||||
System.ExitCode := EXIT_ERRORS;
|
||||
|
||||
{$IFNDEF CI}
|
||||
//We don't want this happening when running under CI.
|
||||
{$IFNDEF CI}
|
||||
// We don't want this happening when running under CI.
|
||||
if TDUnitX.Options.ExitBehavior = TDUnitXExitBehavior.Pause then
|
||||
begin
|
||||
System.Write('Done.. press <Enter> key to quit.');
|
||||
System.Readln;
|
||||
end;
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
except
|
||||
on E: Exception do
|
||||
System.Writeln(E.ClassName, ': ', E.Message);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@@ -81,6 +81,8 @@
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
|
||||
<Manifest_File>None</Manifest_File>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_RemoteDebug>false</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
@@ -115,6 +117,10 @@
|
||||
<Source>
|
||||
<Source Name="MainSource">Project2.dpr</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k220.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp220.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
</Delphi.Personality>
|
||||
<Deployment Version="1">
|
||||
<DeployFile LocalName="Win32\Debug\Project2.exe" Configuration="Debug" Class="ProjectOutput">
|
||||
@@ -451,13 +457,13 @@
|
||||
<Operation>1</Operation>
|
||||
</Platform>
|
||||
</DeployClass>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||
</Deployment>
|
||||
<Platforms>
|
||||
<Platform value="OSX32">True</Platform>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
unit Unit2;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
DUnitX.TestFramework,AG.Logs,System.Classes,System.IOUtils,System.SysUtils,Winapi.Windows;
|
||||
DUnitX.TestFramework, AG.Logs, System.Classes, System.IOUtils,
|
||||
System.SysUtils, Winapi.Windows;
|
||||
|
||||
type
|
||||
|
||||
@@ -20,32 +22,34 @@ implementation
|
||||
|
||||
procedure TMyTestObject.Test1;
|
||||
var
|
||||
MultiLog:TAGLog;
|
||||
Stream:TStream;
|
||||
s:TBytes;
|
||||
MultiLog: TAGLog;
|
||||
Stream: TStream;
|
||||
s: TBytes;
|
||||
begin
|
||||
MultiLog:=TAGMultiLog.Create(nil);
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGNullLog.Create());
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGDiskLog.Create('test.log'));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGRamLog.Create());
|
||||
MultiLog := TAGMultiLog.Create(nil);
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGNullLog.Create());
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGDiskLog.Create('test.log'));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGRamLog.Create());
|
||||
{$IFNDEF MSWINDOWS}(MultiLog as TAGMultiLog).Logs.Add(TAGCommandLineLog.Create(GetStdHandle(STD_OUTPUT_HANDLE))){$ENDIF};
|
||||
try
|
||||
s:=TFile.ReadAllBytes('test2.log');
|
||||
except
|
||||
s:=TBytes.Create();
|
||||
end;
|
||||
Stream:=TFileStream.Create('test2.log',fmCreate+fmOpenReadWrite+fmShareDenyWrite);
|
||||
Stream.WriteBuffer(s,length(s));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGStreamLog.Create(Stream));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGCallBackLog.Create(procedure(s:string)
|
||||
begin
|
||||
Self.WriteLn(s);
|
||||
end));{}
|
||||
MultiLog.Write('Str Test');
|
||||
MultiLog.Write('Str+Object Test',self);
|
||||
FreeAndNil(MultiLog);
|
||||
try
|
||||
s := TFile.ReadAllBytes('test2.log');
|
||||
except
|
||||
s := TBytes.Create();
|
||||
end;
|
||||
Stream := TFileStream.Create('test2.log', fmCreate + fmOpenReadWrite +
|
||||
fmShareDenyWrite);
|
||||
Stream.WriteBuffer(s, length(s));
|
||||
(MultiLog as TAGMultiLog).Logs.Add(TAGStreamLog.Create(Stream));
|
||||
(MultiLog as TAGMultiLog)
|
||||
.Logs.Add(TAGCallBackLog.Create(procedure(s: string)
|
||||
begin Self.WriteLn(s); end)); { }
|
||||
MultiLog.Write('Str Test');
|
||||
MultiLog.Write('Str+Object Test', Self);
|
||||
FreeAndNil(MultiLog);
|
||||
end;
|
||||
|
||||
initialization
|
||||
TDUnitX.RegisterTestFixture(TMyTestObject);
|
||||
|
||||
TDUnitX.RegisterTestFixture(TMyTestObject);
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user