Skip to content

Commit c6a19eb

Browse files
bernhard-eflerweierophinney
authored andcommitted
feat: add PHP 8 support, laminas coding standard 2, update to phpunit 9
Signed-off-by: Bernhard Efler <[email protected]>
1 parent a0683ea commit c6a19eb

12 files changed

+194
-161
lines changed

composer.json

+5-4
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
}
3030
},
3131
"require": {
32-
"php": "^7.1",
32+
"php": "^7.3 || ^8.0",
3333
"laminas/laminas-escaper": "^2.5",
3434
"laminas/laminas-zendframework-bridge": "^1.0",
3535
"league/plates": "^3.3",
@@ -39,9 +39,10 @@
3939
"psr/container": "^1.0"
4040
},
4141
"require-dev": {
42-
"laminas/laminas-coding-standard": "~1.0.0",
43-
"malukenho/docheader": "^0.1.5",
44-
"phpunit/phpunit": "^7.0.2"
42+
"laminas/laminas-coding-standard": "~2.1.0",
43+
"malukenho/docheader": "^0.1.6",
44+
"phpunit/phpunit": "^9.3",
45+
"phpspec/prophecy-phpunit": "^2.0"
4546
},
4647
"conflict": {
4748
"container-interop/container-interop": "<1.2.0"

phpcs.xml.dist

+22-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
<?xml version="1.0"?>
2-
<ruleset name="Laminas coding standard">
3-
<rule ref="./vendor/laminas/laminas-coding-standard/ruleset.xml"/>
4-
5-
<!-- Paths to check -->
6-
<file>src</file>
7-
<file>test</file>
8-
<exclude-pattern>*/test/TestAsset/plates-null.php</exclude-pattern>
9-
<exclude-pattern>*/test/TestAsset/test/test.php</exclude-pattern>
2+
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
4+
5+
<arg name="basepath" value="."/>
6+
<arg name="cache" value=".phpcs-cache"/>
7+
<arg name="colors"/>
8+
<arg name="extensions" value="php"/>
9+
<arg name="parallel" value="80"/>
10+
11+
<!-- Show progress -->
12+
<arg value="p"/>
13+
14+
<!-- Paths to check -->
15+
<file>src</file>
16+
<file>test</file>
17+
<exclude-pattern>*/test/TestAsset/plates.php</exclude-pattern>
18+
<exclude-pattern>*/test/TestAsset/plates-2.php</exclude-pattern>
19+
<exclude-pattern>*/test/TestAsset/plates-null.php</exclude-pattern>
20+
<exclude-pattern>*/test/TestAsset/test/test.php</exclude-pattern>
21+
22+
<!-- Include all rules from the Laminas Coding Standard -->
23+
<rule ref="LaminasCodingStandard"/>
1024
</ruleset>

test/ConfigProviderTest.php

+7-8
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,30 @@
1515

1616
class ConfigProviderTest extends TestCase
1717
{
18-
/**
19-
* @var ConfigProvider
20-
*/
18+
/** @var ConfigProvider */
2119
private $provider;
2220

23-
protected function setUp() : void
21+
protected function setUp(): void
2422
{
2523
$this->provider = new ConfigProvider();
2624
}
2725

28-
public function testInvocationReturnsArray() : array
26+
public function testInvocationReturnsArray(): array
2927
{
3028
$config = ($this->provider)();
31-
$this->assertInternalType('array', $config);
29+
$this->assertIsArray($config);
3230

3331
return $config;
3432
}
3533

3634
/**
3735
* @depends testInvocationReturnsArray
36+
* @param array $config
3837
*/
39-
public function testReturnedArrayContainsDependencies(array $config) : void
38+
public function testReturnedArrayContainsDependencies(array $config): void
4039
{
4140
$this->assertArrayHasKey('dependencies', $config);
4241
$this->assertArrayHasKey('templates', $config);
43-
$this->assertInternalType('array', $config['dependencies']);
42+
$this->assertIsArray($config['dependencies']);
4443
}
4544
}

test/ExceptionTest.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@
2323

2424
class ExceptionTest extends TestCase
2525
{
26-
public function testExceptionInterfaceExtendsTemplateExceptionInterface() : void
26+
public function testExceptionInterfaceExtendsTemplateExceptionInterface(): void
2727
{
2828
self::assertTrue(is_a(ExceptionInterface::class, TemplateExceptionInterface::class, true));
2929
}
3030

31-
public function exception() : Generator
31+
public function exception(): Generator
3232
{
3333
$namespace = substr(ExceptionInterface::class, 0, strrpos(ExceptionInterface::class, '\\') + 1);
3434

@@ -43,9 +43,9 @@ public function exception() : Generator
4343
/**
4444
* @dataProvider exception
4545
*/
46-
public function testExceptionIsInstanceOfExceptionInterface(string $exception) : void
46+
public function testExceptionIsInstanceOfExceptionInterface(string $exception): void
4747
{
48-
self::assertContains('Exception', $exception);
48+
self::assertStringContainsString('Exception', $exception);
4949
self::assertTrue(is_a($exception, ExceptionInterface::class, true));
5050
}
5151
}

test/Extension/EscaperExtensionFactoryTest.php

+14-10
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,19 @@
1515
use Mezzio\Plates\Extension\EscaperExtension;
1616
use Mezzio\Plates\Extension\EscaperExtensionFactory;
1717
use PHPUnit\Framework\TestCase;
18+
use Prophecy\PhpUnit\ProphecyTrait;
1819
use Prophecy\Prophecy\ProphecyInterface;
1920
use Psr\Container\ContainerInterface;
21+
use ReflectionClass;
2022

2123
class EscaperExtensionFactoryTest extends TestCase
2224
{
25+
use ProphecyTrait;
26+
2327
/** @var ContainerInterface|ProphecyInterface */
2428
private $container;
2529

26-
public function setUp()
30+
public function setUp(): void
2731
{
2832
$this->container = $this->prophesize(ContainerInterface::class);
2933
}
@@ -32,7 +36,7 @@ public function testFactoryWithoutConfig()
3236
{
3337
$this->container->has('config')->willReturn(false);
3438

35-
$factory = new EscaperExtensionFactory();
39+
$factory = new EscaperExtensionFactory();
3640
$extension = $factory($this->container->reveal());
3741

3842
$this->assertInstanceOf(EscaperExtension::class, $extension);
@@ -43,7 +47,7 @@ public function testFactoryWithEmptyConfig()
4347
$this->container->has('config')->willReturn(true);
4448
$this->container->get('config')->willReturn([]);
4549

46-
$factory = new EscaperExtensionFactory();
50+
$factory = new EscaperExtensionFactory();
4751
$extension = $factory($this->container->reveal());
4852

4953
$this->assertInstanceOf(EscaperExtension::class, $extension);
@@ -54,8 +58,8 @@ public function testFactoryWithInvalidEncodingSetIn()
5458
$this->container->has('config')->willReturn(true);
5559
$this->container->get('config')->willReturn([
5660
'plates' => [
57-
'encoding' => ''
58-
]
61+
'encoding' => '',
62+
],
5963
]);
6064

6165
$factory = new EscaperExtensionFactory();
@@ -72,20 +76,20 @@ public function testFactoryWithValidEncodingSetIn()
7276
$this->container->has('config')->willReturn(true);
7377
$this->container->get('config')->willReturn([
7478
'plates' => [
75-
'encoding' => 'iso-8859-1'
76-
]
79+
'encoding' => 'iso-8859-1',
80+
],
7781
]);
7882

79-
$factory = new EscaperExtensionFactory();
83+
$factory = new EscaperExtensionFactory();
8084
$extension = $factory($this->container->reveal());
8185

8286
$this->assertInstanceOf(EscaperExtension::class, $extension);
83-
$this->assertAttributeInstanceOf(Escaper::class, 'escaper', $extension);
8487

85-
$class = new \ReflectionClass($extension);
88+
$class = new ReflectionClass($extension);
8689
$escaper = $class->getProperty('escaper');
8790
$escaper->setAccessible(true);
8891
$escaper = $escaper->getValue($extension);
92+
$this->assertInstanceOf(Escaper::class, $escaper);
8993

9094
$this->assertEquals('iso-8859-1', $escaper->getEncoding());
9195
}

test/Extension/EscaperExtensionTest.php

+3
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
use PHPUnit\Framework\TestCase;
1717
use Prophecy\Argument;
1818

19+
use Prophecy\PhpUnit\ProphecyTrait;
1920
use function is_array;
2021

2122
class EscaperExtensionTest extends TestCase
2223
{
24+
use ProphecyTrait;
25+
2326
public function testRegistersEscaperFunctionsWithEngine()
2427
{
2528
$extension = new EscaperExtension();

test/Extension/UrlExtensionFactoryTest.php

+28-15
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@
1010

1111
namespace MezzioTest\Plates\Extension;
1212

13+
use League\Plates\Engine;
1314
use Mezzio\Helper\ServerUrlHelper;
1415
use Mezzio\Helper\UrlHelper;
1516
use Mezzio\Plates\Exception\MissingHelperException;
1617
use Mezzio\Plates\Extension\UrlExtension;
1718
use Mezzio\Plates\Extension\UrlExtensionFactory;
1819
use PHPUnit\Framework\TestCase;
20+
use Prophecy\PhpUnit\ProphecyTrait;
1921
use Prophecy\Prophecy\ProphecyInterface;
2022
use Psr\Container\ContainerInterface;
2123

2224
class UrlExtensionFactoryTest extends TestCase
2325
{
26+
use ProphecyTrait;
27+
2428
/** @var ContainerInterface|ProphecyInterface */
2529
private $container;
2630

@@ -30,38 +34,47 @@ class UrlExtensionFactoryTest extends TestCase
3034
/** @var ServerUrlHelper|ProphecyInterface */
3135
private $serverUrlHelper;
3236

33-
public function setUp()
37+
public function setUp(): void
3438
{
35-
$this->container = $this->prophesize(ContainerInterface::class);
36-
$this->urlHelper = $this->prophesize(UrlHelper::class);
39+
$this->container = $this->prophesize(ContainerInterface::class);
40+
$this->urlHelper = $this->prophesize(UrlHelper::class);
3741
$this->serverUrlHelper = $this->prophesize(ServerUrlHelper::class);
3842
}
3943

4044
public function testFactoryReturnsUrlExtensionInstanceWhenHelpersArePresent()
4145
{
46+
$urlHelper = $this->urlHelper->reveal();
47+
$serverUrlHelper = $this->serverUrlHelper->reveal();
48+
4249
$this->container->has(UrlHelper::class)->willReturn(true);
43-
$this->container->get(UrlHelper::class)->willReturn($this->urlHelper->reveal());
50+
$this->container->get(UrlHelper::class)->willReturn($urlHelper);
4451
$this->container->has(ServerUrlHelper::class)->willReturn(true);
45-
$this->container->get(ServerUrlHelper::class)->willReturn($this->serverUrlHelper->reveal());
52+
$this->container->get(ServerUrlHelper::class)->willReturn($serverUrlHelper);
4653

47-
$factory = new UrlExtensionFactory();
54+
$factory = new UrlExtensionFactory();
4855
$extension = $factory($this->container->reveal());
4956
$this->assertInstanceOf(UrlExtension::class, $extension);
5057

51-
$this->assertAttributeSame($this->urlHelper->reveal(), 'urlHelper', $extension);
52-
$this->assertAttributeSame($this->serverUrlHelper->reveal(), 'serverUrlHelper', $extension);
58+
$engine = $this->createMock(Engine::class);
59+
$engine->method('registerFunction')
60+
->withConsecutive(
61+
['url', $this->equalTo($urlHelper)],
62+
['serverurl', $this->equalTo($serverUrlHelper)]
63+
);
64+
65+
$extension->register($engine);
5366
}
5467

5568
public function testFactoryRaisesExceptionIfUrlHelperIsMissing()
5669
{
5770
$this->container->has(UrlHelper::class)->willReturn(false);
58-
$this->container->has(\Zend\Expressive\Helper\UrlHelper::class)->willReturn(false);
71+
$this->container->has(\Mezzio\Helper\UrlHelper::class)->willReturn(false);
5972
$this->container->get(UrlHelper::class)->shouldNotBeCalled();
60-
$this->container->get(\Zend\Expressive\Helper\UrlHelper::class)->shouldNotBeCalled();
73+
$this->container->get(\Mezzio\Helper\UrlHelper::class)->shouldNotBeCalled();
6174
$this->container->has(ServerUrlHelper::class)->shouldNotBeCalled();
62-
$this->container->has(\Zend\Expressive\Helper\ServerUrlHelper::class)->shouldNotBeCalled();
75+
$this->container->has(\Mezzio\Helper\ServerUrlHelper::class)->shouldNotBeCalled();
6376
$this->container->get(ServerUrlHelper::class)->shouldNotBeCalled();
64-
$this->container->get(\Zend\Expressive\Helper\ServerUrlHelper::class)->shouldNotBeCalled();
77+
$this->container->get(\Mezzio\Helper\ServerUrlHelper::class)->shouldNotBeCalled();
6578

6679
$factory = new UrlExtensionFactory();
6780

@@ -74,11 +87,11 @@ public function testFactoryRaisesExceptionIfServerUrlHelperIsMissing()
7487
{
7588
$this->container->has(UrlHelper::class)->willReturn(true);
7689
$this->container->get(UrlHelper::class)->shouldNotBeCalled();
77-
$this->container->get(\Zend\Expressive\Helper\UrlHelper::class)->shouldNotBeCalled();
90+
$this->container->get(\Mezzio\Helper\UrlHelper::class)->shouldNotBeCalled();
7891
$this->container->has(ServerUrlHelper::class)->willReturn(false);
79-
$this->container->has(\Zend\Expressive\Helper\ServerUrlHelper::class)->willReturn(false);
92+
$this->container->has(\Mezzio\Helper\ServerUrlHelper::class)->willReturn(false);
8093
$this->container->get(ServerUrlHelper::class)->shouldNotBeCalled();
81-
$this->container->get(\Zend\Expressive\Helper\ServerUrlHelper::class)->shouldNotBeCalled();
94+
$this->container->get(\Mezzio\Helper\ServerUrlHelper::class)->shouldNotBeCalled();
8295

8396
$factory = new UrlExtensionFactory();
8497

test/Extension/UrlExtensionTest.php

+10-9
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@
1616
use Mezzio\Plates\Extension\UrlExtension;
1717
use Mezzio\Router\RouteResult;
1818
use PHPUnit\Framework\TestCase;
19+
use Prophecy\PhpUnit\ProphecyTrait;
1920
use Prophecy\Prophecy\ProphecyInterface;
2021

2122
class UrlExtensionTest extends TestCase
2223
{
24+
use ProphecyTrait;
25+
2326
/** @var UrlHelper|ProphecyInterface */
2427
private $urlHelper;
2528

@@ -29,7 +32,7 @@ class UrlExtensionTest extends TestCase
2932
/** @var UrlExtension */
3033
private $extension;
3134

32-
public function setUp()
35+
public function setUp(): void
3336
{
3437
$this->urlHelper = $this->prophesize(UrlHelper::class);
3538
$this->serverUrlHelper = $this->prophesize(ServerUrlHelper::class);
@@ -56,7 +59,7 @@ public function testRegistersUrlFunctionWithEngine()
5659
$this->extension->register($engine->reveal());
5760
}
5861

59-
public function urlHelperParams()
62+
public function urlHelperParams(): array
6063
{
6164
return [
6265
'null' => [null, []],
@@ -68,11 +71,10 @@ public function urlHelperParams()
6871

6972
/**
7073
* @dataProvider urlHelperParams
71-
*
7274
* @param null|string $route
7375
* @param array $params
7476
*/
75-
public function testGenerateUrlProxiesToUrlHelper($route, array $params)
77+
public function testGenerateUrlProxiesToUrlHelper($route, array $params): void
7678
{
7779
$this->urlHelper->generate($route, $params, [], null, [])->willReturn('/success');
7880
$this->assertEquals('/success', $this->extension->generateUrl($route, $params));
@@ -100,7 +102,7 @@ public function testUrlHelperAcceptsQueryParametersFragmentAndOptions()
100102
);
101103
}
102104

103-
public function serverUrlHelperParams()
105+
public function serverUrlHelperParams(): array
104106
{
105107
return [
106108
'null' => [null],
@@ -111,24 +113,23 @@ public function serverUrlHelperParams()
111113

112114
/**
113115
* @dataProvider serverUrlHelperParams
114-
*
115116
* @param null|string $path
116117
*/
117-
public function testGenerateServerUrlProxiesToServerUrlHelper($path)
118+
public function testGenerateServerUrlProxiesToServerUrlHelper($path): void
118119
{
119120
$this->serverUrlHelper->generate($path)->willReturn('/success');
120121
$this->assertEquals('/success', $this->extension->generateServerUrl($path));
121122
}
122123

123-
public function testGetRouteResultReturnsRouteResultWhenPopulated()
124+
public function testGetRouteResultReturnsRouteResultWhenPopulated(): void
124125
{
125126
$result = $this->prophesize(RouteResult::class);
126127
$this->urlHelper->getRouteResult()->willReturn($result->reveal());
127128

128129
$this->assertInstanceOf(RouteResult::class, $this->extension->getRouteResult());
129130
}
130131

131-
public function testGetRouteResultReturnsNullWhenRouteResultNotPopulatedInUrlHelper()
132+
public function testGetRouteResultReturnsNullWhenRouteResultNotPopulatedInUrlHelper(): void
132133
{
133134
$this->urlHelper->getRouteResult()->willReturn(null);
134135

0 commit comments

Comments
 (0)