146 lines
5.2 KiB
PHP
146 lines
5.2 KiB
PHP
<?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;
|
|
|
|
/**
|
|
* @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);
|
|
}
|
|
}
|