diff --git a/composer.json b/composer.json index 56a8652..19909d7 100644 --- a/composer.json +++ b/composer.json @@ -24,12 +24,13 @@ } }, "require": { - "php": ">=5.6", - "doctrine/cache": "2.2.0" + "php": ">=8.2", + "doctrine/cache": "^2.0", + "psr/cache": "^2.0|^3.0" }, "require-dev": { - "mockery/mockery": "0.*", - "phpunit/phpunit": "^9.6.20" + "phpunit/phpunit": "^10.0", + "symfony/cache": "^5.4|^6.4|^7.0" }, "extra": { "branch-alias": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 86c2c1c..6bd1a97 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,29 +1,15 @@ - - - + - + ./tests/ - - - ./src - - ./tests - ./vendor - - - + + + ./src + + - diff --git a/src/OpenClassrooms/DoctrineCacheExtension/AbstractCacheProviderDecorator.php b/src/OpenClassrooms/DoctrineCacheExtension/AbstractCacheProviderDecorator.php index e2a3661..4ea628d 100644 --- a/src/OpenClassrooms/DoctrineCacheExtension/AbstractCacheProviderDecorator.php +++ b/src/OpenClassrooms/DoctrineCacheExtension/AbstractCacheProviderDecorator.php @@ -3,6 +3,8 @@ namespace OpenClassrooms\DoctrineCacheExtension; use Doctrine\Common\Cache\CacheProvider; +use Doctrine\Common\Cache\Psr6\DoctrineProvider; +use Psr\Cache\CacheItemPoolInterface; /** * @author Romain Kuzniak @@ -21,9 +23,9 @@ abstract class AbstractCacheProviderDecorator extends CacheProvider */ protected $defaultLifetime; - public function __construct(CacheProvider $cacheProvider, $defaultLifetime = self::DEFAULT_LIFE_TIME) + public function __construct(CacheItemPoolInterface $cache, $defaultLifetime = self::DEFAULT_LIFE_TIME) { - $this->cacheProvider = $cacheProvider; + $this->cacheProvider = DoctrineProvider::wrap($cache); $this->defaultLifetime = $defaultLifetime; } @@ -39,6 +41,11 @@ public function fetchWithNamespace($id, $namespaceId = null) { if (null !== $namespaceId) { $namespace = $this->fetch($namespaceId); + + if (false === $namespace) { + return false; + } + $id = $namespace.$id; } @@ -56,17 +63,12 @@ public function invalidate($namespaceId) { $namespace = $this->fetch($namespaceId); - if (false === $namespace) { - return false; - } + $newNamespace = random_int(0, 10000); - $newNamespace = rand(0, 10000); - // @codeCoverageIgnoreStart while ($namespace === $newNamespace) { - $newNamespace = rand(0, 10000); + $newNamespace = random_int(0, 10000); } - // @codeCoverageIgnoreEnd return $this->save($namespaceId, $namespaceId.'_'.$newNamespace.'_', 0); } @@ -97,14 +99,6 @@ public function getDefaultLifetime() return $this->defaultLifetime; } - /** - * @return CacheProvider - */ - public function getCacheProvider() - { - return $this->cacheProvider; - } - /** * Puts data into the cache. * @@ -130,20 +124,12 @@ public function saveWithNamespace($id, $data, $namespaceId = null, $lifeTime = n return $this->save($id, $data, $lifeTime); } - /** - * {@inheritdoc} - */ - public function __call($name, $arguments) - { - return $this->getCacheProvider()->$name(...$arguments); - } - /** * {@inheritdoc} */ protected function doFetch($id) { - return $this->getCacheProvider()->doFetch($id); + return $this->cacheProvider->doFetch($id); } /** @@ -151,7 +137,7 @@ protected function doFetch($id) */ protected function doContains($id) { - return $this->getCacheProvider()->doContains($id); + return $this->cacheProvider->doContains($id); } /** @@ -159,7 +145,7 @@ protected function doContains($id) */ protected function doSave($id, $data, $lifeTime = 0) { - return $this->getCacheProvider()->doSave($id, $data, $lifeTime); + return $this->cacheProvider->doSave($id, $data, $lifeTime); } /** @@ -167,7 +153,7 @@ protected function doSave($id, $data, $lifeTime = 0) */ protected function doDelete($id) { - return $this->getCacheProvider()->doDelete($id); + return $this->cacheProvider->doDelete($id); } /** @@ -175,7 +161,7 @@ protected function doDelete($id) */ protected function doFlush() { - return $this->getCacheProvider()->doFlush(); + return $this->cacheProvider->doFlush(); } /** @@ -183,6 +169,6 @@ protected function doFlush() */ protected function doGetStats() { - return $this->getCacheProvider()->doGetStats(); + return $this->cacheProvider->doGetStats(); } } diff --git a/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactory.php b/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactory.php index 65980db..f4f4f47 100644 --- a/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactory.php +++ b/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactory.php @@ -16,6 +16,7 @@ use Doctrine\Common\Cache\WinCacheCache; use Doctrine\Common\Cache\XcacheCache; use Doctrine\Common\Cache\ZendDataCache; +use Psr\Cache\CacheItemPoolInterface; /** * @author Romain Kuzniak @@ -30,56 +31,9 @@ class CacheProviderDecoratorFactory implements CacheProviderDecoratorFactoryInte /** * @return AbstractCacheProviderDecorator */ - public static function create($type, ...$args) + public static function create(CacheItemPoolInterface $cache) { - switch ($type) { - case 'apc': - $cacheProvider = new ApcCache(); - break; - case 'apcu': - $cacheProvider = new ApcuCache(); - break; - case 'array': - $cacheProvider = new ArrayCache(); - break; - case 'couchbase': - $cacheProvider = new CouchbaseCache(); - break; - case 'file_system': - $cacheProvider = new FilesystemCache(...$args); - break; - case 'memcache': - $cacheProvider = new MemcacheCache(); - break; - case 'memcached': - $cacheProvider = new MemcachedCache(); - break; - case 'mongodb': - $cacheProvider = new MongoDBCache(...$args); - break; - case 'php_file': - $cacheProvider = new PhpFileCache(...$args); - break; - case 'redis': - $cacheProvider = new RedisCache(); - break; - case 'riak': - $cacheProvider = new RiakCache(...$args); - break; - case 'wincache': - $cacheProvider = new WinCacheCache(); - break; - case 'xcache': - $cacheProvider = new XcacheCache(); - break; - case 'zenddata': - $cacheProvider = new ZendDataCache(); - break; - default: - throw new \InvalidArgumentException('Type "'.$type.'" is not supported.'); - } - - return new CacheProviderDecorator($cacheProvider, self::$defaultLifetime); + return new CacheProviderDecorator($cache, self::$defaultLifetime); } public function setDefaultLifetime($defaultLifetime) diff --git a/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryInterface.php b/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryInterface.php index 489077e..dde4895 100644 --- a/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryInterface.php +++ b/src/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryInterface.php @@ -2,6 +2,8 @@ namespace OpenClassrooms\DoctrineCacheExtension; +use Psr\Cache\CacheItemPoolInterface; + /** * @author Romain Kuzniak */ @@ -10,7 +12,7 @@ interface CacheProviderDecoratorFactoryInterface /** * @return AbstractCacheProviderDecorator */ - public static function create($type, ...$args); + public static function create(CacheItemPoolInterface $pool); public function setDefaultLifetime($defaultLifetime); } diff --git a/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryTest.php b/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryTest.php index 9deed74..f720082 100644 --- a/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryTest.php +++ b/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorFactoryTest.php @@ -4,83 +4,34 @@ use OpenClassrooms\DoctrineCacheExtension\CacheProviderDecoratorFactory; use OpenClassrooms\DoctrineCacheExtension\CacheProviderDecoratorFactoryInterface; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Cache\Adapter\ArrayAdapter; /** * @author Romain Kuzniak */ -class CacheProviderDecoratorFactoryTest extends \PHPUnit_Framework_TestCase +class CacheProviderDecoratorFactoryTest extends TestCase { - const DIRECTORY = __DIR__.'/../tmp'; - /** * @var CacheProviderDecoratorFactoryInterface */ private $factory; - /** - * @return array - */ - public static function typeProvider() - { - return [ - ['apc', 'Doctrine\Common\Cache\ApcCache', []], - ['array', 'Doctrine\Common\Cache\ArrayCache', []], - ['couchbase', 'Doctrine\Common\Cache\CouchbaseCache', []], - ['file_system', 'Doctrine\Common\Cache\FilesystemCache', [self::DIRECTORY]], - ['memcache', 'Doctrine\Common\Cache\MemcacheCache', []], - ['memcached', 'Doctrine\Common\Cache\MemcachedCache', []], - ['mongodb', 'Doctrine\Common\Cache\MongoDBCache', [\Mockery::mock('MongoCollection')]], - ['php_file', 'Doctrine\Common\Cache\PhpFileCache', [self::DIRECTORY]], - ['redis', 'Doctrine\Common\Cache\RedisCache', []], - ['riak', 'Doctrine\Common\Cache\RiakCache', [\Mockery::mock('\Riak\Bucket')]], - ['wincache', 'Doctrine\Common\Cache\WinCacheCache', []], - ['xcache', 'Doctrine\Common\Cache\XCacheCache', []], - ['zenddata', 'Doctrine\Common\Cache\ZendDataCache', []], - ]; - } - - /** - * {@inheritdoc} - */ - public static function tearDownAfterClass() - { - rmdir(self::DIRECTORY); - } - - /** - * @test - * @expectedException \InvalidArgumentException - */ - public function InvalidType_ThrowException() - { - $this->factory->create('invalid type'); - } - /** * @test */ public function WithDefaultLifetime_create() { $this->factory->setDefaultLifetime(100); - $cacheProviderDecorator = $this->factory->create('array'); - $this->assertAttributeEquals(100, 'defaultLifetime', $cacheProviderDecorator); + $cacheProviderDecorator = $this->factory->create(new ArrayAdapter()); + $this->assertEquals(100, $cacheProviderDecorator->getDefaultLifetime()); } - /** - * @test - * @dataProvider typeProvider - */ - public function Create($inputType, $expectedCacheProvider, $args) - { - $factory = new CacheProviderDecoratorFactory(); - $actualCacheProvider = $factory->create($inputType, ...$args); - $this->assertAttributeInstanceOf($expectedCacheProvider, 'cacheProvider', $actualCacheProvider); - } /** * {@inheritdoc} */ - protected function setUp() + protected function setUp(): void { $this->factory = new CacheProviderDecoratorFactory(); } diff --git a/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorTest.php b/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorTest.php index e3b2c82..e1d580e 100644 --- a/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorTest.php +++ b/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderDecoratorTest.php @@ -5,246 +5,85 @@ use Doctrine\Common\Cache\RedisCache; use OpenClassrooms\DoctrineCacheExtension\AbstractCacheProviderDecorator; use OpenClassrooms\DoctrineCacheExtension\CacheProviderDecorator; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Cache\Adapter\ArrayAdapter; /** * @author Romain Kuzniak */ -class CacheProviderDecoratorTest extends \PHPUnit_Framework_TestCase +class CacheProviderDecoratorTest extends TestCase { - const EXPECTED_ID = '[1][1]'; - - const LIFE_TIME = 100; - - const EXPECTED_NAMESPACE_ID_VALUE = '['.CacheProviderMock::NAMESPACE_ID_VALUE; - - const NON_EXISTING_NAMESPACE_ID = -1; - - /** - * @var CacheProviderMock - */ - private $emptyCacheProvider; - - /** - * @var AbstractCacheProviderDecorator - */ - private $emptyCacheProviderDecorator; - /** * @var CacheProviderMock */ private $cacheProvider; - /** - * @var AbstractCacheProviderDecorator - */ - private $cacheProviderDecorator; - - /** - * @test - */ - public function GetCacheProvider_ReturnCacheProvider() - { - $this->assertAttributeEquals($this->cacheProvider, 'cacheProvider', $this->cacheProviderDecorator); - } - - /** - * @test - */ - public function DoFetch() - { - $this->assertEquals(CacheProviderMock::DATA, $this->cacheProviderDecorator->fetch(CacheProviderMock::ID)); - $this->assertTrue($this->cacheProvider->doFetchHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->cacheProvider->id); - } - - /** - * @test - */ - public function DoContains() - { - $this->assertTrue($this->cacheProviderDecorator->contains(CacheProviderMock::ID)); - $this->assertTrue($this->cacheProvider->doContainsHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->cacheProvider->id); - } - /** * @test */ public function DoSave() { - $this->assertTrue($this->emptyCacheProviderDecorator->save(CacheProviderMock::ID, CacheProviderMock::DATA)); - $this->assertTrue($this->emptyCacheProvider->doSaveHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->emptyCacheProvider->id); - $this->assertEquals(CacheProviderMock::DATA, $this->emptyCacheProvider->data); - } + $this->assertTrue($this->cacheProvider->save(CacheProviderMock::ID, CacheProviderMock::DATA)); + $this->assertCacheExists(); + $this->assertCacheDoesNotExistsInNamespace(); - /** - * @test - */ - public function DoDelete() - { - $this->assertTrue($this->cacheProviderDecorator->delete(CacheProviderMock::ID)); - $this->assertTrue($this->cacheProvider->doDeleteHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->cacheProvider->id); - } + $this->assertTrue($this->cacheProvider->delete(CacheProviderMock::ID)); + $this->assertCacheDoesNotExists(); - /** - * @test - */ - public function DoFlush() - { - $this->assertTrue($this->cacheProviderDecorator->flushAll()); - $this->assertTrue($this->cacheProvider->doFlushHasBeenCalled); - } + $this->assertTrue($this->cacheProvider->saveWithNamespace(CacheProviderMock::ID, CacheProviderMock::DATA)); + $this->assertCacheExists(); - /** - * @test - */ - public function doGetStats() - { - $this->assertNotEmpty($this->cacheProviderDecorator->getStats()); - $this->assertTrue($this->cacheProvider->doGetStatsHasBeenCalled); - } + $this->assertTrue($this->cacheProvider->delete(CacheProviderMock::ID)); + $this->assertCacheDoesNotExists(); - /** - * @test - */ - public function call() - { - /** @var RedisCache $cacheProviderDecorator */ - $cacheProviderDecorator = new CacheProviderDecorator(new RedisCache()); - $this->assertNull($cacheProviderDecorator->getRedis()); - } + $this->assertTrue($this->cacheProvider->saveWithNamespace(CacheProviderMock::ID, CacheProviderMock::DATA, 'test')); + $this->assertCacheExistsInNamespace(); + $this->assertCacheDoesNotExists(); - /** - * @test - */ - public function WithoutLifeTime_Save_SaveWithDefaultLifeTime() - { - $this->assertTrue($this->emptyCacheProviderDecorator->save(CacheProviderMock::ID, CacheProviderMock::DATA)); - $this->assertTrue($this->emptyCacheProvider->doSaveHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->emptyCacheProvider->id); - $this->assertEquals(CacheProviderMock::DATA, $this->emptyCacheProvider->data); - $this->assertEquals(AbstractCacheProviderDecorator::DEFAULT_LIFE_TIME, $this->emptyCacheProvider->lifeTime); - } + $this->assertTrue($this->cacheProvider->invalidate('test')); - /** - * @test - */ - public function Save_SaveWithLifeTime() - { - $this->assertTrue( - $this->emptyCacheProviderDecorator->save(CacheProviderMock::ID, CacheProviderMock::DATA, self::LIFE_TIME) - ); - $this->assertTrue($this->emptyCacheProvider->doSaveHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->emptyCacheProvider->id); - $this->assertEquals(CacheProviderMock::DATA, $this->emptyCacheProvider->data); - $this->assertEquals(self::LIFE_TIME, $this->emptyCacheProvider->lifeTime); - } + $this->assertCacheDoesNotExistsInNamespace(); - /** - * @test - */ - public function WithoutNamespaceId_SaveWithNamespace() - { - $this->assertTrue( - $this->emptyCacheProviderDecorator->saveWithNamespace(CacheProviderMock::ID, CacheProviderMock::DATA) - ); - $this->assertTrue($this->emptyCacheProvider->doSaveHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->emptyCacheProvider->id); - $this->assertEquals(CacheProviderMock::DATA, $this->emptyCacheProvider->data); - $this->assertEquals(AbstractCacheProviderDecorator::DEFAULT_LIFE_TIME, $this->emptyCacheProvider->lifeTime); - } + $this->assertTrue($this->cacheProvider->saveWithNamespace(CacheProviderMock::ID, CacheProviderMock::DATA, 'other namespace')); + $this->assertCacheDoesNotExistsInNamespace(); - /** - * @test - */ - public function SaveWithNamespace() - { - $this->assertTrue( - $this->emptyCacheProviderDecorator->saveWithNamespace( - CacheProviderMock::ID, - CacheProviderMock::DATA, - CacheProviderMock::NAMESPACE_ID, - self::LIFE_TIME - ) - ); - - $this->assertTrue($this->emptyCacheProvider->doSaveHasBeenCalled); - $this->assertStringStartsWith(self::EXPECTED_NAMESPACE_ID_VALUE, $this->emptyCacheProvider->id); - $this->assertEquals(CacheProviderMock::DATA, $this->emptyCacheProvider->data); - $this->assertEquals(self::LIFE_TIME, $this->emptyCacheProvider->lifeTime); + $this->assertTrue($this->cacheProvider->saveWithNamespace(CacheProviderMock::ID, CacheProviderMock::DATA, 'test')); + $this->assertCacheExistsInNamespace(); + $this->assertCacheDoesNotExists(); + + $this->assertTrue($this->cacheProvider->invalidate('another namespace')); + $this->assertCacheExistsInNamespace(); } - /** - * @test - */ - public function WithoutNamespaceId_FetchWithNamespace_ReturnData() + private function assertCacheExists(): void { - $data = $this->cacheProviderDecorator->fetchWithNamespace(CacheProviderMock::ID); - + $data = $this->cacheProvider->fetch(CacheProviderMock::ID); $this->assertEquals(CacheProviderMock::DATA, $data); - $this->assertTrue($this->cacheProvider->doFetchHasBeenCalled); - $this->assertEquals(self::EXPECTED_ID, $this->cacheProvider->id); } - /** - * @test - */ - public function WithNamespaceId_FetchWithNamespace_ReturnData() + private function assertCacheExistsInNamespace(): void { - $this->emptyCacheProvider->save(CacheProviderMock::NAMESPACE_ID, CacheProviderMock::NAMESPACE_ID_VALUE); - $this->emptyCacheProvider->save( - CacheProviderMock::NAMESPACE_ID_VALUE.CacheProviderMock::ID, - CacheProviderMock::NAMESPACE_DATA - ); - - $data = $this->emptyCacheProviderDecorator->fetchWithNamespace( - CacheProviderMock::ID, - CacheProviderMock::NAMESPACE_ID - ); - - $this->assertEquals(CacheProviderMock::NAMESPACE_DATA, $data); - $this->assertTrue($this->emptyCacheProvider->doFetchHasBeenCalled); - $this->assertStringStartsWith( - '['.CacheProviderMock::NAMESPACE_ID_VALUE.CacheProviderMock::ID.']', - $this->emptyCacheProvider->id - ); + $data = $this->cacheProvider->fetchWithNamespace(CacheProviderMock::ID, 'test'); + $this->assertEquals(CacheProviderMock::DATA, $data); } - /** - * @test - */ - public function NonExistingNamespace_Invalidate_ReturnFalse() + private function assertCacheDoesNotExistsInNamespace(): void { - $this->assertFalse($this->emptyCacheProviderDecorator->invalidate(self::NON_EXISTING_NAMESPACE_ID)); + $data = $this->cacheProvider->fetchWithNamespace(CacheProviderMock::ID, 'test'); + $this->assertFalse($data); } - /** - * @test - */ - public function Invalidate_ReturnTrue() + private function assertCacheDoesNotExists(): void { - $this->emptyCacheProvider->save(CacheProviderMock::NAMESPACE_ID, CacheProviderMock::NAMESPACE_ID_VALUE); - $this->emptyCacheProvider->save( - CacheProviderMock::NAMESPACE_ID_VALUE.CacheProviderMock::ID, - CacheProviderMock::NAMESPACE_DATA - ); - $invalidated = $this->emptyCacheProviderDecorator->invalidate(CacheProviderMock::NAMESPACE_ID); - - $this->assertTrue($invalidated); - $this->assertTrue($this->emptyCacheProvider->doSaveHasBeenCalled); + $data = $this->cacheProvider->fetch(CacheProviderMock::ID); + $this->assertFalse($data); } /** * {@inheritdoc} */ - protected function setUp() + protected function setUp(): void { - $this->emptyCacheProvider = new CacheProviderMock(); - $this->emptyCacheProviderDecorator = new CacheProviderDecorator($this->emptyCacheProvider); - $this->cacheProvider = new CacheProviderMock(); - $this->cacheProvider->save(CacheProviderMock::ID, CacheProviderMock::DATA); - $this->cacheProviderDecorator = new CacheProviderDecorator($this->cacheProvider); + $this->cacheProvider = new CacheProviderDecorator(new ArrayAdapter()); } } diff --git a/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderMock.php b/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderMock.php index 149993b..ef20d42 100644 --- a/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderMock.php +++ b/tests/OpenClassrooms/DoctrineCacheExtension/CacheProviderMock.php @@ -2,14 +2,12 @@ namespace OpenClassrooms\Tests\DoctrineCacheExtension; -use Doctrine\Common\Cache\ArrayCache; - /** * @author Romain Kuzniak */ -class CacheProviderMock extends ArrayCache +class CacheProviderMock { - const ID = 1; + const ID = "1"; const NAMESPACE_ID = 'namespace_1'; @@ -64,51 +62,4 @@ class CacheProviderMock extends ArrayCache */ public $lifeTime; - public function doFetch($id) - { - $this->doFetchHasBeenCalled = true; - $this->id = $id[1]; - - return parent::doFetch($id); - } - - public function doContains($id) - { - $this->doContainsHasBeenCalled = true; - $this->id = $id; - - return parent::doContains($id); - } - - public function doSave($id, $data, $lifeTime = null) - { - $this->doSaveHasBeenCalled = true; - $this->id = $id; - $this->data = $data; - $this->lifeTime = $lifeTime; - - return parent::doSave($id, $data, $lifeTime); - } - - public function doDelete($id) - { - $this->doDeleteHasBeenCalled = true; - $this->id = $id; - - return parent::doDelete($id); - } - - public function doGetStats() - { - $this->doGetStatsHasBeenCalled = true; - - return parent::doGetStats(); - } - - protected function doFlush() - { - $this->doFlushHasBeenCalled = true; - - return parent::doFlush(); - } }