{$mode objfpc} {$h+} unit utests; interface uses cgiapp,sysutils,mysqlDB4,whtml,dbwhtml,db, Classes,ftFont,fpimage,fpimgcanv,fpWritePng,fpcanvas; Type TTestSuite = Class(TCgiApplication) Private FHTMLWriter : THtmlWriter; FComboBoxProducer : TComboBoxProducer; FDB : TMySQLDatabase; FRunID, FVersion, FCPU, FOS : String; FDate : TDateTime; FDebug, FNoSkipped, FOnlyFailed : Boolean; FRunSkipCount, FRunFailedCount, FRunCount : Integer; FAction : Integer; FTestLastDays : Integer; Procedure GetOverviewRowAttr(Sender : TObject; Var BGColor : String; Var Align : THTMLAlign; Var VAlign : THTMLValign; Var CustomAttr : String) ; Procedure GetRunRowAttr(Sender : TObject; Var BGColor : String; Var Align : THTMLAlign; Var VAlign : THTMLValign; Var CustomAttr : String) ; Procedure FormatFailedOverview(Sender : TObject; Var CellData : String); Procedure DoDrawPie(Img : TFPCustomImage; Skipped,Failed,Total : Integer); Public Function CreateDataset(Qry : String) : TMySQLDataset; Function CreateTableProducer(DS : TDataset) :TTableProducer; Procedure DefaultTableFromQuery(Qry,ALink : String; IncludeRecordCount : Boolean); Procedure ComboBoxFromQuery(Const ComboName,Qry : String); Procedure ComboBoxFromQuery(Const ComboName,Qry,Value : String); Function GetSingleTon(Const Qry : String) : String; Function GetOSName(ID : String) : String; Function GetCPUName(ID : String) : String; Function GetVersionName(ID : String) : String; Function InitCGIVars : Integer; Procedure DoRun; override; Procedure EmitForm; Procedure ShowRunResults; Function ConnectToDB : Boolean; procedure DisconnectFromDB; Procedure EmitTitle(ATitle : String); Procedure ShowRunOverview; Procedure CreateRunPie; Function ShowRunData : Boolean; end; implementation Const {$i utests.cfg} { if utests.cfg is missed, create one with the following contents: DefDatabase = 'TESTSUITE'; DefHost = ''; DefDBUser = ''; // fill this in when compiling. DefPassword = ''; // fill this in, too. } Const SDetailsURL = 'testsuite.cgi?TESTACTION=1&TESTRUN=%s'; Procedure TTestSuite.DoRun; begin Try Try Case InitCGIVars of 0 : EmitForm; 1 : ShowRunResults; 2 : CreateRunPie; end; finally DisConnectFromDB; end; Finally Terminate; end; end; Function TTestSuite.InitCGIVars : Integer; Var S : String; begin FHtmlWriter:=THTMLWriter.Create(Response); FComboBoxProducer:=TComboBoxProducer.Create(Self); DateSeparator:='/'; Result:=0; FAction:=StrToIntDef(RequestVariables['TESTACTION'],0); FVersion:=RequestVariables['TESTVERSION']; FOS:=RequestVariables['TESTOS']; FCPU:=RequestVariables['TESTCPU']; S:=RequestVariables['TESTDATE']; FRunID:=RequestVariables['TESTRUN']; FTestLastDays:=StrToIntDef(RequestVariables['TESTLASTDAYS'],31); If (S<>'') then Try FDate:=StrToDate(S); except FDate:=0; end; S:=RequestVariables['TESTFAILEDONLY']; FOnlyFailed:=(S='1'); S:=RequestVariables['TESTNOSKIPPED']; FNoSkipped:=(S='1'); S:=RequestVariables['DEBUGCGI']; FRunCount:=StrToIntDef(RequestVariables['PIETOTAL'],0); FRunSkipCount:=StrToIntDef(RequestVariables['PIESKIPPED'],0); FRunFailedCount:=StrToIntDef(RequestVariables['PIEFAILED'],0); FDebug:=(S='1'); Result:=FAction; end; Function TTestSuite.ConnectToDB : Boolean; begin Result:=False; FDB:=TMySQLDatabase.Create(Self); FDB.HostName:=DefHost; FDB.DatabaseName:=DefDatabase; FDB.UserName:=DefDBUser; FDB.Password:=DefPassword; FDB.Connected:=True; Result:=True; end; procedure TTestSuite.DisconnectFromDB; begin If Assigned(FDB) then begin if (FDB.Connected) then FDB.Connected:=False; FreeAndNil(FDB); end; end; Procedure TTestSuite.ComboBoxFromQuery(Const ComboName,Qry: String); begin ComboBoxFromQuery(ComboName,Qry,'') end; Procedure TTestSuite.ComboBoxFromQuery(Const ComboName,Qry,Value : String); Var Q : TMySQLDataset; begin Q:=TMySQLDataset.Create(Self); try Q.Database:=FDB; Q.SQL.Text:=Qry; Q.Open; FComboboxProducer.Dataset:=Q; FComboBoxProducer.ValueField:=Q.Fields[0].FieldName; FComboBoxProducer.DataField:=Q.Fields[1].FieldName; FComboBoxProducer.Value:=Value; FComboBoxProducer.InputName:=ComboName; FComboBoxProducer.CreateComboBox(Response); Finally Q.Free; end; end; Function TTestSuite.GetSingleton(Const Qry : String) : String; Var Q : TMySQLDataset; begin Result:=''; Q:=TMySQLDataset.Create(Self); try Q.Database:=FDB; Q.SQL.Text:=Qry; Q.Open; Try If Not (Q.EOF and Q.BOF) then Result:=Q.Fields[0].AsString; Finally Q.Close; end; finally Q.Free; end; end; Procedure TTestSuite.EmitTitle(ATitle : String); begin AddResponseLn(''); AddResponseLn('