package fr.adrienbrault.idea.symfony2plugin.tests.config.yaml; import com.intellij.patterns.PlatformPatterns; import com.intellij.patterns.PsiElementPattern; import com.jetbrains.php.lang.psi.elements.PhpClass; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NotNull; import org.jetbrains.yaml.YAMLFileType; import java.io.File; /** * @author Daniel Espendiller <daniel@espendiller.net> * * @see fr.adrienbrault.idea.symfony2plugin.config.yaml.YamlGoToDeclarationHandler */ public class YamlGoToDeclarationHandlerTest extends SymfonyLightCodeInsightFixtureTestCase { public void setUp() throws Exception { super.setUp(); myFixture.copyFileToProject("classes.php"); myFixture.copyFileToProject("services.xml"); myFixture.copyFileToProject("YamlGoToDeclarationHandler.php"); myFixture.copyFileToProject("YamlGoToDeclarationHandler.env"); } public String getTestDataPath() { return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath(); } public void testGlobalServiceName() { assertNavigationMatch(YAMLFileType.YML, "bar: f<caret>oo", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: [ f<caret>oo ]", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: { f<caret>oo }", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar:\n - f<caret>oo", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: [ bar, f<caret>oo ]", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: { bar: f<caret>oo }", getClassPattern()); assertNavigationIsEmpty(YAMLFileType.YML, "fo<caret>o:\n - foo"); assertNavigationIsEmpty(YAMLFileType.YML, "bar: { f<caret>oo: bar }"); assertNavigationMatch(YAMLFileType.YML, "bar: foo.ba<caret>r_foo", getClassPattern()); assertNavigationIsEmpty(YAMLFileType.YML, "bar: foo.<caret>bar-foo"); } public void testGlobalServiceNameQuote() { assertNavigationMatch(YAMLFileType.YML, "bar: 'f<caret>oo'", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: [ 'f<caret>oo' ]", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: { 'f<caret>oo' }", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar:\n - 'f<caret>oo'", getClassPattern()); assertNavigationIsEmpty(YAMLFileType.YML, "'fo<caret>o':\n - foo"); assertNavigationMatch(YAMLFileType.YML, "bar: \"f<caret>oo\"", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: [ \"f<caret>oo\" ]", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: { \"f<caret>oo\" }", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar:\n - \"f<caret>oo\"", getClassPattern()); assertNavigationIsEmpty(YAMLFileType.YML, "\"fo<caret>o\":\n - foo"); } public void testSpecialCharPrefix() { assertNavigationMatch(YAMLFileType.YML, "bar: @f<caret>oo", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: @?f<caret>oo=", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: @?f<caret>oo", getClassPattern()); } public void testSpecialCharPrefixQuote() { assertNavigationMatch(YAMLFileType.YML, "bar: '@f<caret>oo'", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: '@?f<caret>oo='", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: '@?f<caret>oo'", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: \"@f<caret>oo\"", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: \"@?f<caret>oo=\"", getClassPattern()); assertNavigationMatch(YAMLFileType.YML, "bar: \"@?f<caret>oo\"", getClassPattern()); } public void testPhpConstantNavigation() { assertNavigationMatch(YAMLFileType.YML, "bar: !php/const:\\YAML_<caret>FOO_BAR"); assertNavigationMatch(YAMLFileType.YML, "bar: !php/const:YAML_<caret>FOO_BAR"); assertNavigationMatch(YAMLFileType.YML, "bar: !php/const:Yaml\\Foo\\Bar::YAML_FOO_BAR<caret>_CLASS"); assertNavigationMatch(YAMLFileType.YML, "bar: !php/const:Yaml\\Foo\\Bar::::YAML_FOO_BAR<caret>_CLASS"); assertNavigationMatch(YAMLFileType.YML, "bar: !php/const:Yaml\\Foo\\Bar:YAML_FOO_BAR<caret>_CLASS"); assertNavigationMatch(YAMLFileType.YML, "bar: !php/const:\\Yaml\\Foo\\Bar:YAML_FOO_BAR<caret>_CLASS"); assertNavigationMatch(YAMLFileType.YML, "bar: \"!php/const:\\YAML_<caret>FOO_BAR\""); assertNavigationMatch(YAMLFileType.YML, "bar: '!php/const:\\YAML_<caret>FOO_BAR'"); } public void testParameter() { assertNavigationMatch(YAMLFileType.YML, "bar: %foo_p<caret>arameter%"); } public void testEnvironmentParameter() { assertNavigationMatch(YAMLFileType.YML, "bar: %env(FOOBA<caret>R_ENV)%"); assertNavigationMatch(YAMLFileType.YML, "bar: '%env(FOOBA<caret>R_ENV)%'"); } @NotNull private PsiElementPattern.Capture<PhpClass> getClassPattern() { return PlatformPatterns.psiElement(PhpClass.class); } }