Skip to content

Commit 305bfcd

Browse files
author
Vitaliy
authored
Merge pull request #386 from drpayyne/tests-01
Added test coverage for PhpConstructorArgumentReferenceProvider
2 parents bd32aeb + eda3ebd commit 305bfcd

File tree

8 files changed

+161
-19
lines changed

8 files changed

+161
-19
lines changed

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

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,50 @@
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.intellij.openapi.util.TextRange;
89
import com.intellij.psi.PsiElement;
910
import com.intellij.psi.PsiElementResolveResult;
1011
import com.intellij.psi.PsiPolyVariantReferenceBase;
1112
import com.intellij.psi.ResolveResult;
12-
import org.jetbrains.annotations.NotNull;
13-
1413
import java.util.Collection;
14+
import org.jetbrains.annotations.NotNull;
1515

1616
public class PolyVariantReferenceBase extends PsiPolyVariantReferenceBase<PsiElement> {
1717

1818
/**
19-
* Target elements
19+
* Target elements.
2020
*/
21-
private Collection<? extends PsiElement> targets;
21+
private final Collection<? extends PsiElement> targets;
2222

23-
public PolyVariantReferenceBase(PsiElement element, Collection<? extends PsiElement> targets) {
23+
public PolyVariantReferenceBase(
24+
final PsiElement element,
25+
final Collection<? extends PsiElement> targets
26+
) {
2427
super(element);
2528
this.targets = targets;
2629
}
2730

28-
public PolyVariantReferenceBase(PsiElement element, TextRange range, Collection<? extends PsiElement> targets) {
31+
public PolyVariantReferenceBase(
32+
final PsiElement element,
33+
final TextRange range,
34+
final Collection<? extends PsiElement> targets
35+
) {
2936
super(element, range);
3037
this.targets = targets;
3138
}
3239

3340
@NotNull
3441
@Override
35-
public ResolveResult[] multiResolve(boolean incompleteCode) {
42+
public ResolveResult[] multiResolve(final boolean incompleteCode) {
3643
ResolveResult[] resolveResults = new ResolveResult[targets.size()];
3744

38-
int i = 0;
39-
for (PsiElement target : targets) {
40-
resolveResults[i++] = new PsiElementResolveResult(target);
45+
int index = 0;
46+
for (final PsiElement target : targets) {
47+
resolveResults[index++] = new PsiElementResolveResult(target);//NOPMD
4148
}
4249
return resolveResults;
4350
}
44-
45-
@NotNull
46-
@Override
47-
public Object[] getVariants() {
48-
return new Object[0];
49-
}
5051
}
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: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
public function log($level, $message, array $context = array());
23+
}
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: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
import com.intellij.psi.xml.XmlFile;
1515
import com.intellij.psi.xml.XmlTag;
1616
import com.jetbrains.php.lang.psi.elements.Method;
17+
import com.jetbrains.php.lang.psi.elements.Parameter;
1718
import com.jetbrains.php.lang.psi.elements.PhpClass;
1819
import com.magento.idea.magento2plugin.inspections.BaseInspectionsTestCase;
1920
import com.magento.idea.magento2plugin.magento.packages.File;
2021
import com.magento.idea.magento2plugin.reference.xml.PolyVariantReferenceBase;
22+
import org.jetbrains.annotations.Nullable;
2123

2224
public abstract class BaseReferenceTestCase extends BaseInspectionsTestCase {
2325
private static final String testDataFolderPath = "testData" + File.separator//NOPMD
@@ -154,6 +156,31 @@ protected void assertHasReferencePhpClass(final String phpClassFqn) {
154156
);
155157
}
156158

159+
protected void assertHasReferencetoConstructorParameter(
160+
final String argumentClassFqn,
161+
final String argumentName
162+
) {
163+
final PsiElement element = getElementFromCaret();
164+
final @Nullable PsiReference reference = element.getReference();
165+
166+
if (reference == null) {
167+
final String referenceNotFound
168+
= "Failed that element does not contain and reference";
169+
fail(referenceNotFound);
170+
}
171+
172+
final String parameterClassFqn = ((Parameter) reference.resolve())
173+
.getLocalType().toStringResolved();
174+
final String parameterName = ((Parameter) reference.resolve()).getName();
175+
176+
assertEquals("Class name in argument equals class name in parameter",
177+
parameterClassFqn,
178+
argumentClassFqn);
179+
assertEquals("Variable name in argument equals variable name in parameter",
180+
parameterName,
181+
argumentName);
182+
}
183+
157184
protected void assertHasReferenceToClassMethod(
158185
final String className,
159186
final String methodName
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)