package fr.adrienbrault.idea.symfony2plugin.tests.completion.xml;
import com.intellij.ide.highlighter.XmlFileType;
import com.intellij.patterns.PlatformPatterns;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import java.io.File;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*
* @see fr.adrienbrault.idea.symfony2plugin.completion.xml.XmlGotoCompletionRegistrar
*/
public class XmlGotoCompletionRegistrarTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.configureByText("config_foo.xml", "<foo/>");
myFixture.copyFileToProject("services.xml");
myFixture.copyFileToProject("routes.xml");
myFixture.copyFileToProject("XmlGotoCompletionRegistrar.php");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testResourcesInsideSameDirectoryProvidesNavigation() {
assertNavigationContainsFile(
XmlFileType.INSTANCE,
"<import resource=\"config<caret>_foo.xml\"/>",
"config_foo.xml"
);
}
public void testIdInsideServiceTagShouldCompleteWithClassName() {
assertCompletionContains(
XmlFileType.INSTANCE,
"<services><service id=\"<caret>\" class=\"MyFoo\\Foo\\Apple\"/></services>",
"my_foo.foo.apple"
);
assertCompletionNotContains(
XmlFileType.INSTANCE,
"<service id=\"<caret>\" class=\"MyFoo\\Foo\\Apple\"/>",
"my_foo.foo.apple"
);
assertCompletionNotContains(
XmlFileType.INSTANCE,
"<service id=\"<caret>\"/>",
"my_foo.foo.apple"
);
}
public void testThatServiceFactoryMethodAttributeProvidesCompletion() {
assertCompletionContains(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <factory service=\"foo.bar_factory\" method=\"<caret>\"/>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
"create"
);
}
public void testThatClassFactoryMethodAttributeProvidesCompletion() {
assertCompletionContains(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <factory class=\"Foo\\Bar\" method=\"<caret>\"/>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
"create"
);
}
public void testThatRouteInsideRouteDefaultKeyCompletedAndNavigable() {
assertCompletionContains(XmlFileType.INSTANCE, "" +
" <route id=\"root\" path=\"/wp-admin\">\n" +
" <default key=\"route\"><caret></default>\n" +
" </route>",
"foo_route"
);
assertNavigationMatch(XmlFileType.INSTANCE, "" +
" <route id=\"root\" path=\"/wp-admin\">\n" +
" <default key=\"route\">foo_<caret>route</default>\n" +
" </route>"
);
}
public void testThatTemplateInsideRouteDefaultKeyCompletedAndNavigable() {
if(System.getenv("PHPSTORM_ENV") != null) return;
try {
createDummyFiles("app/Resources/views/foo.html.twig");
} catch (Exception e) {
e.printStackTrace();
}
assertCompletionContains(XmlFileType.INSTANCE, "" +
" <route id=\"root\" path=\"/wp-admin\">\n" +
" <default key=\"template\"><caret></default>\n" +
" </route>",
"foo.html.twig"
);
assertNavigationMatch(XmlFileType.INSTANCE, "" +
" <route id=\"root\" path=\"/wp-admin\">\n" +
" <default key=\"template\">foo.ht<caret>ml.twig</default>\n" +
" </route>"
);
}
public void testThatDecoratesServiceTagProvidesReferences() {
assertCompletionContains(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service class=\"Foo\\Foobar\" decorates=\"<caret>\"/>\n" +
" </services>\n" +
"</container>\n",
"service_container"
);
assertNavigationMatch(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service class=\"Foo\\Foobar\" decorates=\"foo.bar_<caret>factory\"/>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement(PhpClass.class)
);
}
public void testThatDecoratesPrioritizeLookupElementOnInstance() {
assertCompletionLookupContainsPresentableItem(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service class=\"Foo\\Foobar\" decorates=\"<caret>\"/>\n" +
" </services>\n" +
"</container>\n",
lookupElement -> "foo.bar_factory".equals(lookupElement.getItemText()) && lookupElement.isItemTextBold() && lookupElement.isItemTextBold()
);
}
}