lazarus/test/lazutils/testlazloggercase.pas
martin 5a1360baf1 LazLogger, introduce base and dummy classes
git-svn-id: trunk@35778 -
2012-03-06 19:36:11 +00:00

460 lines
14 KiB
ObjectPascal

unit TestLazLoggerCase;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpcunit, testutils, testregistry, LazLoggerBase, LazLogger, LazClasses;
type
TStringArray = array of string;
{ TTestLazLogger }
TTestLazLogger = class(TTestCase)
protected
FTheLogger: TLazLoggerFile;
FOnDbgOutCount, FOnDebugLnCount: Integer;
FOnDbgOutText, FOnDebugLnText: string;
FArgcMem, FArgVSaved: PPChar;
FArgCSaved: Integer;
FArgs: TStringArray;
procedure TestOnDbgOut(Sender: TObject; S: string; var Handled: Boolean);
procedure TestOnDebugln(Sender: TObject; S: string; var Handled: Boolean);
procedure InitLogger;
procedure AssertDbgOut(Name: string; ExpCount: integer; ExpText: String);
procedure AssertDebugLn(Name: string; ExpCount: integer; ExpText: String);
procedure SaveArgs;
procedure RestoreArgs;
procedure SetArgv(List: TStringArray);
procedure SetArgs(List: array of string);
published
procedure TestEvent;
procedure TestFilter;
procedure TestReCreate;
end;
TLazLoggerForTest = class(TLazLogger)
end;
implementation
procedure TTestLazLogger.TestOnDbgOut(Sender: TObject; S: string; var Handled: Boolean);
begin
inc(FOnDbgOutCount);
FOnDbgOutText := FOnDbgOutText + s;
Handled := True;
end;
procedure TTestLazLogger.TestOnDebugln(Sender: TObject; S: string; var Handled: Boolean);
begin
inc(FOnDebugLnCount);
FOnDebugLnText := FOnDebugLnText + s + LineEnding;
Handled := True;
end;
procedure TTestLazLogger.InitLogger;
begin
FreeAndNil(FTheLogger);
FTheLogger := TLazLoggerFile.Create;
FTheLogger.OnDebugLn := @TestOnDebugln;
FTheLogger.OnDbgOut := @TestOnDbgOut;
FOnDebugLnCount := 0;
FOnDebugLnText := '';
end;
procedure TTestLazLogger.AssertDbgOut(Name: string; ExpCount: integer; ExpText: String);
begin
AssertEquals(Name + ' DbgOut call count', ExpCount, FOnDbgOutCount);
AssertEquals(Name + ' DbgOut text', ExpText, FOnDbgOutText);
FOnDbgOutCount := 0;
FOnDbgOutText := '';
end;
procedure TTestLazLogger.AssertDebugLn(Name: string; ExpCount: integer; ExpText: String);
begin
AssertEquals(Name + ' DebugLn call count', ExpCount, FOnDebugLnCount);
AssertEquals(Name + ' DebugLn text', ExpText, FOnDebugLnText);
FOnDebugLnCount := 0;
FOnDebugLnText := '';
end;
procedure TTestLazLogger.SaveArgs;
begin
FArgVSaved := argv;
FArgCSaved := argc;
end;
procedure TTestLazLogger.RestoreArgs;
begin
argv := FArgVSaved;
argc := FArgCSaved;
end;
procedure TTestLazLogger.SetArgv(List: TStringArray);
var
i: Integer;
begin
if List = nil then begin
argc := 0;
argv := nil;
ReAllocMem(FArgcMem, 0);
exit;
end;
argc := Length(List);
ReAllocMem(FArgcMem, argc * SizeOf(PChar));
argv := FArgcMem;
for i := 0 to argc - 1 do
FArgcMem[i] := PChar(List[i]);
end;
procedure TTestLazLogger.SetArgs(List: array of string);
var
i: Integer;
begin
if Length(List) = 0 then begin
SetArgv(nil);
Exit;
end;
SetLength(FArgs, Length(List));
for i := 0 to Length(List) - 1 do
FArgs[i] := List[i];
SetArgv(FArgs);
end;
procedure TTestLazLogger.TestEvent;
begin
InitLogger;
FTheLogger.DebugLn('a');
AssertDebugLn('debugln a', 1, 'a'+LineEnding);
AssertDbgOut('debugln a', 0, '');
FTheLogger.DebugLn('b', 'c');
AssertDebugLn('debugln b,c', 1, 'bc'+LineEnding);
AssertDbgOut('debugln b,c', 0, '');
FTheLogger.DebugLn(['d', 1]);
AssertDebugLn('debugln d,1', 1, 'd1'+LineEnding);
AssertDbgOut('debugln d,1', 0, '');
FTheLogger.DebugLn('e %d', [1]);
AssertDebugLn('debugln e,1', 1, 'e 1'+LineEnding);
AssertDbgOut('debugln e,1', 0, '');
FTheLogger.DbgOut('a');
AssertDbgOut('DbgOut a', 1, 'a');
AssertDebugLn('DbgOut a', 0, '');
FTheLogger.DbgOut('b', 'c');
AssertDbgOut('DbgOut b,c', 1, 'bc');
AssertDebugLn('DbgOut b,c', 0, '');
FTheLogger.DbgOut(['d', 1]);
AssertDbgOut('DbgOut d,1', 1, 'd1');
AssertDebugLn('DbgOut d,1', 0, '');
FTheLogger.DbgOut('e %d', [1]);
AssertDbgOut('DbgOut e,1', 1, 'e 1');
AssertDebugLn('DbgOut e,1', 0, '');
FTheLogger.DebugLnEnter('a');
AssertDebugLn('DebugLnEnter() a', 1, 'a'+LineEnding);
AssertDbgOut('DebugLnEnter() a', 0, '');
FTheLogger.DebugLn('in enter');
AssertDebugLn('debugln in enter', 1, ' in enter'+LineEnding);
AssertDbgOut('debugln in enter', 0, '');
FTheLogger.DebugLnExit('b');
AssertDebugLn('DebugLnExit() b', 1, 'b'+LineEnding);
AssertDbgOut('DebugLnExit() b', 0, '');
FTheLogger.DebugLn('after exit');
AssertDebugLn('debugln after exit', 1, 'after exit'+LineEnding);
AssertDbgOut('debugln after exit', 0, '');
FreeAndNil(FTheLogger);
end;
procedure TTestLazLogger.TestFilter;
procedure FilterInit(List: array of string);
begin
SetArgs(List);
InitLogger;
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
end;
procedure FilterInitNoParam(List: array of string);
begin
SetArgs(List);
InitLogger;
end;
Procedure TestNoGroup(Name: String);
begin
FTheLogger.DebugLn('NoGroup'+Name);
AssertDebugLn(Name + 'debugln NoGroup'+Name, 1, 'NoGroup'+Name+LineEnding);
FTheLogger.DebugLn('NoGroupNil'+Name);
AssertDebugLn(Name + 'debugln [nil] NoGroupNil'+Name, 1, 'NoGroupNil'+Name+LineEnding);
end;
Procedure TestGroup(Name: String; g: PLazLoggerLogGroup; ExpLog: Boolean);
begin
FTheLogger.DebugLn(g, 'Group'+Name);
if ExpLog then
AssertDebugLn(Name + 'debugln ['+g^.ConfigName+'] Group'+Name, 1, 'Group'+Name+LineEnding)
else
AssertDebugLn(Name + 'debugln ['+g^.ConfigName+'] Group'+Name, 0, '');
FTheLogger.DebugLn(g, ['Group2',Name]);
if ExpLog then
AssertDebugLn(Name + 'debugln ['+g^.ConfigName+'] [Group2,'+Name+']', 1, 'Group2'+Name+LineEnding)
else
AssertDebugLn(Name + 'debugln ['+g^.ConfigName+'] [Group2,'+Name+']', 0, '');
end;
var
g1: PLazLoggerLogGroup;
s, a: String;
begin
SaveArgs;
try
{%region g1 not default enabled}
s := 'g1(false)';
a := '';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
g1^.Enabled := True;
TestGroup (Format('%s -- %s', [s+'->enabled', a]), g1, True);
a := '--dbe=';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
a := '--dbe=g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
g1^.Enabled := False;
TestGroup (Format('%s -- %s', [s+'->disabled', a]), g1, False);
a := '--dbe=+g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=-g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
a := '--dbe=g2';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
a := '--dbe=g2,g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=g1,g2';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=-g2,g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=-';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
a := '--dbe=- --dbe=+g1';
FilterInit(['exe', '--debug-log=a', '--dbe=-', '--dbe=+g1']);
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
{%endregion g1 not default enabled}
{%region g1 default enabled}
s := 'g1(true)';
a := '';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1', True);
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1', True);
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=+g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1', True);
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=-g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1', True);
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
a := '--dbe=-g2';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1', True);
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, True);
a := '--dbe=g2,-g1';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1', True);
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
a := '--dbe=-';
FilterInit(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1', True);
TestNoGroup(Format('%s -- %s', [s, a]));
TestGroup (Format('%s -- %s', [s, a]), g1, False);
{%endregion g1 default enabled}
{%region g1 not default enabled / param after}
s := 'g1(false)';
a := '';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, False);
a := '--dbe=';
FilterInitNoParam(['exe', '--debug-log=a', a]);
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, False);
a := '--dbe=g1';
FilterInitNoParam(['exe', '--debug-log=a', a]);
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
g1 := FTheLogger.RegisterLogGroup('g1');
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, True);
a := '--dbe=+g1';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, True);
a := '--dbe=-g1';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, False);
a := '--dbe=g2';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, False);
a := '--dbe=g2,g1';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, True);
a := '--dbe=g1,g2';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, True);
a := '--dbe=-g2,g1';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, True);
a := '--dbe=-';
FilterInitNoParam(['exe', '--debug-log=a', a]);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, False);
a := '--dbe=- --dbe=+g1';
FilterInitNoParam(['exe', '--debug-log=a', '--dbe=-', '--dbe=+g1']);
g1 := FTheLogger.RegisterLogGroup('g1');
FTheLogger.ParamForEnabledLogGroups := '--dbe=';
TestNoGroup(Format('Param late: %s -- %s', [s, a]));
TestGroup (Format('Param late: %s -- %s', [s, a]), g1, True);
{%endregion g1 not default enabled}
finally
SetArgv(nil);
RestoreArgs;
FreeAndNil(FTheLogger);
end;
end;
function CreateDebugLogger: TRefCountedObject;
begin
Result := TLazLoggerForTest.Create;
TLazLoggerFile(Result).Assign(GetExistingDebugLogger);
end;
procedure TTestLazLogger.TestReCreate;
begin
AssertTrue('DebugLogger is TLazLoggerFile', DebugLogger is TLazLoggerFile);
DebugLogger.MaxNestPrefixLen := 122;
LazDebugLoggerCreator := @CreateDebugLogger;
AssertTrue('still DebugLogger is TLazLoggerFile', DebugLogger is TLazLoggerFile);
RecreateDebugLogger;
AssertTrue('DebugLogger is TLazLoggerForTest', LazLoggerBase.DebugLogger is TLazLoggerForTest);
AssertEquals('MaxNestPrefixLen = 122', 122, TLazLoggerForTest(LazLoggerBase.DebugLogger).MaxNestPrefixLen);
end;
initialization
RegisterTest(TTestLazLogger);
end.