Skip to content

Commit 9046134

Browse files
authored
Merge pull request #390 from drpayyne/tests-03
Added test coverage for EventNameReferenceProvider
2 parents a4ad38d + 99fe502 commit 9046134

File tree

6 files changed

+105
-24
lines changed

6 files changed

+105
-24
lines changed

src/com/magento/idea/magento2plugin/reference/provider/EventNameReferenceProvider.java

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright © Magento, Inc. All rights reserved.
33
* See COPYING.txt for license details.
44
*/
5+
56
package com.magento.idea.magento2plugin.reference.provider;
67

78
import com.intellij.openapi.util.text.StringUtil;
@@ -15,52 +16,63 @@
1516
import com.intellij.util.indexing.FileBasedIndex;
1617
import com.jetbrains.php.lang.PhpFileType;
1718
import com.jetbrains.php.lang.psi.PhpFile;
18-
import com.magento.idea.magento2plugin.util.php.PhpPatternsHelper;
1919
import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase;
2020
import com.magento.idea.magento2plugin.stubs.indexes.EventNameIndex;
21-
import org.jetbrains.annotations.NotNull;
22-
21+
import com.magento.idea.magento2plugin.util.php.PhpPatternsHelper;
2322
import java.util.ArrayList;
2423
import java.util.Collection;
2524
import java.util.List;
25+
import org.jetbrains.annotations.NotNull;
2626

