Skip to content

Commit 65ba8a5

Browse files
authored
Merge pull request #126 from TheoKouzelis/master
Add tests for ResultRendererFactory class
2 parents 6fa4db4 + bc185c3 commit 65ba8a5

File tree

4 files changed

+98
-4
lines changed

4 files changed

+98
-4
lines changed

src/Factory/ResultRendererFactory.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ class ResultRendererFactory
3737
*/
3838
public function registerRenderer($resultClass, $rendererClass)
3939
{
40-
if (!class_implements($resultClass, ResultInterface::class)) {
40+
if (!$this->isImplementationNameOfClass($resultClass, ResultInterface::class)) {
4141
throw new InvalidArgumentException;
4242
}
4343

44-
if (!class_implements($rendererClass, ResultRendererInterface::class)) {
44+
if (!$this->isImplementationNameOfClass($rendererClass, ResultRendererInterface::class)) {
4545
throw new InvalidArgumentException;
4646
}
4747

@@ -61,4 +61,9 @@ public function create(ResultInterface $result)
6161

6262
return new $this->mappings[$class]($result);
6363
}
64+
65+
protected function isImplementationNameOfClass($implementationName, $className)
66+
{
67+
return is_string($implementationName) && is_subclass_of($implementationName, $className);
68+
}
6469
}

test/Asset/PatchableExercise.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function getProblem()
5454
*/
5555
public function tearDown()
5656
{
57-
57+
// TODO: Implement tearDown() method.
5858
}
5959

6060
/**

test/Check/ComposerCheckTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ public function setUp()
4040

4141
$this->assertTrue($this->check->canRun(ExerciseType::CGI()));
4242
$this->assertTrue($this->check->canRun(ExerciseType::CLI()));
43-
4443
}
4544

4645
public function testExceptionIsThrownIfNotValidExercise()
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
3+
namespace PhpSchool\PhpWorkshopTest\Factory;
4+
5+
use PhpSchool\PhpWorkshop\Exception\InvalidArgumentException;
6+
use PhpSchool\PhpWorkshop\Factory\ResultRendererFactory;
7+
use PhpSchool\PhpWorkshop\ResultRenderer\ResultRendererInterface;
8+
use PhpSchool\PhpWorkshop\Result\ResultInterface;
9+
use PHPUnit_Framework_TestCase;
10+
use RuntimeException;
11+
12+
/**
13+
* Class ResultsRendererFactoryTest
14+
* @package PhpSchool\PhpWorkshopTest\Factory
15+
* @author Aydin Hassan <[email protected]>
16+
*/
17+
class ResultsRendererFactoryTest extends PHPUnit_Framework_TestCase
18+
{
19+
/**
20+
* @expectedException InvalidArgumentException
21+
*/
22+
public function testRegisterRendererRequiresResultInterface()
23+
{
24+
$resultClass = get_class($this->createMock(PHPUnit_Framework_TestCase::class));
25+
$rendererClass = get_class($this->createMock(ResultRendererInterface::class));
26+
$factory = new ResultRendererFactory();
27+
28+
$factory->registerRenderer($resultClass, $rendererClass);
29+
}
30+
31+
/**
32+
* @expectedException InvalidArgumentException
33+
*/
34+
public function testRegisterRendererRequiresResultRendererInterface()
35+
{
36+
$resultClass = get_class($this->createMock(ResultInterface::class));
37+
$rendererClass = get_class($this->createMock(PHPUnit_Framework_TestCase::class));
38+
$factory = new ResultRendererFactory();
39+
40+
$factory->registerRenderer($resultClass, $rendererClass);
41+
}
42+
43+
/**
44+
* @expectedException InvalidArgumentException
45+
*/
46+
public function testRegisterRendererRequiresResultClassToBeString()
47+
{
48+
$resultClass = $this->createMock(ResultInterface::class);
49+
$rendererClass = get_class($this->createMock(ResultRendererInterface::class));
50+
$factory = new ResultRendererFactory();
51+
52+
$factory->registerRenderer($resultClass, $rendererClass);
53+
}
54+
55+
/**
56+
* @expectedException InvalidArgumentException
57+
*/
58+
public function testRegisterRendererRequiresRendererClassToBeString()
59+
{
60+
$resultClass = get_class($this->createMock(ResultInterface::class));
61+
$rendererClass = $this->createMock(ResultRendererInterface::class);
62+
$factory = new ResultRendererFactory();
63+
64+
$factory->registerRenderer($resultClass, $rendererClass);
65+
}
66+
67+
/**
68+
* @expectedException RuntimeException
69+
*/
70+
public function testCreateRequiresMappingToClassName()
71+
{
72+
$resultClass = $this->createMock(ResultInterface::class);
73+
$factory = new ResultRendererFactory();
74+
75+
$factory->create($resultClass);
76+
}
77+
78+
public function testCreateReturnsMappedRendererInterface()
79+
{
80+
$resultClass = $this->createMock(ResultInterface::class);
81+
$resultClassName = get_class($resultClass);
82+
$rendererClassName = get_class($this->createMock(ResultRendererInterface::class));
83+
$factory = new ResultRendererFactory();
84+
$factory->registerRenderer($resultClassName, $rendererClassName);
85+
86+
$returnedRenderer = $factory->create($resultClass);
87+
88+
$this->assertInstanceOf($rendererClassName, $returnedRenderer);
89+
}
90+
}

0 commit comments

Comments
 (0)