package fr.adrienbrault.idea.symfony2plugin.tests.dic; import com.intellij.patterns.PlatformPatterns; import com.jetbrains.php.lang.PhpFileType; import com.jetbrains.php.lang.psi.elements.Method; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; import java.io.File; /** * @author Daniel Espendiller <daniel@espendiller.net> * @see fr.adrienbrault.idea.symfony2plugin.dic.SymfonyContainerTypeProvider */ public class SymfonyContainerTypeProviderTest extends SymfonyLightCodeInsightFixtureTestCase { public void setUp() throws Exception { super.setUp(); myFixture.copyFileToProject("types.xml"); myFixture.copyFileToProject("types2.xml"); myFixture.copyFileToProject("classes.php"); } public String getTestDataPath() { return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath(); } /** * @see fr.adrienbrault.idea.symfony2plugin.dic.SymfonyContainerTypeProvider */ public void testContainerServicePhpType() { assertPhpReferenceResolveTo(PhpFileType.INSTANCE, "<?php" + "/** @var $container \\Symfony\\Component\\DependencyInjection\\ContainerInterface */\n" + "$container->get('foo')->for<caret>mat()", PlatformPatterns.psiElement(Method.class).withName("format") ); assertPhpReferenceNotResolveTo(PhpFileType.INSTANCE, "<?php" + "/** @var $container \\Symfony\\Component\\DependencyInjection\\ContainerInterface */\n" + "$container->get('foo1')->for<caret>mat()", PlatformPatterns.psiElement(Method.class).withName("format") ); assertPhpReferenceSignatureContains(PhpFileType.INSTANCE, "<?php" + "/** @var $container \\Symfony\\Component\\DependencyInjection\\ContainerInterface */\n" + "$container->get('foo')->for<caret>mat()", "#M#" + '\u0150' + "#M#C\\Symfony\\Component\\DependencyInjection\\ContainerInterface.get" + '\u0182' + "foo.format" ); } /** * @see fr.adrienbrault.idea.symfony2plugin.dic.SymfonyContainerTypeProvider */ public void testThatContainerServiceTypeResolvesOnFirstParameterAndAllowMultipleParameter() { assertPhpReferenceResolveTo(PhpFileType.INSTANCE, "<?php" + "/** @var $container \\Symfony\\Component\\DependencyInjection\\ContainerInterface */\n" + "$container->get('foo', 'foobar')->for<caret>mat()", PlatformPatterns.psiElement(Method.class).withName("format") ); } /** * @see fr.adrienbrault.idea.symfony2plugin.dic.SymfonyContainerTypeProvider */ public void testThatDuplicateServiceClassInstancesAreMerged() { assertPhpReferenceResolveTo(PhpFileType.INSTANCE, "<?php" + "/** @var $d \\Symfony\\Component\\DependencyInjection\\ContainerInterface */\n" + "$d->get('foo.bar')->for<caret>mat();", PlatformPatterns.psiElement(Method.class).withName("format") ); assertPhpReferenceResolveTo(PhpFileType.INSTANCE, "<?php" + "/** @var $d \\Symfony\\Component\\DependencyInjection\\ContainerInterface */\n" + "$d->get('foo.bar')->get<caret>Bar();", PlatformPatterns.psiElement(Method.class).withName("getBar") ); } /** * @see fr.adrienbrault.idea.symfony2plugin.dic.SymfonyContainerTypeProvider */ public void testThatClassConstantResolves() { assertPhpReferenceResolveTo(PhpFileType.INSTANCE, "<?php" + "/** @var $d \\Symfony\\Component\\DependencyInjection\\ContainerInterface */\n" + "$d->get(MyDateTime::class)->for<caret>mat();", PlatformPatterns.psiElement(Method.class).withName("format") ); } }