package fr.adrienbrault.idea.symfony2plugin.tests.config.yaml;
import com.intellij.patterns.PlatformPatterns;
import com.jetbrains.php.lang.PhpFileType;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import org.jetbrains.yaml.YAMLFileType;
import java.io.File;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*
* @see fr.adrienbrault.idea.symfony2plugin.config.yaml.YamlCompletionContributor
*/
public class YamlCompletionContributorTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.copyFileToProject("services.xml");
myFixture.configureByText("config_foo.yml", "");
myFixture.configureByFile("YamlCompletionContributor.php");
myFixture.configureByFile("tagged.services.xml");
myFixture.configureByFile("classes.php");
myFixture.configureByFile("YamlCompletionContributor.env");
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testResourcesInsideSameDirectoryProvidesCompletion() {
assertCompletionContains("config.yml", "imports:\n" +
" - { resource: <caret> }",
"config_foo.yml"
);
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.config.yaml.YamlCompletionContributor.RepositoryClassCompletionProvider
*/
public void testRepositoryClassCompletionProvider() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
"\n" +
"namespace Doctrine\\Common\\Persistence {\n" +
" interface ObjectRepository {};\n" +
"}\n" +
"\n" +
"namespace Foo\\Bar {\n" +
" use Doctrine\\Common\\Persistence\\ObjectRepository;\n" +
" abstract class BarRepository implements ObjectRepository { }\n" +
"}"
);
for (String s : new String[]{"orm.yml", "couchdb.yml", "odm.yml", "mongodb.yml"}) {
assertCompletionContains(
"foo." + s,
"Foo:\n repositoryClass: <caret>",
"Foo\\Bar\\BarRepository"
);
assertCompletionResultEquals(
"foo." + s,
"Foo:\n repositoryClass: Foo\\Bar\\<caret>",
"Foo:\n repositoryClass: Foo\\Bar\\BarRepository"
);
}
}
public void testRouteRequirementsCompletion() {
assertCompletionContains("routing.yml", "" +
"foo:\n" +
" pattern: /hello/{name}\n" +
" requirements:\n" +
" 'n<caret>'\n",
"name"
);
assertCompletionContains("routing.yml", "" +
"foo:\n" +
" pattern: /hello/{name}\n" +
" requirements:\n" +
" n<caret>\n",
"name"
);
}
public void testRouteControllerActionCompletion() {
assertCompletionContains("routing.yml", "" +
"foo:\n" +
" pattern: /hello/{name}\n" +
" defaults: { _controller: <caret> }",
"FooBundle:Foo:foo"
);
}
public void testClassCompletion() {
assertCompletionContains("routing.yml", "" +
"services:\n" +
" foo:\n" +
" class: <caret>\n",
"FooController"
);
assertCompletionContains("routing.yml", "" +
"services:\n" +
" foo:\n" +
" class: \"<caret>\"\n",
"FooController"
);
assertCompletionContains("routing.yml", "" +
"services:\n" +
" foo:\n" +
" class: '<caret>'\n",
"FooController"
);
assertCompletionContains("routing.yml", "" +
"services:\n" +
" foo:\n" +
" factory_class: <caret>\n",
"FooController"
);
assertCompletionContains("routing.yml", "" +
"services:\n" +
" foo:\n" +
" autowiring_types: <caret>\n",
"FooController"
);
assertCompletionNotContains("routing.yml", "" +
"servicesa:\n" +
" foo:\n" +
" factory_class: <caret>\n",
"FooController"
);
}
public void testParentAndServiceClassCompletion() {
assertCompletionContains("services.yml", "" +
"services:\n" +
" foo:\n" +
" parent: <caret>\n",
"foo"
);
assertCompletionContains("services.yml", "" +
"services:\n" +
" foo:\n" +
" factory_service: <caret>\n",
"foo"
);
}
public void testTagsProvideCompletion() {
assertCompletionContains("services.yml", "" +
"services:\n" +
" foo:\n" +
" tags: { name: <caret>}\n",
"my_nice_tag"
);
assertCompletionContains("services.yml", "" +
"services:\n" +
" foo:\n" +
" tags: [ <caret> ]\n",
"my_nice_tag"
);
assertCompletionContains("services.yml", "" +
"services:\n" +
" foo:\n" +
" tags: \n" +
" - <caret>\n",
"my_nice_tag"
);
}
public void testParameterCompletion() {
assertCompletionContains("services.yml", "" +
"services:\n" +
" foo: [%<caret>]",
"foo_parameter"
);
}
public void testParameterEnvironmentCompletion() {
assertCompletionContains("services.yml", "" +
"services:\n" +
" foo: [%<caret>]",
"env(FOOBAR_ENV)"
);
}
public void testParameterCompletionInsertHandler() {
assertCompletionResultEquals("services.yml", "services:\n" +
" foo: [%foo_paramet<caret>%]",
"services:\n" +
" foo: [%foo_parameter%]"
);
assertCompletionResultEquals("services.yml", "services:\n" +
" foo: ['%foo_paramet<caret>']",
"services:\n" +
" foo: ['%foo_parameter%']"
);
assertCompletionResultEquals("services.yml", "services:\n" +
" foo: [\"%foo_paramet<caret>\"]",
"services:\n" +
" foo: [\"%foo_parameter%\"]"
);
}
public void testThatMethodOfClassAreCompleted() {
assertCompletionContains(YAMLFileType.YML, "" +
"services:\n" +
" foobar:\n" +
" class: Foo\\Bar\n" +
" calls:\n" +
" - [ <caret> ]\n",
"setBar"
);
assertCompletionContains(YAMLFileType.YML, "" +
"services:\n" +
" foobar:\n" +
" class: Foo\\Bar\n" +
" calls:\n" +
" - [ '<caret>' ]\n",
"setBar"
);
}
}