Skip to content

Commit bccf4bc

Browse files
committed
provide testcases for resources resolving
1 parent 5e1a629 commit bccf4bc

File tree

3 files changed

+61
-21
lines changed

3 files changed

+61
-21
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/util/resource/FileResourceUtil.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
import com.jetbrains.php.PhpIcons;
2020
import fr.adrienbrault.idea.symfony2plugin.stubs.cache.FileIndexCaches;
2121
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.FileResourcesIndex;
22-
import fr.adrienbrault.idea.symfony2plugin.util.*;
22+
import fr.adrienbrault.idea.symfony2plugin.util.FileResourceVisitorUtil;
23+
import fr.adrienbrault.idea.symfony2plugin.util.PhpIndexUtil;
24+
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
25+
import fr.adrienbrault.idea.symfony2plugin.util.SymfonyBundleUtil;
2326
import fr.adrienbrault.idea.symfony2plugin.util.dict.SymfonyBundle;
2427
import org.apache.commons.lang.StringUtils;
2528
import org.jetbrains.annotations.NotNull;
@@ -181,25 +184,20 @@ public static RelatedItemLineMarkerInfo<PsiElement> getFileImplementsLineMarker(
181184
}
182185

183186
String bundleLocateName = FileResourceUtil.getBundleLocateName(project, virtualFile);
184-
if(bundleLocateName != null) {
185-
if(FileResourceUtil.getFileResourceRefers(project, bundleLocateName).size() == 0) {
186-
return null;
187-
}
188-
187+
if(bundleLocateName != null && FileResourceUtil.getFileResourceRefers(project, bundleLocateName).size() > 0) {
189188
NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder.create(PhpIcons.IMPLEMENTS)
190189
.setTargets(NotNullLazyValue.lazy(new FileResourceBundleNotNullLazyValue(project, bundleLocateName)))
191190
.setTooltipText("Navigate to resource");
192191

193192
return builder.createLineMarkerInfo(psiFile);
194-
} else {
195-
if (hasFileResources(project, psiFile)) {
196-
NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder.create(PhpIcons.IMPLEMENTS);
197-
builder.setTargets(NotNullLazyValue.lazy(new FileResourceNotNullLazyValue(project, virtualFile)));
193+
}
198194

199-
builder.setTooltipText("Navigate to resource");
195+
if (hasFileResources(project, psiFile)) {
196+
NavigationGutterIconBuilder<PsiElement> builder = NavigationGutterIconBuilder.create(PhpIcons.IMPLEMENTS)
197+
.setTargets(NotNullLazyValue.lazy(new FileResourceNotNullLazyValue(project, virtualFile)))
198+
.setTooltipText("Navigate to resource");
200199

201-
return builder.createLineMarkerInfo(psiFile);
202-
}
200+
return builder.createLineMarkerInfo(psiFile);
203201
}
204202

205203
return null;

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/util/resource/FileResourceUtilTest.java

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package fr.adrienbrault.idea.symfony2plugin.tests.util.resource;
22

33
import com.intellij.openapi.util.Pair;
4+
import com.intellij.openapi.vfs.VirtualFile;
45
import com.intellij.psi.PsiFile;
56
import com.intellij.util.containers.ContainerUtil;
67
import com.jetbrains.php.lang.psi.elements.PhpClass;
78
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
9+
import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils;
810
import fr.adrienbrault.idea.symfony2plugin.util.resource.FileResourceUtil;
911
import org.jetbrains.annotations.NotNull;
1012

13+
import java.util.Collection;
14+
1115
/**
1216
* @author Daniel Espendiller <daniel@espendiller.net>
1317
*
@@ -17,26 +21,22 @@ public class FileResourceUtilTest extends SymfonyLightCodeInsightFixtureTestCase
1721

1822
public void setUp() throws Exception {
1923
super.setUp();
20-
21-
myFixture.copyFileToProject("classes.php");
22-
myFixture.configureByText("target.xml", "" +
23-
"<routes>\n" +
24-
" <import resource=\"@FooBundle/foo.xml\" />\n" +
25-
"</routes>"
26-
);
2724
}
2825

2926
public String getTestDataPath() {
3027
return "src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/util/resource/fixtures";
3128
}
3229

3330
public void testGetFileResourceRefers() {
34-
PsiFile psiFile = myFixture.configureByText("foo.xml", "foo");
31+
createBundleScopeProject();
3532

33+
PsiFile psiFile = myFixture.configureByText("foo.xml", "foo");
3634
assertNotNull(ContainerUtil.find(FileResourceUtil.getFileResourceRefers(getProject(), psiFile.getVirtualFile()), virtualFile -> virtualFile.getName().equals("target.xml")));
3735
}
3836

3937
public void testGetFileResourceTargetsInBundleDirectory() {
38+
createBundleScopeProject();
39+
4040
for (String s : new String[]{"@FooBundle/Controller", "@FooBundle\\Controller", "@FooBundle/Controller/", "@FooBundle//Controller", "@FooBundle\\Controller\\"}) {
4141
assertNotNull(ContainerUtil.find(FileResourceUtil.getFileResourceTargetsInBundleDirectory(getProject(), s), psiElement ->
4242
psiElement instanceof PhpClass && "\\FooBundle\\Controller\\FooController".equals(((PhpClass) psiElement).getFQN())
@@ -65,4 +65,37 @@ public void testGetGlobalPatternDirectory() {
6565
assertEquals("src/", globalPatternDirectory.getFirst());
6666
assertNull(globalPatternDirectory.getSecond());
6767
}
68+
69+
public void testFileResources() {
70+
VirtualFile services = myFixture.copyFileToProject("services.xml", "config/services.xml");
71+
VirtualFile virtualFile = myFixture.copyFileToProject("classes.php", "src/Test.php");
72+
73+
assertTrue(FileResourceUtil.hasFileResources(getProject(), PsiElementUtils.virtualFileToPsiFile(getProject(), virtualFile)));
74+
75+
Collection<Pair<VirtualFile, String>> fileResources = FileResourceUtil.getFileResources(getProject(), virtualFile);
76+
assertTrue(fileResources.stream().anyMatch(pair -> pair.getFirst().getPath().equals(services.getPath())));
77+
}
78+
79+
public void testGetFileImplementsLineMarker() {
80+
myFixture.copyFileToProject("services.xml", "config/services.xml");
81+
VirtualFile virtualFile = myFixture.copyFileToProject("classes.php", "src/Test.php");
82+
assertNotNull(FileResourceUtil.getFileImplementsLineMarker(PsiElementUtils.virtualFileToPsiFile(getProject(), virtualFile)));
83+
}
84+
85+
public void testGetFileImplementsLineMarkerForBundle() {
86+
createBundleScopeProject();
87+
88+
myFixture.copyFileToProject("services.xml", "config/services.xml");
89+
VirtualFile virtualFile = myFixture.copyFileToProject("classes.php", "src/Test.php");
90+
assertNotNull(FileResourceUtil.getFileImplementsLineMarker(PsiElementUtils.virtualFileToPsiFile(getProject(), virtualFile)));
91+
}
92+
93+
private void createBundleScopeProject() {
94+
myFixture.copyFileToProject("classes.php");
95+
myFixture.configureByText("target.xml", "" +
96+
"<routes>\n" +
97+
" <import resource=\"@FooBundle/foo.xml\" />\n" +
98+
"</routes>"
99+
);
100+
}
68101
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<routes xmlns="http://symfony.com/schema/routing"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://symfony.com/schema/routing
5+
https://symfony.com/schema/routing/routing-1.0.xsd">
6+
7+
<import resource="../src/Test.php" type="annotation"/>
8+
<import resource="../src/*Controller.php" type="annotation"/>
9+
</routes>

0 commit comments

Comments
 (0)