+ testsuite cgi testrun comparisons

git-svn-id: trunk@6174 -
This commit is contained in:
fpc 2007-01-24 20:17:09 +00:00
parent d2de4ee942
commit cfe41cf155

View File

@ -14,6 +14,7 @@ Type
FComboBoxProducer : TComboBoxProducer; FComboBoxProducer : TComboBoxProducer;
FDB : TMySQLDatabase; FDB : TMySQLDatabase;
FRunID, FRunID,
FCompareRunID,
FVersion, FVersion,
FCPU, FCPU,
FOS : String; FOS : String;
@ -46,8 +47,9 @@ Type
Function GetVersionName(ID : String) : String; Function GetVersionName(ID : String) : String;
Function InitCGIVars : Integer; Function InitCGIVars : Integer;
Procedure DoRun; override; Procedure DoRun; override;
Procedure EmitForm; Procedure EmitOverviewForm;
Procedure ShowRunResults; Procedure ShowRunResults;
Procedure ShowRunComparison;
Function ConnectToDB : Boolean; Function ConnectToDB : Boolean;
procedure DisconnectFromDB; procedure DisconnectFromDB;
Procedure EmitTitle(ATitle : String); Procedure EmitTitle(ATitle : String);
@ -71,7 +73,7 @@ Const
} }
Const Const
SDetailsURL = 'testsuite.cgi?TESTACTION=1&TESTRUN=%s'; SDetailsURL = 'testsuite.cgi?action=1&run1id=%s';
Procedure TTestSuite.DoRun; Procedure TTestSuite.DoRun;
@ -79,8 +81,12 @@ begin
Try Try
Try Try
Case InitCGIVars of Case InitCGIVars of
0 : EmitForm; 0 : EmitOverviewForm;
1 : ShowRunResults; 1 :
if Length(FCompareRunID) = 0 then
ShowRunResults
else
ShowRunComparison;
2 : CreateRunPie; 2 : CreateRunPie;
end; end;
finally finally
@ -102,27 +108,48 @@ begin
FComboBoxProducer:=TComboBoxProducer.Create(Self); FComboBoxProducer:=TComboBoxProducer.Create(Self);
DateSeparator:='/'; DateSeparator:='/';
Result:=0; Result:=0;
FAction:=StrToIntDef(RequestVariables['TESTACTION'],0); S:=RequestVariables['action'];
FVersion:=RequestVariables['TESTVERSION']; if Length(S) = 0 then
FOS:=RequestVariables['TESTOS']; S:=RequestVariables['TESTACTION'];
FCPU:=RequestVariables['TESTCPU']; FAction:=StrToIntDef(S,0);
S:=RequestVariables['TESTDATE']; FVersion:=RequestVariables['version'];
FRunID:=RequestVariables['TESTRUN']; if Length(FVersion) = 0 then
FTestLastDays:=StrToIntDef(RequestVariables['TESTLASTDAYS'],31); FVersion:=RequestVariables['TESTVERSION'];
If (S<>'') then FOS:=RequestVariables['os'];
Try if Length(FOS) = 0 then
FOS:=RequestVariables['TESTOS'];
FCPU:=RequestVariables['cpu'];
if Length(FCPU) = 0 then
FCPU:=RequestVariables['TESTCPU'];
FRunID:=RequestVariables['run1id'];
if Length(FRunID) = 0 then
FRunID:=RequestVariables['TESTRUN'];
S:=RequestVariables['lastdays'];
if Length(S) = 0 then
S:=RequestVariables['TESTLASTDAYS'];
FTestLastDays:=StrToIntDef(S,31);
S:=RequestVariables['date'];
if Length(S) = 0 then
S:=RequestVariables['TESTDATE'];
if Length(S) > 0 then
try
FDate:=StrToDate(S); FDate:=StrToDate(S);
except except
FDate:=0; FDate:=0;
end; end;
S:=RequestVariables['TESTFAILEDONLY']; S:=RequestVariables['failedonly'];
if Length(S) = 0 then
S:=RequestVariables['TESTFAILEDONLY'];
FOnlyFailed:=(S='1'); FOnlyFailed:=(S='1');
S:=RequestVariables['TESTNOSKIPPED']; S:=RequestVariables['noskipped'];
if Length(S) = 0 then
S:=RequestVariables['TESTNOSKIPPED'];
FNoSkipped:=(S='1'); FNoSkipped:=(S='1');
S:=RequestVariables['DEBUGCGI']; FCompareRunID:=RequestVariables['run2id'];
FRunCount:=StrToIntDef(RequestVariables['PIETOTAL'],0); FRunCount:=StrToIntDef(RequestVariables['PIETOTAL'],0);
FRunSkipCount:=StrToIntDef(RequestVariables['PIESKIPPED'],0); FRunSkipCount:=StrToIntDef(RequestVariables['PIESKIPPED'],0);
FRunFailedCount:=StrToIntDef(RequestVariables['PIEFAILED'],0); FRunFailedCount:=StrToIntDef(RequestVariables['PIEFAILED'],0);
S:=RequestVariables['DEBUGCGI'];
FDebug:=(S='1'); FDebug:=(S='1');
Result:=FAction; Result:=FAction;
end; end;
@ -209,7 +236,7 @@ begin
AddResponseLn('<BODY>'); AddResponseLn('<BODY>');
end; end;
Procedure TTestSuite.EmitForm; Procedure TTestSuite.EmitOverviewForm;
begin begin
ConnectToDB; ConnectToDB;
@ -229,40 +256,40 @@ begin
CellStart; CellStart;
Write('Operating system:'); Write('Operating system:');
CellNext; CellNext;
ComboBoxFromQuery('TESTOS','SELECT TO_ID,TO_NAME FROM TESTOS ORDER BY TO_NAME',FOS); ComboBoxFromQuery('os','SELECT TO_ID,TO_NAME FROM TESTOS ORDER BY TO_NAME',FOS);
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('Processor:'); Write('Processor:');
CellNext; CellNext;
ComboBoxFromQuery('TESTCPU','SELECT TC_ID,TC_NAME FROM TESTCPU ORDER BY TC_NAME',FCPU); ComboBoxFromQuery('cpu','SELECT TC_ID,TC_NAME FROM TESTCPU ORDER BY TC_NAME',FCPU);
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('Version'); Write('Version');
CellNext; CellNext;
ComboBoxFromQuery('TESTVERSION','SELECT TV_ID,TV_VERSION FROM TESTVERSION ORDER BY TV_VERSION DESC',FVERSION); ComboBoxFromQuery('version','SELECT TV_ID,TV_VERSION FROM TESTVERSION ORDER BY TV_VERSION DESC',FVERSION);
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('Date'); Write('Date');
CellNext; CellNext;
If (FDate=0) then If (FDate=0) then
EmitInput('TESTDATE','') EmitInput('date','')
else else
EmitInput('TESTDATE',DateToStr(FDate)); EmitInput('date',DateToStr(FDate));
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('Only failed tests'); Write('Only failed tests');
CellNext; CellNext;
EmitCheckBox('TESTFAILEDONLY','1',FonlyFailed); EmitCheckBox('failedonly','1',FonlyFailed);
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('No skipped tests'); Write('No skipped tests');
CellNext; CellNext;
EmitCheckBox('TESTNOSKIPPED','1',FNoSkipped); EmitCheckBox('noskipped','1',FNoSkipped);
CellEnd; CellEnd;
RowEnd; RowEnd;
TableEnd; TableEnd;
@ -309,7 +336,7 @@ Var
begin begin
If FDebug then If FDebug then
Write('Query : '+Qry); Writeln('Query : '+Qry);
Q:=CreateDataset(Qry); Q:=CreateDataset(Qry);
With Q do With Q do
try try
@ -329,7 +356,7 @@ begin
Free; Free;
end; end;
If IncludeRecordCount then If IncludeRecordCount then
Write('Record count: '+IntTostr(Q.RecordCount)); Writeln('<p>Record count: ',Q.RecordCount,'</p>');
Finally Finally
Close; Close;
end; end;
@ -339,22 +366,23 @@ begin
end; end;
Procedure TTestSuite.ShowRunOverview; Procedure TTestSuite.ShowRunOverview;
Const Const
SOverview = 'SELECT TU_ID,TU_DATE,TC_NAME,TO_NAME,TV_VERSION,COUNT(TR_ID) as RESULTCOUNT,'+ SOverview = 'SELECT TU_ID as ID,TU_DATE as Date,TC_NAME as CPU,TO_NAME as OS,'+
'(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN) AS OK,'+ 'TV_VERSION as Version,COUNT(TR_ID) as Count,'+
'(TU_FAILEDTOCOMPILE+TU_FAILEDTORUN+TU_FAILEDTOFAIL) as FAILED,'+ '(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN) AS OK,'+
'(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN+'+ '(TU_FAILEDTOCOMPILE+TU_FAILEDTORUN+TU_FAILEDTOFAIL) as Failed,'+
'TU_FAILEDTOCOMPILE+TU_FAILEDTORUN+TU_FAILEDTOFAIL) as TOTAL,'+ '(TU_SUCCESSFULLYFAILED+TU_SUCCESFULLYCOMPILED+TU_SUCCESSFULLYRUN+'+
'TU_SUBMITTER as SUBMITTER, TU_MACHINE as MACHINE, TU_COMMENT as COMMENT'+ 'TU_FAILEDTOCOMPILE+TU_FAILEDTORUN+TU_FAILEDTOFAIL) as Total,'+
' FROM TESTRESULTS,TESTRUN,TESTCPU,TESTOS,TESTVERSION '+ 'TU_SUBMITTER as Submitter, TU_MACHINE as Machine, TU_COMMENT as Comment '+
'FROM TESTRESULTS,TESTRUN,TESTCPU,TESTOS,TESTVERSION '+
'WHERE '+ 'WHERE '+
' (TC_ID=TU_CPU_FK) AND '+ '(TC_ID=TU_CPU_FK) AND '+
' (TO_ID=TU_OS_FK) AND '+ '(TO_ID=TU_OS_FK) AND '+
' (TV_ID=TU_VERSION_FK) AND '+ '(TV_ID=TU_VERSION_FK) AND '+
' (TR_TESTRUN_FK=TU_ID) '+ '(TR_TESTRUN_FK=TU_ID) '+
' %s '+ '%s '+
' GROUP BY TU_ID '; 'GROUP BY TU_ID '+
'ORDER BY TU_ID DESC LIMIT 50';
Var Var
@ -370,19 +398,17 @@ begin
if (FOS<>'') and (GetOSName(FOS)<>'All') then if (FOS<>'') and (GetOSName(FOS)<>'All') then
S:=S+' AND (TU_OS_FK='+FOS+')'; S:=S+' AND (TU_OS_FK='+FOS+')';
If (Round(FDate)<>0) then If (Round(FDate)<>0) then
S:=S+' AND (TU_DATE>="'+FormatDateTime('YYYY/MM/DD',FDate)+'")' S:=S+' AND (TU_DATE="'+FormatDateTime('YYYY/MM/DD',FDate)+'")';
else
S:=S+' AND (TU_DATE>="'+FormatDateTime('YYYY/MM/DD',Date-FTESTLASTDAYS)+'")';
If FOnlyFailed then If FOnlyFailed then
S:=S+' AND (TR_OK="-")'; S:=S+' AND (TR_OK="-")';
A:=SDetailsURL; A:=SDetailsURL;
If FOnlyFailed then If FOnlyFailed then
A:=A+'&TESTFAILEDONLY=1'; A:=A+'&failedonly=1';
If FNoSkipped then If FNoSkipped then
A:=A+'&TESTNOSKIPPED=1'; A:=A+'&noskipped=1';
Qry:=Format(SOverview,[S]); Qry:=Format(SOverview,[S]);
If FDebug then If FDebug then
Write('Query : '+Qry); Writeln('Query : '+Qry);
Q:=CreateDataset(Qry); Q:=CreateDataset(Qry);
With Q do With Q do
try try
@ -393,13 +419,13 @@ begin
Border:=True; Border:=True;
OnGetRowAttributes:=@GetOverViewRowAttr; OnGetRowAttributes:=@GetOverViewRowAttr;
CreateColumns(Nil); CreateColumns(Nil);
TableColumns.ColumnByName('TU_ID').ActionURL:=A; TableColumns.ColumnByName('ID').ActionURL:=A;
TableColumns.ColumnByNAme('FAILED').OnGetCellContents:=@FormatFailedOverview; TableColumns.ColumnByNAme('Failed').OnGetCellContents:=@FormatFailedOverview;
CreateTable(Response); CreateTable(Response);
Finally Finally
Free; Free;
end; end;
Write('Record count: '+IntTostr(Q.RecordCount)); Writeln('<p>Record count: ',Q.RecordCount,'</p>');
Finally Finally
Close; Close;
end; end;
@ -432,8 +458,8 @@ end;
Function TTestSuite.ShowRunData : Boolean; Function TTestSuite.ShowRunData : Boolean;
COnst Const
SGetRunData = 'SELECT TU_ID,TU_DATE,TC_NAME,TO_NAME,TV_VERSION '+ SGetRunData = 'SELECT TU_ID,TU_DATE,TC_NAME,TO_NAME,TU_COMMENT,TV_VERSION '+
' FROM TESTRUN,TESTCPU,TESTOS,TESTVERSION '+ ' FROM TESTRUN,TESTCPU,TESTOS,TESTVERSION '+
'WHERE '+ 'WHERE '+
' (TC_ID=TU_CPU_FK) AND '+ ' (TC_ID=TU_CPU_FK) AND '+
@ -443,51 +469,115 @@ COnst
Var Var
Q : TmYSQLDataset; Q1,Q2 : TmYSQLDataset;
F : TField;
Date1, Date2: TDateTime;
begin begin
Result:=(FRunID<>''); Result:=(FRunID<>'');
If Result then If Result then
begin begin
Q:=CreateDataset(Format(SGetRunData,[FRunID])); Q1:=CreateDataset(Format(SGetRunData,[FRunID]));
if Length(FCompareRunID) > 0 then
Q2:=CreateDataset(Format(SGetRunData,[FCompareRunID]))
else
Q2:=nil;
Try Try
Q.Open; Q1.Open;
Result:=Not (Q.EOF and Q.BOF); if Q2 <> nil then
Q2.Open;
Result:=Not (Q1.EOF and Q1.BOF);
If Result then If Result then
With FHTMLWriter do With FHTMLWriter do
begin begin
TableStart(2,true); FormStart('testsuite.cgi','get');
EmitHiddenVar('action', '1');
TableStart(3,true);
RowStart; RowStart;
CellStart;
Write('Run ID:');
CellNext;
EmitInput('run1id',FRunID);
CellNext;
EmitInput('run2id',FCompareRunID);
CellEnd;
RowNext;
CellStart; CellStart;
Write('Operating system:'); Write('Operating system:');
CellNext; CellNext;
Write(Q.FieldByName('TO_NAME').AsString); Write(Q1.FieldByName('TO_NAME').AsString);
CellNext;
if Q2 <> nil then
Write(Q2.FieldByName('TO_NAME').AsString);
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('Processor:'); Write('Processor:');
CellNext; CellNext;
Write(Q.FieldByName('TC_NAME').AsString); Write(Q1.FieldByName('TC_NAME').AsString);
CellNext;
if Q2 <> nil then
Write(Q2.FieldByName('TC_NAME').AsString);
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('Version'); Write('Version:');
CellNext; CellNext;
Write(Q.FieldByNAme('TV_VERSION').AsString); Write(Q1.FieldByNAme('TV_VERSION').AsString);
CellNext;
if Q2 <> nil then
Write(Q2.FieldByNAme('TV_VERSION').AsString);
CellEnd; CellEnd;
RowNext; RowNext;
CellStart; CellStart;
Write('Date'); Write('Comment:');
CellNext; CellNext;
Write(Q.FieldByNAme('TU_DATE').AsString); Write(Q1.FieldByName('TU_COMMENT').AsString);
CellNext;
if Q2 <> nil then
Write(Q2.FieldByName('TU_COMMENT').AsString);
CellEnd;
RowNext;
CellStart;
Write('Date:');
CellNext;
F := Q1.FieldByName('TU_DATE');
Date1 := F.AsDateTime;
Write(F.AsString);
CellNext;
if Q2 <> nil then
begin
F := Q2.FieldByName('TU_DATE');
Date2 := F.AsDateTime;
Write(F.AsString);
end;
CellEnd; CellEnd;
RowEnd; RowEnd;
TableEnd; TableEnd;
ParagraphStart;
EmitCheckBox('noskipped','1',FNoSkipped);
Write(' No skipped tests');
ParagraphEnd;
ParaGraphStart; ParaGraphStart;
EmitSubmitButton('','Show/Compare');
EmitResetButton('','Reset form');
ParagraphEnd;
FormEnd;
{ give warning if dates reversed }
if (Q2 <> nil) and (Date1 > Date2) then
begin
ParagraphStart;
Write('Warning: testruns are not compared in chronological order.');
ParagraphEnd;
end;
end; end;
Finally Finally
Q.Close; Q1.Close;
Q.Free; Q1.Free;
if Q2 <> nil then
begin
Q2.Close;
Q2.Free;
end;
end; end;
end; end;
end; end;
@ -534,17 +624,19 @@ begin
end; end;
HeaderEnd(2); HeaderEnd(2);
ParaGraphStart; ParaGraphStart;
S:='SELECT T_NAME as Test,T_FULLNAME as FileName ,TR_SKIP as Skipped,TR_OK as OK FROM '; S:='SELECT T_NAME as Test,T_FULLNAME as Filename,TR_SKIP as Skipped,TR_OK as OK'
S:=S+' TESTRESULTS,TESTS WHERE '; +' FROM TESTRESULTS,TESTS'
S:=S+' (TR_TEST_FK=T_ID) '; +' WHERE (TR_TEST_FK=T_ID) AND (TR_TESTRUN_FK='+FRunID+') ';
S:=S+' AND (TR_TESTRUN_FK='+FRunID+') ';
If FOnlyFailed then If FOnlyFailed then
S:=S+' AND (TR_OK="-")'; S:=S+' AND (TR_OK="-")';
If FNoSkipped then If FNoSkipped then
S:=S+' AND (TR_SKIP="-")'; S:=S+' AND (TR_SKIP="-")';
Qry:=S; Qry:=S;
If FDebug then If FDebug then
Write('Query : '+Qry); begin
Writeln('Query : '+Qry);
Flush(stdout);
end;
FRunCount:=0; FRunCount:=0;
FRunSkipCount:=0; FRunSkipCount:=0;
FRunFailedCount:=0; FRunFailedCount:=0;
@ -556,7 +648,7 @@ begin
With CreateTableProducer(Q) do With CreateTableProducer(Q) do
Try Try
Border:=True; Border:=True;
FL:='Test,FileName'; FL:='Test,Filename';
If Not FNoSkipped then If Not FNoSkipped then
FL:=FL+',Skipped'; FL:=FL+',Skipped';
If Not FOnlyFailed then If Not FOnlyFailed then
@ -568,7 +660,7 @@ begin
Finally Finally
Free; Free;
end; end;
Write('Record count: '+IntTostr(Q.RecordCount)); Writeln('<p>Record count: ',Q.RecordCount,'</p>');
Finally Finally
Close; Close;
end; end;
@ -578,7 +670,104 @@ begin
If Not (FRunCount=0) and not (FNoSkipped or FOnlyFailed) then If Not (FRunCount=0) and not (FNoSkipped or FOnlyFailed) then
begin begin
ParaGraphStart; ParaGraphStart;
TagStart('IMG',Format('Src="testsuite.cgi?TESTACTION=2&PIETOTAL=%d&PIEFAILED=%d&PIESKIPPED=%d"',[FRunCount,FRunFailedCount,FRunSkipCount])); TagStart('IMG',Format('Src="testsuite.cgi?action=2&pietotal=%d&piefailed=%d&pieskipped=%d"',[FRunCount,FRunFailedCount,FRunSkipCount]));
end;
end
else
Write('No data for test run with ID: '+FRunID);
end;
end;
Procedure TTestSuite.ShowRunComparison;
Var
S : String;
Qry : String;
Q : TMySQLDataset;
FL : String;
begin
ConnectToDB;
ContentType:='text/html';
EmitContentType;
EmitTitle(Title+' : Compare 2 runs');
With FHTMLWriter do
begin
HeaderStart(1);
Write('Test suite results for run '+FRunID+' vs. '+FCompareRunID);
HeaderEnd(1);
HeaderStart(2);
Write('Test run data: ');
HeaderEnd(2);
If ShowRunData then
begin
HeaderStart(2);
Write('Detailed test run results:');
FL:='';
If FOnlyFailed or FNoSkipped then
begin
FL:='';
If FOnlyFailed then
FL:='failed';
if FNoSkipped then
begin
If (FL<>'') then
FL:=FL+',';
FL:=FL+'not skipped';
end;
Write(' (only '+FL+' tests are shown)');
end;
HeaderEnd(2);
ParaGraphStart;
S:='SELECT T_NAME as Test,T_FULLNAME as FileName,tr1.TR_SKIP as Run1_Skipped,'
+'tr2.TR_SKIP as Run2_Skipped,tr1.TR_OK as Run1_OK,tr2.TR_OK as Run2_OK '
+'FROM TESTS,(select * from TESTRESULTS where TR_TESTRUN_FK='+FCompareRunID+') as tr2 '
+'LEFT JOIN (select * from TESTRESULTS where TR_TESTRUN_FK='+FRunID+') as tr1 '
+'USING (TR_TEST_FK) '
+'WHERE ((tr1.TR_SKIP IS NULL) or (%s(tr1.TR_OK<>tr2.TR_OK))) and (T_ID=tr2.TR_TEST_FK);';
If FNoSkipped then
Qry:='(tr1.TR_SKIP<>"+") and (tr2.TR_SKIP<>"+") and'
else
Qry:='';
Qry:=Format(S,[Qry]);
If FDebug then
begin
Writeln('Query: '+Qry);
Flush(stdout);
end;
FRunCount:=0;
FRunSkipCount:=0;
FRunFailedCount:=0;
Q:=CreateDataset(Qry);
With Q do
try
Open;
Try
With CreateTableProducer(Q) do
Try
Border:=True;
FL:='Test,FileName,Run1_OK,Run2_OK';
If Not FNoSkipped then
FL:=FL+',Run1_Skipped,Run2_Skipped';
CreateColumns(FL);
OnGetRowAttributes:=@GetRunRowAttr;
//(TableColumns.Items[0] as TTableColumn).ActionURL:=ALink;
CreateTable(Response);
Finally
Free;
end;
Writeln('<p>Record count: ',Q.RecordCount,'</p>');
Finally
Close;
end;
finally
Free;
end;
If Not (FRunCount=0) and not (FNoSkipped or FOnlyFailed) then
begin
ParaGraphStart;
TagStart('IMG',Format('Src="testsuite.cgi?action=2&pietotal=%d&piefailed=%d&pieskipped=%d"',[FRunCount,FRunFailedCount,FRunSkipCount]));
end; end;
end end
else else
@ -591,7 +780,7 @@ procedure TTestSuite.GetRunRowAttr(Sender: TObject; var BGColor: String;
Var Var
P : TTableProducer; P : TTableProducer;
SkipField, Run1Field, Run2Field : TField;
begin begin
P:=(Sender as TTAbleProducer); P:=(Sender as TTAbleProducer);
Inc(FRunCount); Inc(FRunCount);
@ -600,19 +789,36 @@ begin
If (P.CurrentRow Mod 2)=0 then If (P.CurrentRow Mod 2)=0 then
BGColor:='#EEEEEE' BGColor:='#EEEEEE'
end end
else else
If P.Dataset.FieldByName('Skipped').AsString='+' then begin
SkipField := P.Dataset.FindField('Skipped');
if SkipField = nil then
SkipField := P.Dataset.FindField('Run2_Skipped');
Run1Field := P.Dataset.FindField('OK');
if Run1Field = nil then
Run1Field := P.Dataset.FindField('Run1_OK');
Run2Field := P.Dataset.FindField('OK');
if Run2Field = nil then
Run2Field := P.Dataset.FindField('Run2_OK');
If (not FNoSkipped) and (SkipField.AsString='+') then
begin begin
Inc(FRunSkipCount); Inc(FRunSkipCount);
BGColor:='yellow'; // Yellow BGColor:='yellow'; // Yellow
end end
else If P.Dataset.FieldByName('OK').AsString='+' then else If Run2Field.AsString='+' then
BGColor:='#98FB98' // pale Green if Run1Field.AsString='' then
BGColor:='#68DFB8'
else
BGColor:='#98FB98' // pale Green
else else
begin begin
Inc(FRunFailedCount); Inc(FRunFailedCount);
BGColor:='#FF82AB'; // Light red if Run1Field.AsString='' then
BGColor:='#FF225B'
else
BGColor:='#FF82AB'; // Light red
end; end;
end;
end; end;
procedure TTestSuite.FormatFailedOverview(Sender: TObject; var CellData: String); procedure TTestSuite.FormatFailedOverview(Sender: TObject; var CellData: String);
@ -623,8 +829,8 @@ Var
begin begin
P:=(Sender as TTableProducer); P:=(Sender as TTableProducer);
S:=Format(SDetailsURL,[P.DataSet.FieldByName('TU_ID').AsString]); S:=Format(SDetailsURL,[P.DataSet.FieldByName('ID').AsString]);
S:=S+'&TESTFAILEDONLY=1&TESTNOSKIPPED=1'; S:=S+'&failedonly=1&noksipped=1';
CellData:=Format('<A HREF="%s">%s</A>',[S,CellData]); CellData:=Format('<A HREF="%s">%s</A>',[S,CellData]);
end; end;