package fr.adrienbrault.idea.symfony2plugin.tests.form;
import com.intellij.patterns.PlatformPatterns;
import com.jetbrains.php.lang.PhpFileType;
import com.jetbrains.php.lang.psi.elements.Field;
import com.jetbrains.php.lang.psi.elements.Method;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import java.io.File;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
* @see fr.adrienbrault.idea.symfony2plugin.form.FormTypeReferenceContributor
*/
public class FormTypeReferenceContributorTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("classes.php"));
}
protected String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testDataClassPropertyCompletion() {
assertCompletionContains(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"class FormType\n" +
"{\n" +
" public function buildForm(\\Symfony\\Component\\Form\\FormBuilderInterface $builder, array $options) {\n" +
" $builder->add('<caret>');\n" +
" }\n" +
" public function setDefaultOptions(OptionsResolverInterface $resolver)\n" +
" {\n" +
" $resolver->setDefaults(array(\n" +
" 'data_class' => \"MyDateTime\",\n" +
" ));\n" +
" }\n" +
"}",
"timestamp"
);
assertCompletionContains(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"class FormType\n" +
"{\n" +
" public function buildForm(\\Symfony\\Component\\Form\\FormBuilderInterface $builder, array $options) {\n" +
" $builder->add('<caret>');\n" +
" }\n" +
" public function setDefaultOptions(OptionsResolverInterface $resolver)\n" +
" {\n" +
" $resolver->setDefaults(array(\n" +
" 'data_class' => MyDateTime::class,\n" +
" ));\n" +
" }\n" +
"}",
"timestamp"
);
assertCompletionContains(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"class FormType\n" +
"{\n" +
" protected $foo = 'MyDateTime';\n" +
" public function buildForm(\\Symfony\\Component\\Form\\FormBuilderInterface $builder, array $options) {\n" +
" $builder->add('<caret>');\n" +
" }\n" +
" public function setDefaultOptions(OptionsResolverInterface $resolver)\n" +
" {\n" +
" $resolver->setDefaults(array(\n" +
" 'data_class' => $this->foo,\n" +
" ));\n" +
" }\n" +
"}",
"timestamp"
);
assertCompletionContains(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"class FormType\n" +
"{\n" +
" protected $foo = 'DateTime';\n" +
" public function buildForm(\\Symfony\\Component\\Form\\FormBuilderInterface $builder, array $options) {\n" +
" $builder->add('<caret>');\n" +
" }\n" +
" public function setDefaultOptions(OptionsResolverInterface $resolver)\n" +
" {\n" +
" $resolver->setDefaults(array(\n" +
" 'data_class' => \\Form\\DataClass\\Model::class,\n" +
" ));\n" +
" }\n" +
"}",
"fooBar"
);
}
public void testDataClassWithPublicPropertyCompletion() {
assertCompletionContains(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"class FormType\n" +
"{\n" +
" protected $foo = 'DateTime';\n" +
" public function buildForm(\\Symfony\\Component\\Form\\FormBuilderInterface $builder, array $options) {\n" +
" $builder->add('<caret>');\n" +
" }\n" +
" public function setDefaultOptions(OptionsResolverInterface $resolver)\n" +
" {\n" +
" $resolver->setDefaults(array(\n" +
" 'data_class' => \\Form\\DataClass\\Model::class,\n" +
" ));\n" +
" }\n" +
"}",
"var", "varBar"
);
}
public void testFormDataFieldPropertyPathReferencesForMethod() {
for (String s : new String[]{"foo_bar", "fooBar"}) {
assertReferenceMatchOnParent(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"class FormType\n" +
"{\n" +
" protected $foo = 'DateTime';\n" +
" public function buildForm(\\Symfony\\Component\\Form\\FormBuilderInterface $builder, array $options) {\n" +
" $builder->add('" + s + "<caret>');\n" +
" }\n" +
" public function setDefaultOptions(OptionsResolverInterface $resolver)\n" +
" {\n" +
" $resolver->setDefaults(array(\n" +
" 'data_class' => \\Form\\DataClass\\Model::class,\n" +
" ));\n" +
" }\n" +
"}", PlatformPatterns.psiElement(Method.class)
);
}
}
public void testFormDataFieldPropertyPathReferencesForProperty() {
for (String s : new String[]{"var", "varBar", "var_bar", "var_Bar"}) {
assertReferenceMatchOnParent(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"class FormType\n" +
"{\n" +
" protected $foo = 'DateTime';\n" +
" public function buildForm(\\Symfony\\Component\\Form\\FormBuilderInterface $builder, array $options) {\n" +
" $builder->add('" + s + "<caret>');\n" +
" }\n" +
" public function setDefaultOptions(OptionsResolverInterface $resolver)\n" +
" {\n" +
" $resolver->setDefaults(array(\n" +
" 'data_class' => \\Form\\DataClass\\Model::class,\n" +
" ));\n" +
" }\n" +
"}", PlatformPatterns.psiElement(Field.class)
);
}
}
}