Merge branch '2.7' into 2.8
* 2.7: [Bridge\PhpUnit] Exit as late as possible Update Repository Symlink Helper Document explicitly that dotfiles and vcs files are ignored by default do not mock the container builder in tests
This commit is contained in:
commit
e490d663d6
7
link
7
link
@ -37,7 +37,12 @@ if (!is_dir("$argv[1]/vendor/symfony")) {
|
||||
$sfPackages = array('symfony/symfony' => __DIR__);
|
||||
|
||||
$filesystem = new Filesystem();
|
||||
foreach (glob(__DIR__.'/src/Symfony/{Bundle,Bridge,Component,Component/Security}/*', GLOB_BRACE | GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
|
||||
$braces = array('Bundle', 'Bridge', 'Component', 'Component/Security');
|
||||
$directories = call_user_func_array('array_merge', array_values(array_map(function ($part) {
|
||||
return glob(__DIR__.'/src/Symfony/'.$part.'/*', GLOB_ONLYDIR | GLOB_NOSORT);
|
||||
}, $braces)));
|
||||
|
||||
foreach ($directories as $dir) {
|
||||
if ($filesystem->exists($composer = "$dir/composer.json")) {
|
||||
$sfPackages[json_decode(file_get_contents($composer))->name] = $dir;
|
||||
}
|
||||
|
@ -161,6 +161,7 @@ class DeprecationErrorHandler
|
||||
return $b['count'] - $a['count'];
|
||||
};
|
||||
|
||||
$displayDeprecations = function ($deprecations) use ($colorize, $cmp) {
|
||||
foreach (array('unsilenced', 'remaining', 'legacy', 'other') as $group) {
|
||||
if ($deprecations[$group.'Count']) {
|
||||
echo "\n", $colorize(sprintf('%s deprecation notices (%d)', ucfirst($group), $deprecations[$group.'Count']), 'legacy' !== $group), "\n";
|
||||
@ -183,11 +184,31 @@ class DeprecationErrorHandler
|
||||
if (!empty($notices)) {
|
||||
echo "\n";
|
||||
}
|
||||
};
|
||||
|
||||
if (DeprecationErrorHandler::MODE_WEAK !== $mode && $mode < $deprecations['unsilencedCount'] + $deprecations['remainingCount'] + $deprecations['otherCount']) {
|
||||
$displayDeprecations($deprecations);
|
||||
|
||||
// store failing status
|
||||
$isFailing = DeprecationErrorHandler::MODE_WEAK !== $mode && $mode < $deprecations['unsilencedCount'] + $deprecations['remainingCount'] + $deprecations['otherCount'];
|
||||
|
||||
// reset deprecations array
|
||||
foreach ($deprecations as $group => $arrayOrInt) {
|
||||
$deprecations[$group] = is_int($arrayOrInt) ? 0 : array();
|
||||
}
|
||||
|
||||
register_shutdown_function(function () use (&$deprecations, $isFailing, $displayDeprecations, $mode) {
|
||||
foreach ($deprecations as $group => $arrayOrInt) {
|
||||
if (0 < (is_int($arrayOrInt) ? $arrayOrInt : count($arrayOrInt))) {
|
||||
echo "Shutdown-time deprecations:\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
$displayDeprecations($deprecations);
|
||||
if ($isFailing || DeprecationErrorHandler::MODE_WEAK !== $mode && $mode < $deprecations['unsilencedCount'] + $deprecations['remainingCount'] + $deprecations['otherCount']) {
|
||||
exit(1);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,6 +59,10 @@ $foo = new FooTestCase();
|
||||
$foo->testLegacyFoo();
|
||||
$foo->testNonLegacyBar();
|
||||
|
||||
register_shutdown_function(function () {
|
||||
exit('I get precedence over any exit statements inside the deprecation error handler.');
|
||||
});
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Unsilenced deprecation notices (3)
|
||||
@ -80,3 +84,4 @@ Other deprecation notices (1)
|
||||
|
||||
1x: root deprecation
|
||||
|
||||
I get precedence over any exit statements inside the deprecation error handler.
|
||||
|
@ -0,0 +1,91 @@
|
||||
--TEST--
|
||||
Test DeprecationErrorHandler in default mode
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
putenv('SYMFONY_DEPRECATIONS_HELPER');
|
||||
putenv('ANSICON');
|
||||
putenv('ConEmuANSI');
|
||||
putenv('TERM');
|
||||
|
||||
$vendor = __DIR__;
|
||||
while (!file_exists($vendor.'/vendor')) {
|
||||
$vendor = dirname($vendor);
|
||||
}
|
||||
define('PHPUNIT_COMPOSER_INSTALL', $vendor.'/vendor/autoload.php');
|
||||
require PHPUNIT_COMPOSER_INSTALL;
|
||||
require_once __DIR__.'/../../bootstrap.php';
|
||||
|
||||
@trigger_error('root deprecation', E_USER_DEPRECATED);
|
||||
|
||||
eval(<<<'EOPHP'
|
||||
namespace PHPUnit\Util;
|
||||
|
||||
class Test
|
||||
{
|
||||
public static function getGroups()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
EOPHP
|
||||
);
|
||||
|
||||
class PHPUnit_Util_Test
|
||||
{
|
||||
public static function getGroups()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
class FooTestCase
|
||||
{
|
||||
public function testLegacyFoo()
|
||||
{
|
||||
@trigger_error('silenced foo deprecation', E_USER_DEPRECATED);
|
||||
trigger_error('unsilenced foo deprecation', E_USER_DEPRECATED);
|
||||
trigger_error('unsilenced foo deprecation', E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
public function testNonLegacyBar()
|
||||
{
|
||||
@trigger_error('silenced bar deprecation', E_USER_DEPRECATED);
|
||||
trigger_error('unsilenced bar deprecation', E_USER_DEPRECATED);
|
||||
}
|
||||
}
|
||||
|
||||
$foo = new FooTestCase();
|
||||
$foo->testLegacyFoo();
|
||||
$foo->testNonLegacyBar();
|
||||
|
||||
register_shutdown_function(function () {
|
||||
@trigger_error('root deprecation during shutdown', E_USER_DEPRECATED);
|
||||
});
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Unsilenced deprecation notices (3)
|
||||
|
||||
2x: unsilenced foo deprecation
|
||||
2x in FooTestCase::testLegacyFoo
|
||||
|
||||
1x: unsilenced bar deprecation
|
||||
1x in FooTestCase::testNonLegacyBar
|
||||
|
||||
Remaining deprecation notices (1)
|
||||
|
||||
1x: silenced bar deprecation
|
||||
1x in FooTestCase::testNonLegacyBar
|
||||
|
||||
Legacy deprecation notices (1)
|
||||
|
||||
Other deprecation notices (1)
|
||||
|
||||
1x: root deprecation
|
||||
|
||||
Shutdown-time deprecations:
|
||||
|
||||
Other deprecation notices (1)
|
||||
|
||||
1x: root deprecation during shutdown
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddCacheWarmerPass;
|
||||
|
||||
@ -19,73 +20,44 @@ class AddCacheWarmerPassTest extends TestCase
|
||||
{
|
||||
public function testThatCacheWarmersAreProcessedInPriorityOrder()
|
||||
{
|
||||
$services = array(
|
||||
'my_cache_warmer_service1' => array(0 => array('priority' => 100)),
|
||||
'my_cache_warmer_service2' => array(0 => array('priority' => 200)),
|
||||
'my_cache_warmer_service3' => array(),
|
||||
);
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('findTaggedServiceIds', 'getDefinition', 'hasDefinition'))->getMock();
|
||||
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->with('cache_warmer')
|
||||
->will($this->returnValue($definition));
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('hasDefinition')
|
||||
->with('cache_warmer')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$definition->expects($this->once())
|
||||
->method('replaceArgument')
|
||||
->with(0, array(
|
||||
new Reference('my_cache_warmer_service2'),
|
||||
new Reference('my_cache_warmer_service1'),
|
||||
new Reference('my_cache_warmer_service3'),
|
||||
));
|
||||
$container = new ContainerBuilder();
|
||||
$cacheWarmerDefinition = $container->register('cache_warmer')->addArgument(array());
|
||||
$container->register('my_cache_warmer_service1')->addTag('kernel.cache_warmer', array('priority' => 100));
|
||||
$container->register('my_cache_warmer_service2')->addTag('kernel.cache_warmer', array('priority' => 200));
|
||||
$container->register('my_cache_warmer_service3')->addTag('kernel.cache_warmer');
|
||||
|
||||
$addCacheWarmerPass = new AddCacheWarmerPass();
|
||||
$addCacheWarmerPass->process($container);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
new Reference('my_cache_warmer_service2'),
|
||||
new Reference('my_cache_warmer_service1'),
|
||||
new Reference('my_cache_warmer_service3'),
|
||||
),
|
||||
$cacheWarmerDefinition->getArgument(0)
|
||||
);
|
||||
}
|
||||
|
||||
public function testThatCompilerPassIsIgnoredIfThereIsNoCacheWarmerDefinition()
|
||||
{
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
|
||||
$container->expects($this->never())->method('findTaggedServiceIds');
|
||||
$container->expects($this->never())->method('getDefinition');
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('hasDefinition')
|
||||
->with('cache_warmer')
|
||||
->will($this->returnValue(false));
|
||||
$definition->expects($this->never())->method('replaceArgument');
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
$addCacheWarmerPass = new AddCacheWarmerPass();
|
||||
$addCacheWarmerPass->process($container);
|
||||
|
||||
// we just check that the pass does not break if no cache warmer is registered
|
||||
$this->addToAssertionCount(1);
|
||||
}
|
||||
|
||||
public function testThatCacheWarmersMightBeNotDefined()
|
||||
{
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue(array()));
|
||||
$container->expects($this->never())->method('getDefinition');
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('hasDefinition')
|
||||
->with('cache_warmer')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$definition->expects($this->never())->method('replaceArgument');
|
||||
$container = new ContainerBuilder();
|
||||
$cacheWarmerDefinition = $container->register('cache_warmer')->addArgument(array());
|
||||
|
||||
$addCacheWarmerPass = new AddCacheWarmerPass();
|
||||
$addCacheWarmerPass->process($container);
|
||||
|
||||
$this->assertSame(array(), $cacheWarmerDefinition->getArgument(0));
|
||||
}
|
||||
}
|
||||
|
@ -13,72 +13,40 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddConstraintValidatorsPass;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
|
||||
class AddConstraintValidatorsPassTest extends TestCase
|
||||
{
|
||||
public function testThatConstraintValidatorServicesAreProcessed()
|
||||
{
|
||||
$services = array(
|
||||
'my_constraint_validator_service1' => array(0 => array('alias' => 'my_constraint_validator_alias1')),
|
||||
'my_constraint_validator_service2' => array(),
|
||||
);
|
||||
|
||||
$validatorFactoryDefinition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('findTaggedServiceIds', 'getDefinition', 'hasDefinition'))->getMock();
|
||||
|
||||
$validatorDefinition1 = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->setMethods(array('getClass'))->getMock();
|
||||
$validatorDefinition2 = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->setMethods(array('getClass'))->getMock();
|
||||
|
||||
$validatorDefinition1->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->willReturn('My\Fully\Qualified\Class\Named\Validator1');
|
||||
$validatorDefinition2->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->willReturn('My\Fully\Qualified\Class\Named\Validator2');
|
||||
|
||||
$container->expects($this->any())
|
||||
->method('getDefinition')
|
||||
->with($this->anything())
|
||||
->will($this->returnValueMap(array(
|
||||
array('my_constraint_validator_service1', $validatorDefinition1),
|
||||
array('my_constraint_validator_service2', $validatorDefinition2),
|
||||
array('validator.validator_factory', $validatorFactoryDefinition),
|
||||
)));
|
||||
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('hasDefinition')
|
||||
->with('validator.validator_factory')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$validatorFactoryDefinition->expects($this->once())
|
||||
->method('replaceArgument')
|
||||
->with(1, array(
|
||||
'My\Fully\Qualified\Class\Named\Validator1' => 'my_constraint_validator_service1',
|
||||
'my_constraint_validator_alias1' => 'my_constraint_validator_service1',
|
||||
'My\Fully\Qualified\Class\Named\Validator2' => 'my_constraint_validator_service2',
|
||||
));
|
||||
$container = new ContainerBuilder();
|
||||
$constraintValidatorFactoryDefinition = $container->register('validator.validator_factory')
|
||||
->setArguments(array(new Reference('service_container'), array()));
|
||||
$container->register('my_constraint_validator_service1', 'My\Fully\Qualified\Class\Named\Validator1')
|
||||
->addTag('validator.constraint_validator', array('alias' => 'my_constraint_validator_alias1'));
|
||||
$container->register('my_constraint_validator_service2', 'My\Fully\Qualified\Class\Named\Validator2')
|
||||
->addTag('validator.constraint_validator');
|
||||
|
||||
$addConstraintValidatorsPass = new AddConstraintValidatorsPass();
|
||||
$addConstraintValidatorsPass->process($container);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'My\Fully\Qualified\Class\Named\Validator1' => 'my_constraint_validator_service1',
|
||||
'my_constraint_validator_alias1' => 'my_constraint_validator_service1',
|
||||
'My\Fully\Qualified\Class\Named\Validator2' => 'my_constraint_validator_service2',
|
||||
),
|
||||
$constraintValidatorFactoryDefinition->getArgument(1)
|
||||
);
|
||||
}
|
||||
|
||||
public function testThatCompilerPassIsIgnoredIfThereIsNoConstraintValidatorFactoryDefinition()
|
||||
{
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
|
||||
$container->expects($this->never())->method('findTaggedServiceIds');
|
||||
$container->expects($this->never())->method('getDefinition');
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('hasDefinition')
|
||||
->with('validator.validator_factory')
|
||||
->will($this->returnValue(false));
|
||||
$definition->expects($this->never())->method('replaceArgument');
|
||||
|
||||
$addConstraintValidatorsPass = new AddConstraintValidatorsPass();
|
||||
$addConstraintValidatorsPass->process($container);
|
||||
$addConstraintValidatorsPass->process(new ContainerBuilder());
|
||||
|
||||
// we just check that the pass does not fail if no constraint validator factory is registered
|
||||
$this->addToAssertionCount(1);
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\FragmentRendererPass;
|
||||
@ -29,29 +30,10 @@ class LegacyFragmentRendererPassTest extends TestCase
|
||||
*/
|
||||
public function testContentRendererWithoutInterface()
|
||||
{
|
||||
// one service, not implementing any interface
|
||||
$services = array(
|
||||
'my_content_renderer' => array(),
|
||||
);
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->will($this->returnValue('stdClass'));
|
||||
|
||||
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
$builder->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
// We don't test kernel.fragment_renderer here
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
$builder = new ContainerBuilder();
|
||||
$builder->register('fragment.handler');
|
||||
$builder->register('my_content_renderer', 'stdClass')
|
||||
->addTag('kernel.fragment_renderer');
|
||||
|
||||
$pass = new FragmentRendererPass();
|
||||
$pass->process($builder);
|
||||
@ -59,38 +41,15 @@ class LegacyFragmentRendererPassTest extends TestCase
|
||||
|
||||
public function testValidContentRenderer()
|
||||
{
|
||||
$services = array(
|
||||
'my_content_renderer' => array(),
|
||||
);
|
||||
|
||||
$renderer = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$renderer
|
||||
->expects($this->once())
|
||||
->method('addMethodCall')
|
||||
->with('addRenderer', array(new Reference('my_content_renderer')))
|
||||
;
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->will($this->returnValue('Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\RendererService'));
|
||||
|
||||
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
$builder->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
// We don't test kernel.fragment_renderer here
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->will($this->onConsecutiveCalls($renderer, $definition));
|
||||
$builder = new ContainerBuilder();
|
||||
$fragmentHandlerDefinition = $builder->register('fragment.handler');
|
||||
$builder->register('my_content_renderer', 'Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler\RendererService')
|
||||
->addTag('kernel.fragment_renderer');
|
||||
|
||||
$pass = new FragmentRendererPass();
|
||||
$pass->process($builder);
|
||||
|
||||
$this->assertEquals(array(array('addRenderer', array(new Reference('my_content_renderer')))), $fragmentHandlerDefinition->getMethodCalls());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,75 +13,52 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\LoggingTranslatorPass;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
|
||||
class LoggingTranslatorPassTest extends TestCase
|
||||
{
|
||||
public function testProcess()
|
||||
{
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->getMock();
|
||||
$parameterBag = $this->getMockBuilder('Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface')->getMock();
|
||||
|
||||
$container->expects($this->exactly(2))
|
||||
->method('hasAlias')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('getParameter')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('getAlias')
|
||||
->will($this->returnValue('translation.default'));
|
||||
|
||||
$container->expects($this->exactly(3))
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('hasParameter')
|
||||
->with('translator.logging')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$definition->expects($this->once())
|
||||
->method('getClass')
|
||||
->will($this->returnValue('%translator.class%'));
|
||||
|
||||
$parameterBag->expects($this->once())
|
||||
->method('resolveValue')
|
||||
->will($this->returnValue("Symfony\Bundle\FrameworkBundle\Translation\Translator"));
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('getParameterBag')
|
||||
->will($this->returnValue($parameterBag));
|
||||
$container = new ContainerBuilder();
|
||||
$container->setParameter('translator.logging', true);
|
||||
$container->setParameter('translator.class', 'Symfony\Component\Translation\Translator');
|
||||
$container->register('monolog.logger');
|
||||
$container->setAlias('logger', 'monolog.logger');
|
||||
$container->register('translator.default', '%translator.class%');
|
||||
$container->register('translator.logging', '%translator.class%');
|
||||
$container->setAlias('translator', 'translator.default');
|
||||
$translationWarmerDefinition = $container->register('translation.warmer')->addArgument(new Reference('translator'));
|
||||
|
||||
$pass = new LoggingTranslatorPass();
|
||||
$pass->process($container);
|
||||
|
||||
$this->assertEquals(new Reference('translator.logging.inner'), $translationWarmerDefinition->getArgument(0));
|
||||
}
|
||||
|
||||
public function testThatCompilerPassIsIgnoredIfThereIsNotLoggerDefinition()
|
||||
{
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->getMock();
|
||||
$container->expects($this->once())
|
||||
->method('hasAlias')
|
||||
->will($this->returnValue(false));
|
||||
$container = new ContainerBuilder();
|
||||
$container->register('identity_translator');
|
||||
$container->setAlias('translator', 'identity_translator');
|
||||
|
||||
$pass = new LoggingTranslatorPass();
|
||||
$pass->process($container);
|
||||
|
||||
// we just check that the compiler pass does not break if a logger is not registered
|
||||
$this->addToAssertionCount(1);
|
||||
}
|
||||
|
||||
public function testThatCompilerPassIsIgnoredIfThereIsNotTranslatorDefinition()
|
||||
{
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->getMock();
|
||||
$container->expects($this->at(0))
|
||||
->method('hasAlias')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$container->expects($this->at(0))
|
||||
->method('hasAlias')
|
||||
->will($this->returnValue(false));
|
||||
$container = new ContainerBuilder();
|
||||
$container->register('monolog.logger');
|
||||
$container->setAlias('logger', 'monolog.logger');
|
||||
|
||||
$pass = new LoggingTranslatorPass();
|
||||
$pass->process($container);
|
||||
|
||||
// we just check that the compiler pass does not break if a translator is not registered
|
||||
$this->addToAssertionCount(1);
|
||||
}
|
||||
}
|
||||
|
@ -12,18 +12,11 @@
|
||||
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ProfilerPass;
|
||||
|
||||
class ProfilerPassTest extends TestCase
|
||||
{
|
||||
private $profilerDefinition;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->profilerDefinition = new Definition('ProfilerClass');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that collectors that specify a template but no "id" will throw
|
||||
* an exception (both are needed if the template is specified).
|
||||
@ -31,17 +24,15 @@ class ProfilerPassTest extends TestCase
|
||||
* Thus, a fully-valid tag looks something like this:
|
||||
*
|
||||
* <tag name="data_collector" template="YourBundle:Collector:templatename" id="your_collector_name" />
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testTemplateNoIdThrowsException()
|
||||
{
|
||||
// one service, with a template key, but no id
|
||||
$services = array(
|
||||
'my_collector_service' => array(0 => array('template' => 'foo')),
|
||||
);
|
||||
|
||||
$builder = $this->createContainerMock($services);
|
||||
|
||||
$this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
|
||||
$builder = new ContainerBuilder();
|
||||
$builder->register('profiler', 'ProfilerClass');
|
||||
$builder->register('my_collector_service')
|
||||
->addTag('data_collector', array('template' => 'foo'));
|
||||
|
||||
$profilerPass = new ProfilerPass();
|
||||
$profilerPass->process($builder);
|
||||
@ -49,45 +40,19 @@ class ProfilerPassTest extends TestCase
|
||||
|
||||
public function testValidCollector()
|
||||
{
|
||||
// one service, with a template key, but no id
|
||||
$services = array(
|
||||
'my_collector_service' => array(0 => array('template' => 'foo', 'id' => 'my_collector')),
|
||||
);
|
||||
|
||||
$container = $this->createContainerMock($services);
|
||||
|
||||
// fake the getDefinition() to return a Profiler definition
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('getDefinition');
|
||||
|
||||
// assert that the data_collector.templates parameter should be set
|
||||
$container->expects($this->once())
|
||||
->method('setParameter')
|
||||
->with('data_collector.templates', array('my_collector_service' => array('my_collector', 'foo')));
|
||||
$container = new ContainerBuilder();
|
||||
$profilerDefinition = $container->register('profiler', 'ProfilerClass');
|
||||
$container->register('my_collector_service')
|
||||
->addTag('data_collector', array('template' => 'foo', 'id' => 'my_collector'));
|
||||
|
||||
$profilerPass = new ProfilerPass();
|
||||
$profilerPass->process($container);
|
||||
|
||||
$this->assertSame(array('my_collector_service' => array('my_collector', 'foo')), $container->getParameter('data_collector.templates'));
|
||||
|
||||
// grab the method calls off of the "profiler" definition
|
||||
$methodCalls = $this->profilerDefinition->getMethodCalls();
|
||||
$methodCalls = $profilerDefinition->getMethodCalls();
|
||||
$this->assertCount(1, $methodCalls);
|
||||
$this->assertEquals('add', $methodCalls[0][0]); // grab the method part of the first call
|
||||
}
|
||||
|
||||
private function createContainerMock($services)
|
||||
{
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'getDefinition', 'findTaggedServiceIds', 'setParameter'))->getMock();
|
||||
$container->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->with($this->equalTo('profiler'))
|
||||
->will($this->returnValue(true));
|
||||
$container->expects($this->any())
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($this->profilerDefinition));
|
||||
$container->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
|
||||
return $container;
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\SerializerPass;
|
||||
|
||||
@ -22,48 +23,30 @@ use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\SerializerPass;
|
||||
*/
|
||||
class SerializerPassTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage You must tag at least one service as "serializer.normalizer" to use the Serializer service
|
||||
*/
|
||||
public function testThrowExceptionWhenNoNormalizers()
|
||||
{
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds'))->getMock();
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('hasDefinition')
|
||||
->with('serializer')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('findTaggedServiceIds')
|
||||
->with('serializer.normalizer')
|
||||
->will($this->returnValue(array()));
|
||||
|
||||
$this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('RuntimeException');
|
||||
$container = new ContainerBuilder();
|
||||
$container->register('serializer');
|
||||
|
||||
$serializerPass = new SerializerPass();
|
||||
$serializerPass->process($container);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage You must tag at least one service as "serializer.encoder" to use the Serializer service
|
||||
*/
|
||||
public function testThrowExceptionWhenNoEncoders()
|
||||
{
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('hasDefinition')
|
||||
->with('serializer')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$container->expects($this->any())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->onConsecutiveCalls(
|
||||
array('n' => array('serializer.normalizer')),
|
||||
array()
|
||||
));
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
|
||||
$this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('RuntimeException');
|
||||
$container = new ContainerBuilder();
|
||||
$container->register('serializer')
|
||||
->addArgument(array())
|
||||
->addArgument(array());
|
||||
$container->register('normalizer')->addTag('serializer.normalizer');
|
||||
|
||||
$serializerPass = new SerializerPass();
|
||||
$serializerPass->process($container);
|
||||
@ -71,34 +54,18 @@ class SerializerPassTest extends TestCase
|
||||
|
||||
public function testServicesAreOrderedAccordingToPriority()
|
||||
{
|
||||
$services = array(
|
||||
'n3' => array(array()),
|
||||
'n1' => array(array('priority' => 200)),
|
||||
'n2' => array(array('priority' => 100)),
|
||||
);
|
||||
|
||||
$expected = array(
|
||||
new Reference('n1'),
|
||||
new Reference('n2'),
|
||||
new Reference('n3'),
|
||||
);
|
||||
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('findTaggedServiceIds'))->getMock();
|
||||
|
||||
$container->expects($this->any())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
$container = new ContainerBuilder();
|
||||
$serializerDefinition = $container->register('serializer')
|
||||
->addArgument(array())
|
||||
->addArgument(array());
|
||||
$container->register('normalizer3')->addTag('serializer.normalizer');
|
||||
$container->register('normalizer1')->addTag('serializer.normalizer', array('priority' => 200));
|
||||
$container->register('normalizer2')->addTag('serializer.normalizer', array('priority' => 100));
|
||||
$container->register('encoder')->addTag('serializer.encoder');
|
||||
|
||||
$serializerPass = new SerializerPass();
|
||||
$serializerPass->process($container);
|
||||
|
||||
$method = new \ReflectionMethod(
|
||||
'Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\SerializerPass',
|
||||
'findAndSortTaggedServices'
|
||||
);
|
||||
$method->setAccessible(true);
|
||||
|
||||
$actual = $method->invoke($serializerPass, 'tag', $container);
|
||||
|
||||
$this->assertEquals($expected, $actual);
|
||||
$this->assertEquals(array(new Reference('normalizer1'), new Reference('normalizer2'), new Reference('normalizer3')), $serializerDefinition->getArgument(0));
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TranslatorPass;
|
||||
|
||||
@ -19,28 +20,22 @@ class TranslatorPassTest extends TestCase
|
||||
{
|
||||
public function testValidCollector()
|
||||
{
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$definition->expects($this->at(0))
|
||||
->method('addMethodCall')
|
||||
->with('addLoader', array('xliff', new Reference('xliff')));
|
||||
$definition->expects($this->at(1))
|
||||
->method('addMethodCall')
|
||||
->with('addLoader', array('xlf', new Reference('xliff')));
|
||||
$container = new ContainerBuilder();
|
||||
$container->register('translator.default')
|
||||
->setArguments(array(null, null, array()));
|
||||
$translationLoaderDefinition = $container->register('translation.loader');
|
||||
$container->register('xliff')
|
||||
->addTag('translation.loader', array('alias' => 'xliff', 'legacy-alias' => 'xlf'));
|
||||
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'getDefinition', 'findTaggedServiceIds', 'findDefinition'))->getMock();
|
||||
$container->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
$container->expects($this->once())
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
$container->expects($this->once())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue(array('xliff' => array(array('alias' => 'xliff', 'legacy-alias' => 'xlf')))));
|
||||
$container->expects($this->once())
|
||||
->method('findDefinition')
|
||||
->will($this->returnValue($this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock()));
|
||||
$pass = new TranslatorPass();
|
||||
$pass->process($container);
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
array('addLoader', array('xliff', new Reference('xliff'))),
|
||||
array('addLoader', array('xlf', new Reference('xliff'))),
|
||||
),
|
||||
$translationLoaderDefinition->getMethodCalls()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,9 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\Validator;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory;
|
||||
use Symfony\Component\DependencyInjection\Container;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\Constraints\Blank as BlankConstraint;
|
||||
use Symfony\Component\Validator\ConstraintValidator;
|
||||
|
||||
class ConstraintValidatorFactoryTest extends TestCase
|
||||
{
|
||||
@ -42,26 +44,13 @@ class ConstraintValidatorFactoryTest extends TestCase
|
||||
|
||||
public function testGetInstanceReturnsService()
|
||||
{
|
||||
$service = 'validator_constraint_service';
|
||||
$alias = 'validator_constraint_alias';
|
||||
$validator = $this->getMockForAbstractClass('Symfony\\Component\\Validator\\ConstraintValidator');
|
||||
$validator = new DummyConstraintValidator();
|
||||
|
||||
// mock ContainerBuilder b/c it implements TaggedContainerInterface
|
||||
$container = $this->getMockBuilder('Symfony\\Component\\DependencyInjection\\ContainerBuilder')->setMethods(array('get'))->getMock();
|
||||
$container
|
||||
->expects($this->once())
|
||||
->method('get')
|
||||
->with($service)
|
||||
->will($this->returnValue($validator));
|
||||
|
||||
$constraint = $this->getMockBuilder('Symfony\\Component\\Validator\\Constraint')->getMock();
|
||||
$constraint
|
||||
->expects($this->once())
|
||||
->method('validatedBy')
|
||||
->will($this->returnValue($alias));
|
||||
$container = new Container();
|
||||
$container->set('validator_constraint_service', $validator);
|
||||
|
||||
$factory = new ConstraintValidatorFactory($container, array('validator_constraint_alias' => 'validator_constraint_service'));
|
||||
$this->assertSame($validator, $factory->getInstance($constraint));
|
||||
$this->assertSame($validator, $factory->getInstance(new ConstraintStub()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -79,3 +68,18 @@ class ConstraintValidatorFactoryTest extends TestCase
|
||||
$factory->getInstance($constraint);
|
||||
}
|
||||
}
|
||||
|
||||
class ConstraintStub extends Constraint
|
||||
{
|
||||
public function validatedBy()
|
||||
{
|
||||
return 'validator_constraint_alias';
|
||||
}
|
||||
}
|
||||
|
||||
class DummyConstraintValidator extends ConstraintValidator
|
||||
{
|
||||
public function validate($value, Constraint $constraint)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -12,13 +12,14 @@
|
||||
namespace Symfony\Bundle\TwigBundle\Tests\DependencyInjection\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
use Symfony\Bundle\TwigBundle\DependencyInjection\Compiler\TwigLoaderPass;
|
||||
|
||||
class TwigLoaderPassTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @var \PHPUnit_Framework_MockObject_MockObject
|
||||
* @var ContainerBuilder
|
||||
*/
|
||||
private $builder;
|
||||
/**
|
||||
@ -32,62 +33,33 @@ class TwigLoaderPassTest extends TestCase
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'setAlias', 'getDefinition'))->getMock();
|
||||
$this->builder = new ContainerBuilder();
|
||||
$this->builder->register('twig');
|
||||
$this->chainLoader = new Definition('loader');
|
||||
$this->pass = new TwigLoaderPass();
|
||||
}
|
||||
|
||||
public function testMapperPassWithOneTaggedLoaders()
|
||||
public function testMapperPassWithOneTaggedLoader()
|
||||
{
|
||||
$serviceIds = array(
|
||||
'test_loader_1' => array(
|
||||
array(),
|
||||
),
|
||||
);
|
||||
|
||||
$this->builder->expects($this->once())
|
||||
->method('hasDefinition')
|
||||
->with('twig')
|
||||
->will($this->returnValue(true));
|
||||
$this->builder->expects($this->once())
|
||||
->method('findTaggedServiceIds')
|
||||
->with('twig.loader')
|
||||
->will($this->returnValue($serviceIds));
|
||||
$this->builder->expects($this->once())
|
||||
->method('setAlias')
|
||||
->with('twig.loader', 'test_loader_1');
|
||||
$this->builder->register('test_loader_1')
|
||||
->addTag('twig.loader');
|
||||
|
||||
$this->pass->process($this->builder);
|
||||
|
||||
$this->assertSame('test_loader_1', (string) $this->builder->getAlias('twig.loader'));
|
||||
}
|
||||
|
||||
public function testMapperPassWithTwoTaggedLoaders()
|
||||
{
|
||||
$serviceIds = array(
|
||||
'test_loader_1' => array(
|
||||
array(),
|
||||
),
|
||||
'test_loader_2' => array(
|
||||
array(),
|
||||
),
|
||||
);
|
||||
|
||||
$this->builder->expects($this->once())
|
||||
->method('hasDefinition')
|
||||
->with('twig')
|
||||
->will($this->returnValue(true));
|
||||
$this->builder->expects($this->once())
|
||||
->method('findTaggedServiceIds')
|
||||
->with('twig.loader')
|
||||
->will($this->returnValue($serviceIds));
|
||||
$this->builder->expects($this->once())
|
||||
->method('getDefinition')
|
||||
->with('twig.loader.chain')
|
||||
->will($this->returnValue($this->chainLoader));
|
||||
$this->builder->expects($this->once())
|
||||
->method('setAlias')
|
||||
->with('twig.loader', 'twig.loader.chain');
|
||||
$this->builder->setDefinition('twig.loader.chain', $this->chainLoader);
|
||||
$this->builder->register('test_loader_1')
|
||||
->addTag('twig.loader');
|
||||
$this->builder->register('test_loader_2')
|
||||
->addTag('twig.loader');
|
||||
|
||||
$this->pass->process($this->builder);
|
||||
|
||||
$this->assertSame('twig.loader.chain', (string) $this->builder->getAlias('twig.loader'));
|
||||
$calls = $this->chainLoader->getMethodCalls();
|
||||
$this->assertCount(2, $calls);
|
||||
$this->assertEquals('addLoader', $calls[0][0]);
|
||||
@ -98,32 +70,15 @@ class TwigLoaderPassTest extends TestCase
|
||||
|
||||
public function testMapperPassWithTwoTaggedLoadersWithPriority()
|
||||
{
|
||||
$serviceIds = array(
|
||||
'test_loader_1' => array(
|
||||
array('priority' => 100),
|
||||
),
|
||||
'test_loader_2' => array(
|
||||
array('priority' => 200),
|
||||
),
|
||||
);
|
||||
|
||||
$this->builder->expects($this->once())
|
||||
->method('hasDefinition')
|
||||
->with('twig')
|
||||
->will($this->returnValue(true));
|
||||
$this->builder->expects($this->once())
|
||||
->method('findTaggedServiceIds')
|
||||
->with('twig.loader')
|
||||
->will($this->returnValue($serviceIds));
|
||||
$this->builder->expects($this->once())
|
||||
->method('getDefinition')
|
||||
->with('twig.loader.chain')
|
||||
->will($this->returnValue($this->chainLoader));
|
||||
$this->builder->expects($this->once())
|
||||
->method('setAlias')
|
||||
->with('twig.loader', 'twig.loader.chain');
|
||||
$this->builder->setDefinition('twig.loader.chain', $this->chainLoader);
|
||||
$this->builder->register('test_loader_1')
|
||||
->addTag('twig.loader', array('priority' => 100));
|
||||
$this->builder->register('test_loader_2')
|
||||
->addTag('twig.loader', array('priority' => 200));
|
||||
|
||||
$this->pass->process($this->builder);
|
||||
|
||||
$this->assertSame('twig.loader.chain', (string) $this->builder->getAlias('twig.loader'));
|
||||
$calls = $this->chainLoader->getMethodCalls();
|
||||
$this->assertCount(2, $calls);
|
||||
$this->assertEquals('addLoader', $calls[0][0]);
|
||||
@ -137,15 +92,6 @@ class TwigLoaderPassTest extends TestCase
|
||||
*/
|
||||
public function testMapperPassWithZeroTaggedLoaders()
|
||||
{
|
||||
$this->builder->expects($this->once())
|
||||
->method('hasDefinition')
|
||||
->with('twig')
|
||||
->will($this->returnValue(true));
|
||||
$this->builder->expects($this->once())
|
||||
->method('findTaggedServiceIds')
|
||||
->with('twig.loader')
|
||||
->will($this->returnValue(array()));
|
||||
|
||||
$this->pass->process($this->builder);
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,10 @@
|
||||
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||
use Symfony\Component\DependencyInjection\Compiler\ExtensionCompilerPass;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Extension\Extension;
|
||||
|
||||
/**
|
||||
* @author Wouter J <wouter@wouterj.nl>
|
||||
@ -24,33 +27,52 @@ class ExtensionCompilerPassTest extends TestCase
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->getMock();
|
||||
$this->container = new ContainerBuilder();
|
||||
$this->pass = new ExtensionCompilerPass();
|
||||
}
|
||||
|
||||
public function testProcess()
|
||||
{
|
||||
$extension1 = $this->createExtensionMock(true);
|
||||
$extension1->expects($this->once())->method('process');
|
||||
$extension2 = $this->createExtensionMock(false);
|
||||
$extension3 = $this->createExtensionMock(false);
|
||||
$extension4 = $this->createExtensionMock(true);
|
||||
$extension4->expects($this->once())->method('process');
|
||||
$extension1 = new CompilerPassExtension('extension1');
|
||||
$extension2 = new DummyExtension('extension2');
|
||||
$extension3 = new DummyExtension('extension3');
|
||||
$extension4 = new CompilerPassExtension('extension4');
|
||||
|
||||
$this->container->expects($this->any())
|
||||
->method('getExtensions')
|
||||
->will($this->returnValue(array($extension1, $extension2, $extension3, $extension4)))
|
||||
;
|
||||
$this->container->registerExtension($extension1);
|
||||
$this->container->registerExtension($extension2);
|
||||
$this->container->registerExtension($extension3);
|
||||
$this->container->registerExtension($extension4);
|
||||
|
||||
$this->pass->process($this->container);
|
||||
}
|
||||
|
||||
private function createExtensionMock($hasInlineCompile)
|
||||
{
|
||||
return $this->getMockBuilder('Symfony\Component\DependencyInjection\\'.(
|
||||
$hasInlineCompile
|
||||
? 'Compiler\CompilerPassInterface'
|
||||
: 'Extension\ExtensionInterface'
|
||||
))->getMock();
|
||||
$this->assertCount(2, $this->container->getDefinitions());
|
||||
}
|
||||
}
|
||||
|
||||
class DummyExtension extends Extension
|
||||
{
|
||||
private $alias;
|
||||
|
||||
public function __construct($alias)
|
||||
{
|
||||
$this->alias = $alias;
|
||||
}
|
||||
|
||||
public function getAlias()
|
||||
{
|
||||
return $this->alias;
|
||||
}
|
||||
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
}
|
||||
|
||||
public function process(ContainerBuilder $container)
|
||||
{
|
||||
$container->register($this->alias);
|
||||
}
|
||||
}
|
||||
|
||||
class CompilerPassExtension extends DummyExtension implements CompilerPassInterface
|
||||
{
|
||||
}
|
||||
|
@ -12,6 +12,8 @@
|
||||
namespace Symfony\Component\DependencyInjection\Tests\Extension;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Extension\Extension;
|
||||
|
||||
class ExtensionTest extends TestCase
|
||||
{
|
||||
@ -20,36 +22,8 @@ class ExtensionTest extends TestCase
|
||||
*/
|
||||
public function testIsConfigEnabledReturnsTheResolvedValue($enabled)
|
||||
{
|
||||
$pb = $this->getMockBuilder('Symfony\Component\DependencyInjection\ParameterBag\ParameterBag')
|
||||
->setMethods(array('resolveValue'))
|
||||
->getMock()
|
||||
;
|
||||
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')
|
||||
->setMethods(array('getParameterBag'))
|
||||
->getMock()
|
||||
;
|
||||
|
||||
$pb->expects($this->once())
|
||||
->method('resolveValue')
|
||||
->with($this->equalTo($enabled))
|
||||
->will($this->returnValue($enabled))
|
||||
;
|
||||
|
||||
$container->expects($this->once())
|
||||
->method('getParameterBag')
|
||||
->will($this->returnValue($pb))
|
||||
;
|
||||
|
||||
$extension = $this->getMockBuilder('Symfony\Component\DependencyInjection\Extension\Extension')
|
||||
->setMethods(array())
|
||||
->getMockForAbstractClass()
|
||||
;
|
||||
|
||||
$r = new \ReflectionMethod('Symfony\Component\DependencyInjection\Extension\Extension', 'isConfigEnabled');
|
||||
$r->setAccessible(true);
|
||||
|
||||
$r->invoke($extension, $container, array('enabled' => $enabled));
|
||||
$extension = new EnableableExtension();
|
||||
$this->assertSame($enabled, $extension->isConfigEnabled(new ContainerBuilder(), array('enabled' => $enabled)));
|
||||
}
|
||||
|
||||
public function getResolvedEnabledFixtures()
|
||||
@ -66,18 +40,20 @@ class ExtensionTest extends TestCase
|
||||
*/
|
||||
public function testIsConfigEnabledOnNonEnableableConfig()
|
||||
{
|
||||
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')
|
||||
->getMock()
|
||||
;
|
||||
$extension = new EnableableExtension();
|
||||
|
||||
$extension = $this->getMockBuilder('Symfony\Component\DependencyInjection\Extension\Extension')
|
||||
->setMethods(array())
|
||||
->getMockForAbstractClass()
|
||||
;
|
||||
|
||||
$r = new \ReflectionMethod('Symfony\Component\DependencyInjection\Extension\Extension', 'isConfigEnabled');
|
||||
$r->setAccessible(true);
|
||||
|
||||
$r->invoke($extension, $container, array());
|
||||
$extension->isConfigEnabled(new ContainerBuilder(), array());
|
||||
}
|
||||
}
|
||||
|
||||
class EnableableExtension extends Extension
|
||||
{
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
}
|
||||
|
||||
public function isConfigEnabled(ContainerBuilder $container, array $config)
|
||||
{
|
||||
return parent::isConfigEnabled($container, $config);
|
||||
}
|
||||
}
|
||||
|
@ -25,32 +25,10 @@ class RegisterListenersPassTest extends TestCase
|
||||
*/
|
||||
public function testEventSubscriberWithoutInterface()
|
||||
{
|
||||
// one service, not implementing any interface
|
||||
$services = array(
|
||||
'my_event_subscriber' => array(0 => array()),
|
||||
);
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('isPublic')
|
||||
->will($this->returnValue(true));
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->will($this->returnValue('stdClass'));
|
||||
|
||||
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
$builder->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
// We don't test kernel.event_listener here
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->onConsecutiveCalls(array(), $services));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
$builder = new ContainerBuilder();
|
||||
$builder->register('event_dispatcher');
|
||||
$builder->register('my_event_subscriber', 'stdClass')
|
||||
->addTag('kernel.event_subscriber');
|
||||
|
||||
$registerListenersPass = new RegisterListenersPass();
|
||||
$registerListenersPass->process($builder);
|
||||
@ -62,34 +40,15 @@ class RegisterListenersPassTest extends TestCase
|
||||
'my_event_subscriber' => array(0 => array()),
|
||||
);
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('isPublic')
|
||||
->will($this->returnValue(true));
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->will($this->returnValue('Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService'));
|
||||
|
||||
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition', 'findDefinition'))->getMock();
|
||||
$builder->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
// We don't test kernel.event_listener here
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->onConsecutiveCalls(array(), $services));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
$builder = new ContainerBuilder();
|
||||
$eventDispatcherDefinition = $builder->register('event_dispatcher');
|
||||
$builder->register('my_event_subscriber', 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService')
|
||||
->addTag('kernel.event_subscriber');
|
||||
|
||||
$registerListenersPass = new RegisterListenersPass();
|
||||
$registerListenersPass->process($builder);
|
||||
|
||||
$this->assertEquals(array(array('addSubscriberService', array('my_event_subscriber', 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService'))), $eventDispatcherDefinition->getMethodCalls());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -423,6 +423,8 @@ class Finder implements \IteratorAggregate, \Countable
|
||||
/**
|
||||
* Excludes "hidden" directories and files (starting with a dot).
|
||||
*
|
||||
* This option is enabled by default.
|
||||
*
|
||||
* @param bool $ignoreDotFiles Whether to exclude "hidden" files or not
|
||||
*
|
||||
* @return $this
|
||||
@ -443,6 +445,8 @@ class Finder implements \IteratorAggregate, \Countable
|
||||
/**
|
||||
* Forces the finder to ignore version control directories.
|
||||
*
|
||||
* This option is enabled by default.
|
||||
*
|
||||
* @param bool $ignoreVCS Whether to exclude VCS files or not
|
||||
*
|
||||
* @return $this
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Component\HttpKernel\Tests\DependencyInjection;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\FragmentRendererPass;
|
||||
@ -24,118 +25,47 @@ class FragmentRendererPassTest extends TestCase
|
||||
*/
|
||||
public function testLegacyFragmentRedererWithoutAlias()
|
||||
{
|
||||
// no alias
|
||||
$services = array(
|
||||
'my_content_renderer' => array(array()),
|
||||
);
|
||||
|
||||
$renderer = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$renderer
|
||||
->expects($this->once())
|
||||
->method('addMethodCall')
|
||||
->with('addRenderer', array(new Reference('my_content_renderer')))
|
||||
;
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->will($this->returnValue('Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService'));
|
||||
$definition
|
||||
->expects($this->once())
|
||||
->method('isPublic')
|
||||
->will($this->returnValue(true))
|
||||
;
|
||||
|
||||
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
$builder->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
// We don't test kernel.fragment_renderer here
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->will($this->onConsecutiveCalls($renderer, $definition));
|
||||
$builder = new ContainerBuilder();
|
||||
$fragmentHandlerDefinition = $builder->register('fragment.handler');
|
||||
$builder->register('my_content_renderer', 'Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService')
|
||||
->addTag('kernel.fragment_renderer');
|
||||
|
||||
$pass = new FragmentRendererPass();
|
||||
$pass->process($builder);
|
||||
|
||||
$this->assertEquals(array(array('addRenderer', array(new Reference('my_content_renderer')))), $fragmentHandlerDefinition->getMethodCalls());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that content rendering not implementing FragmentRendererInterface
|
||||
* trigger an exception.
|
||||
* triggers an exception.
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testContentRendererWithoutInterface()
|
||||
{
|
||||
// one service, not implementing any interface
|
||||
$services = array(
|
||||
'my_content_renderer' => array(array('alias' => 'foo')),
|
||||
);
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
|
||||
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
$builder->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
// We don't test kernel.fragment_renderer here
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->will($this->returnValue($definition));
|
||||
$builder = new ContainerBuilder();
|
||||
$fragmentHandlerDefinition = $builder->register('fragment.handler');
|
||||
$builder->register('my_content_renderer', 'Symfony\Component\DependencyInjection\Definition')
|
||||
->addTag('kernel.fragment_renderer', array('alias' => 'foo'));
|
||||
|
||||
$pass = new FragmentRendererPass();
|
||||
$pass->process($builder);
|
||||
|
||||
$this->assertEquals(array(array('addRendererService', array('foo', 'my_content_renderer'))), $fragmentHandlerDefinition->getMethodCalls());
|
||||
}
|
||||
|
||||
public function testValidContentRenderer()
|
||||
{
|
||||
$services = array(
|
||||
'my_content_renderer' => array(array('alias' => 'foo')),
|
||||
);
|
||||
|
||||
$renderer = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$renderer
|
||||
->expects($this->once())
|
||||
->method('addMethodCall')
|
||||
->with('addRendererService', array('foo', 'my_content_renderer'))
|
||||
;
|
||||
|
||||
$definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->getMock();
|
||||
$definition->expects($this->atLeastOnce())
|
||||
->method('getClass')
|
||||
->will($this->returnValue('Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService'));
|
||||
$definition
|
||||
->expects($this->once())
|
||||
->method('isPublic')
|
||||
->will($this->returnValue(true))
|
||||
;
|
||||
|
||||
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
|
||||
$builder->expects($this->any())
|
||||
->method('hasDefinition')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
// We don't test kernel.fragment_renderer here
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('findTaggedServiceIds')
|
||||
->will($this->returnValue($services));
|
||||
|
||||
$builder->expects($this->atLeastOnce())
|
||||
->method('getDefinition')
|
||||
->will($this->onConsecutiveCalls($renderer, $definition));
|
||||
$builder = new ContainerBuilder();
|
||||
$fragmentHandlerDefinition = $builder->register('fragment.handler');
|
||||
$builder->register('my_content_renderer', 'Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService')
|
||||
->addTag('kernel.fragment_renderer', array('alias' => 'foo'));
|
||||
|
||||
$pass = new FragmentRendererPass();
|
||||
$pass->process($builder);
|
||||
|
||||
$this->assertEquals(array(array('addRendererService', array('foo', 'my_content_renderer'))), $fragmentHandlerDefinition->getMethodCalls());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,44 +12,39 @@
|
||||
namespace Symfony\Component\HttpKernel\Tests\DependencyInjection;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass;
|
||||
|
||||
class MergeExtensionConfigurationPassTest extends TestCase
|
||||
{
|
||||
public function testAutoloadMainExtension()
|
||||
{
|
||||
$container = $this->getMockBuilder('Symfony\\Component\\DependencyInjection\\ContainerBuilder')->setMethods(array('getExtensionConfig', 'loadFromExtension', 'getParameterBag', 'getDefinitions', 'getAliases', 'getExtensions'))->getMock();
|
||||
$params = $this->getMockBuilder('Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag')->getMock();
|
||||
$container = new ContainerBuilder();
|
||||
$container->registerExtension(new LoadedExtension());
|
||||
$container->registerExtension(new NotLoadedExtension());
|
||||
$container->loadFromExtension('loaded', array());
|
||||
|
||||
$container->expects($this->at(0))
|
||||
->method('getExtensionConfig')
|
||||
->with('loaded')
|
||||
->will($this->returnValue(array(array())));
|
||||
$container->expects($this->at(1))
|
||||
->method('getExtensionConfig')
|
||||
->with('notloaded')
|
||||
->will($this->returnValue(array()));
|
||||
$container->expects($this->once())
|
||||
->method('loadFromExtension')
|
||||
->with('notloaded', array());
|
||||
|
||||
$container->expects($this->any())
|
||||
->method('getParameterBag')
|
||||
->will($this->returnValue($params));
|
||||
$params->expects($this->any())
|
||||
->method('all')
|
||||
->will($this->returnValue(array()));
|
||||
$container->expects($this->any())
|
||||
->method('getDefinitions')
|
||||
->will($this->returnValue(array()));
|
||||
$container->expects($this->any())
|
||||
->method('getAliases')
|
||||
->will($this->returnValue(array()));
|
||||
$container->expects($this->any())
|
||||
->method('getExtensions')
|
||||
->will($this->returnValue(array()));
|
||||
|
||||
$configPass = new MergeExtensionConfigurationPass(array('loaded', 'notloaded'));
|
||||
$configPass = new MergeExtensionConfigurationPass(array('loaded', 'not_loaded'));
|
||||
$configPass->process($container);
|
||||
|
||||
$this->assertTrue($container->hasDefinition('loaded.foo'));
|
||||
$this->assertTrue($container->hasDefinition('not_loaded.bar'));
|
||||
}
|
||||
}
|
||||
|
||||
class LoadedExtension extends Extension
|
||||
{
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$container->register('loaded.foo');
|
||||
}
|
||||
}
|
||||
|
||||
class NotLoadedExtension extends Extension
|
||||
{
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$container->register('not_loaded.bar');
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user