package fr.adrienbrault.idea.symfony2plugin.tests.config.xml;
import com.intellij.ide.highlighter.XmlFileType;
import com.intellij.patterns.PlatformPatterns;
import com.jetbrains.php.lang.psi.elements.Field;
import com.jetbrains.php.lang.psi.elements.Method;
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.config.xml.XmlReferenceContributor
*/
public class XmlReferenceContributorTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.copyFileToProject("XmlReferenceContributor.php");
myFixture.copyFileToProject("XmlReferenceContributor.env");
myFixture.copyFileToProject("services.xml");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testThatAutowiringTypeReferenceToPhpClass() {
assertReferenceMatch(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <autowiring-type>Foo<caret>\\Bar</autowiring-type>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement(PhpClass.class).withName("Bar")
);
}
public void testThatFactoryClassAttributeProvidesReference() {
assertReferenceMatchOnParent(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <factory class=\"Foo\\<caret>Bar\" method=\"create\"/>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement(PhpClass.class).withName("Bar")
);
}
public void testThatFactoryMethodAttributeProvidesReferenceForClass() {
assertReferenceMatchOnParent(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <factory class=\"Foo\\Bar\" method=\"cr<caret>eate\"/>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement(Method.class).withName("create")
);
}
public void testThatFactoryMethodAttributeProvidesReferenceForService() {
assertReferenceMatchOnParent(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <factory service=\"foo.bar_factory\" method=\"cr<caret>eate\"/>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement(Method.class).withName("create")
);
}
public void testThatArgumentConstantProvidesReferences() {
assertReferenceMatch(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <argument type=\"constant\">Foo\\Bar::FO<caret>O</argument>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement(Field.class).withName("FOO")
);
assertReferenceMatch(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <argument type=\"constant\">CONS<caret>T_FOO</argument>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement()
);
}
public void testEnvironmentParameter() {
assertReferenceMatch(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <argument>%env(FOOB<caret>AR_ENV)%</argument>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement()
);
}
}