Skip to content

Commit 9566cce

Browse files
committed
Properly test psi reference contributor
1 parent 80b259a commit 9566cce

File tree

7 files changed

+7489
-0
lines changed

7 files changed

+7489
-0
lines changed

src/main/java/com/cedricziel/idea/typo3/index/IconIndex.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class IconIndex extends FileBasedIndexExtension<String, IconStub> {
3232

3333
public static ID<String, IconStub> KEY = ID.create("com.cedricziel.idea.typo3.index.icon");
3434

35+
@NotNull
3536
public static Collection<String> getAllAvailableIcons(@NotNull Project project) {
3637

3738
return FileBasedIndex.getInstance().getAllKeys(KEY, project);

src/main/java/com/cedricziel/idea/typo3/util/PhpLangUtil.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.intellij.psi.util.PsiTreeUtil;
55
import com.jetbrains.php.PhpIndex;
66
import com.jetbrains.php.lang.psi.elements.*;
7+
import com.jetbrains.php.lang.psi.resolve.types.PhpType;
78
import org.jetbrains.annotations.NotNull;
89
import org.jetbrains.annotations.Nullable;
910

@@ -92,6 +93,12 @@ public static String getClassName(@NotNull PsiElement element) {
9293
return null;
9394
}
9495

96+
Variable variableBeingCalledOn = PsiTreeUtil.findChildOfType(methodReference, Variable.class);
97+
if (variableBeingCalledOn != null && variableBeingCalledOn.getInferredType() != null) {
98+
PhpType inferredType = variableBeingCalledOn.getInferredType();
99+
return inferredType.toString();
100+
}
101+
95102
ClassReference classReference = PsiTreeUtil.getChildOfType(methodReference, ClassReference.class);
96103

97104
return extractFqnFromClassReference(methodReference, classReference);
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.cedricziel.idea.typo3.icons;
2+
3+
import com.cedricziel.idea.typo3.index.IconIndex;
4+
import com.intellij.psi.PsiElement;
5+
import com.intellij.psi.PsiReference;
6+
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
7+
8+
9+
public class IconReferenceProviderTest extends LightCodeInsightFixtureTestCase {
10+
@Override
11+
protected String getTestDataPath() {
12+
return "testData/com/cedricziel/idea/typo3/icons";
13+
}
14+
15+
public void testIconsAreDetectedForv7() {
16+
myFixture.addFileToProject("foo/ext_emconf.php", "");
17+
myFixture.configureByFile("IconRegistry7.php");
18+
19+
IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-edit-cut-release");
20+
IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg");
21+
}
22+
23+
public void testIconsAreDetectedForv8() {
24+
myFixture.addFileToProject("foo/ext_emconf.php", "");
25+
myFixture.configureByFile("IconRegistry8.php");
26+
27+
IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-edit-cut-release");
28+
IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg");
29+
}
30+
31+
public void testIconsAreDetectedForv9() {
32+
myFixture.addFileToProject("foo/ext_emconf.php", "");
33+
myFixture.configureByFile("IconRegistry9.php");
34+
35+
IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("actions-wizard-link");
36+
IconIndex.getAllAvailableIcons(myFixture.getProject()).contains("flags-pg");
37+
}
38+
39+
public void testIconReferenceIsCreatedOnGetIcon() {
40+
myFixture.addFileToProject("foo/ext_emconf.php", "");
41+
myFixture.configureByFile("IconRegistry9.php");
42+
myFixture.configureByFile("icon_provider_test.php");
43+
44+
PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getCaretOffset()).getParent();
45+
46+
PsiReference[] references = elementAtCaret.getReferences();
47+
for (PsiReference ref : references) {
48+
if (ref instanceof IconReference) {
49+
return;
50+
}
51+
}
52+
53+
fail("No icon reference found");
54+
}
55+
}

0 commit comments

Comments
 (0)