package fr.adrienbrault.idea.symfony2plugin.tests.config.xml;
import com.intellij.ide.highlighter.XmlFileType;
import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.php.lang.psi.elements.Parameter;
import fr.adrienbrault.idea.symfony2plugin.config.xml.XmlHelper;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see fr.adrienbrault.idea.symfony2plugin.config.xml.XmlHelper
*/
public class XmlHelperTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.copyFileToProject("XmlHelper.php");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
/**
* @see XmlHelper#visitServiceCallArgumentMethodIndex
*/
public void testVisitServiceCallArgument() {
myFixture.configureByText(XmlFileType.INSTANCE, "" +
"<service class=\"Foo\\Bar\">\n" +
" <call method=\"setBar\">\n" +
" <argument/>\n" +
" <argument type=\"service\" id=\"ma<caret>iler\" />\n" +
" </call>\n" +
"</service>"
);
PsiElement psiElement = myFixture.getFile().findElementAt(myFixture.getCaretOffset());
PsiElement parent = psiElement.getParent();
Collection<String> results = new ArrayList<>();
XmlHelper.visitServiceCallArgument((XmlAttributeValue) parent, visitor ->
results.add(visitor.getClassName() + ":" + visitor.getMethod() + ":" + visitor.getParameterIndex())
);
assertContainsElements(results, "Foo\\Bar:setBar:1");
}
/**
* @see XmlHelper#visitServiceCallArgumentMethodIndex
*/
public void testVisitServiceCallArgumentParameter() {
myFixture.configureByText(XmlFileType.INSTANCE, "" +
"<service class=\"Foo\\Bar\">\n" +
" <call method=\"setBar\">\n" +
" <argument/>\n" +
" <argument type=\"service\" id=\"ma<caret>iler\" />\n" +
" </call>\n" +
"</service>"
);
PsiElement psiElement = myFixture.getFile().findElementAt(myFixture.getCaretOffset());
PsiElement parent = psiElement.getParent();
Collection<Parameter> results = new ArrayList<>();
XmlHelper.visitServiceCallArgumentMethodIndex((XmlAttributeValue) parent, results::add);
assertNotNull(
ContainerUtil.find(results, parameter -> "arg2".equals(parameter.getName()))
);
}
}