From 693e4ee31fdd7509b33dbed07c7c1b05d36ad298 Mon Sep 17 00:00:00 2001 From: Adrian Suter Date: Thu, 2 Jan 2020 10:25:17 +0100 Subject: [PATCH 1/8] Add Laminas PSR17 Factory --- .../Psr17/LaminasDiactorosPsr17Factory.php | 18 ++++++++++++++++++ Slim/Factory/Psr17/Psr17FactoryProvider.php | 1 + tests/Factory/AppFactoryTest.php | 7 +++++-- .../ServerRequestCreatorFactoryTest.php | 3 +++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php diff --git a/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php b/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php new file mode 100644 index 000000000..a6d3a5654 --- /dev/null +++ b/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php @@ -0,0 +1,18 @@ + Date: Tue, 31 Dec 2019 11:50:34 +0100 Subject: [PATCH 2/8] PSR-12 --- CONTRIBUTING.md | 2 +- Slim/App.php | 1 + Slim/CallableResolver.php | 1 + Slim/Error/AbstractErrorRenderer.php | 1 + Slim/Error/Renderers/HtmlErrorRenderer.php | 1 + Slim/Error/Renderers/JsonErrorRenderer.php | 1 + Slim/Error/Renderers/PlainTextErrorRenderer.php | 1 + Slim/Error/Renderers/XmlErrorRenderer.php | 1 + Slim/Exception/HttpBadRequestException.php | 1 + Slim/Exception/HttpException.php | 1 + Slim/Exception/HttpForbiddenException.php | 1 + Slim/Exception/HttpInternalServerErrorException.php | 1 + Slim/Exception/HttpMethodNotAllowedException.php | 1 + Slim/Exception/HttpNotFoundException.php | 1 + Slim/Exception/HttpNotImplementedException.php | 1 + Slim/Exception/HttpSpecializedException.php | 1 + Slim/Exception/HttpUnauthorizedException.php | 1 + Slim/Factory/AppFactory.php | 4 +++- Slim/Factory/Psr17/GuzzlePsr17Factory.php | 1 + Slim/Factory/Psr17/NyholmPsr17Factory.php | 3 ++- Slim/Factory/Psr17/Psr17Factory.php | 5 +++-- Slim/Factory/Psr17/Psr17FactoryProvider.php | 1 + Slim/Factory/Psr17/ServerRequestCreator.php | 1 + Slim/Factory/Psr17/SlimHttpPsr17Factory.php | 1 + Slim/Factory/Psr17/SlimHttpServerRequestCreator.php | 1 + Slim/Factory/Psr17/SlimPsr17Factory.php | 1 + Slim/Factory/Psr17/ZendDiactorosPsr17Factory.php | 1 + Slim/Factory/ServerRequestCreatorFactory.php | 4 +++- Slim/Handlers/ErrorHandler.php | 1 + Slim/Handlers/Strategies/RequestHandler.php | 1 + Slim/Handlers/Strategies/RequestResponse.php | 1 + Slim/Handlers/Strategies/RequestResponseArgs.php | 1 + .../AdvancedCallableResolverInterface.php | 1 + Slim/Interfaces/CallableResolverInterface.php | 1 + Slim/Interfaces/DispatcherInterface.php | 1 + Slim/Interfaces/ErrorHandlerInterface.php | 1 + Slim/Interfaces/ErrorRendererInterface.php | 1 + Slim/Interfaces/InvocationStrategyInterface.php | 1 + Slim/Interfaces/MiddlewareDispatcherInterface.php | 1 + Slim/Interfaces/Psr17FactoryInterface.php | 1 + Slim/Interfaces/Psr17FactoryProviderInterface.php | 1 + .../RequestHandlerInvocationStrategyInterface.php | 1 + Slim/Interfaces/RouteCollectorInterface.php | 1 + Slim/Interfaces/RouteCollectorProxyInterface.php | 1 + Slim/Interfaces/RouteGroupInterface.php | 1 + Slim/Interfaces/RouteInterface.php | 1 + Slim/Interfaces/RouteParserInterface.php | 1 + Slim/Interfaces/RouteResolverInterface.php | 1 + Slim/Interfaces/ServerRequestCreatorInterface.php | 1 + Slim/Middleware/BodyParsingMiddleware.php | 1 + Slim/Middleware/ContentLengthMiddleware.php | 1 + Slim/Middleware/ErrorMiddleware.php | 1 + Slim/Middleware/MethodOverrideMiddleware.php | 1 + Slim/Middleware/OutputBufferingMiddleware.php | 1 + Slim/Middleware/RoutingMiddleware.php | 1 + Slim/MiddlewareDispatcher.php | 7 ++++--- Slim/ResponseEmitter.php | 1 + Slim/Routing/Dispatcher.php | 1 + Slim/Routing/FastRouteDispatcher.php | 1 + Slim/Routing/Route.php | 4 +++- Slim/Routing/RouteCollector.php | 1 + Slim/Routing/RouteCollectorProxy.php | 1 + Slim/Routing/RouteContext.php | 1 + Slim/Routing/RouteGroup.php | 1 + Slim/Routing/RouteParser.php | 1 + Slim/Routing/RouteResolver.php | 1 + Slim/Routing/RouteRunner.php | 1 + Slim/Routing/RoutingResults.php | 1 + phpcs.xml | 2 +- tests/AppTest.php | 1 + tests/Assets/HeaderStack.php | 1 + tests/Assets/PhpFunctionOverrides.php | 1 + tests/Assets/PhpRoutingFunctionOverrides.php | 1 + tests/CallableResolverTest.php | 13 +++++++------ tests/Error/AbstractErrorRendererTest.php | 1 + tests/Exception/HttpExceptionTest.php | 1 + tests/Exception/HttpUnauthorizedExceptionTest.php | 1 + tests/Factory/AppFactoryTest.php | 1 + tests/Factory/Psr17/Psr17FactoryProviderTest.php | 1 + tests/Factory/Psr17/Psr17FactoryTest.php | 1 + .../Psr17/SlimHttpServerRequestCreatorTest.php | 1 + tests/Factory/ServerRequestCreatorFactoryTest.php | 1 + tests/Handlers/ErrorHandlerTest.php | 1 + tests/Middleware/BodyParsingMiddlewareTest.php | 5 +++-- tests/Middleware/ContentLengthMiddlewareTest.php | 1 + tests/Middleware/ErrorMiddlewareTest.php | 1 + tests/Middleware/MethodOverrideMiddlewareTest.php | 1 + tests/Middleware/OutputBufferingMiddlewareTest.php | 1 + tests/Middleware/RoutingMiddlewareTest.php | 1 + tests/MiddlewareDispatcherTest.php | 1 + tests/Mocks/CallableTest.php | 1 + tests/Mocks/InvocationStrategyTest.php | 1 + tests/Mocks/InvokableTest.php | 1 + tests/Mocks/MiddlewareTest.php | 1 + tests/Mocks/MockAction.php | 1 + tests/Mocks/MockCustomException.php | 1 + .../MockCustomRequestHandlerInvocationStrategy.php | 1 + tests/Mocks/MockMiddlewareSlimCallable.php | 1 + tests/Mocks/MockMiddlewareWithConstructor.php | 1 + tests/Mocks/MockMiddlewareWithoutConstructor.php | 1 + tests/Mocks/MockMiddlewareWithoutInterface.php | 1 + tests/Mocks/MockPsr17Factory.php | 1 + .../Mocks/MockPsr17FactoryWithoutStreamFactory.php | 1 + tests/Mocks/MockRequestHandler.php | 1 + tests/Mocks/MockSequenceMiddleware.php | 1 + tests/Mocks/MockStream.php | 3 ++- tests/Mocks/RequestHandlerTest.php | 1 + tests/Mocks/SlowPokeStream.php | 5 +++-- tests/Mocks/SmallChunksStream.php | 5 +++-- tests/Providers/PSR7ObjectProvider.php | 1 + tests/Providers/PSR7ObjectProviderInterface.php | 1 + tests/ResponseEmitterTest.php | 1 + tests/Routing/DispatcherTest.php | 1 + tests/Routing/FastRouteDispatcherTest.php | 2 ++ tests/Routing/RouteCollectorProxyTest.php | 1 + tests/Routing/RouteCollectorTest.php | 1 + tests/Routing/RouteContextTest.php | 1 + tests/Routing/RouteParserTest.php | 1 + tests/Routing/RouteResolverTest.php | 1 + tests/Routing/RouteRunnerTest.php | 1 + tests/Routing/RouteTest.php | 1 + tests/TestCase.php | 1 + tests/bootstrap.php | 1 + 123 files changed, 149 insertions(+), 24 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 69415854f..9b48453b8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ pull request for each branch. This allows me to review and pull in new features ## Style Guide -All pull requests must adhere to the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). +All pull requests must adhere to the [PSR-12 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-12-extended-coding-style-guide.md). ## Unit Testing diff --git a/Slim/App.php b/Slim/App.php index 299c160d0..e4148cbf8 100644 --- a/Slim/App.php +++ b/Slim/App.php @@ -1,4 +1,5 @@ tip; - $this->tip = new class($middleware, $next) implements RequestHandlerInterface + $this->tip = new class ($middleware, $next) implements RequestHandlerInterface { private $middleware; private $next; @@ -149,7 +150,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface public function addDeferred(string $middleware): self { $next = $this->tip; - $this->tip = new class( + $this->tip = new class ( $middleware, $next, $this->container, @@ -259,7 +260,7 @@ public function addCallable(callable $middleware): self $middleware = $middleware->bindTo($this->container); } - $this->tip = new class($middleware, $next) implements RequestHandlerInterface + $this->tip = new class ($middleware, $next) implements RequestHandlerInterface { private $middleware; private $next; diff --git a/Slim/ResponseEmitter.php b/Slim/ResponseEmitter.php index 6f0f159b3..04e695166 100644 --- a/Slim/ResponseEmitter.php +++ b/Slim/ResponseEmitter.php @@ -1,4 +1,5 @@ invocationStrategy; - if (is_array($callable) + if ( + is_array($callable) && $callable[0] instanceof RequestHandlerInterface && !in_array(RequestHandlerInvocationStrategyInterface::class, class_implements($strategy)) ) { diff --git a/Slim/Routing/RouteCollector.php b/Slim/Routing/RouteCollector.php index 154dcc18e..7bd6c401d 100644 --- a/Slim/Routing/RouteCollector.php +++ b/Slim/Routing/RouteCollector.php @@ -1,4 +1,5 @@ - + diff --git a/tests/AppTest.php b/tests/AppTest.php index 2d94bad2f..89c8a4320 100644 --- a/tests/AppTest.php +++ b/tests/AppTest.php @@ -1,4 +1,5 @@ resolve(__NAMESPACE__.'\testAdvancedCallable'); - $callableRoute = $resolver->resolveRoute(__NAMESPACE__.'\testAdvancedCallable'); - $callableMiddleware = $resolver->resolveMiddleware(__NAMESPACE__.'\testAdvancedCallable'); + $callable = $resolver->resolve(__NAMESPACE__ . '\testAdvancedCallable'); + $callableRoute = $resolver->resolveRoute(__NAMESPACE__ . '\testAdvancedCallable'); + $callableMiddleware = $resolver->resolveMiddleware(__NAMESPACE__ . '\testAdvancedCallable'); $this->assertEquals(true, $callable()); $this->assertEquals(true, $callableRoute()); @@ -315,9 +316,9 @@ public function testMiddlewareObjPsrRequestHandlerClassInContainer() public function testResolutionToAPsrRequestHandlerClassWithCustomMethod() { $resolver = new CallableResolver(); // No container injected - $callable = $resolver->resolve(RequestHandlerTest::class.':custom'); - $callableRoute = $resolver->resolveRoute(RequestHandlerTest::class.':custom'); - $callableMiddleware = $resolver->resolveMiddleware(RequestHandlerTest::class.':custom'); + $callable = $resolver->resolve(RequestHandlerTest::class . ':custom'); + $callableRoute = $resolver->resolveRoute(RequestHandlerTest::class . ':custom'); + $callableMiddleware = $resolver->resolveMiddleware(RequestHandlerTest::class . ':custom'); $this->assertIsArray($callable); $this->assertInstanceOf(RequestHandlerTest::class, $callable[0]); diff --git a/tests/Error/AbstractErrorRendererTest.php b/tests/Error/AbstractErrorRendererTest.php index 434558609..a29c5894d 100644 --- a/tests/Error/AbstractErrorRendererTest.php +++ b/tests/Error/AbstractErrorRendererTest.php @@ -1,4 +1,5 @@ createResponse(); - return new class($response) implements RequestHandlerInterface { + return new class ($response) implements RequestHandlerInterface { private $response; public function __construct(ResponseInterface $response) diff --git a/tests/Middleware/ContentLengthMiddlewareTest.php b/tests/Middleware/ContentLengthMiddlewareTest.php index 8fdc00101..79a1c7766 100644 --- a/tests/Middleware/ContentLengthMiddlewareTest.php +++ b/tests/Middleware/ContentLengthMiddlewareTest.php @@ -1,4 +1,5 @@ stream, $offset, $whence) === -1) { throw new \RuntimeException( 'Unable to seek to stream position ' - .$offset.' with whence '.\var_export($whence, true) + . $offset . ' with whence ' . \var_export($whence, true) ); } } diff --git a/tests/Mocks/RequestHandlerTest.php b/tests/Mocks/RequestHandlerTest.php index 93ee33375..155242463 100644 --- a/tests/Mocks/RequestHandlerTest.php +++ b/tests/Mocks/RequestHandlerTest.php @@ -1,4 +1,5 @@ Date: Tue, 31 Dec 2019 12:02:12 +0100 Subject: [PATCH 3/8] Fully-qualified function calls (except those overriden during the tests) --- Slim/App.php | 2 + Slim/CallableResolver.php | 9 +++ Slim/Error/Renderers/HtmlErrorRenderer.php | 4 + Slim/Error/Renderers/JsonErrorRenderer.php | 6 ++ .../Renderers/PlainTextErrorRenderer.php | 4 + Slim/Error/Renderers/XmlErrorRenderer.php | 4 + .../HttpMethodNotAllowedException.php | 2 + Slim/Factory/Psr17/Psr17Factory.php | 3 + Slim/Factory/Psr17/Psr17FactoryProvider.php | 2 + .../Psr17/SlimHttpServerRequestCreator.php | 2 + Slim/Handlers/ErrorHandler.php | 12 +++ .../Strategies/RequestResponseArgs.php | 2 + Slim/Middleware/BodyParsingMiddleware.php | 15 ++++ Slim/Middleware/ErrorMiddleware.php | 3 + Slim/Middleware/MethodOverrideMiddleware.php | 3 + Slim/Middleware/OutputBufferingMiddleware.php | 5 ++ Slim/MiddlewareDispatcher.php | 7 ++ Slim/ResponseEmitter.php | 8 ++ Slim/Routing/Route.php | 7 ++ Slim/Routing/RouteCollector.php | 5 ++ Slim/Routing/RouteParser.php | 6 ++ Slim/Routing/RouteResolver.php | 2 + Slim/Routing/RoutingResults.php | 2 + tests/AppTest.php | 29 +++++--- tests/Assets/HeaderStack.php | 3 + tests/Assets/PhpRoutingFunctionOverrides.php | 2 + tests/Error/AbstractErrorRendererTest.php | 4 + .../Middleware/BodyParsingMiddlewareTest.php | 3 + .../OutputBufferingMiddlewareTest.php | 2 + tests/MiddlewareDispatcherTest.php | 2 +- tests/Mocks/MockAction.php | 4 + tests/Mocks/MockStream.php | 73 ++++++++++++------- tests/Mocks/RequestHandlerTest.php | 2 + tests/Mocks/SlowPokeStream.php | 8 +- tests/Mocks/SmallChunksStream.php | 5 ++ tests/Providers/PSR7ObjectProvider.php | 4 + tests/ResponseEmitterTest.php | 21 +++++- tests/Routing/DispatcherTest.php | 5 ++ tests/Routing/RouteCollectorTest.php | 6 ++ tests/Routing/RouteResolverTest.php | 2 + tests/Routing/RouteTest.php | 5 ++ 41 files changed, 256 insertions(+), 39 deletions(-) diff --git a/Slim/App.php b/Slim/App.php index e4148cbf8..65825121d 100644 --- a/Slim/App.php +++ b/Slim/App.php @@ -28,6 +28,8 @@ use Slim\Routing\RouteResolver; use Slim\Routing\RouteRunner; +use function strtoupper; + class App extends RouteCollectorProxy implements RequestHandlerInterface { /** diff --git a/Slim/CallableResolver.php b/Slim/CallableResolver.php index b5c3a8bb2..892bae537 100644 --- a/Slim/CallableResolver.php +++ b/Slim/CallableResolver.php @@ -17,6 +17,15 @@ use RuntimeException; use Slim\Interfaces\AdvancedCallableResolverInterface; +use function is_string; +use function preg_match; +use function class_exists; +use function sprintf; +use function is_callable; +use function is_object; +use function json_encode; +use function is_array; + final class CallableResolver implements AdvancedCallableResolverInterface { /** diff --git a/Slim/Error/Renderers/HtmlErrorRenderer.php b/Slim/Error/Renderers/HtmlErrorRenderer.php index 43720db2f..971a06b82 100644 --- a/Slim/Error/Renderers/HtmlErrorRenderer.php +++ b/Slim/Error/Renderers/HtmlErrorRenderer.php @@ -13,6 +13,10 @@ use Slim\Error\AbstractErrorRenderer; use Throwable; +use function get_class; +use function htmlentities; +use function sprintf; + /** * Default Slim application HTML Error Renderer */ diff --git a/Slim/Error/Renderers/JsonErrorRenderer.php b/Slim/Error/Renderers/JsonErrorRenderer.php index 7940bb81a..4645958cd 100644 --- a/Slim/Error/Renderers/JsonErrorRenderer.php +++ b/Slim/Error/Renderers/JsonErrorRenderer.php @@ -13,6 +13,12 @@ use Slim\Error\AbstractErrorRenderer; use Throwable; +use function json_encode; +use function get_class; + +use const JSON_PRETTY_PRINT; +use const JSON_UNESCAPED_SLASHES; + /** * Default Slim application JSON Error Renderer */ diff --git a/Slim/Error/Renderers/PlainTextErrorRenderer.php b/Slim/Error/Renderers/PlainTextErrorRenderer.php index 7739f9c0c..0b961cd37 100644 --- a/Slim/Error/Renderers/PlainTextErrorRenderer.php +++ b/Slim/Error/Renderers/PlainTextErrorRenderer.php @@ -13,6 +13,10 @@ use Slim\Error\AbstractErrorRenderer; use Throwable; +use function get_class; +use function htmlentities; +use function sprintf; + /** * Default Slim application Plain Text Error Renderer */ diff --git a/Slim/Error/Renderers/XmlErrorRenderer.php b/Slim/Error/Renderers/XmlErrorRenderer.php index 768e54b0e..80cd8f93a 100644 --- a/Slim/Error/Renderers/XmlErrorRenderer.php +++ b/Slim/Error/Renderers/XmlErrorRenderer.php @@ -13,6 +13,10 @@ use Slim\Error\AbstractErrorRenderer; use Throwable; +use function get_class; +use function sprintf; +use function str_replace; + /** * Default Slim application XML Error Renderer */ diff --git a/Slim/Exception/HttpMethodNotAllowedException.php b/Slim/Exception/HttpMethodNotAllowedException.php index d6e97b5e6..d6f8703c8 100644 --- a/Slim/Exception/HttpMethodNotAllowedException.php +++ b/Slim/Exception/HttpMethodNotAllowedException.php @@ -10,6 +10,8 @@ namespace Slim\Exception; +use function implode; + class HttpMethodNotAllowedException extends HttpSpecializedException { /** diff --git a/Slim/Factory/Psr17/Psr17Factory.php b/Slim/Factory/Psr17/Psr17Factory.php index 1d5544817..4597d887c 100644 --- a/Slim/Factory/Psr17/Psr17Factory.php +++ b/Slim/Factory/Psr17/Psr17Factory.php @@ -16,6 +16,9 @@ use Slim\Interfaces\Psr17FactoryInterface; use Slim\Interfaces\ServerRequestCreatorInterface; +use function get_called_class; +use function class_exists; + abstract class Psr17Factory implements Psr17FactoryInterface { /** diff --git a/Slim/Factory/Psr17/Psr17FactoryProvider.php b/Slim/Factory/Psr17/Psr17FactoryProvider.php index 26f8eb1ba..c6fd72383 100644 --- a/Slim/Factory/Psr17/Psr17FactoryProvider.php +++ b/Slim/Factory/Psr17/Psr17FactoryProvider.php @@ -12,6 +12,8 @@ use Slim\Interfaces\Psr17FactoryProviderInterface; +use function array_unshift; + class Psr17FactoryProvider implements Psr17FactoryProviderInterface { /** diff --git a/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php b/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php index 111b1b21b..cac5f22e0 100644 --- a/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php +++ b/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php @@ -14,6 +14,8 @@ use RuntimeException; use Slim\Interfaces\ServerRequestCreatorInterface; +use function class_exists; + class SlimHttpServerRequestCreator implements ServerRequestCreatorInterface { /** diff --git a/Slim/Handlers/ErrorHandler.php b/Slim/Handlers/ErrorHandler.php index f3239ee01..42a161195 100644 --- a/Slim/Handlers/ErrorHandler.php +++ b/Slim/Handlers/ErrorHandler.php @@ -25,6 +25,18 @@ use Slim\Interfaces\ErrorRendererInterface; use Throwable; +use function array_intersect; +use function explode; +use function array_keys; +use function count; +use function current; +use function next; +use function preg_match; +use function error_log; +use function array_key_exists; +use function implode; +use function call_user_func; + /** * Default Slim application error handler * diff --git a/Slim/Handlers/Strategies/RequestResponseArgs.php b/Slim/Handlers/Strategies/RequestResponseArgs.php index 71bc720ab..0cff7459b 100644 --- a/Slim/Handlers/Strategies/RequestResponseArgs.php +++ b/Slim/Handlers/Strategies/RequestResponseArgs.php @@ -14,6 +14,8 @@ use Psr\Http\Message\ServerRequestInterface; use Slim\Interfaces\InvocationStrategyInterface; +use function array_values; + /** * Route callback strategy with route parameters as individual arguments. */ diff --git a/Slim/Middleware/BodyParsingMiddleware.php b/Slim/Middleware/BodyParsingMiddleware.php index 148a82887..bd5be925e 100644 --- a/Slim/Middleware/BodyParsingMiddleware.php +++ b/Slim/Middleware/BodyParsingMiddleware.php @@ -16,6 +16,21 @@ use Psr\Http\Server\RequestHandlerInterface; use RuntimeException; +use function json_decode; +use function parse_str; +use function simplexml_load_string; +use function libxml_disable_entity_loader; +use function libxml_clear_errors; +use function libxml_use_internal_errors; +use function count; +use function is_null; +use function is_object; +use function is_array; +use function is_string; +use function explode; +use function strtolower; +use function trim; + class BodyParsingMiddleware implements MiddlewareInterface { /** diff --git a/Slim/Middleware/ErrorMiddleware.php b/Slim/Middleware/ErrorMiddleware.php index 76c1dfc58..6febfa383 100644 --- a/Slim/Middleware/ErrorMiddleware.php +++ b/Slim/Middleware/ErrorMiddleware.php @@ -21,6 +21,9 @@ use Slim\Interfaces\ErrorHandlerInterface; use Throwable; +use function get_class; +use function is_subclass_of; + class ErrorMiddleware implements MiddlewareInterface { /** diff --git a/Slim/Middleware/MethodOverrideMiddleware.php b/Slim/Middleware/MethodOverrideMiddleware.php index 8971cb095..ae55b797b 100644 --- a/Slim/Middleware/MethodOverrideMiddleware.php +++ b/Slim/Middleware/MethodOverrideMiddleware.php @@ -15,6 +15,9 @@ use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; +use function strtoupper; +use function is_array; + class MethodOverrideMiddleware implements MiddlewareInterface { /** diff --git a/Slim/Middleware/OutputBufferingMiddleware.php b/Slim/Middleware/OutputBufferingMiddleware.php index 0997c6acc..1909746b0 100644 --- a/Slim/Middleware/OutputBufferingMiddleware.php +++ b/Slim/Middleware/OutputBufferingMiddleware.php @@ -18,6 +18,11 @@ use Psr\Http\Server\RequestHandlerInterface; use Throwable; +use function in_array; +use function ob_start; +use function ob_get_clean; +use function ob_end_clean; + class OutputBufferingMiddleware implements MiddlewareInterface { public const APPEND = 'append'; diff --git a/Slim/MiddlewareDispatcher.php b/Slim/MiddlewareDispatcher.php index a37c331e4..932ac716f 100644 --- a/Slim/MiddlewareDispatcher.php +++ b/Slim/MiddlewareDispatcher.php @@ -21,6 +21,13 @@ use Slim\Interfaces\CallableResolverInterface; use Slim\Interfaces\MiddlewareDispatcherInterface; +use function is_string; +use function preg_match; +use function function_exists; +use function class_exists; +use function is_callable; +use function sprintf; + class MiddlewareDispatcher implements MiddlewareDispatcherInterface { /** diff --git a/Slim/ResponseEmitter.php b/Slim/ResponseEmitter.php index 04e695166..fe319fa97 100644 --- a/Slim/ResponseEmitter.php +++ b/Slim/ResponseEmitter.php @@ -12,6 +12,14 @@ use Psr\Http\Message\ResponseInterface; +use function strtolower; +use function sprintf; +use function min; +use function strlen; +use function in_array; + +use const CONNECTION_NORMAL; + class ResponseEmitter { /** diff --git a/Slim/Routing/Route.php b/Slim/Routing/Route.php index 7c12d70d5..2265a1eae 100644 --- a/Slim/Routing/Route.php +++ b/Slim/Routing/Route.php @@ -26,6 +26,13 @@ use Slim\Interfaces\RouteInterface; use Slim\MiddlewareDispatcher; +use function array_key_exists; +use function array_replace; +use function array_reverse; +use function is_array; +use function in_array; +use function class_implements; + class Route implements RouteInterface, RequestHandlerInterface { /** diff --git a/Slim/Routing/RouteCollector.php b/Slim/Routing/RouteCollector.php index 7bd6c401d..b2f4d7b65 100644 --- a/Slim/Routing/RouteCollector.php +++ b/Slim/Routing/RouteCollector.php @@ -21,6 +21,11 @@ use Slim\Interfaces\RouteInterface; use Slim\Interfaces\RouteParserInterface; +use function file_exists; +use function sprintf; +use function dirname; +use function array_pop; + /** * RouteCollector is used to collect routes and route groups * as well as generate paths and URLs relative to its environment diff --git a/Slim/Routing/RouteParser.php b/Slim/Routing/RouteParser.php index 358f9a827..74d748f52 100644 --- a/Slim/Routing/RouteParser.php +++ b/Slim/Routing/RouteParser.php @@ -16,6 +16,12 @@ use Slim\Interfaces\RouteCollectorInterface; use Slim\Interfaces\RouteParserInterface; +use function array_reverse; +use function is_string; +use function array_key_exists; +use function implode; +use function http_build_query; + class RouteParser implements RouteParserInterface { /** diff --git a/Slim/Routing/RouteResolver.php b/Slim/Routing/RouteResolver.php index cf260f57a..30f07d5fd 100644 --- a/Slim/Routing/RouteResolver.php +++ b/Slim/Routing/RouteResolver.php @@ -16,6 +16,8 @@ use Slim\Interfaces\RouteInterface; use Slim\Interfaces\RouteResolverInterface; +use function rawurldecode; + /** * RouteResolver instantiates the FastRoute dispatcher * and computes the routing results of a given URI and request method diff --git a/Slim/Routing/RoutingResults.php b/Slim/Routing/RoutingResults.php index 6eaabdd11..b67abe28b 100644 --- a/Slim/Routing/RoutingResults.php +++ b/Slim/Routing/RoutingResults.php @@ -12,6 +12,8 @@ use Slim\Interfaces\DispatcherInterface; +use function rawurldecode; + class RoutingResults { public const NOT_FOUND = 0; diff --git a/tests/AppTest.php b/tests/AppTest.php index 89c8a4320..b99bdd7de 100644 --- a/tests/AppTest.php +++ b/tests/AppTest.php @@ -39,6 +39,17 @@ use Slim\Routing\RouteContext; use Slim\Tests\Mocks\MockAction; use stdClass; +use ReflectionProperty; +use ReflectionClass; + +use function ini_set; +use function tempnam; +use function sys_get_temp_dir; +use function strtolower; +use function array_shift; +use function json_encode; +use function array_key_exists; +use function count; class AppTest extends TestCase { @@ -690,17 +701,17 @@ public function testAddRoutingMiddleware() $routingMiddleware = $app->addRoutingMiddleware(); // Check that the routing middleware really has been added to the tip of the app middleware stack. - $middlewareDispatcherProperty = new \ReflectionProperty(App::class, 'middlewareDispatcher'); + $middlewareDispatcherProperty = new ReflectionProperty(App::class, 'middlewareDispatcher'); $middlewareDispatcherProperty->setAccessible(true); /** @var MiddlewareDispatcher $middlewareDispatcher */ $middlewareDispatcher = $middlewareDispatcherProperty->getValue($app); - $tipProperty = new \ReflectionProperty(MiddlewareDispatcher::class, 'tip'); + $tipProperty = new ReflectionProperty(MiddlewareDispatcher::class, 'tip'); $tipProperty->setAccessible(true); /** @var RequestHandlerInterface $tip */ $tip = $tipProperty->getValue($middlewareDispatcher); - $reflection = new \ReflectionClass($tip); + $reflection = new ReflectionClass($tip); $middlewareProperty = $reflection->getProperty('middleware'); $middlewareProperty->setAccessible(true); @@ -720,17 +731,17 @@ public function testAddErrorMiddleware() $errorMiddleware = $app->addErrorMiddleware(true, true, true); // Check that the error middleware really has been added to the tip of the app middleware stack. - $middlewareDispatcherProperty = new \ReflectionProperty(App::class, 'middlewareDispatcher'); + $middlewareDispatcherProperty = new ReflectionProperty(App::class, 'middlewareDispatcher'); $middlewareDispatcherProperty->setAccessible(true); /** @var MiddlewareDispatcher $middlewareDispatcher */ $middlewareDispatcher = $middlewareDispatcherProperty->getValue($app); - $tipProperty = new \ReflectionProperty(MiddlewareDispatcher::class, 'tip'); + $tipProperty = new ReflectionProperty(MiddlewareDispatcher::class, 'tip'); $tipProperty->setAccessible(true); /** @var RequestHandlerInterface $tip */ $tip = $tipProperty->getValue($middlewareDispatcher); - $reflection = new \ReflectionClass($tip); + $reflection = new ReflectionClass($tip); $middlewareProperty = $reflection->getProperty('middleware'); $middlewareProperty->setAccessible(true); @@ -750,17 +761,17 @@ public function testAddBodyParsingMiddleware() $bodyParsingMiddleware = $app->addBodyParsingMiddleware(); // Check that the body parsing middleware really has been added to the tip of the app middleware stack. - $middlewareDispatcherProperty = new \ReflectionProperty(App::class, 'middlewareDispatcher'); + $middlewareDispatcherProperty = new ReflectionProperty(App::class, 'middlewareDispatcher'); $middlewareDispatcherProperty->setAccessible(true); /** @var MiddlewareDispatcher $middlewareDispatcher */ $middlewareDispatcher = $middlewareDispatcherProperty->getValue($app); - $tipProperty = new \ReflectionProperty(MiddlewareDispatcher::class, 'tip'); + $tipProperty = new ReflectionProperty(MiddlewareDispatcher::class, 'tip'); $tipProperty->setAccessible(true); /** @var RequestHandlerInterface $tip */ $tip = $tipProperty->getValue($middlewareDispatcher); - $reflection = new \ReflectionClass($tip); + $reflection = new ReflectionClass($tip); $middlewareProperty = $reflection->getProperty('middleware'); $middlewareProperty->setAccessible(true); diff --git a/tests/Assets/HeaderStack.php b/tests/Assets/HeaderStack.php index 4c8426b54..82664df55 100644 --- a/tests/Assets/HeaderStack.php +++ b/tests/Assets/HeaderStack.php @@ -12,6 +12,9 @@ namespace Slim\Tests\Assets; +use function explode; +use function trim; + /** * Zend Framework (http://framework.zend.com/) * diff --git a/tests/Assets/PhpRoutingFunctionOverrides.php b/tests/Assets/PhpRoutingFunctionOverrides.php index ad01dff26..40f441933 100644 --- a/tests/Assets/PhpRoutingFunctionOverrides.php +++ b/tests/Assets/PhpRoutingFunctionOverrides.php @@ -10,6 +10,8 @@ namespace Slim\Routing; +use function stripos; + /** * Is a file descriptor writable * diff --git a/tests/Error/AbstractErrorRendererTest.php b/tests/Error/AbstractErrorRendererTest.php index a29c5894d..ff2f98f2d 100644 --- a/tests/Error/AbstractErrorRendererTest.php +++ b/tests/Error/AbstractErrorRendererTest.php @@ -21,6 +21,10 @@ use Slim\Tests\TestCase; use stdClass; +use function json_decode; +use function json_encode; +use function simplexml_load_string; + class AbstractErrorRendererTest extends TestCase { public function testHTMLErrorRendererDisplaysErrorDetails() diff --git a/tests/Middleware/BodyParsingMiddlewareTest.php b/tests/Middleware/BodyParsingMiddlewareTest.php index 9636d78a8..b4d5cc25c 100644 --- a/tests/Middleware/BodyParsingMiddlewareTest.php +++ b/tests/Middleware/BodyParsingMiddlewareTest.php @@ -17,6 +17,9 @@ use Slim\Middleware\BodyParsingMiddleware; use Slim\Tests\TestCase; +use function is_string; +use function simplexml_load_string; + class BodyParsingMiddlewareTest extends TestCase { /** diff --git a/tests/Middleware/OutputBufferingMiddlewareTest.php b/tests/Middleware/OutputBufferingMiddlewareTest.php index 23371eadd..10c0f4d8b 100644 --- a/tests/Middleware/OutputBufferingMiddlewareTest.php +++ b/tests/Middleware/OutputBufferingMiddlewareTest.php @@ -17,6 +17,8 @@ use Slim\Middleware\OutputBufferingMiddleware; use Slim\Tests\TestCase; +use function ob_get_contents; + class OutputBufferingMiddlewareTest extends TestCase { public function testStyleDefaultValid() diff --git a/tests/MiddlewareDispatcherTest.php b/tests/MiddlewareDispatcherTest.php index ac53515af..8ffcf0534 100644 --- a/tests/MiddlewareDispatcherTest.php +++ b/tests/MiddlewareDispatcherTest.php @@ -460,7 +460,7 @@ public function testThrowsExceptionForDeferredNonMiddlewareInterfaceClasses() /** @var RequestHandlerInterface $kernel */ $kernel = $kernelProphecy->reveal(); $dispatcher = $this->createMiddlewareDispatcher($kernel, null); - $dispatcher->addDeferred(\stdClass::class); + $dispatcher->addDeferred(stdClass::class); $dispatcher->handle($requestProphecy->reveal()); $kernelProphecy->handle(Argument::type(ServerRequestInterface::class))->shouldNotHaveBeenCalled(); diff --git a/tests/Mocks/MockAction.php b/tests/Mocks/MockAction.php index 9e5983c04..1ce3ab4c0 100644 --- a/tests/Mocks/MockAction.php +++ b/tests/Mocks/MockAction.php @@ -12,6 +12,10 @@ use InvalidArgumentException; +use function count; +use function json_encode; +use function compact; + class MockAction { public function __call($name, array $arguments) diff --git a/tests/Mocks/MockStream.php b/tests/Mocks/MockStream.php index e74aec53e..142b84a7a 100644 --- a/tests/Mocks/MockStream.php +++ b/tests/Mocks/MockStream.php @@ -13,6 +13,25 @@ use Exception; use InvalidArgumentException; use Psr\Http\Message\StreamInterface; +use RuntimeException; + +use function is_string; +use function fopen; +use function gettype; +use function is_resource; +use function fclose; +use function clearstatcache; +use function fstat; +use function ftell; +use function feof; +use function fseek; +use function var_export; +use function fwrite; +use function fread; +use function stream_get_contents; +use function stream_get_meta_data; + +use const SEEK_SET; class MockStream implements StreamInterface { @@ -56,15 +75,15 @@ class MockStream implements StreamInterface */ public function __construct($body = '') { - if (\is_string($body)) { - $resource = \fopen('php://temp', 'rw+'); - \fwrite($resource, $body); + if (is_string($body)) { + $resource = fopen('php://temp', 'rw+'); + fwrite($resource, $body); $body = $resource; } - if ('resource' === \gettype($body)) { + if ('resource' === gettype($body)) { $this->stream = $body; - $meta = \stream_get_meta_data($this->stream); + $meta = stream_get_meta_data($this->stream); $this->seekable = $meta['seekable']; $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]); $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]); @@ -100,8 +119,8 @@ public function __toString(): string public function close(): void { if (isset($this->stream)) { - if (\is_resource($this->stream)) { - \fclose($this->stream); + if (is_resource($this->stream)) { + fclose($this->stream); } $this->detach(); } @@ -133,10 +152,10 @@ public function getSize(): ?int // Clear the stat cache if the stream has a URI if ($this->uri) { - \clearstatcache(true, $this->uri); + clearstatcache(true, $this->uri); } - $stats = \fstat($this->stream); + $stats = fstat($this->stream); if (isset($stats['size'])) { $this->size = $stats['size']; @@ -148,8 +167,8 @@ public function getSize(): ?int public function tell(): int { - if (false === $result = \ftell($this->stream)) { - throw new \RuntimeException('Unable to determine stream position'); + if (false === $result = ftell($this->stream)) { + throw new RuntimeException('Unable to determine stream position'); } return $result; @@ -157,7 +176,7 @@ public function tell(): int public function eof(): bool { - return !$this->stream || \feof($this->stream); + return !$this->stream || feof($this->stream); } public function isSeekable(): bool @@ -165,14 +184,14 @@ public function isSeekable(): bool return $this->seekable; } - public function seek($offset, $whence = \SEEK_SET): void + public function seek($offset, $whence = SEEK_SET): void { if (!$this->seekable) { - throw new \RuntimeException('Stream is not seekable'); - } elseif (\fseek($this->stream, $offset, $whence) === -1) { - throw new \RuntimeException( + throw new RuntimeException('Stream is not seekable'); + } elseif (fseek($this->stream, $offset, $whence) === -1) { + throw new RuntimeException( 'Unable to seek to stream position ' - . $offset . ' with whence ' . \var_export($whence, true) + . $offset . ' with whence ' . var_export($whence, true) ); } } @@ -190,14 +209,14 @@ public function isWritable(): bool public function write($string): int { if (!$this->writable) { - throw new \RuntimeException('Cannot write to a non-writable stream'); + throw new RuntimeException('Cannot write to a non-writable stream'); } // We can't know the size after writing anything $this->size = null; - if (false === $result = \fwrite($this->stream, $string)) { - throw new \RuntimeException('Unable to write to stream'); + if (false === $result = fwrite($this->stream, $string)) { + throw new RuntimeException('Unable to write to stream'); } return $result; @@ -211,20 +230,20 @@ public function isReadable(): bool public function read($length): string { if (!$this->readable) { - throw new \RuntimeException('Cannot read from non-readable stream'); + throw new RuntimeException('Cannot read from non-readable stream'); } - return \fread($this->stream, $length); + return fread($this->stream, $length); } public function getContents(): string { if (!isset($this->stream)) { - throw new \RuntimeException('Unable to read stream contents'); + throw new RuntimeException('Unable to read stream contents'); } - if (false === $contents = \stream_get_contents($this->stream)) { - throw new \RuntimeException('Unable to read stream contents'); + if (false === $contents = stream_get_contents($this->stream)) { + throw new RuntimeException('Unable to read stream contents'); } return $contents; @@ -235,10 +254,10 @@ public function getMetadata($key = null) if (!isset($this->stream)) { return $key ? null : []; } elseif (null === $key) { - return \stream_get_meta_data($this->stream); + return stream_get_meta_data($this->stream); } - $meta = \stream_get_meta_data($this->stream); + $meta = stream_get_meta_data($this->stream); return isset($meta[$key]) ? $meta[$key] : null; } diff --git a/tests/Mocks/RequestHandlerTest.php b/tests/Mocks/RequestHandlerTest.php index 155242463..7025c876e 100644 --- a/tests/Mocks/RequestHandlerTest.php +++ b/tests/Mocks/RequestHandlerTest.php @@ -15,6 +15,8 @@ use Psr\Http\Server\RequestHandlerInterface; use Slim\Tests\Providers\PSR7ObjectProvider; +use function debug_backtrace; + class RequestHandlerTest implements RequestHandlerInterface { public static $CalledCount = 0; diff --git a/tests/Mocks/SlowPokeStream.php b/tests/Mocks/SlowPokeStream.php index d9e457719..ee9bf3000 100644 --- a/tests/Mocks/SlowPokeStream.php +++ b/tests/Mocks/SlowPokeStream.php @@ -13,6 +13,12 @@ use Exception; use Psr\Http\Message\StreamInterface; +use function usleep; +use function min; +use function str_repeat; + +use const SEEK_SET; + class SlowPokeStream implements StreamInterface { public const CHUNK_SIZE = 1; @@ -83,7 +89,7 @@ public function isWritable() public function read($length) { - \usleep(1); + usleep(1); $size = min($this->amountToRead, self::CHUNK_SIZE, $length); $this->amountToRead -= $size; return str_repeat('.', $size); diff --git a/tests/Mocks/SmallChunksStream.php b/tests/Mocks/SmallChunksStream.php index ec75190bb..906d48549 100644 --- a/tests/Mocks/SmallChunksStream.php +++ b/tests/Mocks/SmallChunksStream.php @@ -13,6 +13,11 @@ use Exception; use Psr\Http\Message\StreamInterface; +use function str_repeat; +use function min; + +use const SEEK_SET; + class SmallChunksStream implements StreamInterface { public const CHUNK_SIZE = 10; diff --git a/tests/Providers/PSR7ObjectProvider.php b/tests/Providers/PSR7ObjectProvider.php index 22f042cbf..cd9ab7a03 100644 --- a/tests/Providers/PSR7ObjectProvider.php +++ b/tests/Providers/PSR7ObjectProvider.php @@ -18,6 +18,10 @@ use Psr\Http\Message\StreamFactoryInterface; use Psr\Http\Message\StreamInterface; +use function array_merge; +use function time; +use function microtime; + /** * Class PSR7ObjectProvider * diff --git a/tests/ResponseEmitterTest.php b/tests/ResponseEmitterTest.php index db8c720ca..30045cdd0 100644 --- a/tests/ResponseEmitterTest.php +++ b/tests/ResponseEmitterTest.php @@ -15,6 +15,25 @@ use Slim\Tests\Mocks\MockStream; use Slim\Tests\Mocks\SlowPokeStream; use Slim\Tests\Mocks\SmallChunksStream; +use ReflectionClass; + +use function stream_get_filters; +use function in_array; +use function base64_decode; +use function strlen; +use function stream_filter_remove; +use function stream_filter_append; +use function fwrite; +use function rewind; +use function str_repeat; +use function popen; +use function trim; +use function fopen; + +use const STREAM_FILTER_WRITE; +use const STREAM_FILTER_READ; +use const CONNECTION_ABORTED; +use const CONNECTION_TIMEOUT; class ResponseEmitterTest extends TestCase { @@ -295,7 +314,7 @@ public function testWillHandleInvalidConnectionStatusWithAnIndeterminateBody() $responseEmitter = new ResponseEmitter(); - $mirror = new \ReflectionClass(ResponseEmitter::class); + $mirror = new ReflectionClass(ResponseEmitter::class); $emitBodyMethod = $mirror->getMethod('emitBody'); $emitBodyMethod->setAccessible(true); $emitBodyMethod->invoke($responseEmitter, $response); diff --git a/tests/Routing/DispatcherTest.php b/tests/Routing/DispatcherTest.php index d7fe99e21..0ba1c7fc5 100644 --- a/tests/Routing/DispatcherTest.php +++ b/tests/Routing/DispatcherTest.php @@ -19,6 +19,11 @@ use Slim\Routing\RoutingResults; use Slim\Tests\TestCase; +use function dirname; +use function uniqid; +use function microtime; +use function unlink; + class DispatcherTest extends TestCase { public function testCreateDispatcher() diff --git a/tests/Routing/RouteCollectorTest.php b/tests/Routing/RouteCollectorTest.php index e7cb46da0..adb308bd4 100644 --- a/tests/Routing/RouteCollectorTest.php +++ b/tests/Routing/RouteCollectorTest.php @@ -20,6 +20,12 @@ use Slim\Routing\RouteCollectorProxy; use Slim\Tests\TestCase; +use function file_exists; +use function unlink; +use function file_put_contents; +use function sprintf; +use function dirname; + class RouteCollectorTest extends TestCase { /** diff --git a/tests/Routing/RouteResolverTest.php b/tests/Routing/RouteResolverTest.php index 98b1f0adc..f2b7c5dd9 100644 --- a/tests/Routing/RouteResolverTest.php +++ b/tests/Routing/RouteResolverTest.php @@ -19,6 +19,8 @@ use Slim\Routing\RoutingResults; use Slim\Tests\TestCase; +use function sprintf; + class RouteResolverTest extends TestCase { public function computeRoutingResultsDataProvider(): array diff --git a/tests/Routing/RouteTest.php b/tests/Routing/RouteTest.php index 0ad4995ef..7ab98d805 100644 --- a/tests/Routing/RouteTest.php +++ b/tests/Routing/RouteTest.php @@ -35,6 +35,11 @@ use Slim\Tests\Mocks\MockMiddlewareWithoutInterface; use Slim\Tests\Mocks\RequestHandlerTest; +use function is_string; +use function is_callable; +use function ob_start; +use function ob_end_clean; + class RouteTest extends TestCase { /** From de07f779d229ec06080259a816b0740de830438c Mon Sep 17 00:00:00 2001 From: Thomas LE BERRE Date: Tue, 31 Dec 2019 14:26:40 +0100 Subject: [PATCH 4/8] Ordered imports --- Slim/CallableResolver.php | 8 ++++---- Slim/Error/Renderers/JsonErrorRenderer.php | 2 +- Slim/Factory/Psr17/Psr17Factory.php | 2 +- Slim/Handlers/ErrorHandler.php | 10 +++++----- Slim/Middleware/BodyParsingMiddleware.php | 16 +++++++-------- Slim/Middleware/MethodOverrideMiddleware.php | 2 +- Slim/Middleware/OutputBufferingMiddleware.php | 4 ++-- Slim/MiddlewareDispatcher.php | 6 +++--- Slim/ResponseEmitter.php | 6 +++--- Slim/Routing/Route.php | 4 ++-- Slim/Routing/RouteCollector.php | 4 ++-- Slim/Routing/RouteParser.php | 6 +++--- tests/AppTest.php | 16 +++++++-------- tests/Mocks/MockAction.php | 2 +- tests/Mocks/MockStream.php | 18 ++++++++--------- tests/Mocks/SlowPokeStream.php | 2 +- tests/Mocks/SmallChunksStream.php | 2 +- tests/Providers/PSR7ObjectProvider.php | 2 +- tests/ResponseEmitterTest.php | 20 +++++++++---------- tests/Routing/DispatcherTest.php | 2 +- tests/Routing/RouteCollectorTest.php | 4 ++-- tests/Routing/RouteTest.php | 4 ++-- 22 files changed, 71 insertions(+), 71 deletions(-) diff --git a/Slim/CallableResolver.php b/Slim/CallableResolver.php index 892bae537..91a1285cf 100644 --- a/Slim/CallableResolver.php +++ b/Slim/CallableResolver.php @@ -17,14 +17,14 @@ use RuntimeException; use Slim\Interfaces\AdvancedCallableResolverInterface; -use function is_string; -use function preg_match; use function class_exists; -use function sprintf; +use function is_array; use function is_callable; use function is_object; +use function is_string; use function json_encode; -use function is_array; +use function preg_match; +use function sprintf; final class CallableResolver implements AdvancedCallableResolverInterface { diff --git a/Slim/Error/Renderers/JsonErrorRenderer.php b/Slim/Error/Renderers/JsonErrorRenderer.php index 4645958cd..5ceb35921 100644 --- a/Slim/Error/Renderers/JsonErrorRenderer.php +++ b/Slim/Error/Renderers/JsonErrorRenderer.php @@ -13,8 +13,8 @@ use Slim\Error\AbstractErrorRenderer; use Throwable; -use function json_encode; use function get_class; +use function json_encode; use const JSON_PRETTY_PRINT; use const JSON_UNESCAPED_SLASHES; diff --git a/Slim/Factory/Psr17/Psr17Factory.php b/Slim/Factory/Psr17/Psr17Factory.php index 4597d887c..95f7d8bce 100644 --- a/Slim/Factory/Psr17/Psr17Factory.php +++ b/Slim/Factory/Psr17/Psr17Factory.php @@ -16,8 +16,8 @@ use Slim\Interfaces\Psr17FactoryInterface; use Slim\Interfaces\ServerRequestCreatorInterface; -use function get_called_class; use function class_exists; +use function get_called_class; abstract class Psr17Factory implements Psr17FactoryInterface { diff --git a/Slim/Handlers/ErrorHandler.php b/Slim/Handlers/ErrorHandler.php index 42a161195..a92d12f5f 100644 --- a/Slim/Handlers/ErrorHandler.php +++ b/Slim/Handlers/ErrorHandler.php @@ -26,16 +26,16 @@ use Throwable; use function array_intersect; -use function explode; +use function array_key_exists; use function array_keys; +use function call_user_func; use function count; use function current; -use function next; -use function preg_match; use function error_log; -use function array_key_exists; +use function explode; use function implode; -use function call_user_func; +use function next; +use function preg_match; /** * Default Slim application error handler diff --git a/Slim/Middleware/BodyParsingMiddleware.php b/Slim/Middleware/BodyParsingMiddleware.php index bd5be925e..1a121430d 100644 --- a/Slim/Middleware/BodyParsingMiddleware.php +++ b/Slim/Middleware/BodyParsingMiddleware.php @@ -16,18 +16,18 @@ use Psr\Http\Server\RequestHandlerInterface; use RuntimeException; -use function json_decode; -use function parse_str; -use function simplexml_load_string; -use function libxml_disable_entity_loader; -use function libxml_clear_errors; -use function libxml_use_internal_errors; use function count; +use function explode; +use function is_array; use function is_null; use function is_object; -use function is_array; use function is_string; -use function explode; +use function json_decode; +use function libxml_clear_errors; +use function libxml_disable_entity_loader; +use function libxml_use_internal_errors; +use function parse_str; +use function simplexml_load_string; use function strtolower; use function trim; diff --git a/Slim/Middleware/MethodOverrideMiddleware.php b/Slim/Middleware/MethodOverrideMiddleware.php index ae55b797b..39388aa5a 100644 --- a/Slim/Middleware/MethodOverrideMiddleware.php +++ b/Slim/Middleware/MethodOverrideMiddleware.php @@ -15,8 +15,8 @@ use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -use function strtoupper; use function is_array; +use function strtoupper; class MethodOverrideMiddleware implements MiddlewareInterface { diff --git a/Slim/Middleware/OutputBufferingMiddleware.php b/Slim/Middleware/OutputBufferingMiddleware.php index 1909746b0..198ee8f35 100644 --- a/Slim/Middleware/OutputBufferingMiddleware.php +++ b/Slim/Middleware/OutputBufferingMiddleware.php @@ -19,9 +19,9 @@ use Throwable; use function in_array; -use function ob_start; -use function ob_get_clean; use function ob_end_clean; +use function ob_get_clean; +use function ob_start; class OutputBufferingMiddleware implements MiddlewareInterface { diff --git a/Slim/MiddlewareDispatcher.php b/Slim/MiddlewareDispatcher.php index 932ac716f..08b1c536b 100644 --- a/Slim/MiddlewareDispatcher.php +++ b/Slim/MiddlewareDispatcher.php @@ -21,11 +21,11 @@ use Slim\Interfaces\CallableResolverInterface; use Slim\Interfaces\MiddlewareDispatcherInterface; -use function is_string; -use function preg_match; -use function function_exists; use function class_exists; +use function function_exists; use function is_callable; +use function is_string; +use function preg_match; use function sprintf; class MiddlewareDispatcher implements MiddlewareDispatcherInterface diff --git a/Slim/ResponseEmitter.php b/Slim/ResponseEmitter.php index fe319fa97..5c3129303 100644 --- a/Slim/ResponseEmitter.php +++ b/Slim/ResponseEmitter.php @@ -12,11 +12,11 @@ use Psr\Http\Message\ResponseInterface; -use function strtolower; -use function sprintf; +use function in_array; use function min; +use function sprintf; use function strlen; -use function in_array; +use function strtolower; use const CONNECTION_NORMAL; diff --git a/Slim/Routing/Route.php b/Slim/Routing/Route.php index 2265a1eae..47badf823 100644 --- a/Slim/Routing/Route.php +++ b/Slim/Routing/Route.php @@ -29,9 +29,9 @@ use function array_key_exists; use function array_replace; use function array_reverse; -use function is_array; -use function in_array; use function class_implements; +use function in_array; +use function is_array; class Route implements RouteInterface, RequestHandlerInterface { diff --git a/Slim/Routing/RouteCollector.php b/Slim/Routing/RouteCollector.php index b2f4d7b65..170935a6e 100644 --- a/Slim/Routing/RouteCollector.php +++ b/Slim/Routing/RouteCollector.php @@ -21,10 +21,10 @@ use Slim\Interfaces\RouteInterface; use Slim\Interfaces\RouteParserInterface; +use function array_pop; +use function dirname; use function file_exists; use function sprintf; -use function dirname; -use function array_pop; /** * RouteCollector is used to collect routes and route groups diff --git a/Slim/Routing/RouteParser.php b/Slim/Routing/RouteParser.php index 74d748f52..a2b79277b 100644 --- a/Slim/Routing/RouteParser.php +++ b/Slim/Routing/RouteParser.php @@ -16,11 +16,11 @@ use Slim\Interfaces\RouteCollectorInterface; use Slim\Interfaces\RouteParserInterface; -use function array_reverse; -use function is_string; use function array_key_exists; -use function implode; +use function array_reverse; use function http_build_query; +use function implode; +use function is_string; class RouteParser implements RouteParserInterface { diff --git a/tests/AppTest.php b/tests/AppTest.php index b99bdd7de..63f3ee126 100644 --- a/tests/AppTest.php +++ b/tests/AppTest.php @@ -19,6 +19,8 @@ use Psr\Http\Message\UriInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; +use ReflectionClass; +use ReflectionProperty; use RuntimeException; use Slim\App; use Slim\CallableResolver; @@ -39,17 +41,15 @@ use Slim\Routing\RouteContext; use Slim\Tests\Mocks\MockAction; use stdClass; -use ReflectionProperty; -use ReflectionClass; -use function ini_set; -use function tempnam; -use function sys_get_temp_dir; -use function strtolower; -use function array_shift; -use function json_encode; use function array_key_exists; +use function array_shift; use function count; +use function ini_set; +use function json_encode; +use function strtolower; +use function sys_get_temp_dir; +use function tempnam; class AppTest extends TestCase { diff --git a/tests/Mocks/MockAction.php b/tests/Mocks/MockAction.php index 1ce3ab4c0..09dda712b 100644 --- a/tests/Mocks/MockAction.php +++ b/tests/Mocks/MockAction.php @@ -12,9 +12,9 @@ use InvalidArgumentException; +use function compact; use function count; use function json_encode; -use function compact; class MockAction { diff --git a/tests/Mocks/MockStream.php b/tests/Mocks/MockStream.php index 142b84a7a..996b94a25 100644 --- a/tests/Mocks/MockStream.php +++ b/tests/Mocks/MockStream.php @@ -15,21 +15,21 @@ use Psr\Http\Message\StreamInterface; use RuntimeException; -use function is_string; -use function fopen; -use function gettype; -use function is_resource; -use function fclose; use function clearstatcache; -use function fstat; -use function ftell; +use function fclose; use function feof; +use function fopen; +use function fread; use function fseek; -use function var_export; +use function fstat; +use function ftell; use function fwrite; -use function fread; +use function gettype; +use function is_resource; +use function is_string; use function stream_get_contents; use function stream_get_meta_data; +use function var_export; use const SEEK_SET; diff --git a/tests/Mocks/SlowPokeStream.php b/tests/Mocks/SlowPokeStream.php index ee9bf3000..b5547b295 100644 --- a/tests/Mocks/SlowPokeStream.php +++ b/tests/Mocks/SlowPokeStream.php @@ -13,9 +13,9 @@ use Exception; use Psr\Http\Message\StreamInterface; -use function usleep; use function min; use function str_repeat; +use function usleep; use const SEEK_SET; diff --git a/tests/Mocks/SmallChunksStream.php b/tests/Mocks/SmallChunksStream.php index 906d48549..b136c7f37 100644 --- a/tests/Mocks/SmallChunksStream.php +++ b/tests/Mocks/SmallChunksStream.php @@ -13,8 +13,8 @@ use Exception; use Psr\Http\Message\StreamInterface; -use function str_repeat; use function min; +use function str_repeat; use const SEEK_SET; diff --git a/tests/Providers/PSR7ObjectProvider.php b/tests/Providers/PSR7ObjectProvider.php index cd9ab7a03..3d0e73bf1 100644 --- a/tests/Providers/PSR7ObjectProvider.php +++ b/tests/Providers/PSR7ObjectProvider.php @@ -19,8 +19,8 @@ use Psr\Http\Message\StreamInterface; use function array_merge; -use function time; use function microtime; +use function time; /** * Class PSR7ObjectProvider diff --git a/tests/ResponseEmitterTest.php b/tests/ResponseEmitterTest.php index 30045cdd0..9f164c2f0 100644 --- a/tests/ResponseEmitterTest.php +++ b/tests/ResponseEmitterTest.php @@ -10,30 +10,30 @@ namespace Slim\Tests; +use ReflectionClass; use Slim\ResponseEmitter; use Slim\Tests\Assets\HeaderStack; use Slim\Tests\Mocks\MockStream; use Slim\Tests\Mocks\SlowPokeStream; use Slim\Tests\Mocks\SmallChunksStream; -use ReflectionClass; -use function stream_get_filters; -use function in_array; use function base64_decode; -use function strlen; -use function stream_filter_remove; -use function stream_filter_append; +use function fopen; use function fwrite; +use function in_array; +use function popen; use function rewind; use function str_repeat; -use function popen; +use function stream_filter_append; +use function stream_filter_remove; +use function stream_get_filters; +use function strlen; use function trim; -use function fopen; -use const STREAM_FILTER_WRITE; -use const STREAM_FILTER_READ; use const CONNECTION_ABORTED; use const CONNECTION_TIMEOUT; +use const STREAM_FILTER_READ; +use const STREAM_FILTER_WRITE; class ResponseEmitterTest extends TestCase { diff --git a/tests/Routing/DispatcherTest.php b/tests/Routing/DispatcherTest.php index 0ba1c7fc5..5ef716127 100644 --- a/tests/Routing/DispatcherTest.php +++ b/tests/Routing/DispatcherTest.php @@ -20,8 +20,8 @@ use Slim\Tests\TestCase; use function dirname; -use function uniqid; use function microtime; +use function uniqid; use function unlink; class DispatcherTest extends TestCase diff --git a/tests/Routing/RouteCollectorTest.php b/tests/Routing/RouteCollectorTest.php index adb308bd4..598c91fab 100644 --- a/tests/Routing/RouteCollectorTest.php +++ b/tests/Routing/RouteCollectorTest.php @@ -20,11 +20,11 @@ use Slim\Routing\RouteCollectorProxy; use Slim\Tests\TestCase; +use function dirname; use function file_exists; -use function unlink; use function file_put_contents; use function sprintf; -use function dirname; +use function unlink; class RouteCollectorTest extends TestCase { diff --git a/tests/Routing/RouteTest.php b/tests/Routing/RouteTest.php index 7ab98d805..25491af03 100644 --- a/tests/Routing/RouteTest.php +++ b/tests/Routing/RouteTest.php @@ -35,10 +35,10 @@ use Slim\Tests\Mocks\MockMiddlewareWithoutInterface; use Slim\Tests\Mocks\RequestHandlerTest; -use function is_string; use function is_callable; -use function ob_start; +use function is_string; use function ob_end_clean; +use function ob_start; class RouteTest extends TestCase { From 158afb5c5190b1de8b333e349ce258ab722f4d1a Mon Sep 17 00:00:00 2001 From: Thomas LE BERRE Date: Thu, 2 Jan 2020 12:17:37 +0100 Subject: [PATCH 5/8] Change internal functions during tests using adriansuter/php-autoload-override library --- Slim/ResponseEmitter.php | 3 ++ Slim/Routing/RouteCollector.php | 2 ++ composer.json | 12 +++++--- tests/bootstrap.php | 49 +++++++++++++++++++++++++++++++-- 4 files changed, 59 insertions(+), 7 deletions(-) diff --git a/Slim/ResponseEmitter.php b/Slim/ResponseEmitter.php index 5c3129303..51294f4f6 100644 --- a/Slim/ResponseEmitter.php +++ b/Slim/ResponseEmitter.php @@ -12,6 +12,9 @@ use Psr\Http\Message\ResponseInterface; +use function connection_status; +use function header; +use function headers_sent; use function in_array; use function min; use function sprintf; diff --git a/Slim/Routing/RouteCollector.php b/Slim/Routing/RouteCollector.php index 170935a6e..0508c9400 100644 --- a/Slim/Routing/RouteCollector.php +++ b/Slim/Routing/RouteCollector.php @@ -25,6 +25,8 @@ use function dirname; use function file_exists; use function sprintf; +use function is_readable; +use function is_writable; /** * RouteCollector is used to collect routes and route groups diff --git a/composer.json b/composer.json index d3c990104..42954403f 100644 --- a/composer.json +++ b/composer.json @@ -33,9 +33,9 @@ } ], "require": { + "php": "^7.2", "ext-json": "*", "nikic/fast-route": "^1.3", - "php": "^7.2", "psr/container": "^1.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0", @@ -44,17 +44,18 @@ }, "require-dev": { "ext-simplexml": "*", + "adriansuter/php-autoload-override": "v0.1-beta", "guzzlehttp/psr7": "^1.5", "http-interop/http-factory-guzzle": "^1.0", + "laminas/laminas-diactoros": "^2.1", "nyholm/psr7": "^1.1", "nyholm/psr7-server": "^0.3.0", - "phpunit/phpunit": "^8.5", "phpspec/prophecy": "^1.10", "phpstan/phpstan": "^0.11.5", + "phpunit/phpunit": "^8.5", "slim/http": "^0.7", "slim/psr7": "^0.3", - "squizlabs/php_codesniffer": "^3.4.2", - "laminas/laminas-diactoros": "^2.1" + "squizlabs/php_codesniffer": "^3.5" }, "autoload": { "psr-4": { @@ -81,5 +82,8 @@ "ext-xml": "Needed to support XML format in BodyParsingMiddleware", "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information.", "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim" + }, + "config": { + "sort-packages": true } } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 3c71a2a3d..23184944d 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -8,7 +8,50 @@ declare(strict_types=1); -require __DIR__ . '/../vendor/autoload.php'; +use AdrianSuter\Autoload\Override\Override; +use Slim\ResponseEmitter; +use Slim\Routing\RouteCollector; +use Slim\Tests\Assets\HeaderStack; -require __DIR__ . '/Assets/PhpFunctionOverrides.php'; -require __DIR__ . '/Assets/PhpRoutingFunctionOverrides.php'; +$classLoader = require __DIR__ . '/../vendor/autoload.php'; + +//require __DIR__ . '/Assets/PhpFunctionOverrides.php'; +//require __DIR__ . '/Assets/PhpRoutingFunctionOverrides.php'; + +Override::apply($classLoader, [ + ResponseEmitter::class => [ + 'connection_status' => function (): int { + if (isset($GLOBALS['connection_status_return'])) { + return $GLOBALS['connection_status_return']; + } + + return connection_status(); + }, + 'header' => function (string $string, bool $replace = true, int $statusCode = null): void { + HeaderStack::push( + [ + 'header' => $string, + 'replace' => $replace, + 'status_code' => $statusCode, + ] + ); + }, + 'headers_sent' => function (): bool { + return false; + } + ], + RouteCollector::class => [ + 'is_readable' => function (string $file): bool { + if (stripos($file, 'non-readable.cache') !== false) { + return false; + } + return true; + }, + 'is_writable' => function (string $path): bool { + if (stripos($path, 'non-writable-directory') !== false) { + return false; + } + return true; + } + ] +]); From 78603a563d9c27b4630b2fe262d801f0305a8d29 Mon Sep 17 00:00:00 2001 From: Adrian Suter Date: Thu, 2 Jan 2020 22:18:17 +0100 Subject: [PATCH 6/8] Rename class alias for Diactoros --- tests/Factory/AppFactoryTest.php | 8 ++++---- tests/Factory/ServerRequestCreatorFactoryTest.php | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/Factory/AppFactoryTest.php b/tests/Factory/AppFactoryTest.php index ae0ed2c3e..a4a38be67 100644 --- a/tests/Factory/AppFactoryTest.php +++ b/tests/Factory/AppFactoryTest.php @@ -10,7 +10,7 @@ namespace Slim\Tests\Factory; use Http\Factory\Guzzle\ResponseFactory as GuzzleResponseFactory; -use Laminas\Diactoros\ResponseFactory as LaminasResponseFactory; +use Laminas\Diactoros\ResponseFactory as LaminasDiactorosResponseFactory; use Nyholm\Psr7\Factory\Psr17Factory; use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseFactoryInterface; @@ -36,7 +36,7 @@ use Slim\Routing\RouteCollector; use Slim\Tests\Mocks\MockPsr17FactoryWithoutStreamFactory; use Slim\Tests\TestCase; -use Zend\Diactoros\ResponseFactory as ZendResponseFactory; +use Zend\Diactoros\ResponseFactory as ZendDiactorosResponseFactory; class AppFactoryTest extends TestCase { @@ -46,8 +46,8 @@ public function provideImplementations() [SlimPsr17Factory::class, SlimResponseFactory::class], [NyholmPsr17Factory::class, Psr17Factory::class], [GuzzlePsr17Factory::class, GuzzleResponseFactory::class], - [LaminasDiactorosPsr17Factory::class, LaminasResponseFactory::class], - [ZendDiactorosPsr17Factory::class, ZendResponseFactory::class], + [LaminasDiactorosPsr17Factory::class, LaminasDiactorosResponseFactory::class], + [ZendDiactorosPsr17Factory::class, ZendDiactorosResponseFactory::class], ]; } diff --git a/tests/Factory/ServerRequestCreatorFactoryTest.php b/tests/Factory/ServerRequestCreatorFactoryTest.php index 7b9ef6e49..c27f347bc 100644 --- a/tests/Factory/ServerRequestCreatorFactoryTest.php +++ b/tests/Factory/ServerRequestCreatorFactoryTest.php @@ -10,7 +10,7 @@ namespace Slim\Tests\Factory; use GuzzleHttp\Psr7\ServerRequest as GuzzleServerRequest; -use Laminas\Diactoros\ServerRequest as LaminasServerRequest; +use Laminas\Diactoros\ServerRequest as LaminasDiactorosServerRequest; use Nyholm\Psr7\ServerRequest as NyholmServerRequest; use Psr\Http\Message\ServerRequestInterface; use RuntimeException; @@ -26,7 +26,7 @@ use Slim\Interfaces\ServerRequestCreatorInterface; use Slim\Psr7\Request as SlimServerRequest; use Slim\Tests\TestCase; -use Zend\Diactoros\ServerRequest as ZendServerRequest; +use Zend\Diactoros\ServerRequest as ZendDiactorosServerRequest; class ServerRequestCreatorFactoryTest extends TestCase { @@ -36,8 +36,8 @@ public function provideImplementations() [SlimPsr17Factory::class, SlimServerRequest::class], [NyholmPsr17Factory::class, NyholmServerRequest::class], [GuzzlePsr17Factory::class, GuzzleServerRequest::class], - [LaminasDiactorosPsr17Factory::class, LaminasServerRequest::class], - [ZendDiactorosPsr17Factory::class, ZendServerRequest::class], + [LaminasDiactorosPsr17Factory::class, LaminasDiactorosServerRequest::class], + [ZendDiactorosPsr17Factory::class, ZendDiactorosServerRequest::class], ]; } From 79fd8829e5d9daf15578b169651b92eb0dd1b6e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20B=C3=A9rub=C3=A9?= Date: Thu, 2 Jan 2020 21:35:08 -0700 Subject: [PATCH 7/8] add missing blank line above header block --- Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php | 1 + 1 file changed, 1 insertion(+) diff --git a/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php b/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php index a6d3a5654..097bc21b4 100644 --- a/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php +++ b/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php @@ -1,4 +1,5 @@ Date: Sat, 4 Jan 2020 20:28:56 +0100 Subject: [PATCH 8/8] Update php-autoload-override version --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 42954403f..23389111a 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,7 @@ }, "require-dev": { "ext-simplexml": "*", - "adriansuter/php-autoload-override": "v0.1-beta", + "adriansuter/php-autoload-override": "^1.0", "guzzlehttp/psr7": "^1.5", "http-interop/http-factory-guzzle": "^1.0", "laminas/laminas-diactoros": "^2.1",