Skip to content

Commit 086c1d3

Browse files
committed
Added tests for PhpConstructorArgumentReferenceProvider
1 parent 71bbf42 commit 086c1d3

File tree

9 files changed

+142
-9
lines changed

9 files changed

+142
-9
lines changed

src/com/magento/idea/magento2plugin/reference/xml/PolyVariantReferenceBase.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,4 @@ public ResolveResult[] multiResolve(boolean incompleteCode) {
4141
}
4242
return resolveResults;
4343
}
44-
45-
@NotNull
46-
@Override
47-
public Object[] getVariants() {
48-
return new Object[0];
49-
}
5044
}

src/com/magento/idea/magento2plugin/reference/xml/XmlReferenceContributor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar)
6767
new VirtualTypeReferenceProvider()
6868
);
6969

70+
/* TODO: Cover with tests */
7071
// arguments
7172
registrar.registerReferenceProvider(
7273
XmlPatterns.xmlAttributeValue().withParent(
@@ -79,6 +80,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar)
7980
new PhpConstructorArgumentReferenceProvider()
8081
);
8182

83+
/* TODO: Cover with tests */
8284
// <service method="methodName"/>
8385
registrar.registerReferenceProvider(
8486
XmlPatterns.xmlAttributeValue().withParent(
@@ -89,6 +91,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar)
8991
new PhpServiceMethodReferenceProvider()
9092
);
9193

94+
/* TODO: Cover with tests */
9295
// <job method="methodName"/>
9396
registrar.registerReferenceProvider(
9497
XmlPatterns.xmlAttributeValue().withParent(
@@ -143,6 +146,7 @@ public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar)
143146
new UIComponentReferenceProvider()
144147
);
145148

149+
/* TODO: Cover with tests */
146150
// <event name="reference" />
147151
registrar.registerReferenceProvider(
148152
XmlPatterns.xmlAttributeValue().withParent(
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Foo\Bar\Model;
7+
8+
class Logger implements Magento\Framework\Logger\LoggerInterface
9+
{
10+
public function log($level, $message, array $context = array())
11+
{
12+
}
13+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Logger;
7+
8+
/**
9+
* Describes a logger instance.
10+
*/
11+
interface LoggerInterface
12+
{
13+
/**
14+
* Logs with an arbitrary level.
15+
*
16+
* @param mixed $level
17+
* @param string $message
18+
* @param mixed[] $context
19+
*
20+
* @return void
21+
*
22+
* @throws \Psr\Log\InvalidArgumentException
23+
*/
24+
public function log($level, $message, array $context = array());
25+
}
Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
11
<?php
2-
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
36
namespace Magento\Backend\Model\Source;
47

58
use Magento\Framework\Option\ArrayInterface;
9+
use Magento\Framework\Logger\LoggerInterface;
610

7-
class YesNo implements ArrayInterface {
11+
class YesNo implements ArrayInterface
12+
{
13+
/**
14+
* @var LoggerInterface
15+
*/
16+
private $logger;
817

9-
}
18+
/**
19+
* YesNo constructor.
20+
*
21+
* @param LoggerInterface $logger
22+
*/
23+
public function __construct(
24+
LoggerInterface $logger
25+
) {
26+
$this->logger = $logger;
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config>
9+
<type name="Magento\Backend\Model\Source\YesNo">
10+
<arguments>
11+
<argument name="<caret>logger" xsi:type="object">Foo\Bar\Model\Logger</argument>
12+
</arguments>
13+
</type>
14+
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config>
9+
<type name="Magento\Backend\Model\Source\YesNo">
10+
<arguments>
11+
<argument name="<caret>loggers" xsi:type="object">Foo\Bar\Model\Logger</argument>
12+
</arguments>
13+
</type>
14+
</config>

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313
import com.intellij.psi.xml.XmlAttributeValue;
1414
import com.intellij.psi.xml.XmlFile;
1515
import com.intellij.psi.xml.XmlTag;
16+
import com.jetbrains.php.lang.psi.elements.Parameter;
1617
import com.jetbrains.php.lang.psi.elements.PhpClass;
1718
import com.magento.idea.magento2plugin.inspections.BaseInspectionsTestCase;
1819
import com.magento.idea.magento2plugin.magento.packages.File;
1920
import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase;
21+
import org.jetbrains.annotations.Nullable;
2022

2123
public abstract class BaseReferenceTestCase extends BaseInspectionsTestCase {
2224
private static final String testDataFolderPath = "testData" + File.separator//NOPMD
@@ -153,6 +155,23 @@ protected void assertHasReferencePhpClass(final String phpClassFqn) {
153155
);
154156
}
155157

158+
protected void assertHasReferencetoConstructorParameter(final String argumentClassFqn, final String argumentName) {
159+
final PsiElement element = getElementFromCaret();
160+
final @Nullable PsiReference reference = element.getReference();
161+
162+
if (reference == null) {
163+
final String referenceNotFound
164+
= "Failed that element does not contain and reference";
165+
fail(referenceNotFound);
166+
}
167+
168+
String parameterClassFqn = ((Parameter) reference.resolve()).getLocalType().toStringResolved();
169+
String parameterName = ((Parameter) reference.resolve()).getName();
170+
171+
assertEquals(parameterClassFqn, argumentClassFqn);
172+
assertEquals(parameterName, argumentName);
173+
}
174+
156175
protected void assertEmptyReference() {
157176
final PsiElement element = getElementFromCaret();
158177
assertEmpty(element.getReferences());
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.reference.xml;
7+
8+
import com.magento.idea.magento2plugin.magento.files.ModuleDiXml;
9+
10+
public class ConstructorArgumentReferenceRegistrarTest extends ReferenceXmlFixtureTestCase {
11+
/**
12+
* Tests for valid reference in di.xml constructor argument
13+
*/
14+
public void testDiXmlConstructorArgumentMustHaveReference() {
15+
myFixture.configureByFile(this.getFixturePath(ModuleDiXml.FILE_NAME));
16+
17+
assertHasReferencetoConstructorParameter(
18+
"\\Magento\\Framework\\Logger\\LoggerInterface",
19+
"logger"
20+
);
21+
}
22+
23+
/**
24+
* Tests for no reference in di.xml constructor argument
25+
*/
26+
public void testDiXmlConstructorArgumentMustNotHaveReference() {
27+
myFixture.configureByFile(this.getFixturePath(ModuleDiXml.FILE_NAME));
28+
29+
assertEmptyReference();
30+
}
31+
}

0 commit comments

Comments
 (0)