Skip to content

Commit 45bf34d

Browse files
Merge branch '11.5' into 12.3
2 parents e9ae90c + 5470bdb commit 45bf34d

File tree

4 files changed

+84
-17
lines changed

4 files changed

+84
-17
lines changed

src/Metadata/Api/DataProvider.php

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,18 @@
1313
use function assert;
1414
use function count;
1515
use function get_debug_type;
16-
use function is_a;
1716
use function is_array;
1817
use function is_int;
1918
use function is_string;
2019
use function sprintf;
21-
use function str_starts_with;
2220
use PHPUnit\Event;
2321
use PHPUnit\Event\Code\TestMethod;
2422
use PHPUnit\Framework\InvalidDataProviderException;
25-
use PHPUnit\Framework\TestCase;
2623
use PHPUnit\Metadata\DataProvider as DataProviderMetadata;
2724
use PHPUnit\Metadata\MetadataCollection;
2825
use PHPUnit\Metadata\Parser\Registry as MetadataRegistry;
2926
use PHPUnit\Metadata\TestWith;
27+
use PHPUnit\Util\Test;
3028
use ReflectionMethod;
3129
use Throwable;
3230

@@ -153,19 +151,6 @@ private function dataProvidedByMethods(string $className, string $methodName, Me
153151
foreach ($dataProvider as $_dataProvider) {
154152
assert($_dataProvider instanceof DataProviderMetadata);
155153

156-
if (is_a($_dataProvider->className(), TestCase::class, true) &&
157-
str_starts_with($_dataProvider->methodName(), 'test')) {
158-
Event\Facade::emitter()->testRunnerTriggeredPhpunitWarning(
159-
sprintf(
160-
'The name of the data provider method %s::%s() used by test method %s::%s() begins with "test", therefore PHPUnit also treats it as a test method',
161-
$_dataProvider->className(),
162-
$_dataProvider->methodName(),
163-
$className,
164-
$methodName,
165-
),
166-
);
167-
}
168-
169154
$providerLabel = $_dataProvider->className() . '::' . $_dataProvider->methodName();
170155
$dataProviderMethod = new Event\Code\ClassMethod($_dataProvider->className(), $_dataProvider->methodName());
171156

@@ -179,6 +164,18 @@ private function dataProvidedByMethods(string $className, string $methodName, Me
179164
try {
180165
$method = new ReflectionMethod($_dataProvider->className(), $_dataProvider->methodName());
181166

167+
if (Test::isTestMethod($method)) {
168+
Event\Facade::emitter()->testRunnerTriggeredPhpunitWarning(
169+
sprintf(
170+
'Method %s::%s() used by test method %s::%s() is also a test method',
171+
$_dataProvider->className(),
172+
$_dataProvider->methodName(),
173+
$className,
174+
$methodName,
175+
),
176+
);
177+
}
178+
182179
if (!$method->isPublic()) {
183180
throw new InvalidDataProviderException(
184181
sprintf(
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of PHPUnit.
4+
*
5+
* (c) Sebastian Bergmann <[email protected]>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
namespace PHPUnit\TestFixture;
11+
12+
use PHPUnit\Framework\Attributes\DataProvider;
13+
use PHPUnit\Framework\Attributes\Test;
14+
use PHPUnit\Framework\TestCase;
15+
16+
final class DataProviderMethodHasTestAttributeTest extends TestCase
17+
{
18+
#[Test]
19+
public static function provider(): array
20+
{
21+
return [[true]];
22+
}
23+
24+
#[DataProvider('provider')]
25+
public function testOne(bool $b): void
26+
{
27+
$this->assertTrue($b);
28+
}
29+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
--TEST--
2+
phpunit ../../_files/DataProviderMethodHasTestAttributeTest.php
3+
--FILE--
4+
<?php declare(strict_types=1);
5+
$_SERVER['argv'][] = '--do-not-cache-result';
6+
$_SERVER['argv'][] = '--no-configuration';
7+
$_SERVER['argv'][] = '--debug';
8+
$_SERVER['argv'][] = __DIR__ . '/../../_files/DataProviderMethodHasTestAttributeTest.php';
9+
10+
require_once __DIR__ . '/../../bootstrap.php';
11+
12+
(new PHPUnit\TextUI\Application)->run($_SERVER['argv']);
13+
--EXPECTF--
14+
PHPUnit Started (PHPUnit %s using %s)
15+
Test Runner Configured
16+
Event Facade Sealed
17+
Data Provider Method Called (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider for test method PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne)
18+
Test Runner Triggered Warning (Method PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider() used by test method PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne() is also a test method)
19+
Data Provider Method Finished for PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne:
20+
- PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider
21+
Test Suite Loaded (2 tests)
22+
Test Runner Started
23+
Test Suite Sorted
24+
Test Runner Execution Started (2 tests)
25+
Test Suite Started (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest, 2 tests)
26+
Test Preparation Started (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider)
27+
Test Prepared (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider)
28+
Test Passed (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider)
29+
Test Considered Risky (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider)
30+
This test did not perform any assertions
31+
Test Finished (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::provider)
32+
Test Suite Started (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne, 1 test)
33+
Test Preparation Started (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne#0)
34+
Test Prepared (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne#0)
35+
Test Passed (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne#0)
36+
Test Finished (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne#0)
37+
Test Suite Finished (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest::testOne, 1 test)
38+
Test Suite Finished (PHPUnit\TestFixture\DataProviderMethodHasTestAttributeTest, 2 tests)
39+
Test Runner Execution Finished
40+
Test Runner Finished
41+
PHPUnit Finished (Shell Exit Code: 1)

tests/end-to-end/data-provider/warning-when-data-provider-method-name-begins-with-test.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ require_once __DIR__ . '/../../bootstrap.php';
1414
PHPUnit Started (PHPUnit %s using %s)
1515
Test Runner Configured
1616
Event Facade Sealed
17-
Test Runner Triggered Warning (The name of the data provider method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider() used by test method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne() begins with "test", therefore PHPUnit also treats it as a test method)
1817
Data Provider Method Called (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider for test method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne)
18+
Test Runner Triggered Warning (Method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider() used by test method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne() is also a test method)
1919
Data Provider Method Finished for PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne:
2020
- PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider
2121
Test Suite Loaded (2 tests)

0 commit comments

Comments
 (0)