3 namespace Symfony\Component\HttpKernel\Tests\DependencyInjection;
5 use PHPUnit\Framework\TestCase;
6 use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
7 use Symfony\Component\DependencyInjection\ContainerBuilder;
8 use Symfony\Component\DependencyInjection\ContainerInterface;
9 use Symfony\Component\DependencyInjection\Reference;
10 use Symfony\Component\HttpKernel\DependencyInjection\ResettableServicePass;
11 use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter;
12 use Symfony\Component\HttpKernel\Tests\Fixtures\ClearableService;
13 use Symfony\Component\HttpKernel\Tests\Fixtures\ResettableService;
15 class ResettableServicePassTest extends TestCase
17 public function testCompilerPass()
19 $container = new ContainerBuilder();
20 $container->register('one', ResettableService::class)
22 ->addTag('kernel.reset', array('method' => 'reset'));
23 $container->register('two', ClearableService::class)
25 ->addTag('kernel.reset', array('method' => 'clear'));
27 $container->register('services_resetter', ServicesResetter::class)
29 ->setArguments(array(null, array()));
30 $container->addCompilerPass(new ResettableServicePass());
32 $container->compile();
34 $definition = $container->getDefinition('services_resetter');
38 new IteratorArgument(array(
39 'one' => new Reference('one', ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE),
40 'two' => new Reference('two', ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE),
47 $definition->getArguments()
52 * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
53 * @expectedExceptionMessage Tag kernel.reset requires the "method" attribute to be set.
55 public function testMissingMethod()
57 $container = new ContainerBuilder();
58 $container->register(ResettableService::class)
59 ->addTag('kernel.reset');
60 $container->register('services_resetter', ServicesResetter::class)
61 ->setArguments(array(null, array()));
62 $container->addCompilerPass(new ResettableServicePass());
64 $container->compile();
67 public function testCompilerPassWithoutResetters()
69 $container = new ContainerBuilder();
70 $container->register('services_resetter', ServicesResetter::class)
71 ->setArguments(array(null, array()));
72 $container->addCompilerPass(new ResettableServicePass());
74 $container->compile();
76 $this->assertFalse($container->has('services_resetter'));