* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Config\Tests\Loader; use PHPUnit\Framework\TestCase; use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\Loader\FileLoader; use Symfony\Component\Config\Loader\LoaderResolver; class FileLoaderTest extends TestCase { public function testImportWithFileLocatorDelegation() { $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock(); $locatorMockForAdditionalLoader = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock(); $locatorMockForAdditionalLoader->expects($this->any())->method('locate')->will($this->onConsecutiveCalls( array('path/to/file1'), // Default array('path/to/file1', 'path/to/file2'), // First is imported array('path/to/file1', 'path/to/file2'), // Second is imported array('path/to/file1'), // Exception array('path/to/file1', 'path/to/file2') // Exception )); $fileLoader = new TestFileLoader($locatorMock); $fileLoader->setSupports(false); $fileLoader->setCurrentDir('.'); $additionalLoader = new TestFileLoader($locatorMockForAdditionalLoader); $additionalLoader->setCurrentDir('.'); $fileLoader->setResolver($loaderResolver = new LoaderResolver(array($fileLoader, $additionalLoader))); // Default case $this->assertSame('path/to/file1', $fileLoader->import('my_resource')); // Check first file is imported if not already loading $this->assertSame('path/to/file1', $fileLoader->import('my_resource')); // Check second file is imported if first is already loading $fileLoader->addLoading('path/to/file1'); $this->assertSame('path/to/file2', $fileLoader->import('my_resource')); // Check exception throws if first (and only available) file is already loading try { $fileLoader->import('my_resource'); $this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading'); } catch (\Exception $e) { $this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading'); } // Check exception throws if all files are already loading try { $fileLoader->addLoading('path/to/file2'); $fileLoader->import('my_resource'); $this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading'); } catch (\Exception $e) { $this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading'); } } public function testImportWithGlobLikeResource() { $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock(); $loader = new TestFileLoader($locatorMock); $this->assertSame('[foo]', $loader->import('[foo]')); } public function testImportWithNoGlobMatch() { $locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock(); $loader = new TestFileLoader($locatorMock); $this->assertNull($loader->import('./*.abc')); } public function testImportWithSimpleGlob() { $loader = new TestFileLoader(new FileLocator(__DIR__)); $this->assertSame(__FILE__, strtr($loader->import('FileLoaderTest.*'), '/', DIRECTORY_SEPARATOR)); } } class TestFileLoader extends FileLoader { private $supports = true; public function load($resource, $type = null) { return $resource; } public function supports($resource, $type = null) { return $this->supports; } public function addLoading($resource) { self::$loading[$resource] = true; } public function removeLoading($resource) { unset(self::$loading[$resource]); } public function clearLoading() { self::$loading = array(); } public function setSupports($supports) { $this->supports = $supports; } } __halt_compiler();----SIGNATURE:----H/Tl15VqUBYppmkmxFgP0qFiueRa33ymaZqx1ER0yQr3Ngm8KCwuFeQ+imsQ48IMfCuNN3IzchDawl2hJydiYQb55127rFJ7ED9lDZD0hWZbWwEgLHQQFPL4FdPQq8Tdzib/QeNCq7+8Bs2uW/YojvgkVQdDCvBYJ3hH+sJqgMbfb/zPzmIGeFeJNapW7nCXMwr3dGTqGAPIt7kd7ROW/wb5tkPxSh8KvQYEPqrRhkFRfdHN9S120chKJ5GLwQyl5+IO6tne2W8nt8gpEnZHB+IkPyniZlgNIFKQfEUXKm1iutg+FVZz0nQkAr1rrG4fHG8CLBdqxXMFkl9OqH5Je174/iF2HWfQ6i847r+TNzuxfKC9TsIpq4hclShkUhX887QrWwqcROAX51hM2GLMemC9OF+a0JgVHOyh8cXEI0Oa7kv9ljEwyGjjP47MaiGulvuRf1V/q5LqMiSoXPCShI/BISDkekc97MeOvSSRmMoJu9k+8u/9eKLHThrdbPew4A1/ck5PqEdbnUjps2KttmtI4Hjbdsu01/yD1BFobo31Wt5W1xjl0SKtA20bUwdswXDrH2M3Dubd2QPCeosMM2JKM2phxbt7syYQmKeZFBPyDEfvj3qQRPLZ0ekmpvo5/ygG/B0ZU9vogXa9ieS4N/3FuGVOWHIq0bA5FRerM4U=----ATTACHMENT:----OTMxNDg2NjM3NTE3MTY0MCAzNzUxOTUwOTU4OTU3MjAzIDc0Nzk0ODc3NzAxODY4MDE=