Browse Source

+ Patch from Darius Blaszijk to implement plain text reporting

git-svn-id: trunk@4416 -
michael 19 years ago
parent
commit
93db6d6174
1 changed files with 115 additions and 3 deletions
  1. 115 3
      fcl/fpcunit/testreport.pp

+ 115 - 3
fcl/fpcunit/testreport.pp

@@ -33,6 +33,17 @@ type
     procedure EndTest(ATest: TTest);
     procedure EndTest(ATest: TTest);
   end;
   end;
 
 
+  TPlainResultsWriter = class(TNoRefCountObject, ITestListener)
+  public
+    procedure WriteHeader;
+    procedure WriteResult(aResult: TTestResult);
+  {ITestListener}
+    procedure AddFailure(ATest: TTest; AFailure: TTestFailure);
+    procedure AddError(ATest: TTest; AError: TTestFailure);
+    procedure StartTest(ATest: TTest);
+    procedure EndTest(ATest: TTest);
+  end;
+
  {
  {
   TLatexResultsWriter = class(TNoRefCountObject, ITestListener)
   TLatexResultsWriter = class(TNoRefCountObject, ITestListener)
   public
   public
@@ -42,16 +53,18 @@ type
     procedure EndTest(ATest: TTest);
     procedure EndTest(ATest: TTest);
   end;}
   end;}
 
 
-
 function TestSuiteAsXML(aSuite: TTestSuite): string;
 function TestSuiteAsXML(aSuite: TTestSuite): string;
 function TestSuiteAsLatex(aSuite:TTestSuite): string;
 function TestSuiteAsLatex(aSuite:TTestSuite): string;
+function TestSuiteAsPlain(aSuite:TTestSuite): string;
 function GetSuiteAsXML(aSuite: TTestSuite): string;
 function GetSuiteAsXML(aSuite: TTestSuite): string;
 function GetSuiteAsLatex(aSuite: TTestSuite): string;
 function GetSuiteAsLatex(aSuite: TTestSuite): string;
+function GetSuiteAsPlain(aSuite: TTestSuite): string;
 function TestResultAsXML(aTestResult: TTestResult): string;
 function TestResultAsXML(aTestResult: TTestResult): string;
+function TestResultAsPlain(aTestResult: TTestResult): string;
 
 
 implementation
 implementation
 
 
-
+{TXMLResultsWriter}
 procedure TXMLResultsWriter.WriteHeader;
 procedure TXMLResultsWriter.WriteHeader;
 begin
 begin
   writeln('<testresults>');
   writeln('<testresults>');
@@ -65,7 +78,6 @@ begin
   writeln('</testresults>');
   writeln('</testresults>');
 end;
 end;
 
 
-{TXMLResultsWriter}
 procedure TXMLResultsWriter.AddFailure(ATest: TTest; AFailure: TTestFailure);
 procedure TXMLResultsWriter.AddFailure(ATest: TTest; AFailure: TTestFailure);
 begin
 begin
   writeln('<failure ExceptionClassName="', AFailure.ExceptionClassName, '">');
   writeln('<failure ExceptionClassName="', AFailure.ExceptionClassName, '">');
@@ -93,6 +105,39 @@ begin
   writeln('</test>');
   writeln('</test>');
 end;
 end;
 
 
+{TPlainResultsWriter}
+procedure TPlainResultsWriter.WriteHeader;
+begin
+end;
+
+procedure TPlainResultsWriter.WriteResult(aResult: TTestResult);
+begin
+  writeln('', TestResultAsPlain(aResult));
+end;
+
+procedure TPlainResultsWriter.AddFailure(ATest: TTest; AFailure: TTestFailure);
+begin
+  writeln('', AFailure.ExceptionMessage);
+end;
+
+procedure TPlainResultsWriter.AddError(ATest: TTest; AError: TTestFailure);
+begin
+  writeln('  Error: ', AError.ExceptionClassName);
+  writeln('    Exception:   ', AError.ExceptionMessage);
+  writeln('    Source unit: ', AError.SourceUnitName);
+  writeln('    Method name: ', AError.FailedMethodName);
+  writeln('    Line number: ', AError.LineNumber);
+end;
+
+procedure TPlainResultsWriter.StartTest(ATest: TTest);
+begin
+  writeln('Test: ' , ATest.TestSuiteName + '.' + ATest.TestName);
+end;
+
+procedure TPlainResultsWriter.EndTest(ATest: TTest);
+begin
+  writeln;
+end;
 
 
 
 
 function TestSuiteAsXML(aSuite:TTestSuite): string;
 function TestSuiteAsXML(aSuite:TTestSuite): string;
