Skip to content

Commit fe2e12c

Browse files
committed
allow all PhpUnit mock instance in chaining for finding createMock #39
1 parent 02d609f commit fe2e12c

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

src/main/java/de/espend/idea/php/phpunit/utils/PhpElementsUtil.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public static boolean isInstanceOf(@NotNull PhpClass subjectClass, @NotNull Stri
8484
/**
8585
* Resolves MethodReference and compare containing class against implementations instances
8686
*/
87-
public static boolean isMethodReferenceInstanceOf(@NotNull MethodReference methodReference, @NotNull String expectedClassName) {
87+
public static boolean isMethodReferenceInstanceOf(@NotNull MethodReference methodReference, @NotNull String ...expectedClassNameAsOr) {
8888
for (ResolveResult resolveResult : methodReference.multiResolve(false)) {
8989
PsiElement resolve = resolveResult.getElement();
9090

@@ -97,11 +97,11 @@ public static boolean isMethodReferenceInstanceOf(@NotNull MethodReference metho
9797
continue;
9898
}
9999

100-
if(!PhpElementsUtil.isInstanceOf(containingClass, expectedClassName)) {
101-
continue;
100+
for (String expectedClassName : expectedClassNameAsOr) {
101+
if (PhpElementsUtil.isInstanceOf(containingClass, expectedClassName)) {
102+
return true;
103+
}
102104
}
103-
104-
return true;
105105
}
106106

107107
return false;

src/main/java/de/espend/idea/php/phpunit/utils/processor/CreateMockMethodReferenceProcessor.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
import org.jetbrains.annotations.Nullable;
99

1010
/**
11+
* Try to find a "createMock" method inside a call chain
12+
*
13+
* - $this->createMock(...)->expects()->method('foobar')
14+
* - $this->foo->expects()->method('foobar') // via eg "setup" method
15+
*
1116
* @author Daniel Espendiller <daniel@espendiller.net>
1217
*/
1318
public class CreateMockMethodReferenceProcessor implements ChainVisitorUtil.ChainProcessorInterface {
@@ -29,11 +34,14 @@ public boolean process(@NotNull MethodReference methodReference) {
2934
return false;
3035
}
3136

32-
return
33-
PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "PHPUnit_Framework_MockObject_MockObject") ||
34-
PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "PHPUnit_Framework_MockObject_Builder_InvocationMocker") ||
35-
PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "PHPUnit\\Framework\\MockObject\\MockObject", "method") ||
36-
PhpElementsUtil.isMethodReferenceInstanceOf(methodReference, "PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker", "method");
37+
// allowed chain of classes types
38+
return PhpElementsUtil.isMethodReferenceInstanceOf(
39+
methodReference,
40+
"PHPUnit_Framework_MockObject_MockObject",
41+
"PHPUnit_Framework_MockObject_Builder_InvocationMocker",
42+
"PHPUnit\\Framework\\MockObject\\MockObject",
43+
"PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker"
44+
);
3745
}
3846

3947
@Nullable

0 commit comments

Comments
 (0)