package fr.adrienbrault.idea.symfony2plugin.tests.dic.xml; import com.intellij.ide.highlighter.XmlFileType; import fr.adrienbrault.idea.symfony2plugin.config.xml.XmlCompletionContributor; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; import java.io.File; /** * @author Daniel Espendiller <daniel@espendiller.net> * @see fr.adrienbrault.idea.symfony2plugin.config.xml.XmlCompletionContributor */ public class XmlDicCompletionContributorTest extends SymfonyLightCodeInsightFixtureTestCase { public void setUp() throws Exception { super.setUp(); myFixture.copyFileToProject("appDevDebugProjectContainer.xml"); myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("classes1.php")); myFixture.copyFileToProject("services.xml"); myFixture.copyFileToProject("XmlDicCompletionContributorTest.env"); myFixture.configureByText("classes.php", "<?php\n" + "namespace Foo\\Name;\n" + "class FooClass {" + " public function foo() " + "}" ); } public String getTestDataPath() { return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath(); } /** * @see XmlCompletionContributor */ public void testServiceCompletion() { assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <argument type=\"service\" id=\"<caret>\"/>\n" + " </services>\n" + "</container>" , "data_collector.router" ); assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service factory-service=\"<caret>\"/>" + " </services>\n" + "</container>" , "data_collector.router" ); assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service parent=\"<caret>\"/>" + " </services>\n" + "</container>" , "data_collector.router" ); } /** * @see XmlCompletionContributor */ public void testServiceCompletionForArgumentsWithInvalidTypeAttributeBuWithValidParentServiceTag() { assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service><argument type=\"foobar\" id=\"<caret>\"/></service>\n" + " </services>\n" + "</container>" , "data_collector.router" ); assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service><argument id=\"<caret>\"/></service>\n" + " </services>\n" + "</container>" , "data_collector.router" ); } public void testClassCompletion() { assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service id=\"genemu.twig.extension.form\" class=\"<caret>\"/>\n" + " </services>\n" + "</container>" , "FooClass" ); assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service factory-class=\"<caret>\"/>" + " </services>\n" + "</container>" , "FooClass" ); } public void testAutowiringType() { assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service>\n" + " <autowiring-type><caret></autowiring-type>" + " </service>\n" + " </services>\n" + "</container>" , "FooClass" ); } public void testClassCompletionResult() { assertCompletionResultEquals("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service factory-class=\"FooClass<caret>\"/>" + " </services>\n" + "</container>", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service factory-class=\"Foo\\Name\\FooClass\"/>" + " </services>\n" + "</container>" ); assertCompletionResultEquals("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service factory-class=\"Foo\\Name\\<caret>\"/>" + " </services>\n" + "</container>", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service factory-class=\"Foo\\Name\\FooClass\"/>" + " </services>\n" + "</container>" ); } public void testFactoryClassMethodCompletionResult() { assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <factory service=\"<caret>\"/>" + " </services>\n" + "</container>" , "data_collector.router" ); assertCompletionContains("service.xml", "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<container>\n" + " <services>\n" + " <service id=\"foo.factory\" class=\"Foo\\Name\\FooClass\"/>\n" + " <service id=\"foo.manager\">\n" + " <factory service=\"foo.factory\" method=\"<caret>\"/>" + " <service>\n" + " </services>\n" + "</container>" , "foo" ); } /** * @see fr.adrienbrault.idea.symfony2plugin.config.xml.XmlCompletionContributor.ArgumentParameterCompletionProvider */ public void testArgumentParameterCompletion() { assertCompletionContains("service.xml", "<services><service><argument>%<caret></argument></service></services>", "%foo.class%", "%foo_bar%"); assertCompletionContains("service.xml", "<services><service><argument><caret></argument></service></services>", "%foo.class%", "%foo_bar%"); assertCompletionContains("service.xml", "<services><service><argument>%<caret>%</argument></service></services>", "%foo.class%", "%foo_bar%"); assertCompletionResultEquals("service.xml", "<services><service><argument>%foo_bar<caret></argument></service></services>", "<services><service><argument>%foo_bar%</argument></service></services>" ); } /** * @see fr.adrienbrault.idea.symfony2plugin.config.xml.XmlCompletionContributor.ArgumentParameterCompletionProvider */ public void testEnvironmentArgumentParameterCompletion() { assertCompletionContains( "service.xml", "<services><service><argument>%<caret></argument></service></services>", "%env(FOOBAR_ENV)%" ); } public void testServiceInstanceHighlightCompletion() { assertCompletionLookupContainsPresentableItem(XmlFileType.INSTANCE, "" + "<services>" + " <service class=\"Foo\\Bar\\Car\">" + " <argument type=\"service\" id=\"<caret>\"/>" + " </service>" + "</services>", lookupElement -> "foo_bar_apple".equals(lookupElement.getItemText()) && lookupElement.isItemTextBold() && lookupElement.isItemTextUnderlined() ); } public void testThatUppserCaseServiceAreInsideCompletion() { assertCompletionContains(XmlFileType.INSTANCE, "" + "<services>" + " <service class=\"Foo\\Bar\\Car\">" + " <argument type=\"service\" id=\"<caret>\"/>" + " </service>" + "</services>", "foo_bar_car_UPPER_COMPLETION" ); } public void testServiceCompletionOfFactoryService() { assertCompletionContains(XmlFileType.INSTANCE, "" + "<services>\n" + " <service>\n" + " <factory service=\"<caret>\" />\n" + " </service>\n" + "</services>", "foo_bar_apple" ); } }