@@ -127,6 +172,19 @@ begin
   end;
   end;
 end;
 end;
 
 
+function TestSuiteAsPlain(aSuite:TTestSuite): string;
+var
+  i,j: integer;
+  s: TTestSuite;
+begin
+  for i := 0 to aSuite.Tests.Count - 1 do
+    if TTest(aSuite.Tests.Items[i]) is TTestSuite then
+      Result := Result + TestSuiteAsPlain(TTestSuite(aSuite.Tests.Items[i]))
+    else
+      if TTest(aSuite.Tests.Items[i]) is TTestCase then
+        Result := Result + '  ' + ASuite.TestName+'.' + TTestcase(aSuite.Tests.Items[i]).TestName + System.sLineBreak;
+end;
+
 function GetSuiteAsXML(aSuite: TTestSuite): string;
 function GetSuiteAsXML(aSuite: TTestSuite): string;
 begin
 begin
   if aSuite <> nil then
   if aSuite <> nil then
@@ -156,6 +214,14 @@ begin
     Result := '';
     Result := '';
 end;
 end;
 
 
+function GetSuiteAsPlain(aSuite: TTestSuite): string;
+begin
+  Result := '';
+
+  if aSuite <> nil then
+    Result := 'TestSuites: ' + System.sLineBreak + TestSuiteAsPlain(aSuite);
+end;
+
 function TestResultAsXML(aTestResult: TTestResult): string;
 function TestResultAsXML(aTestResult: TTestResult): string;
 var
 var
   i: longint;
   i: longint;
@@ -203,4 +269,50 @@ begin
   end;
   end;
 end;
 end;
 
 
+function TestResultAsPlain(aTestResult: TTestResult): string;
+var
+  i: longint;
+  f: TTestFailure;
+begin
+  with aTestResult do
+  begin
+    Result :=          'Number of run tests: ' + intToStr(RunTests) + System.sLineBreak;
+    Result := Result + 'Number of errors:    ' + intToStr(NumberOfErrors) + System.sLineBreak;
+    Result := Result + 'Number of failures:  ' + intToStr(NumberOfFailures);
+    if NumberOfErrors <> 0 then
+    begin
+      Result := Result + System.sLineBreak;
+      Result := Result + System.sLineBreak;
+      Result := Result + 'List of errors:';
+      for i := 0 to Errors.Count - 1 do
+      begin
+        Result := Result + System.sLineBreak;
+        Result := Result + '  Error: ' + System.sLineBreak;
+        f := TTestFailure(Errors.Items[i]);
+        Result := Result + '    Message:           ' + f.AsString + System.sLineBreak;
+        Result := Result + '    Exception class:   ' + f.ExceptionClassName + System.sLineBreak;
+        Result := Result + '    Exception message: ' + f.ExceptionMessage + System.sLineBreak;
+        Result := Result + '    Source unitname:   ' + f.SourceUnitName + System.sLineBreak;
+        Result := Result + '    Line number:       ' + IntToStr(f.LineNumber) + System.sLineBreak;
+        Result := Result + '    Failed methodname: ' + f.FailedMethodName + System.sLineBreak;
+      end;
+    end;
+    if NumberOfFailures <> 0 then
+    begin
+      Result := Result + System.sLineBreak;
+      Result := Result + System.sLineBreak;
+      Result := Result + 'List of failures:' + System.sLineBreak;
+      for i := 0 to Failures.Count - 1 do
+      begin
+        Result := Result + '  Failure: ' + System.sLineBreak;
+        f := TTestFailure(Failures.Items[i]);
+        Result := Result + '    Message:           ' + f.AsString + System.sLineBreak;
+        Result := Result + '    Exception class:   ' + f.ExceptionClassName + System.sLineBreak;
+        Result := Result + '    Exception message: ' + f.ExceptionMessage + System.sLineBreak;
+      end;
+    end;
+  end;
+  Result := Result + System.sLineBreak;
+end;
+
 end.
 end.