Declaration Function PrintErrors(r :TTestResult): string;
Implementation
function TTextTestListener.PrintErrors(r :TTestResult) :string;
var
i :integer;
error :TTestFailure;
begin
result := '';
if (r.errorCount <> 0) thenbeginif (r.errorCount = 1) then
result := result + format('There was %d error:', [r.errorCount]) + CRLF
else
result := result + format('There were %d errors:', [r.errorCount]) + CRLF;
for i := 0 to r.errors.Count-1 dobegin
error := TObject(r.errors[i]) asTTestFailure;
result := result + format('%d) %s: %s: %s', [
i+1,
error.failedTest.name,
error.thrownExceptionName,
error.thrownExceptionMessage
]) + CRLF;
end;
result := result + CRLF
endEnd;
Declaration Function PrintFailures(r :TTestResult): string;
Implementation
function TTextTestListener.PrintFailures(r :TTestResult): string;
var
i :integer;
failure :TTestFailure;
begin
result := '';
if (r.failureCount <> 0) thenbeginif (r.failureCount = 1) then
result := result + format('There was %d failure:', [r.failureCount]) + CRLF
else
result := result + format('There were %d failures:', [r.failureCount]) + CRLF;
for i := 0 to r.failures.Count-1 dobegin
failure := TObject(r.failures[i]) asTTestFailure;
result := result + format('%d) %s: %s: %s', [
i+1,
failure.failedTest.name,
failure.thrownExceptionName,
failure.thrownExceptionMessage
]) + CRLF;
end;
result := result + CRLF
endEnd;
Declaration Function PrintHeader(r :TTestResult): string;
Implementation
function TTextTestListener.PrintHeader(r :TTestResult):string;
begin
result := '';
if r.wasSuccessful thenbegin
result := result + CRLF;
result := result + format('OK: %d tests'+CRLF, [r.runCount]);
endelsebegin
result := result + CRLF;
result := result + 'FAILURES!!!'+CRLF;
result := result + 'Test Results:'+CRLF;
result := result + format('Run: %8d'+CRLF+'Failures: %8d'+CRLF+'Errors: %8d'+CRLF,
[r.runCount, r.failureCount, r.errorCount]
);
endEnd;
Declaration Function TruncateString(s :string; len :integer): string;
Implementation
function TTextTestListener.TruncateString(s :string; len :integer) :string;
beginif Length(s) > len then
result := copy(s, 1, len) + '...'
else
result := s
End;
function RunRegisteredTests(exitBehavior :TRunnerExitBehavior = rxbContinue) :TTestResult;
begin
Result := RunTest(registeredTests, [TTextTestListener.Create]);
End;
function RunTest(suite :ITest; exitBehavior :TRunnerExitBehavior = rxbContinue) :TTestResult;
begin
Result := RunTest(suite, [TTextTestListener.Create]);
case exitBehavior of
rxbPause:
try
writeln('Press <RETURN> to continue.');
readln
exceptend;
rxbHaltOnFailures:
with Result dobeginifnot WasSuccessful then
System.Halt(ErrorCount+FailureCount);
end
// else fall through
end;
End;
Pause with a ReadLn before returnng the TestResult.
rxbHaltOnFailures
Halt the program if errors or failures occurred, setting the program exit code to FailureCount+ErrorCount; behave like rxbContinue if all tests suceeded.