From f705ac9dc405de73e660708323af83333a6d4e56 Mon Sep 17 00:00:00 2001 From: Ruben Jacobs Date: Tue, 16 Jul 2019 20:52:17 +0200 Subject: [PATCH 1/2] [HttpClient] Allow enabling buffering conditionally with a Closure --- src/Symfony/Component/HttpClient/CHANGELOG.md | 1 + .../Component/HttpClient/CachingHttpClient.php | 3 +-- .../Component/HttpClient/CurlHttpClient.php | 8 ++++++-- .../Component/HttpClient/HttpClientTrait.php | 11 +++++++++++ .../Component/HttpClient/NativeHttpClient.php | 8 ++++++-- .../HttpClient/Response/CurlResponse.php | 14 +++++++++----- .../HttpClient/Response/MockResponse.php | 7 ++++++- .../HttpClient/Response/NativeResponse.php | 10 +++++++++- .../HttpClient/Response/ResponseTrait.php | 2 +- .../HttpClient/Tests/HttpClientTestCase.php | 18 ++++++++++++++++++ 10 files changed, 68 insertions(+), 14 deletions(-) diff --git a/src/Symfony/Component/HttpClient/CHANGELOG.md b/src/Symfony/Component/HttpClient/CHANGELOG.md index 9fcfa7ee9a..973bb6107b 100644 --- a/src/Symfony/Component/HttpClient/CHANGELOG.md +++ b/src/Symfony/Component/HttpClient/CHANGELOG.md @@ -11,6 +11,7 @@ CHANGELOG * added `$response->toStream()` to cast responses to regular PHP streams * made `Psr18Client` implement relevant PSR-17 factories and have streaming responses * added `TraceableHttpClient`, `HttpClientDataCollector` and `HttpClientPass` to integrate with the web profiler + * allow enabling buffering conditionally with a Closure 4.3.0 ----- diff --git a/src/Symfony/Component/HttpClient/CachingHttpClient.php b/src/Symfony/Component/HttpClient/CachingHttpClient.php index 65426ef647..3d7a1232f6 100644 --- a/src/Symfony/Component/HttpClient/CachingHttpClient.php +++ b/src/Symfony/Component/HttpClient/CachingHttpClient.php @@ -68,9 +68,8 @@ class CachingHttpClient implements HttpClientInterface { [$url, $options] = $this->prepareRequest($method, $url, $options, $this->defaultOptions, true); $url = implode('', $url); - $options['extra']['no_cache'] = $options['extra']['no_cache'] ?? !$options['buffer']; - if (!empty($options['body']) || $options['extra']['no_cache'] || !\in_array($method, ['GET', 'HEAD', 'OPTIONS'])) { + if (!empty($options['body']) || !empty($options['extra']['no_cache']) || !\in_array($method, ['GET', 'HEAD', 'OPTIONS'])) { return $this->client->request($method, $url, $options); } diff --git a/src/Symfony/Component/HttpClient/CurlHttpClient.php b/src/Symfony/Component/HttpClient/CurlHttpClient.php index 9ecd62b086..bdd1992cf3 100644 --- a/src/Symfony/Component/HttpClient/CurlHttpClient.php +++ b/src/Symfony/Component/HttpClient/CurlHttpClient.php @@ -37,7 +37,9 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface use HttpClientTrait; use LoggerAwareTrait; - private $defaultOptions = self::OPTIONS_DEFAULTS + [ + private $defaultOptions = [ + 'buffer' => null, // bool|\Closure - a boolean or a closure telling if the response should be buffered based on its headers + ] + self::OPTIONS_DEFAULTS + [ 'auth_ntlm' => null, // array|string - an array containing the username as first value, and optionally the // password as the second one; or string like username:password - enabling NTLM auth ]; @@ -62,8 +64,10 @@ final class CurlHttpClient implements HttpClientInterface, LoggerAwareInterface throw new \LogicException('You cannot use the "Symfony\Component\HttpClient\CurlHttpClient" as the "curl" extension is not installed.'); } + $this->defaultOptions['buffer'] = \Closure::fromCallable([__CLASS__, 'shouldBuffer']); + if ($defaultOptions) { - [, $this->defaultOptions] = self::prepareRequest(null, null, $defaultOptions, self::OPTIONS_DEFAULTS); + [, $this->defaultOptions] = self::prepareRequest(null, null, $defaultOptions, $this->defaultOptions); } $this->multi = $multi = new CurlClientState(); diff --git a/src/Symfony/Component/HttpClient/HttpClientTrait.php b/src/Symfony/Component/HttpClient/HttpClientTrait.php index c5c1cdb25f..b42d2369c3 100644 --- a/src/Symfony/Component/HttpClient/HttpClientTrait.php +++ b/src/Symfony/Component/HttpClient/HttpClientTrait.php @@ -503,4 +503,15 @@ trait HttpClientTrait return implode('&', $replace ? array_replace($query, $queryArray) : ($query + $queryArray)); } + + private static function shouldBuffer(array $headers): bool + { + $contentType = $headers['content-type'][0] ?? null; + + if (false !== $i = strpos($contentType, ';')) { + $contentType = substr($contentType, 0, $i); + } + + return $contentType && preg_match('#^(?:text/|application/(?:.+\+)?(?:json|xml)$)#i', $contentType); + } } diff --git a/src/Symfony/Component/HttpClient/NativeHttpClient.php b/src/Symfony/Component/HttpClient/NativeHttpClient.php index f39d72c450..35a26d9e6c 100644 --- a/src/Symfony/Component/HttpClient/NativeHttpClient.php +++ b/src/Symfony/Component/HttpClient/NativeHttpClient.php @@ -35,7 +35,9 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac use HttpClientTrait; use LoggerAwareTrait; - private $defaultOptions = self::OPTIONS_DEFAULTS; + private $defaultOptions = [ + 'buffer' => null, // bool|\Closure - a boolean or a closure telling if the response should be buffered based on its headers + ] + self::OPTIONS_DEFAULTS; /** @var NativeClientState */ private $multi; @@ -48,8 +50,10 @@ final class NativeHttpClient implements HttpClientInterface, LoggerAwareInterfac */ public function __construct(array $defaultOptions = [], int $maxHostConnections = 6) { + $this->defaultOptions['buffer'] = \Closure::fromCallable([__CLASS__, 'shouldBuffer']); + if ($defaultOptions) { - [, $this->defaultOptions] = self::prepareRequest(null, null, $defaultOptions, self::OPTIONS_DEFAULTS); + [, $this->defaultOptions] = self::prepareRequest(null, null, $defaultOptions, $this->defaultOptions); } $this->multi = new NativeClientState(); diff --git a/src/Symfony/Component/HttpClient/Response/CurlResponse.php b/src/Symfony/Component/HttpClient/Response/CurlResponse.php index a064361763..35aec9b09e 100644 --- a/src/Symfony/Component/HttpClient/Response/CurlResponse.php +++ b/src/Symfony/Component/HttpClient/Response/CurlResponse.php @@ -63,18 +63,18 @@ final class CurlResponse implements ResponseInterface } if (null === $content = &$this->content) { - $content = ($options['buffer'] ?? true) ? fopen('php://temp', 'w+') : null; + $content = true === $options['buffer'] ? fopen('php://temp', 'w+') : null; } else { // Move the pushed response to the activity list if (ftell($content)) { rewind($content); $multi->handlesActivity[$id][] = stream_get_contents($content); } - $content = ($options['buffer'] ?? true) ? $content : null; + $content = true === $options['buffer'] ? $content : null; } - curl_setopt($ch, CURLOPT_HEADERFUNCTION, static function ($ch, string $data) use (&$info, &$headers, $options, $multi, $id, &$location, $resolveRedirect, $logger): int { - return self::parseHeaderLine($ch, $data, $info, $headers, $options, $multi, $id, $location, $resolveRedirect, $logger); + curl_setopt($ch, CURLOPT_HEADERFUNCTION, static function ($ch, string $data) use (&$info, &$headers, $options, $multi, $id, &$location, $resolveRedirect, $logger, &$content): int { + return self::parseHeaderLine($ch, $data, $info, $headers, $options, $multi, $id, $location, $resolveRedirect, $logger, $content); }); if (null === $options) { @@ -280,7 +280,7 @@ final class CurlResponse implements ResponseInterface /** * Parses header lines as curl yields them to us. */ - private static function parseHeaderLine($ch, string $data, array &$info, array &$headers, ?array $options, CurlClientState $multi, int $id, ?string &$location, ?callable $resolveRedirect, ?LoggerInterface $logger): int + private static function parseHeaderLine($ch, string $data, array &$info, array &$headers, ?array $options, CurlClientState $multi, int $id, ?string &$location, ?callable $resolveRedirect, ?LoggerInterface $logger, &$content = null): int { if (!\in_array($waitFor = @curl_getinfo($ch, CURLINFO_PRIVATE), ['headers', 'destruct'], true)) { return \strlen($data); // Ignore HTTP trailers @@ -348,6 +348,10 @@ final class CurlResponse implements ResponseInterface return 0; } + if ($options['buffer'] instanceof \Closure && !$content && $options['buffer']($headers)) { + $content = fopen('php://temp', 'w+'); + } + curl_setopt($ch, CURLOPT_PRIVATE, 'content'); } elseif (null !== $info['redirect_url'] && $logger) { $logger->info(sprintf('Redirecting: "%s %s"', $info['http_code'], $info['redirect_url'])); diff --git a/src/Symfony/Component/HttpClient/Response/MockResponse.php b/src/Symfony/Component/HttpClient/Response/MockResponse.php index fe94bc3436..d5599f7765 100644 --- a/src/Symfony/Component/HttpClient/Response/MockResponse.php +++ b/src/Symfony/Component/HttpClient/Response/MockResponse.php @@ -103,7 +103,12 @@ class MockResponse implements ResponseInterface $response = new self([]); $response->requestOptions = $options; $response->id = ++self::$idSequence; - $response->content = ($options['buffer'] ?? true) ? fopen('php://temp', 'w+') : null; + + if (($options['buffer'] ?? null) instanceof \Closure) { + $response->content = $options['buffer']($mock->getHeaders(false)) ? fopen('php://temp', 'w+') : null; + } else { + $response->content = true === ($options['buffer'] ?? true) ? fopen('php://temp', 'w+') : null; + } $response->initializer = static function (self $response) { if (null !== $response->info['error']) { throw new TransportException($response->info['error']); diff --git a/src/Symfony/Component/HttpClient/Response/NativeResponse.php b/src/Symfony/Component/HttpClient/Response/NativeResponse.php index 7aa2d8022d..e0fb09327b 100644 --- a/src/Symfony/Component/HttpClient/Response/NativeResponse.php +++ b/src/Symfony/Component/HttpClient/Response/NativeResponse.php @@ -35,6 +35,7 @@ final class NativeResponse implements ResponseInterface private $inflate; private $multi; private $debugBuffer; + private $shouldBuffer; /** * @internal @@ -50,7 +51,8 @@ final class NativeResponse implements ResponseInterface $this->info = &$info; $this->resolveRedirect = $resolveRedirect; $this->onProgress = $onProgress; - $this->content = $options['buffer'] ? fopen('php://temp', 'w+') : null; + $this->content = true === $options['buffer'] ? fopen('php://temp', 'w+') : null; + $this->shouldBuffer = $options['buffer'] instanceof \Closure ? $options['buffer'] : null; // Temporary resources to dechunk/inflate the response stream $this->buffer = fopen('php://temp', 'w+'); @@ -92,6 +94,8 @@ final class NativeResponse implements ResponseInterface public function __destruct() { + $this->shouldBuffer = null; + try { $this->doDestruct(); } finally { @@ -152,6 +156,10 @@ final class NativeResponse implements ResponseInterface stream_set_blocking($h, false); $this->context = $this->resolveRedirect = null; + if (null !== $this->shouldBuffer && null === $this->content && ($this->shouldBuffer)($this->headers)) { + $this->content = fopen('php://temp', 'w+'); + } + if (isset($context['ssl']['peer_certificate_chain'])) { $this->info['peer_certificate_chain'] = $context['ssl']['peer_certificate_chain']; } diff --git a/src/Symfony/Component/HttpClient/Response/ResponseTrait.php b/src/Symfony/Component/HttpClient/Response/ResponseTrait.php index 4be2706003..c51b3d3c05 100644 --- a/src/Symfony/Component/HttpClient/Response/ResponseTrait.php +++ b/src/Symfony/Component/HttpClient/Response/ResponseTrait.php @@ -117,7 +117,7 @@ trait ResponseTrait } if (null === $content) { - throw new TransportException('Cannot get the content of the response twice: the request was issued with option "buffer" set to false.'); + throw new TransportException('Cannot get the content of the response twice: buffering is disabled.'); } return $content; diff --git a/src/Symfony/Component/HttpClient/Tests/HttpClientTestCase.php b/src/Symfony/Component/HttpClient/Tests/HttpClientTestCase.php index 1e7fe180a3..fbe68d8c80 100644 --- a/src/Symfony/Component/HttpClient/Tests/HttpClientTestCase.php +++ b/src/Symfony/Component/HttpClient/Tests/HttpClientTestCase.php @@ -11,6 +11,7 @@ namespace Symfony\Component\HttpClient\Tests; +use Symfony\Component\HttpClient\Exception\TransportException; use Symfony\Contracts\HttpClient\Test\HttpClientTestCase as BaseHttpClientTestCase; abstract class HttpClientTestCase extends BaseHttpClientTestCase @@ -37,4 +38,21 @@ abstract class HttpClientTestCase extends BaseHttpClientTestCase $this->assertSame('', fread($stream, 1)); $this->assertTrue(feof($stream)); } + + public function testConditionalBuffering() + { + $client = $this->getHttpClient(__FUNCTION__); + $response = $client->request('GET', 'http://localhost:8057'); + $firstContent = $response->getContent(); + $secondContent = $response->getContent(); + + $this->assertSame($firstContent, $secondContent); + + $response = $client->request('GET', 'http://localhost:8057', ['buffer' => function () { return false; }]); + $response->getContent(); + + $this->expectException(TransportException::class); + $this->expectExceptionMessage('Cannot get the content of the response twice: buffering is disabled.'); + $response->getContent(); + } } From 919afd211227ac61de44805fa3e396f97dfc4b2a Mon Sep 17 00:00:00 2001 From: "Alexander M. Turek" Date: Sun, 8 Sep 2019 22:49:38 +0200 Subject: [PATCH 2/2] [Cache] Add types to constructors and private/final/internal methods. --- .../Component/Cache/Adapter/ProxyAdapter.php | 2 +- src/Symfony/Component/Cache/CacheItem.php | 2 +- src/Symfony/Component/Cache/LockRegistry.php | 2 ++ .../Component/Cache/Simple/AbstractCache.php | 2 +- .../Component/Cache/Simple/ChainCache.php | 2 +- .../Component/Cache/Simple/PhpArrayCache.php | 2 +- .../Component/Cache/Simple/TraceableCache.php | 2 +- .../Adapter/AbstractRedisAdapterTest.php | 2 +- .../Cache/Tests/Adapter/ApcuAdapterTest.php | 2 +- .../Cache/Tests/Adapter/ArrayAdapterTest.php | 2 +- .../Cache/Tests/Adapter/ChainAdapterTest.php | 34 ++++--------------- .../Tests/Adapter/DoctrineAdapterTest.php | 2 +- .../Tests/Adapter/FilesystemAdapterTest.php | 6 ++-- .../Adapter/FilesystemTagAwareAdapterTest.php | 2 +- .../Tests/Adapter/MaxIdLengthAdapterTest.php | 2 +- .../Tests/Adapter/MemcachedAdapterTest.php | 12 +++---- .../Adapter/NamespacedProxyAdapterTest.php | 2 +- .../Cache/Tests/Adapter/PdoAdapterTest.php | 2 +- .../Tests/Adapter/PdoDbalAdapterTest.php | 2 +- .../Tests/Adapter/PhpArrayAdapterTest.php | 2 +- .../PhpArrayAdapterWithFallbackTest.php | 2 +- .../Tests/Adapter/PhpFilesAdapterTest.php | 2 +- .../Adapter/PredisTagAwareAdapterTest.php | 2 +- .../PredisTagAwareClusterAdapterTest.php | 2 +- .../PredisTagAwareRedisClusterAdapterTest.php | 2 +- .../Cache/Tests/Adapter/ProxyAdapterTest.php | 2 +- .../Cache/Tests/Adapter/Psr16AdapterTest.php | 2 +- .../Cache/Tests/Adapter/RedisAdapterTest.php | 14 ++++---- .../Tests/Adapter/RedisClusterAdapterTest.php | 6 ++-- .../Adapter/RedisTagAwareAdapterTest.php | 2 +- .../Adapter/RedisTagAwareArrayAdapterTest.php | 2 +- .../RedisTagAwareClusterAdapterTest.php | 2 +- .../Tests/Adapter/SimpleCacheAdapterTest.php | 2 +- .../Tests/Adapter/TagAwareAdapterTest.php | 28 ++++----------- ...TagAwareAndProxyAdapterIntegrationTest.php | 2 +- .../Tests/Adapter/TraceableAdapterTest.php | 2 +- .../Component/Cache/Tests/CacheItemTest.php | 2 +- .../Component/Cache/Tests/Psr16CacheTest.php | 4 +-- .../Tests/Simple/AbstractRedisCacheTest.php | 2 +- .../Cache/Tests/Simple/ApcuCacheTest.php | 2 +- .../Cache/Tests/Simple/ArrayCacheTest.php | 2 +- .../Cache/Tests/Simple/ChainCacheTest.php | 34 ++++--------------- .../Cache/Tests/Simple/DoctrineCacheTest.php | 2 +- .../Tests/Simple/FilesystemCacheTest.php | 4 +-- .../Cache/Tests/Simple/MemcachedCacheTest.php | 10 +++--- .../Simple/MemcachedCacheTextModeTest.php | 2 +- .../Cache/Tests/Simple/NullCacheTest.php | 2 +- .../Cache/Tests/Simple/PdoCacheTest.php | 2 +- .../Cache/Tests/Simple/PdoDbalCacheTest.php | 2 +- .../Simple/PhpArrayCacheWithFallbackTest.php | 2 +- .../Cache/Tests/Simple/PhpFilesCacheTest.php | 4 +-- .../Cache/Tests/Simple/Psr6CacheTest.php | 5 +-- .../Tests/Simple/Psr6CacheWithAdapterTest.php | 3 +- .../Simple/Psr6CacheWithoutAdapterTest.php | 3 +- .../Cache/Tests/Simple/RedisCacheTest.php | 8 ++--- .../Cache/Tests/Simple/TraceableCacheTest.php | 2 +- .../Cache/Tests/Traits/PdoPruneableTrait.php | 2 +- .../Cache/Tests/Traits/TagAwareTestTrait.php | 2 +- .../Cache/Traits/AbstractAdapterTrait.php | 2 +- .../Component/Cache/Traits/AbstractTrait.php | 2 +- .../Component/Cache/Traits/ArrayTrait.php | 2 +- .../Component/Cache/Traits/PhpFilesTrait.php | 2 +- .../Component/Cache/Traits/RedisTrait.php | 2 +- 63 files changed, 111 insertions(+), 160 deletions(-) diff --git a/src/Symfony/Component/Cache/Adapter/ProxyAdapter.php b/src/Symfony/Component/Cache/Adapter/ProxyAdapter.php index e1937fa71a..157d65783b 100644 --- a/src/Symfony/Component/Cache/Adapter/ProxyAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/ProxyAdapter.php @@ -260,7 +260,7 @@ class ProxyAdapter implements AdapterInterface, CacheInterface, PruneableInterfa } } - private function getId($key) + private function getId($key): string { CacheItem::validateKey($key); diff --git a/src/Symfony/Component/Cache/CacheItem.php b/src/Symfony/Component/Cache/CacheItem.php index fe7d717fca..c41c045925 100644 --- a/src/Symfony/Component/Cache/CacheItem.php +++ b/src/Symfony/Component/Cache/CacheItem.php @@ -185,7 +185,7 @@ final class CacheItem implements ItemInterface * * @internal */ - public static function log(LoggerInterface $logger = null, $message, $context = []) + public static function log(?LoggerInterface $logger, string $message, array $context = []) { if ($logger) { $logger->warning($message, $context); diff --git a/src/Symfony/Component/Cache/LockRegistry.php b/src/Symfony/Component/Cache/LockRegistry.php index 676fba5dca..11d9f95756 100644 --- a/src/Symfony/Component/Cache/LockRegistry.php +++ b/src/Symfony/Component/Cache/LockRegistry.php @@ -131,6 +131,8 @@ final class LockRegistry $logger && $logger->info('Item "{key}" not found while lock was released, now retrying', ['key' => $item->getKey()]); } } + + return null; } private static function open(int $key) diff --git a/src/Symfony/Component/Cache/Simple/AbstractCache.php b/src/Symfony/Component/Cache/Simple/AbstractCache.php index c01db702f7..b3477e94f3 100644 --- a/src/Symfony/Component/Cache/Simple/AbstractCache.php +++ b/src/Symfony/Component/Cache/Simple/AbstractCache.php @@ -177,7 +177,7 @@ abstract class AbstractCache implements Psr16CacheInterface, LoggerAwareInterfac throw new InvalidArgumentException(sprintf('Expiration date must be an integer, a DateInterval or null, "%s" given', \is_object($ttl) ? \get_class($ttl) : \gettype($ttl))); } - private function generateValues(iterable $values, array &$keys, $default) + private function generateValues(iterable $values, array &$keys, $default): iterable { try { foreach ($values as $id => $value) { diff --git a/src/Symfony/Component/Cache/Simple/ChainCache.php b/src/Symfony/Component/Cache/Simple/ChainCache.php index 683683dd87..57a169f632 100644 --- a/src/Symfony/Component/Cache/Simple/ChainCache.php +++ b/src/Symfony/Component/Cache/Simple/ChainCache.php @@ -92,7 +92,7 @@ class ChainCache implements Psr16CacheInterface, PruneableInterface, ResettableI return $this->generateItems($this->caches[0]->getMultiple($keys, $miss), 0, $miss, $default); } - private function generateItems(iterable $values, int $cacheIndex, $miss, $default) + private function generateItems(iterable $values, int $cacheIndex, $miss, $default): iterable { $missing = []; $nextCacheIndex = $cacheIndex + 1; diff --git a/src/Symfony/Component/Cache/Simple/PhpArrayCache.php b/src/Symfony/Component/Cache/Simple/PhpArrayCache.php index 15578c07b0..524df3c8a9 100644 --- a/src/Symfony/Component/Cache/Simple/PhpArrayCache.php +++ b/src/Symfony/Component/Cache/Simple/PhpArrayCache.php @@ -229,7 +229,7 @@ class PhpArrayCache implements Psr16CacheInterface, PruneableInterface, Resettab return $saved; } - private function generateItems(array $keys, $default) + private function generateItems(array $keys, $default): iterable { $fallbackKeys = []; diff --git a/src/Symfony/Component/Cache/Simple/TraceableCache.php b/src/Symfony/Component/Cache/Simple/TraceableCache.php index b1436d852b..eac77badd4 100644 --- a/src/Symfony/Component/Cache/Simple/TraceableCache.php +++ b/src/Symfony/Component/Cache/Simple/TraceableCache.php @@ -236,7 +236,7 @@ class TraceableCache implements Psr16CacheInterface, PruneableInterface, Resetta } } - private function start(string $name) + private function start(string $name): TraceableCacheEvent { $this->calls[] = $event = new TraceableCacheEvent(); $event->name = $name; diff --git a/src/Symfony/Component/Cache/Tests/Adapter/AbstractRedisAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/AbstractRedisAdapterTest.php index 9b77e926d4..6a686a9481 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/AbstractRedisAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/AbstractRedisAdapterTest.php @@ -24,7 +24,7 @@ abstract class AbstractRedisAdapterTest extends AdapterTestCase protected static $redis; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new RedisAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/ApcuAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/ApcuAdapterTest.php index a4673f12a2..10188607d1 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/ApcuAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/ApcuAdapterTest.php @@ -23,7 +23,7 @@ class ApcuAdapterTest extends AdapterTestCase 'testDefaultLifeTime' => 'Testing expiration slows down the test suite', ]; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { if (!\function_exists('apcu_fetch') || !filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN)) { $this->markTestSkipped('APCu extension is required.'); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php index 81f8e14702..ff37479cc1 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php @@ -25,7 +25,7 @@ class ArrayAdapterTest extends AdapterTestCase 'testSaveWithoutExpire' => 'Assumes a shared cache which ArrayAdapter is not.', ]; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new ArrayAdapter($defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/ChainAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/ChainAdapterTest.php index 02fe61480a..ffd598bc04 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/ChainAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/ChainAdapterTest.php @@ -11,7 +11,6 @@ namespace Symfony\Component\Cache\Tests\Adapter; -use PHPUnit\Framework\MockObject\MockObject; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\AdapterInterface; use Symfony\Component\Cache\Adapter\ArrayAdapter; @@ -26,7 +25,7 @@ use Symfony\Component\Cache\Tests\Fixtures\ExternalAdapter; */ class ChainAdapterTest extends AdapterTestCase { - public function createCachePool($defaultLifetime = 0, $testMethod = null): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0, string $testMethod = null): CacheItemPoolInterface { if ('testGetMetadata' === $testMethod) { return new ChainAdapter([new FilesystemAdapter('', $defaultLifetime)], $defaultLifetime); @@ -70,14 +69,9 @@ class ChainAdapterTest extends AdapterTestCase $this->assertFalse($cache->prune()); } - /** - * @return MockObject|PruneableCacheInterface - */ - private function getPruneableMock() + private function getPruneableMock(): AdapterInterface { - $pruneable = $this - ->getMockBuilder(PruneableCacheInterface::class) - ->getMock(); + $pruneable = $this->createMock([PruneableInterface::class, AdapterInterface::class]); $pruneable ->expects($this->atLeastOnce()) @@ -87,14 +81,9 @@ class ChainAdapterTest extends AdapterTestCase return $pruneable; } - /** - * @return MockObject|PruneableCacheInterface - */ - private function getFailingPruneableMock() + private function getFailingPruneableMock(): AdapterInterface { - $pruneable = $this - ->getMockBuilder(PruneableCacheInterface::class) - ->getMock(); + $pruneable = $this->createMock([PruneableInterface::class, AdapterInterface::class]); $pruneable ->expects($this->atLeastOnce()) @@ -104,17 +93,8 @@ class ChainAdapterTest extends AdapterTestCase return $pruneable; } - /** - * @return MockObject|AdapterInterface - */ - private function getNonPruneableMock() + private function getNonPruneableMock(): AdapterInterface { - return $this - ->getMockBuilder(AdapterInterface::class) - ->getMock(); + return $this->createMock(AdapterInterface::class); } } - -interface PruneableCacheInterface extends PruneableInterface, AdapterInterface -{ -} diff --git a/src/Symfony/Component/Cache/Tests/Adapter/DoctrineAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/DoctrineAdapterTest.php index dda3019c69..310aa4387a 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/DoctrineAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/DoctrineAdapterTest.php @@ -27,7 +27,7 @@ class DoctrineAdapterTest extends AdapterTestCase 'testClearPrefix' => 'Doctrine cannot clear by prefix', ]; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new DoctrineAdapter(new ArrayCache($defaultLifetime), '', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/FilesystemAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/FilesystemAdapterTest.php index 5dbedcd444..54264eeac5 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/FilesystemAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/FilesystemAdapterTest.php @@ -19,7 +19,7 @@ use Symfony\Component\Cache\Adapter\FilesystemAdapter; */ class FilesystemAdapterTest extends AdapterTestCase { - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new FilesystemAdapter('', $defaultLifetime); } @@ -29,7 +29,7 @@ class FilesystemAdapterTest extends AdapterTestCase self::rmdir(sys_get_temp_dir().'/symfony-cache'); } - public static function rmdir($dir) + public static function rmdir(string $dir) { if (!file_exists($dir)) { return; @@ -51,7 +51,7 @@ class FilesystemAdapterTest extends AdapterTestCase rmdir($dir); } - protected function isPruned(CacheItemPoolInterface $cache, $name) + protected function isPruned(CacheItemPoolInterface $cache, string $name): bool { $getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile'); $getFileMethod->setAccessible(true); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/FilesystemTagAwareAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/FilesystemTagAwareAdapterTest.php index 76c9a5817c..a9f3407eae 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/FilesystemTagAwareAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/FilesystemTagAwareAdapterTest.php @@ -22,7 +22,7 @@ class FilesystemTagAwareAdapterTest extends FilesystemAdapterTest { use TagAwareTestTrait; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new FilesystemTagAwareAdapter('', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php index 724aa9451c..cc4d160aef 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php @@ -80,7 +80,7 @@ abstract class MaxIdLengthAdapter extends AbstractAdapter { protected $maxIdLength = 50; - public function __construct($ns) + public function __construct(string $ns) { parent::__construct($ns); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php index 8238eaea05..9a60642e80 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php @@ -39,7 +39,7 @@ class MemcachedAdapterTest extends AdapterTestCase } } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST')) : self::$client; @@ -73,7 +73,7 @@ class MemcachedAdapterTest extends AdapterTestCase MemcachedAdapter::createConnection([], [$name => $value]); } - public function provideBadOptions() + public function provideBadOptions(): array { return [ ['foo', 'bar'], @@ -109,7 +109,7 @@ class MemcachedAdapterTest extends AdapterTestCase /** * @dataProvider provideServersSetting */ - public function testServersSetting($dsn, $host, $port) + public function testServersSetting(string $dsn, string $host, int $port) { $client1 = MemcachedAdapter::createConnection($dsn); $client2 = MemcachedAdapter::createConnection([$dsn]); @@ -125,7 +125,7 @@ class MemcachedAdapterTest extends AdapterTestCase $this->assertSame([$expect], array_map($f, $client3->getServerList())); } - public function provideServersSetting() + public function provideServersSetting(): iterable { yield [ 'memcached://127.0.0.1/50', @@ -166,7 +166,7 @@ class MemcachedAdapterTest extends AdapterTestCase /** * @dataProvider provideDsnWithOptions */ - public function testDsnWithOptions($dsn, array $options, array $expectedOptions) + public function testDsnWithOptions(string $dsn, array $options, array $expectedOptions) { $client = MemcachedAdapter::createConnection($dsn, $options); @@ -175,7 +175,7 @@ class MemcachedAdapterTest extends AdapterTestCase } } - public function provideDsnWithOptions() + public function provideDsnWithOptions(): iterable { if (!class_exists('\Memcached')) { self::markTestSkipped('Extension memcached required.'); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/NamespacedProxyAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/NamespacedProxyAdapterTest.php index 460ca0bc82..a4edc7a608 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/NamespacedProxyAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/NamespacedProxyAdapterTest.php @@ -21,7 +21,7 @@ use Symfony\Component\Cache\Adapter\ProxyAdapter; */ class NamespacedProxyAdapterTest extends ProxyAdapterTest { - public function createCachePool($defaultLifetime = 0, $testMethod = null): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0, string $testMethod = null): CacheItemPoolInterface { if ('testGetMetadata' === $testMethod) { return new ProxyAdapter(new FilesystemAdapter(), 'foo', $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PdoAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PdoAdapterTest.php index 4a09e85179..ec9e00d3c9 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PdoAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PdoAdapterTest.php @@ -41,7 +41,7 @@ class PdoAdapterTest extends AdapterTestCase @unlink(self::$dbFile); } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new PdoAdapter('sqlite:'.self::$dbFile, 'ns', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php index d4fa558411..6ad568d6cc 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PdoDbalAdapterTest.php @@ -41,7 +41,7 @@ class PdoDbalAdapterTest extends AdapterTestCase @unlink(self::$dbFile); } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new PdoAdapter(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]), '', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php index ed5023b078..4a5aa82d59 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php @@ -71,7 +71,7 @@ class PhpArrayAdapterTest extends AdapterTestCase } } - public function createCachePool($defaultLifetime = 0, $testMethod = null): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0, string $testMethod = null): CacheItemPoolInterface { if ('testGetMetadata' === $testMethod || 'testClearPrefix' === $testMethod) { return new PhpArrayAdapter(self::$file, new FilesystemAdapter()); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterWithFallbackTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterWithFallbackTest.php index 32f52bae9b..694b63d89f 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterWithFallbackTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterWithFallbackTest.php @@ -43,7 +43,7 @@ class PhpArrayAdapterWithFallbackTest extends AdapterTestCase } } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new PhpArrayAdapter(self::$file, new FilesystemAdapter('php-array-fallback', $defaultLifetime)); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PhpFilesAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PhpFilesAdapterTest.php index 3e63617447..d204ef8d29 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PhpFilesAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PhpFilesAdapterTest.php @@ -33,7 +33,7 @@ class PhpFilesAdapterTest extends AdapterTestCase FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache'); } - protected function isPruned(CacheItemPoolInterface $cache, $name) + protected function isPruned(CacheItemPoolInterface $cache, string $name): bool { $getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile'); $getFileMethod->setAccessible(true); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareAdapterTest.php index 390a73da5f..eedd3903a8 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareAdapterTest.php @@ -25,7 +25,7 @@ class PredisTagAwareAdapterTest extends PredisAdapterTest $this->skippedTests['testTagItemExpiry'] = 'Testing expiration slows down the test suite'; } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $this->assertInstanceOf(\Predis\Client::class, self::$redis); $adapter = new RedisTagAwareAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareClusterAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareClusterAdapterTest.php index 8339367593..77d51a9033 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareClusterAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareClusterAdapterTest.php @@ -25,7 +25,7 @@ class PredisTagAwareClusterAdapterTest extends PredisClusterAdapterTest $this->skippedTests['testTagItemExpiry'] = 'Testing expiration slows down the test suite'; } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $this->assertInstanceOf(\Predis\Client::class, self::$redis); $adapter = new RedisTagAwareAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareRedisClusterAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareRedisClusterAdapterTest.php index 813d524715..8357fffe39 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareRedisClusterAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareRedisClusterAdapterTest.php @@ -25,7 +25,7 @@ class PredisTagAwareRedisClusterAdapterTest extends PredisRedisClusterAdapterTes $this->skippedTests['testTagItemExpiry'] = 'Testing expiration slows down the test suite'; } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $this->assertInstanceOf(\Predis\Client::class, self::$redis); $adapter = new RedisTagAwareAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php index 6436428e74..0fbe94aac8 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php @@ -29,7 +29,7 @@ class ProxyAdapterTest extends AdapterTestCase 'testPrune' => 'ProxyAdapter just proxies', ]; - public function createCachePool($defaultLifetime = 0, $testMethod = null): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0, string $testMethod = null): CacheItemPoolInterface { if ('testGetMetadata' === $testMethod) { return new ProxyAdapter(new FilesystemAdapter(), '', $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/Psr16AdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/Psr16AdapterTest.php index 7d5f242398..bdd5d04c56 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/Psr16AdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/Psr16AdapterTest.php @@ -27,7 +27,7 @@ class Psr16AdapterTest extends AdapterTestCase 'testClearPrefix' => 'SimpleCache cannot clear by prefix', ]; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new Psr16Adapter(new Psr16Cache(new FilesystemAdapter()), '', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/RedisAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/RedisAdapterTest.php index 216d1373db..c785137241 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/RedisAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/RedisAdapterTest.php @@ -24,7 +24,7 @@ class RedisAdapterTest extends AbstractRedisAdapterTest self::$redis = AbstractAdapter::createConnection('redis://'.getenv('REDIS_HOST'), ['lazy' => true]); } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $adapter = parent::createCachePool($defaultLifetime); $this->assertInstanceOf(RedisProxy::class, self::$redis); @@ -35,7 +35,7 @@ class RedisAdapterTest extends AbstractRedisAdapterTest /** * @dataProvider provideValidSchemes */ - public function testCreateConnection($dsnScheme) + public function testCreateConnection(string $dsnScheme) { $redis = RedisAdapter::createConnection($dsnScheme.':?host[h1]&host[h2]&host[/foo:]'); $this->assertInstanceOf(\RedisArray::class, $redis); @@ -65,14 +65,14 @@ class RedisAdapterTest extends AbstractRedisAdapterTest /** * @dataProvider provideFailedCreateConnection */ - public function testFailedCreateConnection($dsn) + public function testFailedCreateConnection(string $dsn) { $this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException'); $this->expectExceptionMessage('Redis connection failed'); RedisAdapter::createConnection($dsn); } - public function provideFailedCreateConnection() + public function provideFailedCreateConnection(): array { return [ ['redis://localhost:1234'], @@ -84,14 +84,14 @@ class RedisAdapterTest extends AbstractRedisAdapterTest /** * @dataProvider provideInvalidCreateConnection */ - public function testInvalidCreateConnection($dsn) + public function testInvalidCreateConnection(string $dsn) { $this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException'); $this->expectExceptionMessage('Invalid Redis DSN'); RedisAdapter::createConnection($dsn); } - public function provideValidSchemes() + public function provideValidSchemes(): array { return [ ['redis'], @@ -99,7 +99,7 @@ class RedisAdapterTest extends AbstractRedisAdapterTest ]; } - public function provideInvalidCreateConnection() + public function provideInvalidCreateConnection(): array { return [ ['foo://localhost'], diff --git a/src/Symfony/Component/Cache/Tests/Adapter/RedisClusterAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/RedisClusterAdapterTest.php index 821259b78f..d1dfe34fe8 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/RedisClusterAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/RedisClusterAdapterTest.php @@ -30,7 +30,7 @@ class RedisClusterAdapterTest extends AbstractRedisAdapterTest self::$redis = AbstractAdapter::createConnection('redis:?host['.str_replace(' ', ']&host[', $hosts).']', ['lazy' => true, 'redis_cluster' => true]); } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $this->assertInstanceOf(RedisClusterProxy::class, self::$redis); $adapter = new RedisAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); @@ -41,14 +41,14 @@ class RedisClusterAdapterTest extends AbstractRedisAdapterTest /** * @dataProvider provideFailedCreateConnection */ - public function testFailedCreateConnection($dsn) + public function testFailedCreateConnection(string $dsn) { $this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException'); $this->expectExceptionMessage('Redis connection failed'); RedisAdapter::createConnection($dsn); } - public function provideFailedCreateConnection() + public function provideFailedCreateConnection(): array { return [ ['redis://localhost:1234?redis_cluster=1'], diff --git a/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareAdapterTest.php index b88af7b733..5f8eef7c56 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareAdapterTest.php @@ -26,7 +26,7 @@ class RedisTagAwareAdapterTest extends RedisAdapterTest $this->skippedTests['testTagItemExpiry'] = 'Testing expiration slows down the test suite'; } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $this->assertInstanceOf(RedisProxy::class, self::$redis); $adapter = new RedisTagAwareAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareArrayAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareArrayAdapterTest.php index 5fcf781cd9..8f9f87c8fe 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareArrayAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareArrayAdapterTest.php @@ -25,7 +25,7 @@ class RedisTagAwareArrayAdapterTest extends RedisArrayAdapterTest $this->skippedTests['testTagItemExpiry'] = 'Testing expiration slows down the test suite'; } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $this->assertInstanceOf(\RedisArray::class, self::$redis); $adapter = new RedisTagAwareAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareClusterAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareClusterAdapterTest.php index 3deb0c264a..d179abde1e 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareClusterAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/RedisTagAwareClusterAdapterTest.php @@ -26,7 +26,7 @@ class RedisTagAwareClusterAdapterTest extends RedisClusterAdapterTest $this->skippedTests['testTagItemExpiry'] = 'Testing expiration slows down the test suite'; } - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { $this->assertInstanceOf(RedisClusterProxy::class, self::$redis); $adapter = new RedisTagAwareAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); diff --git a/src/Symfony/Component/Cache/Tests/Adapter/SimpleCacheAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/SimpleCacheAdapterTest.php index 626ba47331..b4e185fcc9 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/SimpleCacheAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/SimpleCacheAdapterTest.php @@ -27,7 +27,7 @@ class SimpleCacheAdapterTest extends AdapterTestCase 'testClearPrefix' => 'SimpleCache cannot clear by prefix', ]; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new SimpleCacheAdapter(new FilesystemCache(), '', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php index 27731deb2b..a945267f4d 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAdapterTest.php @@ -16,6 +16,7 @@ use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\AdapterInterface; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\Cache\Adapter\TagAwareAdapter; +use Symfony\Component\Cache\PruneableInterface; use Symfony\Component\Cache\Tests\Traits\TagAwareTestTrait; /** @@ -66,14 +67,9 @@ class TagAwareAdapterTest extends AdapterTestCase $this->assertFalse($cache->prune()); } - /** - * @return MockObject|PruneableCacheInterface - */ - private function getPruneableMock() + private function getPruneableMock(): AdapterInterface { - $pruneable = $this - ->getMockBuilder(PruneableCacheInterface::class) - ->getMock(); + $pruneable = $this->createMock([PruneableInterface::class, AdapterInterface::class]); $pruneable ->expects($this->atLeastOnce()) @@ -83,14 +79,9 @@ class TagAwareAdapterTest extends AdapterTestCase return $pruneable; } - /** - * @return MockObject|PruneableCacheInterface - */ - private function getFailingPruneableMock() + private function getFailingPruneableMock(): AdapterInterface { - $pruneable = $this - ->getMockBuilder(PruneableCacheInterface::class) - ->getMock(); + $pruneable = $this->createMock([PruneableInterface::class, AdapterInterface::class]); $pruneable ->expects($this->atLeastOnce()) @@ -100,13 +91,8 @@ class TagAwareAdapterTest extends AdapterTestCase return $pruneable; } - /** - * @return MockObject|AdapterInterface - */ - private function getNonPruneableMock() + private function getNonPruneableMock(): AdapterInterface { - return $this - ->getMockBuilder(AdapterInterface::class) - ->getMock(); + return $this->createMock(AdapterInterface::class); } } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAndProxyAdapterIntegrationTest.php b/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAndProxyAdapterIntegrationTest.php index b11c1f2870..e53b407028 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAndProxyAdapterIntegrationTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/TagAwareAndProxyAdapterIntegrationTest.php @@ -26,7 +26,7 @@ class TagAwareAndProxyAdapterIntegrationTest extends TestCase $this->assertSame('bar', $cache->getItem('foo')->get()); } - public function dataProvider() + public function dataProvider(): array { return [ [new ArrayAdapter()], diff --git a/src/Symfony/Component/Cache/Tests/Adapter/TraceableAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/TraceableAdapterTest.php index 3d531f5caf..3a573dc431 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/TraceableAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/TraceableAdapterTest.php @@ -24,7 +24,7 @@ class TraceableAdapterTest extends AdapterTestCase 'testPrune' => 'TraceableAdapter just proxies', ]; - public function createCachePool($defaultLifetime = 0): CacheItemPoolInterface + public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new TraceableAdapter(new FilesystemAdapter('', $defaultLifetime)); } diff --git a/src/Symfony/Component/Cache/Tests/CacheItemTest.php b/src/Symfony/Component/Cache/Tests/CacheItemTest.php index b36b6343a8..3b756f571f 100644 --- a/src/Symfony/Component/Cache/Tests/CacheItemTest.php +++ b/src/Symfony/Component/Cache/Tests/CacheItemTest.php @@ -31,7 +31,7 @@ class CacheItemTest extends TestCase CacheItem::validateKey($key); } - public function provideInvalidKey() + public function provideInvalidKey(): array { return [ [''], diff --git a/src/Symfony/Component/Cache/Tests/Psr16CacheTest.php b/src/Symfony/Component/Cache/Tests/Psr16CacheTest.php index f3a027cbfb..094be128bb 100644 --- a/src/Symfony/Component/Cache/Tests/Psr16CacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Psr16CacheTest.php @@ -40,7 +40,7 @@ class Psr16CacheTest extends SimpleCacheTest } } - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new Psr16Cache(new FilesystemAdapter('', $defaultLifetime)); } @@ -146,7 +146,7 @@ class Psr16CacheTest extends SimpleCacheTest $cache->clear(); } - protected function isPruned($cache, $name) + protected function isPruned(CacheInterface $cache, string $name): bool { if (Psr16Cache::class !== \get_class($cache)) { $this->fail('Test classes for pruneable caches must implement `isPruned($cache, $name)` method.'); diff --git a/src/Symfony/Component/Cache/Tests/Simple/AbstractRedisCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/AbstractRedisCacheTest.php index b9bc266ab5..4023c43105 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/AbstractRedisCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/AbstractRedisCacheTest.php @@ -27,7 +27,7 @@ abstract class AbstractRedisCacheTest extends CacheTestCase protected static $redis; - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new RedisCache(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/ApcuCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/ApcuCacheTest.php index 03e3f262a6..0f5c87e226 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/ApcuCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/ApcuCacheTest.php @@ -25,7 +25,7 @@ class ApcuCacheTest extends CacheTestCase 'testDefaultLifeTime' => 'Testing expiration slows down the test suite', ]; - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { if (!\function_exists('apcu_fetch') || !filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) || ('cli' === \PHP_SAPI && !filter_var(ini_get('apc.enable_cli'), FILTER_VALIDATE_BOOLEAN))) { $this->markTestSkipped('APCu extension is required.'); diff --git a/src/Symfony/Component/Cache/Tests/Simple/ArrayCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/ArrayCacheTest.php index 15fb83975d..8d21f4f491 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/ArrayCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/ArrayCacheTest.php @@ -20,7 +20,7 @@ use Symfony\Component\Cache\Simple\ArrayCache; */ class ArrayCacheTest extends CacheTestCase { - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new ArrayCache($defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/ChainCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/ChainCacheTest.php index 38b4bb8dd4..9198c8f46a 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/ChainCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/ChainCacheTest.php @@ -11,7 +11,6 @@ namespace Symfony\Component\Cache\Tests\Simple; -use PHPUnit\Framework\MockObject\MockObject; use Psr\SimpleCache\CacheInterface; use Symfony\Component\Cache\PruneableInterface; use Symfony\Component\Cache\Simple\ArrayCache; @@ -24,7 +23,7 @@ use Symfony\Component\Cache\Simple\FilesystemCache; */ class ChainCacheTest extends CacheTestCase { - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new ChainCache([new ArrayCache($defaultLifetime), new FilesystemCache('', $defaultLifetime)], $defaultLifetime); } @@ -64,14 +63,9 @@ class ChainCacheTest extends CacheTestCase $this->assertFalse($cache->prune()); } - /** - * @return MockObject|PruneableCacheInterface - */ - private function getPruneableMock() + private function getPruneableMock(): CacheInterface { - $pruneable = $this - ->getMockBuilder(PruneableCacheInterface::class) - ->getMock(); + $pruneable = $this->createMock([CacheInterface::class, PruneableInterface::class]); $pruneable ->expects($this->atLeastOnce()) @@ -81,14 +75,9 @@ class ChainCacheTest extends CacheTestCase return $pruneable; } - /** - * @return MockObject|PruneableCacheInterface - */ - private function getFailingPruneableMock() + private function getFailingPruneableMock(): CacheInterface { - $pruneable = $this - ->getMockBuilder(PruneableCacheInterface::class) - ->getMock(); + $pruneable = $this->createMock([CacheInterface::class, PruneableInterface::class]); $pruneable ->expects($this->atLeastOnce()) @@ -98,17 +87,8 @@ class ChainCacheTest extends CacheTestCase return $pruneable; } - /** - * @return MockObject|CacheInterface - */ - private function getNonPruneableMock() + private function getNonPruneableMock(): CacheInterface { - return $this - ->getMockBuilder(CacheInterface::class) - ->getMock(); + return $this->createMock(CacheInterface::class); } } - -interface PruneableCacheInterface extends PruneableInterface, CacheInterface -{ -} diff --git a/src/Symfony/Component/Cache/Tests/Simple/DoctrineCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/DoctrineCacheTest.php index 150c1f6abb..ad7a475d92 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/DoctrineCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/DoctrineCacheTest.php @@ -26,7 +26,7 @@ class DoctrineCacheTest extends CacheTestCase 'testNotUnserializable' => 'ArrayCache does not use serialize/unserialize', ]; - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new DoctrineCache(new ArrayCache($defaultLifetime), '', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/FilesystemCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/FilesystemCacheTest.php index 31eacdbdb4..b4b7c8ae5b 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/FilesystemCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/FilesystemCacheTest.php @@ -20,12 +20,12 @@ use Symfony\Component\Cache\Simple\FilesystemCache; */ class FilesystemCacheTest extends CacheTestCase { - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new FilesystemCache('', $defaultLifetime); } - protected function isPruned(CacheInterface $cache, $name) + protected function isPruned(CacheInterface $cache, string $name): bool { $getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile'); $getFileMethod->setAccessible(true); diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php index c07f9f10ff..75bf47246c 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php @@ -42,7 +42,7 @@ class MemcachedCacheTest extends CacheTestCase } } - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { $client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), ['binary_protocol' => false]) : self::$client; @@ -78,14 +78,14 @@ class MemcachedCacheTest extends CacheTestCase /** * @dataProvider provideBadOptions */ - public function testBadOptions($name, $value) + public function testBadOptions(string $name, $value) { $this->expectException('ErrorException'); $this->expectExceptionMessage('constant(): Couldn\'t find constant Memcached::'); MemcachedCache::createConnection([], [$name => $value]); } - public function provideBadOptions() + public function provideBadOptions(): array { return [ ['foo', 'bar'], @@ -120,7 +120,7 @@ class MemcachedCacheTest extends CacheTestCase /** * @dataProvider provideServersSetting */ - public function testServersSetting($dsn, $host, $port) + public function testServersSetting(string $dsn, string $host, int $port) { $client1 = MemcachedCache::createConnection($dsn); $client2 = MemcachedCache::createConnection([$dsn]); @@ -136,7 +136,7 @@ class MemcachedCacheTest extends CacheTestCase $this->assertSame([$expect], array_map($f, $client3->getServerList())); } - public function provideServersSetting() + public function provideServersSetting(): iterable { yield [ 'memcached://127.0.0.1/50', diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php index 1e749ba72e..57b5b7dd32 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php @@ -20,7 +20,7 @@ use Symfony\Component\Cache\Simple\MemcachedCache; */ class MemcachedCacheTextModeTest extends MemcachedCacheTest { - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { $client = AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), ['binary_protocol' => false]); diff --git a/src/Symfony/Component/Cache/Tests/Simple/NullCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/NullCacheTest.php index cf0dde92b3..ff671bbacc 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/NullCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/NullCacheTest.php @@ -20,7 +20,7 @@ use Symfony\Component\Cache\Simple\NullCache; */ class NullCacheTest extends TestCase { - public function createCachePool() + public function createCachePool(): NullCache { return new NullCache(); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/PdoCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/PdoCacheTest.php index cac5373c9e..204211f06b 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/PdoCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/PdoCacheTest.php @@ -42,7 +42,7 @@ class PdoCacheTest extends CacheTestCase @unlink(self::$dbFile); } - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new PdoCache('sqlite:'.self::$dbFile, 'ns', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/PdoDbalCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/PdoDbalCacheTest.php index 80c868b5ca..1629959b43 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/PdoDbalCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/PdoDbalCacheTest.php @@ -43,7 +43,7 @@ class PdoDbalCacheTest extends CacheTestCase @unlink(self::$dbFile); } - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new PdoCache(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]), '', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/PhpArrayCacheWithFallbackTest.php b/src/Symfony/Component/Cache/Tests/Simple/PhpArrayCacheWithFallbackTest.php index 08a8459c62..3afa0ecbcf 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/PhpArrayCacheWithFallbackTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/PhpArrayCacheWithFallbackTest.php @@ -50,7 +50,7 @@ class PhpArrayCacheWithFallbackTest extends CacheTestCase } } - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new PhpArrayCache(self::$file, new FilesystemCache('php-array-fallback', $defaultLifetime)); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/PhpFilesCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/PhpFilesCacheTest.php index 2ee25a536e..9698689ac0 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/PhpFilesCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/PhpFilesCacheTest.php @@ -24,12 +24,12 @@ class PhpFilesCacheTest extends CacheTestCase 'testDefaultLifeTime' => 'PhpFilesCache does not allow configuring a default lifetime.', ]; - public function createSimpleCache(): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new PhpFilesCache('sf-cache'); } - protected function isPruned(CacheInterface $cache, $name) + protected function isPruned(CacheInterface $cache, string $name): bool { $getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile'); $getFileMethod->setAccessible(true); diff --git a/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheTest.php index 365147d1d3..53bf31d063 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Cache\Tests\Simple; +use Psr\Cache\CacheItemPoolInterface; use Psr\SimpleCache\CacheInterface; use Symfony\Component\Cache\Simple\Psr6Cache; @@ -23,10 +24,10 @@ abstract class Psr6CacheTest extends CacheTestCase 'testPrune' => 'Psr6Cache just proxies', ]; - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new Psr6Cache($this->createCacheItemPool($defaultLifetime)); } - abstract protected function createCacheItemPool($defaultLifetime = 0); + abstract protected function createCacheItemPool(int $defaultLifetime = 0): CacheItemPoolInterface; } diff --git a/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithAdapterTest.php b/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithAdapterTest.php index e5c7a6a4c7..5d8e8c65e4 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithAdapterTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Cache\Tests\Simple; +use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\FilesystemAdapter; /** @@ -19,7 +20,7 @@ use Symfony\Component\Cache\Adapter\FilesystemAdapter; */ class Psr6CacheWithAdapterTest extends Psr6CacheTest { - protected function createCacheItemPool($defaultLifetime = 0) + protected function createCacheItemPool(int $defaultLifetime = 0): CacheItemPoolInterface { return new FilesystemAdapter('', $defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithoutAdapterTest.php b/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithoutAdapterTest.php index f987d40539..ae0f4cf760 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithoutAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/Psr6CacheWithoutAdapterTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Cache\Tests\Simple; +use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Tests\Fixtures\ExternalAdapter; /** @@ -19,7 +20,7 @@ use Symfony\Component\Cache\Tests\Fixtures\ExternalAdapter; */ class Psr6CacheWithoutAdapterTest extends Psr6CacheTest { - protected function createCacheItemPool($defaultLifetime = 0) + protected function createCacheItemPool(int $defaultLifetime = 0): CacheItemPoolInterface { return new ExternalAdapter($defaultLifetime); } diff --git a/src/Symfony/Component/Cache/Tests/Simple/RedisCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/RedisCacheTest.php index b5792f3971..61a9423978 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/RedisCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/RedisCacheTest.php @@ -49,14 +49,14 @@ class RedisCacheTest extends AbstractRedisCacheTest /** * @dataProvider provideFailedCreateConnection */ - public function testFailedCreateConnection($dsn) + public function testFailedCreateConnection(string $dsn) { $this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException'); $this->expectExceptionMessage('Redis connection failed'); RedisCache::createConnection($dsn); } - public function provideFailedCreateConnection() + public function provideFailedCreateConnection(): array { return [ ['redis://localhost:1234'], @@ -68,14 +68,14 @@ class RedisCacheTest extends AbstractRedisCacheTest /** * @dataProvider provideInvalidCreateConnection */ - public function testInvalidCreateConnection($dsn) + public function testInvalidCreateConnection(string $dsn) { $this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException'); $this->expectExceptionMessage('Invalid Redis DSN'); RedisCache::createConnection($dsn); } - public function provideInvalidCreateConnection() + public function provideInvalidCreateConnection(): array { return [ ['foo://localhost'], diff --git a/src/Symfony/Component/Cache/Tests/Simple/TraceableCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/TraceableCacheTest.php index 21bd1eadbb..142d437d0b 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/TraceableCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/TraceableCacheTest.php @@ -25,7 +25,7 @@ class TraceableCacheTest extends CacheTestCase 'testPrune' => 'TraceableCache just proxies', ]; - public function createSimpleCache($defaultLifetime = 0): CacheInterface + public function createSimpleCache(int $defaultLifetime = 0): CacheInterface { return new TraceableCache(new FilesystemCache('', $defaultLifetime)); } diff --git a/src/Symfony/Component/Cache/Tests/Traits/PdoPruneableTrait.php b/src/Symfony/Component/Cache/Tests/Traits/PdoPruneableTrait.php index 3b1e1128ba..d9c3b91568 100644 --- a/src/Symfony/Component/Cache/Tests/Traits/PdoPruneableTrait.php +++ b/src/Symfony/Component/Cache/Tests/Traits/PdoPruneableTrait.php @@ -13,7 +13,7 @@ namespace Symfony\Component\Cache\Tests\Traits; trait PdoPruneableTrait { - protected function isPruned($cache, $name) + protected function isPruned($cache, string $name): bool { $o = new \ReflectionObject($cache); diff --git a/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php b/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php index 9c6ce3956b..7f1544af5b 100644 --- a/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php +++ b/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php @@ -16,7 +16,7 @@ use Symfony\Component\Cache\CacheItem; /** * Common assertions for TagAware adapters. * - * @method \Symfony\Component\Cache\Adapter\TagAwareAdapterInterface createCachePool() Must be implemented by TestCase + * @method \Symfony\Component\Cache\Adapter\TagAwareAdapterInterface createCachePool(int $defaultLifetime = 0) Must be implemented by TestCase */ trait TagAwareTestTrait { diff --git a/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php b/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php index 1b1c9a2b26..a8aa2acaf3 100644 --- a/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php +++ b/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php @@ -119,7 +119,7 @@ trait AbstractAdapterTrait } } - private function generateItems(iterable $items, array &$keys) + private function generateItems(iterable $items, array &$keys): iterable { $f = $this->createCacheItem; diff --git a/src/Symfony/Component/Cache/Traits/AbstractTrait.php b/src/Symfony/Component/Cache/Traits/AbstractTrait.php index dc5c7ff0e1..f9a1d8fdaf 100644 --- a/src/Symfony/Component/Cache/Traits/AbstractTrait.php +++ b/src/Symfony/Component/Cache/Traits/AbstractTrait.php @@ -250,7 +250,7 @@ trait AbstractTrait } } - private function getId($key) + private function getId($key): string { if ($this->versioningIsEnabled && '' === $this->namespaceVersion) { $this->ids = []; diff --git a/src/Symfony/Component/Cache/Traits/ArrayTrait.php b/src/Symfony/Component/Cache/Traits/ArrayTrait.php index 54413be3df..21872c515b 100644 --- a/src/Symfony/Component/Cache/Traits/ArrayTrait.php +++ b/src/Symfony/Component/Cache/Traits/ArrayTrait.php @@ -113,7 +113,7 @@ trait ArrayTrait $this->clear(); } - private function generateItems(array $keys, float $now, callable $f) + private function generateItems(array $keys, float $now, callable $f): iterable { foreach ($keys as $i => $key) { if (!$isHit = isset($this->expiries[$key]) && ($this->expiries[$key] > $now || !$this->deleteItem($key))) { diff --git a/src/Symfony/Component/Cache/Traits/PhpFilesTrait.php b/src/Symfony/Component/Cache/Traits/PhpFilesTrait.php index d7125bec9e..baacefc152 100644 --- a/src/Symfony/Component/Cache/Traits/PhpFilesTrait.php +++ b/src/Symfony/Component/Cache/Traits/PhpFilesTrait.php @@ -289,7 +289,7 @@ class LazyValue { public $file; - public function __construct($file) + public function __construct(string $file) { $this->file = $file; } diff --git a/src/Symfony/Component/Cache/Traits/RedisTrait.php b/src/Symfony/Component/Cache/Traits/RedisTrait.php index 67b2dd4da8..56581ab549 100644 --- a/src/Symfony/Component/Cache/Traits/RedisTrait.php +++ b/src/Symfony/Component/Cache/Traits/RedisTrait.php @@ -423,7 +423,7 @@ trait RedisTrait return $failed; } - private function pipeline(\Closure $generator) + private function pipeline(\Closure $generator): \Generator { $ids = [];