Skip to content

Commit 846a5fa

Browse files
committed
Provide the same functionality in simpler way with stubs
1 parent 79d30f7 commit 846a5fa

7 files changed

+119
-188
lines changed

Diff for: extension.neon

+3-8
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ parameters:
44
- fail
55
- markTestIncomplete
66
- markTestSkipped
7+
stubFiles:
8+
- stubs/MockBuilder.php
9+
- stubs/TestCase.php
710

811
services:
912
-
@@ -22,14 +25,6 @@ services:
2225
class: PHPStan\Type\PHPUnit\Assert\AssertStaticMethodTypeSpecifyingExtension
2326
tags:
2427
- phpstan.typeSpecifier.staticMethodTypeSpecifyingExtension
25-
-
26-
class: PHPStan\Type\PHPUnit\CreateMockDynamicReturnTypeExtension
27-
tags:
28-
- phpstan.broker.dynamicMethodReturnTypeExtension
29-
-
30-
class: PHPStan\Type\PHPUnit\GetMockBuilderDynamicReturnTypeExtension
31-
tags:
32-
- phpstan.broker.dynamicMethodReturnTypeExtension
3328
-
3429
class: PHPStan\Type\PHPUnit\MockBuilderDynamicReturnTypeExtension
3530
tags:

Diff for: src/Type/PHPUnit/CreateMockDynamicReturnTypeExtension.php

-57
This file was deleted.

Diff for: src/Type/PHPUnit/GetMockBuilderDynamicReturnTypeExtension.php

-47
This file was deleted.

Diff for: src/Type/PHPUnit/MockBuilderDynamicReturnTypeExtension.php

+10-43
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,34 @@
44

55
use PhpParser\Node\Expr\MethodCall;
66
use PHPStan\Analyser\Scope;
7-
use PHPStan\Broker\Broker;
87
use PHPStan\Reflection\MethodReflection;
9-
use PHPStan\Reflection\ParametersAcceptorSelector;
10-
use PHPStan\Type\ObjectType;
118
use PHPStan\Type\Type;
12-
use PHPStan\Type\TypeCombinator;
13-
use PHPStan\Type\TypeWithClassName;
9+
use PHPUnit\Framework\MockObject\MockBuilder;
1410

15-
class MockBuilderDynamicReturnTypeExtension implements \PHPStan\Type\DynamicMethodReturnTypeExtension, \PHPStan\Reflection\BrokerAwareExtension
11+
class MockBuilderDynamicReturnTypeExtension implements \PHPStan\Type\DynamicMethodReturnTypeExtension
1612
{
1713

18-
/** @var \PHPStan\Broker\Broker */
19-
private $broker;
20-
21-
public function setBroker(Broker $broker): void
22-
{
23-
$this->broker = $broker;
24-
}
25-
2614
public function getClass(): string
2715
{
28-
$testCase = $this->broker->getClass('PHPUnit\Framework\TestCase');
29-
$mockBuilderType = ParametersAcceptorSelector::selectSingle(
30-
$testCase->getNativeMethod('getMockBuilder')->getVariants()
31-
)->getReturnType();
32-
if (!$mockBuilderType instanceof TypeWithClassName) {
33-
throw new \PHPStan\ShouldNotHappenException();
34-
}
35-
36-
return $mockBuilderType->getClassName();
16+
return MockBuilder::class;
3717
}
3818

3919
public function isMethodSupported(MethodReflection $methodReflection): bool
4020
{
41-
return true;
42-
}
43-
44-
public function getTypeFromMethodCall(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): Type
45-
{
46-
$calledOnType = $scope->getType($methodCall->var);
47-
if (!in_array(
21+
return !in_array(
4822
$methodReflection->getName(),
4923
[
5024
'getMock',
5125
'getMockForAbstractClass',
26+
'getMockForTrait',
5227
],
5328
true
54-
)) {
55-
return $calledOnType;
56-
}
57-
58-
$parametersAcceptor = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants());
59-
60-
if (!$calledOnType instanceof MockBuilderType) {
61-
return $parametersAcceptor->getReturnType();
62-
}
63-
64-
return TypeCombinator::intersect(
65-
new ObjectType($calledOnType->getMockedClass()),
66-
$parametersAcceptor->getReturnType()
6729
);
6830
}
6931

32+
public function getTypeFromMethodCall(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): Type
33+
{
34+
return $scope->getType($methodCall->var);
35+
}
36+
7037
}

Diff for: src/Type/PHPUnit/MockBuilderType.php

-33
This file was deleted.

Diff for: stubs/MockBuilder.php

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace PHPUnit\Framework\MockObject;
4+
5+
use PHPUnit\Framework\TestCase;
6+
7+
/**
8+
* @template TMockedClass
9+
*/
10+
class MockBuilder
11+
{
12+
13+
/**
14+
* @param TestCase $testCase
15+
* @param class-string<TMockedClass> $type
16+
*/
17+
public function __construct(TestCase $testCase, $type) {}
18+
19+
/**
20+
* @return MockObject&TMockedClass
21+
*/
22+
public function getMock() {}
23+
24+
/**
25+
* @return MockObject&TMockedClass
26+
*/
27+
public function getMockForAbstractClass() {}
28+
29+
}

Diff for: stubs/TestCase.php

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
namespace PHPUnit\Framework;
4+
5+
use PHPUnit\Framework\MockObject\MockObject;
6+
use PHPUnit\Framework\MockObject\MockBuilder;
7+
8+
class TestCase
9+
{
10+
11+
/**
12+
* @template T
13+
* @param class-string<T> $originalClassName
14+
* @return MockObject&T
15+
*/
16+
public function createMock($originalClassName) {}
17+
18+
/**
19+
* @template T
20+
* @param class-string<T> $className
21+
* @return MockBuilder<T>
22+
*/
23+
public function getMockBuilder(string $className) {}
24+
25+
/**
26+
* @template T
27+
* @param class-string<T> $originalClassName
28+
* @return MockObject&T
29+
*/
30+
public function createConfiguredMock($originalClassName) {}
31+
32+
/**
33+
* @template T
34+
* @param class-string<T> $originalClassName
35+
* @param string[] $methods
36+
* @return MockObject&T
37+
*/
38+
public function createPartialMock($originalClassName, array $methods) {}
39+
40+
/**
41+
* @template T
42+
* @param class-string<T> $originalClassName
43+
* @return MockObject&T
44+
*/
45+
public function createTestProxy($originalClassName) {}
46+
47+
/**
48+
* @template T
49+
* @param class-string<T> $originalClassName
50+
* @param string $mockClassName
51+
* @param bool $callOriginalConstructor
52+
* @param bool $callOriginalClone
53+
* @param bool $callAutoload
54+
* @param string[] $mockedMethods
55+
* @param bool $cloneArguments
56+
* @return MockObject&T
57+
*/
58+
protected function getMockForAbstractClass($originalClassName, array $arguments = [], $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $mockedMethods = [], $cloneArguments = false) {}
59+
60+
/**
61+
* @template T
62+
* @param string $wsdlFile
63+
* @param class-string<T> $originalClassName
64+
* @param string $mockClassName
65+
* @param bool $callOriginalConstructor
66+
* @param array $options
67+
* @return MockObject&T
68+
*/
69+
protected function getMockFromWsdl($wsdlFile, $originalClassName = '', $mockClassName = '', array $methods = [], $callOriginalConstructor = true, array $options = []) {}
70+
71+
/**
72+
* @param class-string<\Throwable> $exception
73+
* @return void
74+
*/
75+
public function expectException(string $exception) {}
76+
77+
}

0 commit comments

Comments
 (0)