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); }
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()); }
/** * @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]); }
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'); }
/** * @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); } }
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()); }
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()); }