Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 97b3278

Browse files
feat: Support for PHPUnit 10 (#56)
1 parent b9ba2db commit 97b3278

File tree

9 files changed

+355
-27
lines changed

9 files changed

+355
-27
lines changed

‎.github/workflows/tests.yml

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ jobs:
1313
strategy:
1414
matrix:
1515
php-version:
16+
- '8.2'
1617
- '8.1'
1718
- '8.0'
1819
- '7.4'
@@ -21,6 +22,8 @@ jobs:
2122
- '7.1'
2223
- '7.0'
2324
phpunit-version:
25+
- '10.0.0'
26+
- '9.6.0'
2427
- '9.5.0'
2528
- '9.4.0'
2629
- '9.3.0'
@@ -46,6 +49,52 @@ jobs:
4649
- '6.0.0'
4750

4851
exclude:
52+
# PHP 8.2 Exclusions
53+
- php-version: '8.2'
54+
phpunit-version: '9.4.0'
55+
- php-version: '8.2'
56+
phpunit-version: '9.3.0'
57+
- php-version: '8.2'
58+
phpunit-version: '9.2.0'
59+
- php-version: '8.2'
60+
phpunit-version: '9.1.0'
61+
- php-version: '8.2'
62+
phpunit-version: '9.0.0'
63+
- php-version: '8.2'
64+
phpunit-version: '8.4.0'
65+
- php-version: '8.2'
66+
phpunit-version: '8.3.0'
67+
- php-version: '8.2'
68+
phpunit-version: '8.2.0'
69+
- php-version: '8.2'
70+
phpunit-version: '8.1.0'
71+
- php-version: '8.2'
72+
phpunit-version: '8.0.0'
73+
- php-version: '8.2'
74+
phpunit-version: '7.5.0'
75+
- php-version: '8.2'
76+
phpunit-version: '7.4.0'
77+
- php-version: '8.2'
78+
phpunit-version: '7.3.0'
79+
- php-version: '8.2'
80+
phpunit-version: '7.2.0'
81+
- php-version: '8.2'
82+
phpunit-version: '7.1.0'
83+
- php-version: '8.2'
84+
phpunit-version: '7.0.0'
85+
- php-version: '8.2'
86+
phpunit-version: '6.5.0'
87+
- php-version: '8.2'
88+
phpunit-version: '6.4.0'
89+
- php-version: '8.2'
90+
phpunit-version: '6.3.0'
91+
- php-version: '8.2'
92+
phpunit-version: '6.2.0'
93+
- php-version: '8.2'
94+
phpunit-version: '6.1.0'
95+
- php-version: '8.2'
96+
phpunit-version: '6.0.0'
97+
4998
# PHP 8.1 Exclusions
5099
- php-version: '8.1'
51100
phpunit-version: '9.4.0'
@@ -93,6 +142,8 @@ jobs:
93142
phpunit-version: '6.0.0'
94143

95144
# PHP 8.0 Exclusions
145+
- php-version: '8.0'
146+
phpunit-version: '10.0.0'
96147
- php-version: '8.0'
97148
phpunit-version: '9.2.0'
98149
- php-version: '8.0'
@@ -135,6 +186,8 @@ jobs:
135186
phpunit-version: '6.0.0'
136187

137188
# PHP 7.4 Exclusions
189+
- php-version: '7.4'
190+
phpunit-version: '10.0.0'
138191
- php-version: '7.4'
139192
phpunit-version: '8.1.0'
140193
- php-version: '7.4'
@@ -161,8 +214,16 @@ jobs:
161214
phpunit-version: '6.1.0'
162215
- php-version: '7.4'
163216
phpunit-version: '6.0.0'
217+
218+
# PHP 7.3 Exclusions
219+
- php-version: '7.3'
220+
phpunit-version: '10.0.0'
164221

165222
# PHP 7.2 Exclusions
223+
- php-version: '7.2'
224+
phpunit-version: '10.0.0'
225+
- php-version: '7.2'
226+
phpunit-version: '9.6.0'
166227
- php-version: '7.2'
167228
phpunit-version: '9.5.0'
168229
- php-version: '7.2'
@@ -177,6 +238,10 @@ jobs:
177238
phpunit-version: '9.0.0'
178239

179240
# PHP 7.1 Exclusions
241+
- php-version: '7.1'
242+
phpunit-version: '10.0.0'
243+
- php-version: '7.1'
244+
phpunit-version: '9.6.0'
180245
- php-version: '7.1'
181246
phpunit-version: '9.5.0'
182247
- php-version: '7.1'
@@ -203,6 +268,10 @@ jobs:
203268
phpunit-version: '8.0.0'
204269

205270
# PHP 7.0 Exclusions
271+
- php-version: '7.0'
272+
phpunit-version: '10.0.0'
273+
- php-version: '7.0'
274+
phpunit-version: '9.6.0'
206275
- php-version: '7.0'
207276
phpunit-version: '9.5.0'
208277
- php-version: '7.0'
@@ -244,8 +313,6 @@ jobs:
244313
steps:
245314
- name: Checkout
246315
uses: actions/checkout@v3
247-
with:
248-
ref: ${{ github.head_ref }}
249316

250317
- name: Install PHP
251318
uses: shivammathur/setup-php@v2

‎autoload.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,16 @@ class_alias(
6767
);
6868
}
6969

