| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * 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;
- 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);
- }
- }
|