From d98eb7b5bb869dd27088fc5b2eee35b648ba738d Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sat, 1 Oct 2016 13:54:25 -0700 Subject: [PATCH] [Config] added ClassExistenceResource --- .../Resource/ClassExistenceResource.php | 75 +++++++++++++++++++ .../Resource/ClassExistenceResourceTest.php | 54 +++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 src/Symfony/Component/Config/Resource/ClassExistenceResource.php create mode 100644 src/Symfony/Component/Config/Tests/Resource/ClassExistenceResourceTest.php diff --git a/src/Symfony/Component/Config/Resource/ClassExistenceResource.php b/src/Symfony/Component/Config/Resource/ClassExistenceResource.php new file mode 100644 index 0000000000..5f683a4f8a --- /dev/null +++ b/src/Symfony/Component/Config/Resource/ClassExistenceResource.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Resource; + +/** + * ClassExistenceResource represents a class availability. + * Freshness is only evaluated against resource availability. + * + * The resource must be a fully-qualified class name. + * + * @author Fabien Potencier + */ +class ClassExistenceResource implements SelfCheckingResourceInterface, \Serializable +{ + private $resource; + private $exists; + + /** + * @param string $resource The fully-qualified class name + */ + public function __construct($resource) + { + $this->resource = $resource; + $this->exists = class_exists($resource); + } + + /** + * {@inheritdoc} + */ + public function __toString() + { + return $this->resource; + } + + /** + * @return string The file path to the resource + */ + public function getResource() + { + return $this->resource; + } + + /** + * {@inheritdoc} + */ + public function isFresh($timestamp) + { + return class_exists($this->resource) === $this->exists; + } + + /** + * {@inheritdoc} + */ + public function serialize() + { + return serialize(array($this->resource, $this->exists)); + } + + /** + * {@inheritdoc} + */ + public function unserialize($serialized) + { + list($this->resource, $this->exists) = unserialize($serialized); + } +} diff --git a/src/Symfony/Component/Config/Tests/Resource/ClassExistenceResourceTest.php b/src/Symfony/Component/Config/Tests/Resource/ClassExistenceResourceTest.php new file mode 100644 index 0000000000..20d5b3308d --- /dev/null +++ b/src/Symfony/Component/Config/Tests/Resource/ClassExistenceResourceTest.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Tests\Resource; + +use Symfony\Component\Config\Resource\ClassExistenceResource; + +class ClassExistenceResourceTest extends \PHPUnit_Framework_TestCase +{ + public function testToString() + { + $res = new ClassExistenceResource('BarClass'); + $this->assertSame('BarClass', (string) $res); + } + + public function testGetResource() + { + $res = new ClassExistenceResource('BarClass'); + $this->assertSame('BarClass', $res->getResource()); + } + + public function testIsFreshWhenClassDoesNotExist() + { + $res = new ClassExistenceResource('Symfony\Component\Config\Tests\Fixtures\BarClass'); + + $this->assertTrue($res->isFresh(time())); + + eval(<<assertFalse($res->isFresh(time())); + } + + public function testIsFreshWhenClassExists() + { + $res = new ClassExistenceResource('Symfony\Component\Config\Tests\Resource\ClassExistenceResourceTest'); + + $this->assertTrue($res->isFresh(time())); + } +}