LazLogger: tests / fix parsing enabled groups

git-svn-id: trunk@35329 -
This commit is contained in:
martin 2012-02-12 16:44:13 +00:00
parent b4aa41e12e
commit 998b336ccb
2 changed files with 313 additions and 4 deletions

View File

@ -184,7 +184,7 @@ type
FLogGroupList: TObject; // Using TObject, so if none of the functions is used in the app, then even the rlass should be smart linked
FParamForLogFileName: String;
FLogDefaultEnabled, FLogParamParsed: Boolean;
FLogDefaultEnabled, FLogAllDefaultDisabled, FLogParamParsed: Boolean;
procedure SetAutoDestroy(AValue: Boolean);
procedure SetCloseLogFileBetweenWrites(AValue: Boolean);
@ -1007,7 +1007,8 @@ var
e: Boolean;
begin
c := GetParamByNameCount(FParamForEnabledLogGroups);
FLogDefaultEnabled := True;
FLogDefaultEnabled := False;
FLogAllDefaultDisabled := FAlse;
list := TStringList.Create;
for i := 0 to c - 1 do begin
@ -1018,6 +1019,7 @@ begin
FLogDefaultEnabled := False;
for j := 0 to LogGroupList.Count - 1 do
LogGroupList[j]^.Enabled := False;
FLogAllDefaultDisabled := True;
end
else
begin
@ -1395,6 +1397,7 @@ begin
{$endif}
FLogGroupList := nil;
FLogDefaultEnabled := False;
FLogAllDefaultDisabled := FAlse;
end;
destructor TLazLogger.Destroy;
@ -1422,13 +1425,15 @@ end;
function TLazLogger.RegisterLogGroup(const AConfigName: String;
ADefaulEnabled: Boolean): PLazLoggerLogGroup;
begin
if FLogAllDefaultDisabled then
ADefaulEnabled := False;
Result := LogGroupList.Find(AConfigName);
if Result <> nil then begin
if not(lgfAddedByParamParser in Result^.Flags) then
raise Exception.Create('Duplicate LogGroup ' + AConfigName);
Result^.Flags := Result^.Flags - [lgfAddedByParamParser];
if ADefaulEnabled then
if ADefaulEnabled and not(lgfAddedByParamParser in Result^.Flags) then
Result^.Enabled := True;
Result^.Flags := Result^.Flags - [lgfAddedByParamParser];
end
else
Result := LogGroupList.Add(AConfigName, ADefaulEnabled);

View File

@ -8,6 +8,7 @@ uses
Classes, SysUtils, fpcunit, testutils, testregistry, LazLogger;
type
TStringArray = array of string;
{ TTestLazLogger }
@ -16,13 +17,22 @@ type
FTheLogger: TLazLogger;
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;
end;
implementation
@ -47,6 +57,8 @@ begin
FTheLogger := TLazLogger.Create;
FTheLogger.OnDebugLn := @TestOnDebugln;
FTheLogger.OnDbgOut := @TestOnDbgOut;
FOnDebugLnCount := 0;
FOnDebugLnText := '';
end;
procedure TTestLazLogger.AssertDbgOut(Name: string; ExpCount: integer; ExpText: String);
@ -65,6 +77,49 @@ begin
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;
@ -122,6 +177,255 @@ begin
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;
initialization