* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\DependencyInjection\Tests\Compiler; use PHPUnit\Framework\TestCase; use Symfony\Component\DependencyInjection\Compiler\AutowireExceptionPass; use Symfony\Component\DependencyInjection\Compiler\AutowirePass; use Symfony\Component\DependencyInjection\Compiler\InlineServiceDefinitionsPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\AutowiringFailedException; /** * @group legacy */ class AutowireExceptionPassTest extends TestCase { public function testThrowsException() { $autowirePass = $this->getMockBuilder(AutowirePass::class) ->getMock(); $autowireException = new AutowiringFailedException('foo_service_id', 'An autowiring exception message'); $autowirePass->expects($this->any()) ->method('getAutowiringExceptions') ->will($this->returnValue(array($autowireException))); $inlinePass = $this->getMockBuilder(InlineServiceDefinitionsPass::class) ->getMock(); $inlinePass->expects($this->any()) ->method('getInlinedServiceIds') ->will($this->returnValue(array())); $container = new ContainerBuilder(); $container->register('foo_service_id'); $pass = new AutowireExceptionPass($autowirePass, $inlinePass); try { $pass->process($container); $this->fail('->process() should throw the exception if the service id exists'); } catch (\Exception $e) { $this->assertSame($autowireException, $e); } } public function testThrowExceptionIfServiceInlined() { $autowirePass = $this->getMockBuilder(AutowirePass::class) ->getMock(); $autowireException = new AutowiringFailedException('a_service', 'An autowiring exception message'); $autowirePass->expects($this->any()) ->method('getAutowiringExceptions') ->will($this->returnValue(array($autowireException))); $inlinePass = $this->getMockBuilder(InlineServiceDefinitionsPass::class) ->getMock(); $inlinePass->expects($this->any()) ->method('getInlinedServiceIds') ->will($this->returnValue(array( // a_service inlined into b_service 'a_service' => array('b_service'), // b_service inlined into c_service 'b_service' => array('c_service'), ))); $container = new ContainerBuilder(); // ONLY register c_service in the final container $container->register('c_service', 'stdClass'); $pass = new AutowireExceptionPass($autowirePass, $inlinePass); try { $pass->process($container); $this->fail('->process() should throw the exception if the service id exists'); } catch (\Exception $e) { $this->assertSame($autowireException, $e); } } public function testDoNotThrowExceptionIfServiceInlinedButRemoved() { $autowirePass = $this->getMockBuilder(AutowirePass::class) ->getMock(); $autowireException = new AutowiringFailedException('a_service', 'An autowiring exception message'); $autowirePass->expects($this->any()) ->method('getAutowiringExceptions') ->will($this->returnValue(array($autowireException))); $inlinePass = $this->getMockBuilder(InlineServiceDefinitionsPass::class) ->getMock(); $inlinePass->expects($this->any()) ->method('getInlinedServiceIds') ->will($this->returnValue(array( // a_service inlined into b_service 'a_service' => array('b_service'), // b_service inlined into c_service 'b_service' => array('c_service'), ))); // do NOT register c_service in the container $container = new ContainerBuilder(); $pass = new AutowireExceptionPass($autowirePass, $inlinePass); $pass->process($container); // mark the test as passed $this->assertTrue(true); } public function testNoExceptionIfServiceRemoved() { $autowirePass = $this->getMockBuilder(AutowirePass::class) ->getMock(); $autowireException = new AutowiringFailedException('non_existent_service'); $autowirePass->expects($this->any()) ->method('getAutowiringExceptions') ->will($this->returnValue(array($autowireException))); $inlinePass = $this->getMockBuilder(InlineServiceDefinitionsPass::class) ->getMock(); $inlinePass->expects($this->any()) ->method('getInlinedServiceIds') ->will($this->returnValue(array())); $container = new ContainerBuilder(); $pass = new AutowireExceptionPass($autowirePass, $inlinePass); $pass->process($container); // mark the test as passed $this->assertTrue(true); } } __halt_compiler();----SIGNATURE:----J1UWbkNL7LuAyTUa+XuBVXWcawPBXlaknmT7XyYyj2QBZhBhWkWCp9gTgBCUkECVQJjcNDFLAvZWRCle+RJ4GO5xV7hMYrBEN6eAKn7DgnpFtf5f9F3BzNpdIv1kHeHIRY4pZwUnIAsTxDs4OTmDL4rJi0ksLFy+RsB/blKWtr8p4a60WT4vcsAgvJRITn2EjveX6wJb6F9QWQDaEZ8But/NywxaA8JD5HdyxQVjAuFp2Lo2bz4iDdbrPLGADda+hd8l1Mksp74TFctib93SnkZB6f3fGSXPEqpKh+01yZuGhQ1KENMAHvRkHmIEv3d2LqLz5/3QMS7R7zQNC0Pmf5QtQk2D6NCHUmV8YGDT9chPMLWnG5BcKz2M6NobQ/+ziTUxYG+YNsQgUbZ7iOlbznkjbootEwtQ/YN6Yud5k07W8z6l2gZEZXatccn+2N2sb3GxqQQxW6h3WYH28KubEVB59x/mLVAZgKhJ/JPJ76vBBmchFSSqPRECIqGiO0jlLulpTFd2q2hh/KKRjQWYaF7MDdIY2S9oCz34jhfMJO08FrNRX61jAUYwSJNVCFqjpw0PTynw9o9lgsuTgmttHt1+QMJuVEExbxZ7LprGIsu2GeXD84ETxAfbALg1BlIGGaplX1DlUcKxar+mm0eMsqekps0VeLN5MG/NX5WdqXI=----ATTACHMENT:----NjEyMDg1NzI4MzE2Mjk0MCA4NTE3MTg1MTk1MTI5MTczIDY3NTI1OTA2NTc5NjkzNzk=