2727
public class EventNameReferenceProvider extends PsiReferenceProvider {
2828

2929
@NotNull
3030
@Override
31-
public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) {
32-
String value = StringUtil.unquoteString(element.getText());
33-
Collection<VirtualFile> containingFiles = FileBasedIndex.getInstance()
34-
.getContainingFiles(EventNameIndex.KEY, value,
35-
GlobalSearchScope.getScopeRestrictedByFileTypes(
36-
GlobalSearchScope.allScope(element.getProject()),
37-
PhpFileType.INSTANCE
38-
)
39-
);
31+
public PsiReference[] getReferencesByElement(
32+
@NotNull final PsiElement element,
33+
@NotNull final ProcessingContext context
34+
) {
35+
final String value = StringUtil.unquoteString(element.getText());
36+
final List<PsiReference> psiReferences = new ArrayList<>();
37+
final Collection<VirtualFile> containingFiles = FileBasedIndex.getInstance()
38+
.getContainingFiles(
39+
EventNameIndex.KEY,
40+
value,
41+
GlobalSearchScope.getScopeRestrictedByFileTypes(
42+
GlobalSearchScope.allScope(element.getProject()),
43+
PhpFileType.INSTANCE
44+
)
45+
);
4046

41-
PsiManager psiManager = PsiManager.getInstance(element.getProject());
42-
for (VirtualFile virtualFile: containingFiles) {
43-
PhpFile phpFile = (PhpFile) psiManager.findFile(virtualFile);
47+
final PsiManager psiManager = PsiManager.getInstance(element.getProject());
48+
final List<PsiElement> psiElements = new ArrayList<>();
49+
for (final VirtualFile virtualFile: containingFiles) {
50+
final PhpFile phpFile = (PhpFile) psiManager.findFile(virtualFile);
4451
if (phpFile != null) {
45-
List<PsiElement> psiElements = new ArrayList<>();
4652
recursiveFill(psiElements, phpFile, value);
47-
if (psiElements.size() > 0) {
48-
return new PsiReference[] {new PolyVariantReferenceBase(element, psiElements)};
53+
if (!psiElements.isEmpty()) {
54+
psiReferences.add(new PolyVariantReferenceBase(element, psiElements));//NOPMD
55+
break;
4956
}
5057
}
5158
}
52-
return PsiReference.EMPTY_ARRAY;
59+
60+
return psiReferences.toArray(new PsiReference[0]);
5361
}
5462

55-
private void recursiveFill(List<PsiElement> psiElements, PsiElement psiElement, String typeName) {
63+
private void recursiveFill(
64+
final List<PsiElement> psiElements,
65+
final PsiElement psiElement,
66+
final String typeName
67+
) {
5668
if (PhpPatternsHelper.STRING_METHOD_ARGUMENT.accepts(psiElement)) {
5769
if (StringUtil.unquoteString(psiElement.getText()).equals(typeName)) {
5870
psiElements.add(psiElement);
5971
}
6072
return;
6173
}
6274

63-
for (PsiElement child: psiElement.getChildren()) {
75+
for (final PsiElement child: psiElement.getChildren()) {
6476
recursiveFill(psiElements, child, typeName);
6577
}
6678
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
10+
<event name="test_event_in_block<caret>">
11+
<observer name="test_observer" instance="Magento\Catalog\Observer\TestObserver" />
12+
</event>
13+
</config>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
10+
<event name="invalid_event<caret>">
11+
<observer name="test_observer" instance="Magento\Catalog\Observer\TestObserver" />
12+
</event>
13+
</config>

tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package com.magento.idea.magento2plugin.reference;
77

8+
import com.intellij.openapi.util.text.StringUtil;
89
import com.intellij.psi.PsiElement;
910
import com.intellij.psi.PsiFile;
1011
import com.intellij.psi.PsiReference;
@@ -15,12 +16,16 @@
1516
import com.intellij.psi.xml.XmlTag;
1617
import com.jetbrains.php.lang.psi.elements.Method;
1718
import com.jetbrains.php.lang.psi.elements.Parameter;
19+
import com.jetbrains.php.lang.psi.elements.ParameterList;
1820
import com.jetbrains.php.lang.psi.elements.PhpClass;
1921
import com.magento.idea.magento2plugin.inspections.BaseInspectionsTestCase;
2022
import com.magento.idea.magento2plugin.magento.packages.File;
2123
import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase;
2224
import org.jetbrains.annotations.Nullable;
2325

26+
@SuppressWarnings({
27+
"PMD.TooManyMethods",
28+
})
2429
public abstract class BaseReferenceTestCase extends BaseInspectionsTestCase {
2530
private static final String testDataFolderPath = "testData" + File.separator//NOPMD
2631
+ "reference" + File.separator;
@@ -204,6 +209,23 @@ protected void assertHasReferenceToClassMethod(
204209
);
205210
}
206211

212+
protected void assertHasReferenceToMethodArgument(final String argument) {
213+
final PsiReference[] references = getElementFromCaret().getReferences();
214+
final String actualArgument
215+
= StringUtil.unquoteString(references[references.length - 1].resolve().getText());
216+
final PsiElement parameterList = references[0].resolve().getParent();
217+
218+
if (!(parameterList instanceof ParameterList)) {
219+
fail("Element doesn't have a reference to a method parameter");
220+
}
221+
222+
assertEquals(
223+
"Event dispatch argument",
224+
argument,
225+
actualArgument
226+
);
227+
}
228+
207229
protected void assertEmptyReference() {
208230
final PsiElement element = getElementFromCaret();
209231
assertEmpty(element.getReferences());

tests/com/magento/idea/magento2plugin/reference/xml/ObserverReferenceRegistrarTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,37 @@
22
* Copyright © Magento, Inc. All rights reserved.
33
* See COPYING.txt for license details.
44
*/
5+
56
package com.magento.idea.magento2plugin.reference.xml;
67

78
import com.magento.idea.magento2plugin.magento.files.ModuleEventsXml;
89

910
public class ObserverReferenceRegistrarTest extends ReferenceXmlFixtureTestCase {
1011

11-
public void testEventsXmlMustHaveReference() {
12-
String filePath = this.getFixturePath(ModuleEventsXml.FILE_NAME);
13-
myFixture.configureByFile(filePath);
12+
/**
13+
* Tests for observer instance reference in events.xml.
14+
*/
15+
public void testObserverInstanceMustHaveReference() {
16+
myFixture.configureByFile(this.getFixturePath(ModuleEventsXml.FILE_NAME));
1417

1518
assertHasReferencePhpClass("Magento\\Catalog\\Observer\\TestObserver");
1619
}
20+
21+
/**
22+
* Tests for event name reference in events.xml.
23+
*/
24+
public void testEventNameMustHaveReference() {
25+
myFixture.configureByFile(this.getFixturePath(ModuleEventsXml.FILE_NAME));
26+
27+
assertHasReferenceToMethodArgument("test_event_in_block");
28+
}
29+
30+
/**
31+
* Tests for no event name reference in events.xml.
32+
*/
33+
public void testEventNameMustNotHaveReference() {
34+
myFixture.configureByFile(this.getFixturePath(ModuleEventsXml.FILE_NAME));
35+
36+
assertEmptyReference();
37+
}
1738
}

0 commit comments

Comments
 (0)