diff --git a/tests/UBaseTestCases.pas b/tests/UBaseTestCases.pas index 57c8651..9a5dedf 100644 --- a/tests/UBaseTestCases.pas +++ b/tests/UBaseTestCases.pas @@ -26,32 +26,75 @@ uses type - { TBaseTestCase } + { TSolverTestCase } - TBaseTestCase = class(TTestCase) + TSolverTestCase = class(TTestCase) protected - FEngine: TSolverEngine; FSolver: ISolver; procedure Setup; override; procedure TearDown; override; + function CreateSolver: ISolver; virtual; abstract; + end; + + { TEngineBaseTest } + + TEngineBaseTest = class(TSolverTestCase) + protected + FEngine: TSolverEngine; + procedure Setup; override; + procedure TearDown; override; + function GetDataPath: string; virtual; + end; + + { TExampleEngineBaseTest } + + TExampleEngineBaseTest = class(TEngineBaseTest) + protected + function GetDataPath: string; override; end; implementation -{ TBaseTestCase } +{ TSolverTestCase } -procedure TBaseTestCase.Setup; +procedure TSolverTestCase.Setup; begin inherited Setup; - FEngine := TSolverEngine.Create(ConcatPaths(['..', '..', 'bin', 'data'])); + FSolver := CreateSolver; end; -procedure TBaseTestCase.TearDown; +procedure TSolverTestCase.TearDown; begin FSolver.Free; + inherited TearDown; +end; + +{ TEngineBaseTest } + +procedure TEngineBaseTest.Setup; +begin + inherited Setup; + FEngine := TSolverEngine.Create(GetDataPath); + FEngine.ProcessData(FSolver); +end; + +procedure TEngineBaseTest.TearDown; +begin FEngine.Free; inherited TearDown; end; +function TEngineBaseTest.GetDataPath: string; +begin + Result := ConcatPaths(['..', '..', 'bin', 'data']); +end; + +{ TExampleEngineBaseTest } + +function TExampleEngineBaseTest.GetDataPath: string; +begin + Result := 'example_data'; +end; + end. diff --git a/tests/UGearRatiosTestCases.pas b/tests/UGearRatiosTestCases.pas index 1aa23a9..0323967 100644 --- a/tests/UGearRatiosTestCases.pas +++ b/tests/UGearRatiosTestCases.pas @@ -26,18 +26,11 @@ uses type - { TGearRatiosBaseTestCase } - - TGearRatiosBaseTestCase = class(TBaseTestCase) - protected - procedure Setup; override; - end; - { TGearRatiosFullDataTestCase } - TGearRatiosFullDataTestCase = class(TGearRatiosBaseTestCase) + TGearRatiosFullDataTestCase = class(TEngineBaseTest) protected - procedure Setup; override; + function CreateSolver: ISolver; override; published procedure TestPart1; procedure TestPart2; @@ -45,9 +38,9 @@ type { TGearRatiosExampleTestCase } - TGearRatiosExampleTestCase = class(TGearRatiosBaseTestCase) + TGearRatiosExampleTestCase = class(TExampleEngineBaseTest) protected - procedure Setup; override; + function CreateSolver: ISolver; override; published procedure TestPart1; procedure TestPart2; @@ -55,27 +48,20 @@ type { TGearRatiosTestCase } - TGearRatiosTestCase = class(TGearRatiosBaseTestCase) + TGearRatiosTestCase = class(TSolverTestCase) + protected + function CreateSolver: ISolver; override; published procedure TestEndOfLineNumber; end; implementation -{ TGearRatiosBaseTestCase } - -procedure TGearRatiosBaseTestCase.Setup; -begin - inherited Setup; - FSolver := TGearRatios.Create; -end; - { TGearRatiosFullDataTestCase } -procedure TGearRatiosFullDataTestCase.Setup; +function TGearRatiosFullDataTestCase.CreateSolver: ISolver; begin - inherited Setup; - FEngine.ProcessData(FSolver); + Result := TGearRatios.Create; end; procedure TGearRatiosFullDataTestCase.TestPart1; @@ -90,21 +76,9 @@ end; { TGearRatiosExampleTestCase } -procedure TGearRatiosExampleTestCase.Setup; +function TGearRatiosExampleTestCase.CreateSolver: ISolver; begin - inherited Setup; - FSolver.Init; - FSolver.ProcessDataLine('467..114..'); - FSolver.ProcessDataLine('...*......'); - FSolver.ProcessDataLine('..35..633.'); - FSolver.ProcessDataLine('......#...'); - FSolver.ProcessDataLine('617*......'); - FSolver.ProcessDataLine('.....+.58.'); - FSolver.ProcessDataLine('..592.....'); - FSolver.ProcessDataLine('......755.'); - FSolver.ProcessDataLine('...$.*....'); - FSolver.ProcessDataLine('.664.598..'); - FSolver.Finish; + Result := TGearRatios.Create; end; procedure TGearRatiosExampleTestCase.TestPart1; @@ -119,12 +93,17 @@ end; { TGearRatiosTestCase } +function TGearRatiosTestCase.CreateSolver: ISolver; +begin + Result := TGearRatios.Create; +end; + procedure TGearRatiosTestCase.TestEndOfLineNumber; begin FSolver.Init; FSolver.ProcessDataLine('...$541'); FSolver.Finish; - AssertEquals('Result of part 1 calculation incorrect.', 541, FSolver.GetResultPart1); + AssertEquals(541, FSolver.GetResultPart1); end; initialization diff --git a/tests/UScratchcardsTestCases.pas b/tests/UScratchcardsTestCases.pas index 1377c5e..7afc2e0 100644 --- a/tests/UScratchcardsTestCases.pas +++ b/tests/UScratchcardsTestCases.pas @@ -26,18 +26,11 @@ uses type - { TScratchcardsBaseTestCase } - - TScratchcardsBaseTestCase = class(TBaseTestCase) - protected - procedure Setup; override; - end; - { TScratchcardsFullDataTestCase } - TScratchcardsFullDataTestCase = class(TScratchcardsBaseTestCase) + TScratchcardsFullDataTestCase = class(TEngineBaseTest) protected - procedure Setup; override; + function CreateSolver: ISolver; override; published procedure TestPart1; procedure TestPart2; @@ -45,9 +38,9 @@ type { TScratchcardsExampleTestCase } - TScratchcardsExampleTestCase = class(TScratchcardsBaseTestCase) + TScratchcardsExampleTestCase = class(TExampleEngineBaseTest) protected - procedure Setup; override; + function CreateSolver: ISolver; override; published procedure TestPart1; procedure TestPart2; @@ -55,20 +48,11 @@ type implementation -{ TScratchcardsBaseTestCase } - -procedure TScratchcardsBaseTestCase.Setup; -begin - inherited Setup; - FSolver := TScratchcards.Create; -end; - { TScratchcardsFullDataTestCase } -procedure TScratchcardsFullDataTestCase.Setup; +function TScratchcardsFullDataTestCase.CreateSolver: ISolver; begin - inherited Setup; - FEngine.ProcessData(FSolver); + Result := TScratchcards.Create; end; procedure TScratchcardsFullDataTestCase.TestPart1; @@ -83,17 +67,9 @@ end; { TScratchcardsExampleTestCase } -procedure TScratchcardsExampleTestCase.Setup; +function TScratchcardsExampleTestCase.CreateSolver: ISolver; begin - inherited Setup; - FSolver.Init; - FSolver.ProcessDataLine('Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53'); - FSolver.ProcessDataLine('Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19'); - FSolver.ProcessDataLine('Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1'); - FSolver.ProcessDataLine('Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83'); - FSolver.ProcessDataLine('Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36'); - FSolver.ProcessDataLine('Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11'); - FSolver.Finish; + Result := TScratchcards.Create; end; procedure TScratchcardsExampleTestCase.TestPart1;