Автор: Kévin Dunglas (dunglas@gmail.com)
Наследование: implements Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface
 public function isFresh($timestamp)
 {
     if (!file_exists($this->filePath)) {
         return false;
     }
     // has the file *not* been modified? Definitely fresh
     if (@filemtime($this->filePath) <= $timestamp) {
         return true;
     }
     try {
         $reflectionClass = new \ReflectionClass($this->class);
     } catch (\ReflectionException $e) {
         // the class does not exist anymore!
         return false;
     }
     return (array) $this === (array) AutowirePass::createResourceForClass($reflectionClass);
 }
Пример #2
0
 public function testOptionalScalarArgsNotPassedIfLast()
 {
     $container = new ContainerBuilder();
     $container->register('a', __NAMESPACE__ . '\\A');
     $container->register('lille', __NAMESPACE__ . '\\Lille');
     $container->register('with_optional_scalar_last', __NAMESPACE__ . '\\MultipleArgumentsOptionalScalarLast')->setAutowired(true);
     $pass = new AutowirePass();
     $pass->process($container);
     $definition = $container->getDefinition('with_optional_scalar_last');
     $this->assertEquals(array(new Reference('a'), new Reference('lille'), 'some_val'), $definition->getArguments());
 }
Пример #3
0
 /**
  * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
  * @expectedExceptionMessage Unable to autowire argument of type "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" for the service "setter_injection_collision". Multiple services exist for this interface (c1, c2).
  * @expectedExceptionCode 1
  */
 public function testSetterInjectionCollisionThrowsException()
 {
     $container = new ContainerBuilder();
     $container->register('c1', CollisionA::class);
     $container->register('c2', CollisionB::class);
     $aDefinition = $container->register('setter_injection_collision', SetterInjectionCollision::class);
     $aDefinition->setAutowired(true);
     $pass = new AutowirePass();
     $pass->process($container);
 }
 public function testDontUseAbstractServices()
 {
     $container = new ContainerBuilder();
     $container->register('abstract_foo', __NAMESPACE__ . '\\Foo')->setAbstract(true);
     $container->register('foo', __NAMESPACE__ . '\\Foo');
     $container->register('bar', __NAMESPACE__ . '\\Bar')->setAutowired(true);
     $pass = new AutowirePass();
     $pass->process($container);
     $arguments = $container->getDefinition('bar')->getArguments();
     $this->assertSame('foo', (string) $arguments[0]);
 }
Пример #5
0
 public function testIgnoreServiceWithClassNotExisting()
 {
     $container = new ContainerBuilder();
     $container->register('class_not_exist', __NAMESPACE__ . '\\OptionalServiceClass');
     $barDefinition = $container->register('bar', __NAMESPACE__ . '\\Bar');
     $barDefinition->setAutowired(true);
     $pass = new AutowirePass();
     $pass->process($container);
     $this->assertTrue($container->hasDefinition('bar'));
 }
 public function testIsFreshSameConstructorArgs()
 {
     $oldResource = AutowirePass::createResourceForClass(new \ReflectionClass(__NAMESPACE__ . '\\Foo'));
     // test with a stale file *but* the resource will not be changed
     $this->assertTrue($oldResource->isFresh($this->getStaleFileTime()), '->isFresh() returns false if the constructor arguments have changed');
 }
Пример #7
0
 /**
  * @dataProvider getCreateResourceTests
  */
 public function testCreateResourceForClass($className, $isEqual)
 {
     $startingResource = AutowirePass::createResourceForClass(new \ReflectionClass(__NAMESPACE__ . '\\ClassForResource'));
     $newResource = AutowirePass::createResourceForClass(new \ReflectionClass(__NAMESPACE__ . '\\' . $className));
     // hack so the objects don't differ by the class name
     $startingReflObject = new \ReflectionObject($startingResource);
     $reflProp = $startingReflObject->getProperty('class');
     $reflProp->setAccessible(true);
     $reflProp->setValue($startingResource, __NAMESPACE__ . '\\' . $className);
     if ($isEqual) {
         $this->assertEquals($startingResource, $newResource);
     } else {
         $this->assertNotEquals($startingResource, $newResource);
     }
 }
Пример #8
0
 public function testDontTriggeruAutowiring()
 {
     $container = new ContainerBuilder();
     $container->register('foo', __NAMESPACE__ . '\\Foo');
     $container->register('bar', __NAMESPACE__ . '\\Bar');
     $pass = new AutowirePass();
     $pass->process($container);
     $this->assertCount(0, $container->getDefinition('bar')->getArguments());
 }
Пример #9
0
    public function testLogUnusedPatterns()
    {
        $container = new ContainerBuilder();

        $definition = $container->register('foo', Foo::class);
        $definition->setAutowiredMethods(array('not', 'exist*'));

        $pass = new AutowirePass();
        $pass->process($container);

        $this->assertEquals(array(AutowirePass::class.': Autowiring\'s patterns "not", "exist*" for service "foo" don\'t match any method.'), $container->getCompiler()->getLog());
    }