package fr.adrienbrault.idea.symfony2plugin.tests.doctrine.metadata; import com.intellij.ide.highlighter.XmlFileType; import com.intellij.patterns.PlatformPatterns; import com.jetbrains.php.lang.psi.elements.PhpClass; import fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.DoctrineMetadataPattern; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; import java.io.File; /** * @author Daniel Espendiller <daniel@espendiller.net> * @see fr.adrienbrault.idea.symfony2plugin.doctrine.metadata.DoctrineXmlGotoCompletionRegistrar */ public class DoctrineXmlGotoCompletionRegistrarTest extends SymfonyLightCodeInsightFixtureTestCase { public void setUp() throws Exception { super.setUp(); myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("classes.php")); } public String getTestDataPath() { return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath(); } public void testEntityNameNavigation() { assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mapping><entity name=\"Foo\\Bar\\Ns<caret>\\Bar\"/></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); } public void testDocumentNameNavigation() { assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mapping><document name=\"Foo\\Bar\\Ns<caret>\\Bar\"/></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mongo-mapping><document name=\"Foo\\Bar\\Ns<caret>\\Bar\"/></doctrine-mongo-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); } public void testEntityRepositoryClassNavigation() { assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mapping><entity repository-class=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); } public void testDocumentRepositoryClassNavigation() { assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mongo-mapping><document repository-class=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></doctrine-mongo-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-foo-mapping><document repository-class=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></doctrine-foo-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); } /** * @see DoctrineMetadataPattern#getXmlTargetDocumentClass() */ public void testTargetDocumentNavigation() { for(String s : new String[] {"reference-one", "reference-many", "embed-many", "embed-one"}) { assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mapping><document><" + s + " target-document=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></document></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-foo-mapping><document><" + s + " target-document=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></document></doctrine-foo-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-foo-mapping><document name=\"Foo\\Bar\\Ns\\Foo\"><" + s + " target-document=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></document></doctrine-foo-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); } } /** * @see DoctrineMetadataPattern#getXmlTargetEntityClass() */ public void testTargetEntityNavigation() { for(String s : new String[] {"one-to-one", "one-to-many", "many-to-one", "many-to-many"}) { assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mapping><entity><" + s + " target-entity=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></entity></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-foo-mapping><entity><" + s + " target-entity=\"Foo\\Bar\\Ns<caret>\\BarRepo\"/></entity></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-foo-mapping><entity name=\"Foo\\Bar\\Ns\\Foo\"><" + s + " target-entity=\"Bar<caret>Repo\"/></entity></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); } } public void testEmbeddedNameNavigation() { assertNavigationMatch( XmlFileType.INSTANCE, "<doctrine-mapping><embedded name=\"Foo\\Bar\\Ns<caret>\\Bar\"/></doctrine-mapping>", PlatformPatterns.psiElement(PhpClass.class) ); } }