diff --git a/AG.Logs.pas b/AG.Logs.pas index 5a7be72..3001f22 100644 --- a/AG.Logs.pas +++ b/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}SyncObjs{$ELSE}System.SyncObjs{$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 diff --git a/FPCTest/fpcunitproject1.lpr b/FPCTest/fpcunitproject1.lpr index 0168ef8..696e683 100644 --- a/FPCTest/fpcunitproject1.lpr +++ b/FPCTest/fpcunitproject1.lpr @@ -3,7 +3,9 @@ program fpcunitproject1; {$mode objfpc}{$H+} uses - Classes, consoletestrunner, TestCase1; + Classes, + consoletestrunner, + TestCase1; type @@ -11,7 +13,7 @@ type TMyTestRunner = class(TTestRunner) protected - // override the protected methods of TTestRunner to customize its behavior + // override the protected methods of TTestRunner to customize its behavior end; var diff --git a/FPCTest/fpcunitproject1.lps b/FPCTest/fpcunitproject1.lps index 819c516..7e89c8c 100644 --- a/FPCTest/fpcunitproject1.lps +++ b/FPCTest/fpcunitproject1.lps @@ -9,15 +9,15 @@ - - + - - + + + @@ -25,9 +25,8 @@ - - - + + @@ -38,22 +37,22 @@ - + - - + + - + - + - + @@ -61,104 +60,98 @@ - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + - - + - - - - diff --git a/FPCTest/testcase1.pas b/FPCTest/testcase1.pas index 14bb439..67833ed 100644 --- a/FPCTest/testcase1.pas +++ b/FPCTest/testcase1.pas @@ -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. - diff --git a/Tests/Project2.dpr b/Tests/Project2.dpr index 1d97bcc..b383df9 100644 --- a/Tests/Project2.dpr +++ b/Tests/Project2.dpr @@ -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 key to quit.'); System.Readln; end; - {$ENDIF} +{$ENDIF} except on E: Exception do System.Writeln(E.ClassName, ': ', E.Message); end; + end. diff --git a/Tests/Project2.dproj b/Tests/Project2.dproj index 4580630..e9beeb0 100644 --- a/Tests/Project2.dproj +++ b/Tests/Project2.dproj @@ -81,6 +81,8 @@ true + None + 1033 false @@ -115,6 +117,10 @@ Project2.dpr + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + @@ -451,13 +457,13 @@ 1 - + + - True diff --git a/Tests/Unit2.pas b/Tests/Unit2.pas index 16766f9..97416bc 100644 --- a/Tests/Unit2.pas +++ b/Tests/Unit2.pas @@ -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.