package fr.adrienbrault.idea.symfony2plugin.tests.completion.yaml; import com.intellij.patterns.PlatformPatterns; import com.jetbrains.php.lang.psi.elements.PhpClass; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; import org.jetbrains.yaml.YAMLFileType; import java.io.File; import java.util.ArrayList; import java.util.Collection; /** * @author Daniel Espendiller <daniel@espendiller.net> * @see fr.adrienbrault.idea.symfony2plugin.completion.yaml.YamlGotoCompletionRegistrar */ public class YamlGotoCompletionRegistrarTest extends SymfonyLightCodeInsightFixtureTestCase { public void setUp() throws Exception { super.setUp(); myFixture.copyFileToProject("routes.xml"); myFixture.copyFileToProject("services.xml"); myFixture.copyFileToProject("YamlGotoCompletionRegistrar.php"); } public String getTestDataPath() { return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath(); } public void testThatRouteInsideRouteDefaultKeyCompletedAndNavigable() { assertCompletionContains(YAMLFileType.YML, "" + "root:\n" + " path: /wp-admin\n" + " defaults:\n" + " route: '<caret>'\n", "foo_route" ); assertNavigationMatch(YAMLFileType.YML, "" + "root:\n" + " path: /wp-admin\n" + " defaults:\n" + " route: 'foo_<caret>route'\n" ); } public void testThatTemplateInsideRouteDefaultKeyCompletedAndNavigable() { if(System.getenv("PHPSTORM_ENV") != null) return; try { createDummyFiles("app/Resources/views/foo.html.twig"); } catch (Exception e) { e.printStackTrace(); } assertCompletionContains(YAMLFileType.YML, "" + "root:\n" + " path: /wp-admin\n" + " defaults:\n" + " template: '<caret>'\n", "foo.html.twig" ); assertNavigationMatch(YAMLFileType.YML, "" + "root:\n" + " path: /wp-admin\n" + " defaults:\n" + " template: 'foo.ht<caret>ml.twig'\n" ); } public void testThatDecoratesServiceTagProvidesReferences() { Collection<String[]> strings = new ArrayList<String[]>() {{ add(new String[] {"<caret>", "foo.bar<caret>_factory"}); add(new String[] {"'<caret>'", "'foo.bar<caret>_factory'"}); add(new String[] {"\"<caret>\"", "\"foo.bar<caret>_factory\""}); }}; for (String[] s : strings) { assertCompletionContains(YAMLFileType.YML, "" + "services:\n" + " foo:\n" + " class: Foo\\Foobar\n" + " decorates: " + s[0] + "\n", "foo.bar_factory" ); assertNavigationMatch(YAMLFileType.YML, "" + "services:\n" + " foo:\n" + " class: Foo\\Foobar\n" + " decorates: " + s[1] + "\n", PlatformPatterns.psiElement(PhpClass.class) ); } } public void testThatDecoratesPrioritizeLookupElementOnInstance() { assertCompletionLookupContainsPresentableItem(YAMLFileType.YML, "" + "services:\n" + " foo:\n" + " class: Foo\\Foobar\n" + " decorates: <caret>\n", lookupElement -> "foo".equals(lookupElement.getItemText()) && lookupElement.isItemTextBold() && lookupElement.isItemTextBold() ); } }