From 6777054cd789cbe68d6ee3059782dc645299e4cd Mon Sep 17 00:00:00 2001 From: Aydin Hassan Date: Sun, 24 Jan 2016 20:05:02 +0000 Subject: [PATCH] Refactor Result Renderering process --- app/config.php | 21 ++---- src/Application.php | 18 ------ src/Factory/ResultRendererFactory.php | 64 +++++++++++++++++++ src/ResultRenderer/CgiOutResultRenderer.php | 22 +++++-- src/ResultRenderer/FailureRenderer.php | 21 ++++-- .../FunctionRequirementsFailureRenderer.php | 24 ++++--- src/ResultRenderer/OutputFailureRenderer.php | 25 +++++--- .../ResultRendererInterface.php | 3 +- src/ResultRenderer/ResultsRenderer.php | 51 +++++---------- src/ResultRenderer/SuccessRenderer.php | 28 -------- .../AbstractResultRendererTest.php | 10 ++- .../CgiOutResultRendererTest.php | 40 ++++-------- test/ResultRenderer/FailureRendererTest.php | 15 +---- ...unctionRequirementsFailureRendererTest.php | 15 +---- .../OutputFailureRendererTest.php | 15 +---- test/ResultRenderer/ResultsRendererTest.php | 20 +++--- test/ResultRenderer/SuccessRendererTest.php | 36 ----------- 17 files changed, 180 insertions(+), 248 deletions(-) create mode 100644 src/Factory/ResultRendererFactory.php delete mode 100644 src/ResultRenderer/SuccessRenderer.php delete mode 100644 test/ResultRenderer/SuccessRendererTest.php diff --git a/app/config.php b/app/config.php index b2d68fe6..743e5a75 100644 --- a/app/config.php +++ b/app/config.php @@ -22,6 +22,7 @@ use PhpSchool\PhpWorkshop\ExerciseDispatcher; use PhpSchool\PhpWorkshop\Factory\EventDispatcherFactory; use PhpSchool\PhpWorkshop\Factory\MenuFactory; +use PhpSchool\PhpWorkshop\Factory\ResultRendererFactory; use PhpSchool\PhpWorkshop\Factory\RunnerFactory; use PhpSchool\PhpWorkshop\Listener\CodePatchListener; use PhpSchool\PhpWorkshop\Listener\PrepareSolutionListener; @@ -242,28 +243,16 @@ $c->get(OutputInterface::class) ); }), + ResultRendererFactory::class => object(), ResultsRenderer::class => factory(function (ContainerInterface $c) { - $renderer = new ResultsRenderer( + return new ResultsRenderer( $c->get('appName'), $c->get(Color::class), $c->get(TerminalInterface::class), $c->get(ExerciseRepository::class), - $c->get(SyntaxHighlighter::class) + $c->get(SyntaxHighlighter::class), + $c->get(ResultRendererFactory::class) ); - - foreach ($c->get('renderers') as $resultRenderer) { - $renderer->registerRenderer(...$resultRenderer); - } - return $renderer; - }), - 'renderers' => factory(function (ContainerInterface $c) { - return [ - [StdOutFailure::class, new OutputFailureRenderer], - [CgiOutResult::class, new CgiOutResultRenderer], - [FunctionRequirementsFailure::class, new FunctionRequirementsFailureRenderer], - [Success::class, new SuccessRenderer], - [Failure::class, new FailureRenderer], - ]; }), 'coreContributors' => [ '@AydinHassan' => 'Aydin Hassan', diff --git a/src/Application.php b/src/Application.php index 66afe36f..51c19536 100644 --- a/src/Application.php +++ b/src/Application.php @@ -33,11 +33,6 @@ final class Application */ private $exercises = []; - /** - * @var array - */ - private $renderers = []; - /** * @var string */ @@ -86,16 +81,6 @@ public function addExercise($exercise) $this->exercises[] = $exercise; } - /** - * @param ResultRendererInterface $renderer - * @param string $resultClass - */ - public function addRenderer(ResultRendererInterface $renderer, $resultClass) - { - //TODO Use reflection to check that $resultClass exists and implements ResultInterface - $this->renderers[] = [$renderer, $resultClass]; - } - /** * @param string $logo */ @@ -154,9 +139,6 @@ public function run() ); } } - - $renderers = $container->get('renderers'); - $container->set('renderers', array_merge($renderers, $this->renderers)); $checkRepository = $container->get(CheckRepository::class); array_walk($this->checks, function (CheckInterface $check) use ($checkRepository) { diff --git a/src/Factory/ResultRendererFactory.php b/src/Factory/ResultRendererFactory.php new file mode 100644 index 00000000..4ff99896 --- /dev/null +++ b/src/Factory/ResultRendererFactory.php @@ -0,0 +1,64 @@ + + */ +class ResultRendererFactory +{ + /** + * @var array + */ + private $mappings = [ + StdOutFailure::class => OutputFailureRenderer::class, + CgiOutResult::class => CgiOutResultRenderer::class, + FunctionRequirementsFailure::class => FunctionRequirementsFailureRenderer::class, + Failure::class => FailureRenderer::class, + ]; + + /** + * @param string $resultClass + * @param string $rendererClass + */ + public function registerRenderer($resultClass, $rendererClass) + { + if (!class_implements($resultClass, ResultInterface::class)) { + throw new InvalidArgumentException; + } + + if (!class_implements($rendererClass, ResultRendererInterface::class)) { + throw new InvalidArgumentException; + } + + $this->mappings[$resultClass] = $rendererClass; + } + + /** + * @param ResultInterface $result + * @return ResultRendererInterface + */ + public function create(ResultInterface $result) + { + $class = get_class($result); + if (!isset($this->mappings[$class])) { + throw new \RuntimeException(sprintf('No renderer found for "%s"', $class)); + } + + return new $this->mappings[$class]($result); + } +} diff --git a/src/ResultRenderer/CgiOutResultRenderer.php b/src/ResultRenderer/CgiOutResultRenderer.php index 96040158..db21a270 100644 --- a/src/ResultRenderer/CgiOutResultRenderer.php +++ b/src/ResultRenderer/CgiOutResultRenderer.php @@ -16,17 +16,25 @@ class CgiOutResultRenderer implements ResultRendererInterface { /** - * @param ResultInterface $result + * @var CgiOutResult + */ + private $result; + + /** + * @param CgiOutResult $result + */ + public function __construct(CgiOutResult $result) + { + $this->result = $result; + } + + /** * @param ResultsRenderer $renderer * @return string */ - public function render(ResultInterface $result, ResultsRenderer $renderer) + public function render(ResultsRenderer $renderer) { - if (!$result instanceof CgiOutResult) { - throw new \InvalidArgumentException(sprintf('Incompatible result type: %s', get_class($result))); - } - - $results = array_filter($result->getIterator()->getArrayCopy(), function (ResultInterface $result) { + $results = array_filter($this->result->getIterator()->getArrayCopy(), function (ResultInterface $result) { return $result instanceof FailureInterface; }); diff --git a/src/ResultRenderer/FailureRenderer.php b/src/ResultRenderer/FailureRenderer.php index d070078c..5c4cdac2 100644 --- a/src/ResultRenderer/FailureRenderer.php +++ b/src/ResultRenderer/FailureRenderer.php @@ -11,18 +11,25 @@ */ class FailureRenderer implements ResultRendererInterface { + /** + * @var Failure + */ + private $result; + + /** + * @param Failure $result + */ + public function __construct(Failure $result) + { + $this->result = $result; + } /** - * @param ResultInterface $result * @param ResultsRenderer $renderer * @return string */ - public function render(ResultInterface $result, ResultsRenderer $renderer) + public function render(ResultsRenderer $renderer) { - if (!$result instanceof Failure) { - throw new \InvalidArgumentException(sprintf('Incompatible result type: %s', get_class($result))); - } - - return ' ' . $result->getReason() . "\n"; + return ' ' . $this->result->getReason() . "\n"; } } diff --git a/src/ResultRenderer/FunctionRequirementsFailureRenderer.php b/src/ResultRenderer/FunctionRequirementsFailureRenderer.php index be825a73..b141fdd4 100644 --- a/src/ResultRenderer/FunctionRequirementsFailureRenderer.php +++ b/src/ResultRenderer/FunctionRequirementsFailureRenderer.php @@ -3,7 +3,6 @@ namespace PhpSchool\PhpWorkshop\ResultRenderer; use PhpSchool\PhpWorkshop\Result\FunctionRequirementsFailure; -use PhpSchool\PhpWorkshop\Result\ResultInterface; /** * Class FunctionRequirementsFailureRenderer @@ -12,20 +11,27 @@ */ class FunctionRequirementsFailureRenderer implements ResultRendererInterface { + /** + * @var FunctionRequirementsFailure + */ + private $result; + + /** + * @param FunctionRequirementsFailure $result + */ + public function __construct(FunctionRequirementsFailure $result) + { + $this->result = $result; + } /** - * @param ResultInterface $result * @param ResultsRenderer $renderer * @return string */ - public function render(ResultInterface $result, ResultsRenderer $renderer) + public function render(ResultsRenderer $renderer) { - if (!$result instanceof FunctionRequirementsFailure) { - throw new \InvalidArgumentException(sprintf('Incompatible result type: %s', get_class($result))); - } - $output = ''; - if (count($bannedFunctions = $result->getBannedFunctions())) { + if (count($bannedFunctions = $this->result->getBannedFunctions())) { $output .= sprintf( " %s\n%s\n", $renderer->style( @@ -38,7 +44,7 @@ public function render(ResultInterface $result, ResultsRenderer $renderer) ); } - if (count($missingFunctions = $result->getMissingFunctions())) { + if (count($missingFunctions = $this->result->getMissingFunctions())) { $output .= sprintf( " %s\n%s\n", $renderer->style( diff --git a/src/ResultRenderer/OutputFailureRenderer.php b/src/ResultRenderer/OutputFailureRenderer.php index 0e28bced..db2c08a3 100644 --- a/src/ResultRenderer/OutputFailureRenderer.php +++ b/src/ResultRenderer/OutputFailureRenderer.php @@ -3,7 +3,6 @@ namespace PhpSchool\PhpWorkshop\ResultRenderer; use PhpSchool\PhpWorkshop\Result\CgiOutBodyFailure; -use PhpSchool\PhpWorkshop\Result\ResultInterface; use PhpSchool\PhpWorkshop\Result\StdOutFailure; /** @@ -14,22 +13,30 @@ class OutputFailureRenderer implements ResultRendererInterface { /** - * @param ResultInterface $result + * @var StdOutFailure + */ + private $result; + + /** + * @param StdOutFailure $result + */ + public function __construct(StdOutFailure $result) + { + $this->result = $result; + } + + /** * @param ResultsRenderer $renderer * @return string */ - public function render(ResultInterface $result, ResultsRenderer $renderer) + public function render(ResultsRenderer $renderer) { - if (!$result instanceof StdOutFailure) { - throw new \InvalidArgumentException(sprintf('Incompatible result type: %s', get_class($result))); - } - return sprintf( " %s\n%s\n\n %s\n%s\n", $renderer->style("ACTUAL", ['bold', 'underline', 'yellow']), - $this->indent($renderer->style(sprintf('"%s"', $result->getActualOutput()), 'red')), + $this->indent($renderer->style(sprintf('"%s"', $this->result->getActualOutput()), 'red')), $renderer->style("EXPECTED", ['yellow', 'bold', 'underline']), - $this->indent($renderer->style(sprintf('"%s"', $result->getExpectedOutput()), 'red')) + $this->indent($renderer->style(sprintf('"%s"', $this->result->getExpectedOutput()), 'red')) ); } diff --git a/src/ResultRenderer/ResultRendererInterface.php b/src/ResultRenderer/ResultRendererInterface.php index ddb61f65..68bfb841 100644 --- a/src/ResultRenderer/ResultRendererInterface.php +++ b/src/ResultRenderer/ResultRendererInterface.php @@ -12,9 +12,8 @@ interface ResultRendererInterface { /** - * @param ResultInterface $result * @param ResultsRenderer $renderer * @return string */ - public function render(ResultInterface $result, ResultsRenderer $renderer); + public function render(ResultsRenderer $renderer); } diff --git a/src/ResultRenderer/ResultsRenderer.php b/src/ResultRenderer/ResultsRenderer.php index 5edb5e97..0cff1675 100644 --- a/src/ResultRenderer/ResultsRenderer.php +++ b/src/ResultRenderer/ResultsRenderer.php @@ -4,6 +4,7 @@ use Colors\Color; use PhpSchool\CliMenu\Terminal\TerminalInterface; +use PhpSchool\PhpWorkshop\Factory\ResultRendererFactory; use PhpSchool\PhpWorkshop\Output\OutputInterface; use PhpSchool\PhpWorkshop\Result\SuccessInterface; use PhpSchool\PSX\SyntaxHighlighter; @@ -38,17 +39,17 @@ class ResultsRenderer * @var TerminalInterface */ private $terminal; - - /** - * @var ResultRendererInterface[] - */ - private $renderers = []; /** * @var SyntaxHighlighter */ private $syntaxHighlighter; + /** + * @var ResultRendererFactory + */ + private $resultRendererFactory; + /** * @param $appName * @param Color $color @@ -61,22 +62,15 @@ public function __construct( Color $color, TerminalInterface $terminal, ExerciseRepository $exerciseRepository, - SyntaxHighlighter $syntaxHighlighter + SyntaxHighlighter $syntaxHighlighter, + ResultRendererFactory $resultRendererFactory ) { - $this->color = $color; - $this->terminal = $terminal; - $this->exerciseRepository = $exerciseRepository; - $this->syntaxHighlighter = $syntaxHighlighter; - $this->appName = $appName; - } - - /** - * @param $resultClass - * @param ResultRendererInterface $renderer - */ - public function registerRenderer($resultClass, ResultRendererInterface $renderer) - { - $this->renderers[$resultClass] = $renderer; + $this->color = $color; + $this->terminal = $terminal; + $this->exerciseRepository = $exerciseRepository; + $this->syntaxHighlighter = $syntaxHighlighter; + $this->appName = $appName; + $this->resultRendererFactory = $resultRendererFactory; } /** @@ -234,7 +228,7 @@ public function style($string, $colourOrStyle) */ public function renderResult(ResultInterface $result) { - return $this->getRenderer($result)->render($result, $this); + return $this->resultRendererFactory->create($result)->render($this); } /** @@ -244,19 +238,4 @@ public function lineBreak() { return $this->style(str_repeat("─", $this->terminal->getWidth()), 'yellow'); } - - /** - * @param ResultInterface $result - * @return ResultRendererInterface - */ - private function getRenderer(ResultInterface $result) - { - $class = get_class($result); - - if (!isset($this->renderers[$class])) { - throw new \RuntimeException(sprintf('No renderer found for "%s"', $class)); - } - - return $this->renderers[$class]; - } } diff --git a/src/ResultRenderer/SuccessRenderer.php b/src/ResultRenderer/SuccessRenderer.php deleted file mode 100644 index 0ac6521a..00000000 --- a/src/ResultRenderer/SuccessRenderer.php +++ /dev/null @@ -1,28 +0,0 @@ -will($this->returnValue(20)); $syntaxHighlighter = (new Factory)->__invoke(); - return new ResultsRenderer('appName', $color, $this->terminal, $exerciseRepo, $syntaxHighlighter); + return new ResultsRenderer( + 'appName', + $color, + $this->terminal, + $exerciseRepo, + $syntaxHighlighter, + new ResultRendererFactory + ); } } diff --git a/test/ResultRenderer/CgiOutResultRendererTest.php b/test/ResultRenderer/CgiOutResultRendererTest.php index e3d070eb..6ddb47b5 100644 --- a/test/ResultRenderer/CgiOutResultRendererTest.php +++ b/test/ResultRenderer/CgiOutResultRendererTest.php @@ -22,20 +22,8 @@ */ class CgiOutResultRendererTest extends AbstractResultRendererTest { - public function testRendererThrowsExceptionIfNotCorrectResult() - { - $mock = $this->getMock(ResultInterface::class); - $this->setExpectedException( - InvalidArgumentException::class, - sprintf('Incompatible result type: %s', get_class($mock)) - ); - $renderer = new CgiOutResultRenderer; - $renderer->render($mock, $this->getRenderer()); - } - public function testRenderWhenOnlyHeadersDifferent() { - $check = $this->getMock(CheckInterface::class); $failure = new CgiOutRequestFailure( $this->getMock(RequestInterface::class), 'OUTPUT', @@ -44,7 +32,7 @@ public function testRenderWhenOnlyHeadersDifferent() ['header1' => 'val'] ); $result = new CgiOutResult('Some Check', [$failure]); - $renderer = new CgiOutResultRenderer; + $renderer = new CgiOutResultRenderer($result); $expected = "\n"; $expected .= "\e[32m\e[4m\e[1mRequest 01\n\n"; @@ -53,7 +41,7 @@ public function testRenderWhenOnlyHeadersDifferent() $expected .= " \e[39mheader2: val\e[0m\n\n"; $expected .= "\e[33m────────────────────\e[0m\n"; - $this->assertSame($expected, $renderer->render($result, $this->getRenderer())); + $this->assertSame($expected, $renderer->render($this->getRenderer())); } public function testRenderWhenOnlyOutputDifferent() @@ -66,7 +54,7 @@ public function testRenderWhenOnlyOutputDifferent() ['header1' => 'val'] ); $result = new CgiOutResult('Some Check', [$failure]); - $renderer = new CgiOutResultRenderer; + $renderer = new CgiOutResultRenderer($result); $expected = "\n"; $expected .= "\e[32m\e[4m\e[1mRequest 01\n\n"; @@ -74,7 +62,7 @@ public function testRenderWhenOnlyOutputDifferent() $expected .= " \e[33m\e[1mEXPECTED CONTENT:\e[0m\e[0m \e[39m\"EXPECTED OUTPUT\"\e[0m\n"; $expected .= "\e[33m────────────────────\e[0m\n"; - $this->assertSame($expected, $renderer->render($result, $this->getRenderer())); + $this->assertSame($expected, $renderer->render($this->getRenderer())); } public function testRenderWhenOutputAndHeadersDifferent() @@ -87,7 +75,7 @@ public function testRenderWhenOutputAndHeadersDifferent() ['header1' => 'val'] ); $result = new CgiOutResult('Some Check', [$failure]); - $renderer = new CgiOutResultRenderer; + $renderer = new CgiOutResultRenderer($result); $expected = "\n"; $expected .= "\e[32m\e[4m\e[1mRequest 01\n\n"; @@ -99,7 +87,7 @@ public function testRenderWhenOutputAndHeadersDifferent() $expected .= " \e[33m\e[1mEXPECTED CONTENT:\e[0m\e[0m \e[39m\"EXPECTED OUTPUT\"\e[0m\n"; $expected .= "\e[33m────────────────────\e[0m\n"; - $this->assertSame($expected, $renderer->render($result, $this->getRenderer())); + $this->assertSame($expected, $renderer->render($this->getRenderer())); } public function testNothingIsRenderedForSuccess() @@ -112,7 +100,7 @@ public function testNothingIsRenderedForSuccess() ['header1' => 'val'] ); $result = new CgiOutResult('Some Check', [$failure, new Success('Successful')]); - $renderer = new CgiOutResultRenderer; + $renderer = new CgiOutResultRenderer($result); $expected = "\n"; $expected .= "\e[32m\e[4m\e[1mRequest 01\n\n"; @@ -124,7 +112,7 @@ public function testNothingIsRenderedForSuccess() $expected .= " \e[33m\e[1mEXPECTED CONTENT:\e[0m\e[0m \e[39m\"EXPECTED OUTPUT\"\e[0m\n"; $expected .= "\e[33m────────────────────\e[0m\n"; - $this->assertSame($expected, $renderer->render($result, $this->getRenderer())); + $this->assertSame($expected, $renderer->render($this->getRenderer())); } public function testMultipleFailedRequests() @@ -145,7 +133,7 @@ public function testMultipleFailedRequests() ['header1' => 'val'] ); $result = new CgiOutResult('Some Check', [$failure1, $failure2]); - $renderer = new CgiOutResultRenderer; + $renderer = new CgiOutResultRenderer($result); $expected = "\n"; $expected .= "\e[32m\e[4m\e[1mRequest 01\n\n"; @@ -165,12 +153,11 @@ public function testMultipleFailedRequests() $expected .= " \e[33m\e[1mEXPECTED CONTENT:\e[0m\e[0m \e[39m\"EXPECTED OUTPUT 2\"\e[0m\n"; $expected .= "\e[33m────────────────────\e[0m\n"; - $this->assertSame($expected, $renderer->render($result, $this->getRenderer())); + $this->assertSame($expected, $renderer->render($this->getRenderer())); } public function testCodeExecutionFailureIsDelegatedToMainRenderer() { - $check = $this->getMock(CheckInterface::class); $failure = new CgiOutRequestFailure( $this->getMock(RequestInterface::class), 'EXPECTED OUTPUT', @@ -181,7 +168,7 @@ public function testCodeExecutionFailureIsDelegatedToMainRenderer() $codeExecutionFailure = new Failure('Test Check', 'Code Execution Failure'); $result = new CgiOutResult('Some Check', [$failure, $codeExecutionFailure]); - $renderer = new CgiOutResultRenderer; + $renderer = new CgiOutResultRenderer($result); $expected = "\n"; $expected .= "\e[32m\e[4m\e[1mRequest 01\n\n"; @@ -196,9 +183,6 @@ public function testCodeExecutionFailureIsDelegatedToMainRenderer() $expected .= "\e[0m\e[0m\e[0m Code Execution Failure\n"; $expected .= "\e[33m────────────────────\e[0m\n"; - $mainRenderer = $this->getRenderer(); - $mainRenderer->registerRenderer(Failure::class, new FailureRenderer); - - $this->assertSame($expected, $renderer->render($result, $mainRenderer)); + $this->assertSame($expected, $renderer->render($this->getRenderer())); } } diff --git a/test/ResultRenderer/FailureRendererTest.php b/test/ResultRenderer/FailureRendererTest.php index fbd43ad7..35a7e665 100644 --- a/test/ResultRenderer/FailureRendererTest.php +++ b/test/ResultRenderer/FailureRendererTest.php @@ -16,21 +16,10 @@ */ class FailureRendererTest extends AbstractResultRendererTest { - public function testRendererThrowsExceptionIfNotCorrectResult() - { - $mock = $this->getMock(ResultInterface::class); - $this->setExpectedException( - InvalidArgumentException::class, - sprintf('Incompatible result type: %s', get_class($mock)) - ); - $renderer = new FailureRenderer(); - $renderer->render($mock, $this->getRenderer()); - } - public function testRender() { $failure = new Failure($this->getMock(CheckInterface::class), 'Something went wrong'); - $renderer = new FailureRenderer(new Color); - $this->assertEquals(" Something went wrong\n", $renderer->render($failure, $this->getRenderer())); + $renderer = new FailureRenderer($failure); + $this->assertEquals(" Something went wrong\n", $renderer->render($this->getRenderer())); } } diff --git a/test/ResultRenderer/FunctionRequirementsFailureRendererTest.php b/test/ResultRenderer/FunctionRequirementsFailureRendererTest.php index 657ce1b1..77ae210f 100644 --- a/test/ResultRenderer/FunctionRequirementsFailureRendererTest.php +++ b/test/ResultRenderer/FunctionRequirementsFailureRendererTest.php @@ -14,17 +14,6 @@ */ class FunctionRequirementsFailureRendererTest extends AbstractResultRendererTest { - public function testRendererThrowsExceptionIfNotCorrectResult() - { - $mock = $this->getMock(ResultInterface::class); - $this->setExpectedException( - InvalidArgumentException::class, - sprintf('Incompatible result type: %s', get_class($mock)) - ); - $renderer = new FunctionRequirementsFailureRenderer; - $renderer->render($mock, $this->getRenderer()); - } - public function testRenderer() { $failure = new FunctionRequirementsFailure( @@ -32,7 +21,7 @@ public function testRenderer() [['function' => 'file', 'line' => 3], ['function' => 'explode', 'line' => 5]], ['implode'] ); - $renderer = new FunctionRequirementsFailureRenderer; + $renderer = new FunctionRequirementsFailureRenderer($failure); $expected = " Some functions were used which should not be used in this exercise\n"; $expected .= " file on line 3\n"; @@ -42,6 +31,6 @@ public function testRenderer() $expected .= "\n"; $expected .= " implode\n"; - $this->assertEquals($expected, $renderer->render($failure, $this->getRenderer())); + $this->assertEquals($expected, $renderer->render($this->getRenderer())); } } diff --git a/test/ResultRenderer/OutputFailureRendererTest.php b/test/ResultRenderer/OutputFailureRendererTest.php index 3120133a..43fa4548 100644 --- a/test/ResultRenderer/OutputFailureRendererTest.php +++ b/test/ResultRenderer/OutputFailureRendererTest.php @@ -15,27 +15,16 @@ */ class OutputFailureRendererTest extends AbstractResultRendererTest { - public function testRendererThrowsExceptionIfNotCorrectResult() - { - $mock = $this->getMock(ResultInterface::class); - $this->setExpectedException( - InvalidArgumentException::class, - sprintf('Incompatible result type: %s', get_class($mock)) - ); - $renderer = new OutputFailureRenderer; - $renderer->render($mock, $this->getRenderer()); - } - public function testRender() { $failure = new StdOutFailure($this->getMock(CheckInterface::class), 'EXPECTED OUTPUT', 'ACTUAL OUTPUT'); - $renderer = new OutputFailureRenderer; + $renderer = new OutputFailureRenderer($failure); $expected = " ACTUAL\n"; $expected .= " \"ACTUAL OUTPUT\"\n\n"; $expected .= " EXPECTED\n"; $expected .= " \"EXPECTED OUTPUT\"\n"; - $this->assertEquals($expected, $renderer->render($failure, $this->getRenderer())); + $this->assertEquals($expected, $renderer->render($this->getRenderer())); } } diff --git a/test/ResultRenderer/ResultsRendererTest.php b/test/ResultRenderer/ResultsRendererTest.php index 4e0658be..05447ff6 100644 --- a/test/ResultRenderer/ResultsRendererTest.php +++ b/test/ResultRenderer/ResultsRendererTest.php @@ -5,6 +5,8 @@ use Colors\Color; use PhpSchool\CliMenu\Terminal\TerminalInterface; use PhpSchool\PhpWorkshop\ExerciseRepository; +use PhpSchool\PhpWorkshop\Factory\ResultRendererFactory; +use PhpSchool\PhpWorkshop\Result\Failure; use PhpSchool\PhpWorkshop\Result\ResultInterface; use PhpSchool\PhpWorkshop\ResultRenderer\ResultRendererInterface; use PhpSchool\PhpWorkshop\ResultRenderer\ResultsRenderer; @@ -29,19 +31,12 @@ public function testRenderIndividualResult() $color, $this->getMock(TerminalInterface::class), new ExerciseRepository([]), - (new Factory)->__invoke() + (new Factory)->__invoke(), + new ResultRendererFactory ); - $result = $this->getMock(ResultInterface::class); - $resultRenderer = $this->getMock(ResultRendererInterface::class); - - $resultRenderer->expects($this->once()) - ->method('render') - ->with($result, $renderer) - ->will($this->returnValue('Rendered Result')); - - $renderer->registerRenderer(get_class($result), $resultRenderer); - $this->assertSame('Rendered Result', $renderer->renderResult($result)); + $result = new Failure('Failure', 'Some Failure'); + $this->assertSame(" Some Failure\n", $renderer->renderResult($result)); } public function testLineBreak() @@ -60,7 +55,8 @@ public function testLineBreak() $color, $terminal, new ExerciseRepository([]), - (new Factory)->__invoke() + (new Factory)->__invoke(), + new ResultRendererFactory ); $this->assertSame("\e[33m──────────\e[0m", $renderer->lineBreak()); diff --git a/test/ResultRenderer/SuccessRendererTest.php b/test/ResultRenderer/SuccessRendererTest.php deleted file mode 100644 index eb23fefc..00000000 --- a/test/ResultRenderer/SuccessRendererTest.php +++ /dev/null @@ -1,36 +0,0 @@ - - */ -class SuccessRendererTest extends AbstractResultRendererTest -{ - public function testRendererThrowsExceptionIfNotCorrectResult() - { - $mock = $this->getMock(ResultInterface::class); - $this->setExpectedException( - InvalidArgumentException::class, - sprintf('Incompatible result type: %s', get_class($mock)) - ); - $renderer = new SuccessRenderer(new Color); - $renderer->render($mock, $this->getRenderer()); - } - - public function testRender() - { - $success = new Success($this->getMock(CheckInterface::class)); - $renderer = new SuccessRenderer(new Color); - $this->assertEquals('', $renderer->render($success, $this->getRenderer())); - } -}