From 4f3703b79c8637aa74ce9fba1720c43b224afa2e Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Thu, 12 Nov 2020 13:00:50 +0530 Subject: [PATCH] Covered PhpJobMethodReferenceProvider with tests --- .../PhpJobMethodReferenceProvider.java | 26 +++++++-------- .../crontab.xml | 6 ++-- .../crontab.xml | 17 ++++++++++ .../reference/BaseReferenceTestCase.java | 2 +- .../xml/CrontabReferenceRegistrarTest.java | 32 +++++++++++++++---- .../WebApiMethodReferenceRegistrarTest.java | 2 +- 6 files changed, 62 insertions(+), 23 deletions(-) create mode 100644 testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustNotHaveReference/crontab.xml diff --git a/src/com/magento/idea/magento2plugin/reference/provider/PhpJobMethodReferenceProvider.java b/src/com/magento/idea/magento2plugin/reference/provider/PhpJobMethodReferenceProvider.java index b3e1cce97..7011e2865 100644 --- a/src/com/magento/idea/magento2plugin/reference/provider/PhpJobMethodReferenceProvider.java +++ b/src/com/magento/idea/magento2plugin/reference/provider/PhpJobMethodReferenceProvider.java @@ -28,22 +28,22 @@ public class PhpJobMethodReferenceProvider extends PsiReferenceProvider { @NotNull @Override - public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) { - if (!(element instanceof XmlElement)) { - return PsiReference.EMPTY_ARRAY; - } - - List psiReferences = new ArrayList<>(); - - String methodName = StringUtil.unquoteString(element.getText()); + public PsiReference[] getReferencesByElement( + @NotNull final PsiElement element, + @NotNull final ProcessingContext context + ) { + final List psiReferences = new ArrayList<>(); + final String methodName = StringUtil.unquoteString(element.getText()); + final PhpClass phpClass = DiIndex.getPhpClassOfJobMethod((XmlElement) element); - PhpClass phpClass = DiIndex.getPhpClassOfJobMethod((XmlElement) element); if (phpClass != null) { - Collection methods = phpClass.getMethods(); - methods.removeIf(method -> !method.getName().contains(methodName)); - psiReferences.add(new PolyVariantReferenceBase(element, methods)); + final Collection methods = phpClass.getMethods(); + methods.removeIf(method -> !method.getName().matches(methodName)); + if (!methods.isEmpty()) { + psiReferences.add(new PolyVariantReferenceBase(element, methods)); + } } - return psiReferences.toArray(new PsiReference[psiReferences.size()]); + return psiReferences.toArray(new PsiReference[0]); } } diff --git a/testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustHaveReference/crontab.xml b/testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustHaveReference/crontab.xml index 2d6f0621b..537622d41 100644 --- a/testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustHaveReference/crontab.xml +++ b/testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustHaveReference/crontab.xml @@ -8,8 +8,10 @@ - - 0 * * * * + + * * * * * diff --git a/testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustNotHaveReference/crontab.xml b/testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustNotHaveReference/crontab.xml new file mode 100644 index 000000000..377782c0a --- /dev/null +++ b/testData/reference/xml/CrontabReferenceRegistrar/crontabMethodMustNotHaveReference/crontab.xml @@ -0,0 +1,17 @@ + + + + + + * * * * * + + + diff --git a/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java b/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java index f9de4b77d..9de2dd313 100644 --- a/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java +++ b/tests/com/magento/idea/magento2plugin/reference/BaseReferenceTestCase.java @@ -188,7 +188,7 @@ protected void assertHasReferenceToClassMethod( final PsiElement element = getElementFromCaret(); final PsiReference[] references = element.getReferences(); final String actualClassName = ((PhpClass) references[references.length - 1].resolve() - .getParent()).getFQN(); + .getParent()).getPresentableFQN(); final String actualMethodName = ((Method) references[references.length - 1].resolve()) .getName(); diff --git a/tests/com/magento/idea/magento2plugin/reference/xml/CrontabReferenceRegistrarTest.java b/tests/com/magento/idea/magento2plugin/reference/xml/CrontabReferenceRegistrarTest.java index 2b46f2dc6..bd763fe19 100644 --- a/tests/com/magento/idea/magento2plugin/reference/xml/CrontabReferenceRegistrarTest.java +++ b/tests/com/magento/idea/magento2plugin/reference/xml/CrontabReferenceRegistrarTest.java @@ -8,16 +8,36 @@ import com.magento.idea.magento2plugin.magento.files.CrontabXmlTemplate; public class CrontabReferenceRegistrarTest extends ReferenceXmlFixtureTestCase { - private static final String EXPECTED_REFERENCE = "Magento\\Catalog\\Cron\\RefreshSpecialPrices"; + private static final String EXPECTED_CLASS = "Magento\\Catalog\\Cron\\RefreshSpecialPrices"; + private static final String EXPECTED_METHOD = "execute"; /** - * Test instance attribute of the crontab.xml file - * must have reference. + * Test instance attribute of the crontab.xml file must have reference. */ public void testCrontabInstanceMustHaveReference() { - final String filePath = this.getFixturePath(CrontabXmlTemplate.FILE_NAME); - myFixture.configureByFile(filePath); + myFixture.configureByFile(this.getFixturePath(CrontabXmlTemplate.FILE_NAME)); - assertHasReferencePhpClass(EXPECTED_REFERENCE); + assertHasReferencePhpClass(EXPECTED_CLASS); + } + + /** + * Tests for reference to valid PHP method in crontab.xml. + */ + public void testCrontabMethodMustHaveReference() { + myFixture.configureByFile(this.getFixturePath(CrontabXmlTemplate.FILE_NAME)); + + assertHasReferenceToClassMethod( + EXPECTED_CLASS, + EXPECTED_METHOD + ); + } + + /** + * Tests for no reference to invalid PHP method in crontab.xml. + */ + public void testCrontabMethodMustNotHaveReference() { + myFixture.configureByFile(this.getFixturePath(CrontabXmlTemplate.FILE_NAME)); + + assertEmptyReference(); } } diff --git a/tests/com/magento/idea/magento2plugin/reference/xml/WebApiMethodReferenceRegistrarTest.java b/tests/com/magento/idea/magento2plugin/reference/xml/WebApiMethodReferenceRegistrarTest.java index f2de76718..431a0534b 100644 --- a/tests/com/magento/idea/magento2plugin/reference/xml/WebApiMethodReferenceRegistrarTest.java +++ b/tests/com/magento/idea/magento2plugin/reference/xml/WebApiMethodReferenceRegistrarTest.java @@ -14,7 +14,7 @@ public void testWebApiMethodMustHaveReference() { myFixture.configureByFile(this.getFixturePath("webapi.xml")); assertHasReferenceToClassMethod( - "\\Magento\\Catalog\\Api\\ProductRepositoryInterface", + "Magento\\Catalog\\Api\\ProductRepositoryInterface", "save" ); }