package fr.adrienbrault.idea.symfony2plugin.tests.templating.util;
import com.jetbrains.php.lang.psi.PhpPsiElementFactory;
import com.jetbrains.php.lang.psi.elements.Function;
import fr.adrienbrault.idea.symfony2plugin.templating.util.PhpMethodVariableResolveUtil;
import fr.adrienbrault.idea.symfony2plugin.templating.variable.dict.PsiVariable;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import java.io.File;
import java.util.Map;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
public class PhpMethodVariableResolveUtilTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.copyFileToProject("PhpMethodVariableResolveUtilTest.php");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
/**
* @see PhpMethodVariableResolveUtil#collectMethodVariables
*/
public void testCollectMethodVariablesForVariablesReferences() {
Function function = PhpPsiElementFactory.createFunction(getProject(), "function foobar() {\n" +
"$myVar = new \\MyVars\\MyVar();\n" +
"$var['foobar'] = $myVar;\n" +
"$var = ['foobar1' => $myVar];\n" +
"\n" +
"/** @var $x \\Symfony\\Component\\Templating\\EngineInterface */\n" +
"$x->render('foo', $var);\n" +
"\n" +
"}"
);
Map<String, PsiVariable> vars = PhpMethodVariableResolveUtil.collectMethodVariables(function);
assertContainsElements(vars.keySet(), "foobar");
assertContainsElements(vars.keySet(), "foobar1");
}
/**
* @see PhpMethodVariableResolveUtil#collectMethodVariables
*/
public void testCollectMethodVariablesForArrayCreation() {
Function function = PhpPsiElementFactory.createFunction(getProject(), "function foobar() {\n" +
"$myVar = new \\MyVars\\MyVar();\n" +
"$var['foobar'] = $myVar;\n" +
"\n" +
"/** @var $x \\Symfony\\Component\\Templating\\EngineInterface */\n" +
"$x->render('foo', ['foobar' => $myVar]);\n" +
"\n" +
"}"
);
Map<String, PsiVariable> vars = PhpMethodVariableResolveUtil.collectMethodVariables(function);
assertContainsElements(vars.keySet(), "foobar");
}
/**
* @see PhpMethodVariableResolveUtil#collectMethodVariables
*/
public void testCollectMethodVariablesForArrayMerge() {
Function function = PhpPsiElementFactory.createFunction(getProject(), "function foobar() {\n" +
"$myVar = new \\MyVars\\MyVar();\n" +
"$var['foobar'] = $myVar;\n" +
"\n" +
"/** @var $x \\Symfony\\Component\\Templating\\EngineInterface */\n" +
"$x->render('foo', array_merge($var, ['foobar1' => $myVar]));\n" +
"\n" +
"}"
);
Map<String, PsiVariable> vars = PhpMethodVariableResolveUtil.collectMethodVariables(function);
assertContainsElements(vars.keySet(), "foobar");
assertContainsElements(vars.keySet(), "foobar1");
}
/**
* @see PhpMethodVariableResolveUtil#collectMethodVariables
*/
public void testCollectMethodVariablesForBinaryExpression() {
Function function = PhpPsiElementFactory.createFunction(getProject(), "function foobar() {\n" +
"$myVar = new \\MyVars\\MyVar();\n" +
"$var['foobar'] = $myVar;\n" +
"\n" +
"/** @var $x \\Symfony\\Component\\Templating\\EngineInterface */\n" +
"$x->render('foo', $var + ['foobar1' => $myVar]);\n" +
"\n" +
"}"
);
Map<String, PsiVariable> vars = PhpMethodVariableResolveUtil.collectMethodVariables(function);
assertContainsElements(vars.keySet(), "foobar");
assertContainsElements(vars.keySet(), "foobar1");
}
/**
* @see PhpMethodVariableResolveUtil#collectMethodVariables
*/
public void testCollectMethodVariablesForOperatorSelfAssignment() {
Function function = PhpPsiElementFactory.createFunction(getProject(), "function foobar() {\n" +
"$myVar = new \\MyVars\\MyVar();\n" +
"$var['foobar'] = $myVar;\n" +
"\n" +
"/** @var $x \\Symfony\\Component\\Templating\\EngineInterface */\n" +
"$x->render('foo', $var += ['foobar1' => $myVar]);\n" +
"\n" +
"}"
);
Map<String, PsiVariable> vars = PhpMethodVariableResolveUtil.collectMethodVariables(function);
assertContainsElements(vars.keySet(), "foobar");
assertContainsElements(vars.keySet(), "foobar1");
}
}