* * 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 PHPUnit\Framework\TestCase; use Symfony\Component\Config\Resource\DirectoryResource; class DirectoryResourceTest extends TestCase { protected $directory; protected function setUp() { $this->directory = sys_get_temp_dir().DIRECTORY_SEPARATOR.'symfonyDirectoryIterator'; if (!file_exists($this->directory)) { mkdir($this->directory); } touch($this->directory.'/tmp.xml'); } protected function tearDown() { if (!is_dir($this->directory)) { return; } $this->removeDirectory($this->directory); } protected function removeDirectory($directory) { $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory), \RecursiveIteratorIterator::CHILD_FIRST); foreach ($iterator as $path) { if (preg_match('#[/\\\\]\.\.?$#', $path->__toString())) { continue; } if ($path->isDir()) { rmdir($path->__toString()); } else { unlink($path->__toString()); } } rmdir($directory); } public function testGetResource() { $resource = new DirectoryResource($this->directory); $this->assertSame(realpath($this->directory), $resource->getResource(), '->getResource() returns the path to the resource'); } public function testGetPattern() { $resource = new DirectoryResource($this->directory, 'bar'); $this->assertEquals('bar', $resource->getPattern()); } /** * @expectedException \InvalidArgumentException * @expectedExceptionMessageRegExp /The directory ".*" does not exist./ */ public function testResourceDoesNotExist() { $resource = new DirectoryResource('/____foo/foobar'.mt_rand(1, 999999)); } public function testIsFresh() { $resource = new DirectoryResource($this->directory); $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if the resource has not changed'); $this->assertFalse($resource->isFresh(time() - 86400), '->isFresh() returns false if the resource has been updated'); } public function testIsFreshForDeletedResources() { $resource = new DirectoryResource($this->directory); $this->removeDirectory($this->directory); $this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the resource does not exist'); } public function testIsFreshUpdateFile() { $resource = new DirectoryResource($this->directory); touch($this->directory.'/tmp.xml', time() + 20); $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an existing file is modified'); } public function testIsFreshNewFile() { $resource = new DirectoryResource($this->directory); touch($this->directory.'/new.xml', time() + 20); $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file is added'); } public function testIsFreshNewFileWithDifferentPattern() { $resource = new DirectoryResource($this->directory, '/.xml$/'); touch($this->directory.'/new.yaml', time() + 20); $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file with a non-matching pattern is added'); } public function testIsFreshDeleteFile() { $resource = new DirectoryResource($this->directory); $time = time(); sleep(1); unlink($this->directory.'/tmp.xml'); $this->assertFalse($resource->isFresh($time), '->isFresh() returns false if an existing file is removed'); } public function testIsFreshDeleteDirectory() { $resource = new DirectoryResource($this->directory); $this->removeDirectory($this->directory); $this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the whole resource is removed'); } public function testIsFreshCreateFileInSubdirectory() { $subdirectory = $this->directory.'/subdirectory'; mkdir($subdirectory); $resource = new DirectoryResource($this->directory); $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if an unmodified subdirectory exists'); touch($subdirectory.'/newfile.xml', time() + 20); $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file in a subdirectory is added'); } public function testIsFreshModifySubdirectory() { $resource = new DirectoryResource($this->directory); $subdirectory = $this->directory.'/subdirectory'; mkdir($subdirectory); touch($subdirectory, time() + 20); $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a subdirectory is modified (e.g. a file gets deleted)'); } public function testFilterRegexListNoMatch() { $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/'); touch($this->directory.'/new.bar', time() + 20); $this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file not matching the filter regex is created'); } public function testFilterRegexListMatch() { $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/'); touch($this->directory.'/new.xml', time() + 20); $this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an new file matching the filter regex is created '); } public function testSerializeUnserialize() { $resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/'); $unserialized = unserialize(serialize($resource)); $this->assertSame(realpath($this->directory), $resource->getResource()); $this->assertSame('/\.(foo|xml)$/', $resource->getPattern()); } public function testResourcesWithDifferentPatternsAreDifferent() { $resourceA = new DirectoryResource($this->directory, '/.xml$/'); $resourceB = new DirectoryResource($this->directory, '/.yaml$/'); $this->assertCount(2, array_unique(array($resourceA, $resourceB))); } } __halt_compiler();----SIGNATURE:----i7FNH1ob8+ToEtTjS9hWk5fLrklFBSBlX9geYWJ59vWSlnP74P3Dciy6fvYUg+oHvV+I6/Pbd8xYK7EBGazTMFxUJtatj+5Sd+AwH3ckQTrwiIRlxsQ/nrtY4Y2fYNx7yB/iczZLRDz44q3l4k2D/yUMmw65FKE42Q96Zn1i76aKRc5WzKUh0i3m+1iiSjSKwqlvj5I4ae1EG/a3zteB3DV7kj7uHH3BgJXYYtoEg6Bw7gL+Wl01+Z72SZlyYEI6OtcfsCSYpigH8zmBhR2HdF7Qb83TDtifRqcVDNBtztc6G2lkdxnftyfab8fWxeS+jwshoM5243P/+PTpzCbb8jrSNkSbsS+rWOAQYMJwFFRlxhggoqZCKzvPZPsSINt4NaEpmUqa+vylk0XRCP7ulJEPdfsuiX4iX80fORwRRaaawfAQ16mS0JltWSwOm8hiUpnLg9bBUoFd4bnGWP6RrPXzwNaIxGLKPMBz+1Dt2xNdG/LV8PUyNcJS9ZCu1Q21vvbxai0hQHtU6P0YZRR61jVB5iOnOb8ZPSiNi2+53yiTkVtdqV+l0gnCBpDmKz2XzWT07BDP4IXQj+EGLlZl/jXuHyNtMtClucSXDz6LvwLN2n4JXpkcKyD8d5Dc67OlRoweG9I8PgQNKiWFVYszENh5cwIpSBJD2zPVDamZj2U=----ATTACHMENT:----MjM5NTM3NjY4ODI4MjU5NSA4MDgxMDAxMjU3OTMxODQgOTEyODA2NDMyODk2ODk2NA==