70-
if (! class_exists(\PHPUnit\Framework\BaseTestListener::class)) {
70+
$hasVersion = class_exists(\PHPUnit\Runner\Version::class);
71+
72+
if ($hasVersion
73+
&& version_compare(\PHPUnit\Runner\Version::id(), '10.0.0') >= 0
74+
) {
75+
class_alias(
76+
phpmock\phpunit\MockDisablerPHPUnit10::class,
77+
phpmock\phpunit\MockDisabler::class
78+
);
79+
} elseif (! class_exists(\PHPUnit\Framework\BaseTestListener::class)) {
7180
include __DIR__ . '/compatibility/BaseTestListener.php';
7281
class_alias(
7382
phpmock\phpunit\MockDisablerPHPUnit7::class,
@@ -80,12 +89,17 @@ class_alias(
8089
);
8190
}
8291

83-
if (class_exists(\PHPUnit\Runner\Version::class)
92+
if ($hasVersion
93+
&& version_compare(\PHPUnit\Runner\Version::id(), '10.0.0') >= 0
94+
) {
95+
class_alias(\phpmock\phpunit\DefaultArgumentRemoverReturnTypes100::class, \phpmock\phpunit\DefaultArgumentRemover::class);
96+
class_alias(\phpmock\phpunit\MockObjectProxyReturnTypes100::class, \phpmock\phpunit\MockObjectProxy::class);
97+
} elseif ($hasVersion
8498
&& version_compare(\PHPUnit\Runner\Version::id(), '8.4.0') >= 0
8599
) {
86100
class_alias(\phpmock\phpunit\DefaultArgumentRemoverReturnTypes84::class, \phpmock\phpunit\DefaultArgumentRemover::class);
87101
class_alias(\phpmock\phpunit\MockObjectProxyReturnTypes84::class, \phpmock\phpunit\MockObjectProxy::class);
88-
} elseif (class_exists(\PHPUnit\Runner\Version::class)
102+
} elseif ($hasVersion
89103
&& version_compare(\PHPUnit\Runner\Version::id(), '8.1.0') >= 0
90104
) {
91105
class_alias(\phpmock\phpunit\DefaultArgumentRemoverReturnTypes::class, \phpmock\phpunit\DefaultArgumentRemover::class);
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
namespace phpmock\phpunit;
4+
5+
use phpmock\generator\MockFunctionGenerator;
6+
use PHPUnit\Framework\MockObject\Invocation;
7+
use PHPUnit\Framework\MockObject\Rule\InvocationOrder;
8+
9+
/**
10+
* Removes default arguments from the invocation.
11+
*
12+
* @author Markus Malkusch <markus@malkusch.de>
13+
* @link bitcoin:1335STSwu9hST4vcMRppEPgENMHD2r1REK Donations
14+
* @license http://www.wtfpl.net/txt/copying/ WTFPL
15+
* @internal
16+
*/
17+
class DefaultArgumentRemoverReturnTypes100 extends InvocationOrder
18+
{
19+
/**
20+
* @SuppressWarnings(PHPMD)
21+
*/
22+
public function invokedDo(Invocation $invocation): void
23+
{
24+
}
25+
26+
/**
27+
* @SuppressWarnings(PHPMD)
28+
*/
29+
public function matches(Invocation $invocation) : bool
30+
{
31+
$iClass = class_exists(Invocation::class);
32+
33+
if ($iClass
34+
|| $invocation instanceof Invocation\StaticInvocation
35+
) {
36+
$this->removeDefaultArguments(
37+
$invocation,
38+
$iClass ? Invocation::class : Invocation\StaticInvocation::class
39+
);
40+
} else {
41+
MockFunctionGenerator::removeDefaultArguments($invocation->parameters);
42+
}
43+
44+
return false;
45+
}
46+
47+
public function verify() : void
48+
{
49+
}
50+
51+
/**
52+
* This method is not defined in the interface, but used in
53+
* PHPUnit_Framework_MockObject_InvocationMocker::hasMatchers().
54+
*
55+
* @return boolean
56+
* @see \PHPUnit_Framework_MockObject_InvocationMocker::hasMatchers()
57+
*/
58+
public function hasMatchers()
59+
{
60+
return false;
61+
}
62+
63+
public function toString() : string
64+
{
65+
return __CLASS__;
66+
}
67+
68+
/**
69+
* Remove default arguments from StaticInvocation or its children (hack)
70+
*
71+
* @SuppressWarnings(PHPMD)
72+
*/
73+
private function removeDefaultArguments(Invocation $invocation, string $class)
74+
{
75+
$remover = function () {
76+
MockFunctionGenerator::removeDefaultArguments($this->parameters);
77+
};
78+
79+
$remover->bindTo($invocation, $class)();
80+
}
81+
}

‎classes/MockDisablerPHPUnit10.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace phpmock\phpunit;
4+
5+
use phpmock\Deactivatable;
6+
use PHPUnit\Event\Test\Finished;
7+
use PHPUnit\Event\Test\FinishedSubscriber;
8+
9+
/**
10+
* Test listener for PHPUnit integration.
11+
*
12+
* This class disables mock functions after a test was run.
13+
*
14+
* @author Markus Malkusch <markus@malkusch.de>
15+
* @link bitcoin:1335STSwu9hST4vcMRppEPgENMHD2r1REK Donations
16+
* @license http://www.wtfpl.net/txt/copying/ WTFPL
17+
* @internal
18+
*/
19+
class MockDisablerPHPUnit10 implements FinishedSubscriber
20+
{
21+
/**
22+
* @var Deactivatable The function mocks.
23+
*/
24+
private $deactivatable;
25+
26+
/**
27+
* Sets the function mocks.
28+
*
29+
* @param Deactivatable $deactivatable The function mocks.
30+
*/
31+
public function __construct(Deactivatable $deactivatable)
32+
{
33+
$this->deactivatable = $deactivatable;
34+
}
35+
36+
/**
37+
* @SuppressWarnings(PHPMD)
38+
*/
39+
public function notify(Finished $event) : void
40+
{
41+
$this->deactivatable->disable();
42+
}
43+
44+
public function endTest(): void
45+
{
46+
$this->deactivatable->disable();
47+
}
48+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
3+
namespace phpmock\phpunit;
4+
5+
use PHPUnit\Framework\MockObject\Builder\InvocationMocker as BuilderInvocationMocker;
6+
use PHPUnit\Framework\MockObject\InvocationHandler;
7+
use PHPUnit\Framework\MockObject\Rule\InvocationOrder;
8+
use PHPUnit\Framework\MockObject\MockObject;
9+
use phpmock\integration\MockDelegateFunctionBuilder;
10+
11+
/**
12+
* Proxy for PHPUnit's PHPUnit_Framework_MockObject_MockObject.
13+
*
14+
* @author Markus Malkusch <markus@malkusch.de>
15+
* @link bitcoin:1335STSwu9hST4vcMRppEPgENMHD2r1REK Donations
16+
* @license http://www.wtfpl.net/txt/copying/ WTFPL
17+
* @internal
18+
*/
19+
class MockObjectProxyReturnTypes100 implements MockObject
20+
{
21+
/**
22+
* @var MockObject $mockObject The mock object.
23+
*/
24+
private $mockObject;
25+
26+
/**
27+
* Inject the subject.
28+
*
29+
* @param MockObject $mockObject The subject.
30+
*/
31+
public function __construct(MockObject $mockObject)
32+
{
33+
$this->mockObject = $mockObject;
34+
}
35+
36+
/**
37+
* @SuppressWarnings(PHPMD)
38+
*/
39+
// @codingStandardsIgnoreStart
40+
public function __phpunit_getInvocationHandler(): InvocationHandler
41+
{
42+
return $this->mockObject->__phpunit_getInvocationHandler();
43+
}
44+
45+
/**
46+
* @SuppressWarnings(PHPMD)
47+
*/
48+
// @codingStandardsIgnoreStart
49+
public function __phpunit_setOriginalObject(object $originalObject) : void
50+
{
51+
// @codingStandardsIgnoreEnd
52+
$this->mockObject->__phpunit_setOriginalObject($originalObject);
53+
}
54+
55+
/**
56+
* @SuppressWarnings(PHPMD)
57+
*/
58+
// @codingStandardsIgnoreStart
59+
public function __phpunit_verify(bool $unsetInvocationMocker = true) : void
60+
{
61+
// @codingStandardsIgnoreEnd
62+
$this->mockObject->__phpunit_verify($unsetInvocationMocker);
63+
}
64+
65+
public function expects(InvocationOrder $matcher) : BuilderInvocationMocker
66+
{
67+
return $this->mockObject->expects($matcher)->method(MockDelegateFunctionBuilder::METHOD);
68+
}
69+
70+
/**
71+
* This method is not part of the contract but was found in
72+
* PHPUnit's mocked_class.tpl.dist.
73+
*
74+
* @SuppressWarnings(PHPMD)
75+
*/
76+
// @codingStandardsIgnoreStart
77+
public function __phpunit_hasMatchers() : bool
78+
{
79+
// @codingStandardsIgnoreEnd
80+
return $this->mockObject->__phpunit_hasMatchers();
81+
}
82+
83+
/**
84+
* @SuppressWarnings(PHPMD)
85+
*/
86+
// @codingStandardsIgnoreStart
87+
public function __phpunit_setReturnValueGeneration(bool $returnValueGeneration) : void
88+
{
89+
// @codingStandardsIgnoreEnd
90+
$this->mockObject->__phpunit_setReturnValueGeneration($returnValueGeneration);
91+
}
92+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /