diff --git a/bin/verify-exercises b/bin/verify-exercises index 0936da2..bb84785 100755 --- a/bin/verify-exercises +++ b/bin/verify-exercises @@ -27,7 +27,8 @@ for path in build/*; do make -B test=all 2>&1 | sed -e '1{/^TAP version 14$/d}' \ -e '2{/^1\.\.[0-9]\+$/d}' \ - -e '3{/^not ok 0 - Please implement your solution.$/d}' + -e '3{/^not ok 0 - Please implement your solution.$/d}' \ + -e '4{/^make: \*\*\* \[Makefile:[0-9]\+: test\] Error [0-9]\+$/d}' ) if [[ "$path" == 'build/hello-world' ]]; then if ! grep -q '^not ok 1 - SayHi$' <<< "$make_test_stub"; then diff --git a/exercises/practice/acronym/lib/FPCUnitTAPReporter.pas b/exercises/practice/acronym/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/acronym/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/acronym/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/acronym/test.pas b/exercises/practice/acronym/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/acronym/test.pas +++ b/exercises/practice/acronym/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/all-your-base/lib/FPCUnitTAPReporter.pas b/exercises/practice/all-your-base/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/all-your-base/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/all-your-base/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/all-your-base/test.pas b/exercises/practice/all-your-base/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/all-your-base/test.pas +++ b/exercises/practice/all-your-base/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/allergies/lib/FPCUnitTAPReporter.pas b/exercises/practice/allergies/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/allergies/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/allergies/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/allergies/test.pas b/exercises/practice/allergies/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/allergies/test.pas +++ b/exercises/practice/allergies/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/anagram/lib/FPCUnitTAPReporter.pas b/exercises/practice/anagram/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/anagram/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/anagram/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/anagram/test.pas b/exercises/practice/anagram/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/anagram/test.pas +++ b/exercises/practice/anagram/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/armstrong-numbers/lib/FPCUnitTAPReporter.pas b/exercises/practice/armstrong-numbers/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/armstrong-numbers/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/armstrong-numbers/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/armstrong-numbers/test.pas b/exercises/practice/armstrong-numbers/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/armstrong-numbers/test.pas +++ b/exercises/practice/armstrong-numbers/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/atbash-cipher/lib/FPCUnitTAPReporter.pas b/exercises/practice/atbash-cipher/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/atbash-cipher/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/atbash-cipher/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/atbash-cipher/test.pas b/exercises/practice/atbash-cipher/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/atbash-cipher/test.pas +++ b/exercises/practice/atbash-cipher/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/binary-search/lib/FPCUnitTAPReporter.pas b/exercises/practice/binary-search/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/binary-search/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/binary-search/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/binary-search/test.pas b/exercises/practice/binary-search/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/binary-search/test.pas +++ b/exercises/practice/binary-search/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/bob/lib/FPCUnitTAPReporter.pas b/exercises/practice/bob/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/bob/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/bob/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/bob/test.pas b/exercises/practice/bob/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/bob/test.pas +++ b/exercises/practice/bob/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/bottle-song/lib/FPCUnitTAPReporter.pas b/exercises/practice/bottle-song/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/bottle-song/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/bottle-song/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/bottle-song/test.pas b/exercises/practice/bottle-song/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/bottle-song/test.pas +++ b/exercises/practice/bottle-song/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/clock/lib/FPCUnitTAPReporter.pas b/exercises/practice/clock/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/clock/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/clock/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/clock/test.pas b/exercises/practice/clock/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/clock/test.pas +++ b/exercises/practice/clock/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/collatz-conjecture/lib/FPCUnitTAPReporter.pas b/exercises/practice/collatz-conjecture/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/collatz-conjecture/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/collatz-conjecture/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/collatz-conjecture/test.pas b/exercises/practice/collatz-conjecture/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/collatz-conjecture/test.pas +++ b/exercises/practice/collatz-conjecture/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/crypto-square/lib/FPCUnitTAPReporter.pas b/exercises/practice/crypto-square/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/crypto-square/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/crypto-square/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/crypto-square/test.pas b/exercises/practice/crypto-square/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/crypto-square/test.pas +++ b/exercises/practice/crypto-square/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/custom-set/lib/FPCUnitTAPReporter.pas b/exercises/practice/custom-set/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/custom-set/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/custom-set/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/custom-set/test.pas b/exercises/practice/custom-set/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/custom-set/test.pas +++ b/exercises/practice/custom-set/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/darts/lib/FPCUnitTAPReporter.pas b/exercises/practice/darts/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/darts/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/darts/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/darts/test.pas b/exercises/practice/darts/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/darts/test.pas +++ b/exercises/practice/darts/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/diamond/lib/FPCUnitTAPReporter.pas b/exercises/practice/diamond/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/diamond/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/diamond/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/diamond/test.pas b/exercises/practice/diamond/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/diamond/test.pas +++ b/exercises/practice/diamond/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/difference-of-squares/lib/FPCUnitTAPReporter.pas b/exercises/practice/difference-of-squares/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/difference-of-squares/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/difference-of-squares/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/difference-of-squares/test.pas b/exercises/practice/difference-of-squares/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/difference-of-squares/test.pas +++ b/exercises/practice/difference-of-squares/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/dnd-character/lib/FPCUnitTAPReporter.pas b/exercises/practice/dnd-character/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/dnd-character/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/dnd-character/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/dnd-character/test.pas b/exercises/practice/dnd-character/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/dnd-character/test.pas +++ b/exercises/practice/dnd-character/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/eliuds-eggs/lib/FPCUnitTAPReporter.pas b/exercises/practice/eliuds-eggs/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/eliuds-eggs/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/eliuds-eggs/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/eliuds-eggs/test.pas b/exercises/practice/eliuds-eggs/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/eliuds-eggs/test.pas +++ b/exercises/practice/eliuds-eggs/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/etl/lib/FPCUnitTAPReporter.pas b/exercises/practice/etl/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/etl/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/etl/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/etl/test.pas b/exercises/practice/etl/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/etl/test.pas +++ b/exercises/practice/etl/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/flower-field/lib/FPCUnitTAPReporter.pas b/exercises/practice/flower-field/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/flower-field/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/flower-field/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/flower-field/test.pas b/exercises/practice/flower-field/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/flower-field/test.pas +++ b/exercises/practice/flower-field/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/food-chain/lib/FPCUnitTAPReporter.pas b/exercises/practice/food-chain/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/food-chain/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/food-chain/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/food-chain/test.pas b/exercises/practice/food-chain/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/food-chain/test.pas +++ b/exercises/practice/food-chain/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/gigasecond/lib/FPCUnitTAPReporter.pas b/exercises/practice/gigasecond/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/gigasecond/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/gigasecond/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/gigasecond/test.pas b/exercises/practice/gigasecond/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/gigasecond/test.pas +++ b/exercises/practice/gigasecond/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/grains/lib/FPCUnitTAPReporter.pas b/exercises/practice/grains/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/grains/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/grains/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/grains/test.pas b/exercises/practice/grains/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/grains/test.pas +++ b/exercises/practice/grains/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/grep/lib/FPCUnitTAPReporter.pas b/exercises/practice/grep/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/grep/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/grep/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/grep/test.pas b/exercises/practice/grep/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/grep/test.pas +++ b/exercises/practice/grep/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/hamming/lib/FPCUnitTAPReporter.pas b/exercises/practice/hamming/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/hamming/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/hamming/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/hamming/test.pas b/exercises/practice/hamming/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/hamming/test.pas +++ b/exercises/practice/hamming/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/hello-world/lib/FPCUnitTAPReporter.pas b/exercises/practice/hello-world/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/hello-world/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/hello-world/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/hello-world/test.pas b/exercises/practice/hello-world/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/hello-world/test.pas +++ b/exercises/practice/hello-world/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/house/lib/FPCUnitTAPReporter.pas b/exercises/practice/house/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/house/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/house/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/house/test.pas b/exercises/practice/house/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/house/test.pas +++ b/exercises/practice/house/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/isbn-verifier/lib/FPCUnitTAPReporter.pas b/exercises/practice/isbn-verifier/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/isbn-verifier/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/isbn-verifier/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/isbn-verifier/test.pas b/exercises/practice/isbn-verifier/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/isbn-verifier/test.pas +++ b/exercises/practice/isbn-verifier/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/isogram/lib/FPCUnitTAPReporter.pas b/exercises/practice/isogram/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/isogram/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/isogram/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/isogram/test.pas b/exercises/practice/isogram/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/isogram/test.pas +++ b/exercises/practice/isogram/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/largest-series-product/lib/FPCUnitTAPReporter.pas b/exercises/practice/largest-series-product/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/largest-series-product/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/largest-series-product/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/largest-series-product/test.pas b/exercises/practice/largest-series-product/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/largest-series-product/test.pas +++ b/exercises/practice/largest-series-product/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/leap/lib/FPCUnitTAPReporter.pas b/exercises/practice/leap/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/leap/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/leap/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/leap/test.pas b/exercises/practice/leap/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/leap/test.pas +++ b/exercises/practice/leap/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/luhn/lib/FPCUnitTAPReporter.pas b/exercises/practice/luhn/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/luhn/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/luhn/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/luhn/test.pas b/exercises/practice/luhn/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/luhn/test.pas +++ b/exercises/practice/luhn/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/matching-brackets/lib/FPCUnitTAPReporter.pas b/exercises/practice/matching-brackets/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/matching-brackets/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/matching-brackets/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/matching-brackets/test.pas b/exercises/practice/matching-brackets/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/matching-brackets/test.pas +++ b/exercises/practice/matching-brackets/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/meetup/lib/FPCUnitTAPReporter.pas b/exercises/practice/meetup/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/meetup/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/meetup/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/meetup/test.pas b/exercises/practice/meetup/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/meetup/test.pas +++ b/exercises/practice/meetup/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/nucleotide-count/lib/FPCUnitTAPReporter.pas b/exercises/practice/nucleotide-count/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/nucleotide-count/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/nucleotide-count/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/nucleotide-count/test.pas b/exercises/practice/nucleotide-count/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/nucleotide-count/test.pas +++ b/exercises/practice/nucleotide-count/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/pangram/lib/FPCUnitTAPReporter.pas b/exercises/practice/pangram/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/pangram/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/pangram/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/pangram/test.pas b/exercises/practice/pangram/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/pangram/test.pas +++ b/exercises/practice/pangram/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/pascals-triangle/lib/FPCUnitTAPReporter.pas b/exercises/practice/pascals-triangle/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/pascals-triangle/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/pascals-triangle/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/pascals-triangle/test.pas b/exercises/practice/pascals-triangle/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/pascals-triangle/test.pas +++ b/exercises/practice/pascals-triangle/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/perfect-numbers/lib/FPCUnitTAPReporter.pas b/exercises/practice/perfect-numbers/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/perfect-numbers/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/perfect-numbers/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/perfect-numbers/test.pas b/exercises/practice/perfect-numbers/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/perfect-numbers/test.pas +++ b/exercises/practice/perfect-numbers/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/phone-number/lib/FPCUnitTAPReporter.pas b/exercises/practice/phone-number/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/phone-number/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/phone-number/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/phone-number/test.pas b/exercises/practice/phone-number/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/phone-number/test.pas +++ b/exercises/practice/phone-number/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/pig-latin/lib/FPCUnitTAPReporter.pas b/exercises/practice/pig-latin/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/pig-latin/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/pig-latin/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/pig-latin/test.pas b/exercises/practice/pig-latin/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/pig-latin/test.pas +++ b/exercises/practice/pig-latin/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/protein-translation/lib/FPCUnitTAPReporter.pas b/exercises/practice/protein-translation/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/protein-translation/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/protein-translation/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/protein-translation/test.pas b/exercises/practice/protein-translation/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/protein-translation/test.pas +++ b/exercises/practice/protein-translation/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/proverb/lib/FPCUnitTAPReporter.pas b/exercises/practice/proverb/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/proverb/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/proverb/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/proverb/test.pas b/exercises/practice/proverb/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/proverb/test.pas +++ b/exercises/practice/proverb/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/raindrops/lib/FPCUnitTAPReporter.pas b/exercises/practice/raindrops/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/raindrops/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/raindrops/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/raindrops/test.pas b/exercises/practice/raindrops/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/raindrops/test.pas +++ b/exercises/practice/raindrops/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/resistor-color-duo/lib/FPCUnitTAPReporter.pas b/exercises/practice/resistor-color-duo/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/resistor-color-duo/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/resistor-color-duo/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/resistor-color-duo/test.pas b/exercises/practice/resistor-color-duo/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/resistor-color-duo/test.pas +++ b/exercises/practice/resistor-color-duo/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/resistor-color/lib/FPCUnitTAPReporter.pas b/exercises/practice/resistor-color/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/resistor-color/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/resistor-color/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/resistor-color/test.pas b/exercises/practice/resistor-color/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/resistor-color/test.pas +++ b/exercises/practice/resistor-color/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/reverse-string/lib/FPCUnitTAPReporter.pas b/exercises/practice/reverse-string/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/reverse-string/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/reverse-string/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/reverse-string/test.pas b/exercises/practice/reverse-string/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/reverse-string/test.pas +++ b/exercises/practice/reverse-string/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/rna-transcription/lib/FPCUnitTAPReporter.pas b/exercises/practice/rna-transcription/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/rna-transcription/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/rna-transcription/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/rna-transcription/test.pas b/exercises/practice/rna-transcription/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/rna-transcription/test.pas +++ b/exercises/practice/rna-transcription/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/roman-numerals/lib/FPCUnitTAPReporter.pas b/exercises/practice/roman-numerals/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/roman-numerals/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/roman-numerals/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/roman-numerals/test.pas b/exercises/practice/roman-numerals/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/roman-numerals/test.pas +++ b/exercises/practice/roman-numerals/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/run-length-encoding/lib/FPCUnitTAPReporter.pas b/exercises/practice/run-length-encoding/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/run-length-encoding/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/run-length-encoding/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/run-length-encoding/test.pas b/exercises/practice/run-length-encoding/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/run-length-encoding/test.pas +++ b/exercises/practice/run-length-encoding/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/scrabble-score/lib/FPCUnitTAPReporter.pas b/exercises/practice/scrabble-score/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/scrabble-score/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/scrabble-score/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/scrabble-score/test.pas b/exercises/practice/scrabble-score/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/scrabble-score/test.pas +++ b/exercises/practice/scrabble-score/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/secret-handshake/lib/FPCUnitTAPReporter.pas b/exercises/practice/secret-handshake/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/secret-handshake/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/secret-handshake/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/secret-handshake/test.pas b/exercises/practice/secret-handshake/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/secret-handshake/test.pas +++ b/exercises/practice/secret-handshake/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/space-age/lib/FPCUnitTAPReporter.pas b/exercises/practice/space-age/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/space-age/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/space-age/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/space-age/test.pas b/exercises/practice/space-age/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/space-age/test.pas +++ b/exercises/practice/space-age/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/spiral-matrix/lib/FPCUnitTAPReporter.pas b/exercises/practice/spiral-matrix/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/spiral-matrix/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/spiral-matrix/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/spiral-matrix/test.pas b/exercises/practice/spiral-matrix/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/spiral-matrix/test.pas +++ b/exercises/practice/spiral-matrix/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/square-root/lib/FPCUnitTAPReporter.pas b/exercises/practice/square-root/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/square-root/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/square-root/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/square-root/test.pas b/exercises/practice/square-root/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/square-root/test.pas +++ b/exercises/practice/square-root/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/sum-of-multiples/lib/FPCUnitTAPReporter.pas b/exercises/practice/sum-of-multiples/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/sum-of-multiples/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/sum-of-multiples/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/sum-of-multiples/test.pas b/exercises/practice/sum-of-multiples/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/sum-of-multiples/test.pas +++ b/exercises/practice/sum-of-multiples/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/triangle/lib/FPCUnitTAPReporter.pas b/exercises/practice/triangle/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/triangle/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/triangle/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/triangle/test.pas b/exercises/practice/triangle/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/triangle/test.pas +++ b/exercises/practice/triangle/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/exercises/practice/two-fer/lib/FPCUnitTAPReporter.pas b/exercises/practice/two-fer/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/exercises/practice/two-fer/lib/FPCUnitTAPReporter.pas +++ b/exercises/practice/two-fer/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/exercises/practice/two-fer/test.pas b/exercises/practice/two-fer/test.pas index b9615b6..6be4242 100644 --- a/exercises/practice/two-fer/test.pas +++ b/exercises/practice/two-fer/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end. diff --git a/shared/lib/FPCUnitTAPReporter.pas b/shared/lib/FPCUnitTAPReporter.pas index 19d40bf..01b53e4 100644 --- a/shared/lib/FPCUnitTAPReporter.pas +++ b/shared/lib/FPCUnitTAPReporter.pas @@ -9,9 +9,10 @@ interface type TCustomResultWriter = class(TNoRefCountObject, ITestListener) private - FTestCasesCount : integer; - FTestCount : integer; - FTestPassed : boolean; + FTestCasesCount : integer; + FTestCount : integer; + FTestPassed : boolean; + FTestFailuresCount : integer; public constructor Create; destructor Destroy; override; @@ -21,17 +22,19 @@ TCustomResultWriter = class(TNoRefCountObject, ITestListener) procedure EndTest(ATest: TTest); procedure StartTestSuite(ATestSuite: TTestSuite); procedure EndTestSuite(ATestSuite: TTestSuite); + function HasFailures : boolean; end; implementation uses TestRegistry, SysUtils, FpJson, JSONParser, StrUtils, TypInfo; -constructor TCustomResultWriter.Create ; +constructor TCustomResultWriter.Create; begin - FTestCasesCount := GetTestRegistry.CountTestCases; - FTestCount := 0; - FTestPassed := true; + FTestCasesCount := GetTestRegistry.CountTestCases; + FTestCount := 0; + FTestPassed := true; + FTestFailuresCount := 0; writeln('TAP version 14'); writeln(format('1..%d', [FTestCasesCount])); @@ -46,9 +49,9 @@ procedure TCustomResultWriter.AddFailure(ATest: TTest; AFailure: TTestFailure); JData : TJSONData; LMessage, LGot, LExpect : string; begin - - FTestPassed := false; inc(FTestCount); + inc(FTestFailuresCount); + FTestPassed := false; try try @@ -121,12 +124,13 @@ procedure PrintDumpExceptionBackTrace; procedure TCustomResultWriter.AddError(ATest: TTest; AError: TTestFailure); begin inc(FTestCount); + inc(FTestFailuresCount); FTestPassed := false; if (AError.ExceptionClassName = 'ENotImplemented') and (AError.ExceptionMessage = 'Please implement your solution.') then begin writeln(format('not ok %d - %s', [0, AError.ExceptionMessage])); - halt; + halt(1); end; writeln(format('not ok %d - %s', [FTestCount, ATest.TestName])); @@ -169,4 +173,9 @@ procedure TCustomResultWriter.EndTestSuite(ATestSuite: TTestSuite); end; {$HINTS ON} +function TCustomResultWriter.HasFailures : boolean; +begin + result := FTestFailuresCount > 0; +end; + end. diff --git a/shared/test.pas b/shared/test.pas index b9615b6..6be4242 100644 --- a/shared/test.pas +++ b/shared/test.pas @@ -10,6 +10,7 @@ TestResult : TTestResult; RunAll : boolean; TestNumber : integer = 0; + HasFail : boolean; i : integer; begin @@ -71,9 +72,12 @@ try TestResult.AddListener(FResultWriter); GetTestRegistry.Run(TestResult); + HasFail := FResultWriter.HasFailures; finally FResultWriter.Free; TestResult.Free; + + if HasFail then halt(1); end; end.