Skip to content

Commit 5470bdb

Browse files
Merge branch '10.5' into 11.5
2 parents b595dcc + 15d0472 commit 5470bdb

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
@@ -15,7 +15,6 @@
1515
use function assert;
1616
use function explode;
1717
use function get_debug_type;
18-
use function is_a;
1918
use function is_array;
2019
use function is_int;
2120
use function is_string;
@@ -27,17 +26,16 @@
2726
use function rtrim;
2827
use function sprintf;
2928
use function str_replace;
30-
use function str_starts_with;
3129
use function strlen;
3230
use function substr;
3331
use function trim;
3432
use PHPUnit\Event;
3533
use PHPUnit\Framework\InvalidDataProviderException;
36-
use PHPUnit\Framework\TestCase;
3734
use PHPUnit\Metadata\DataProvider as DataProviderMetadata;
3835
use PHPUnit\Metadata\MetadataCollection;
3936
use PHPUnit\Metadata\Parser\Registry as MetadataRegistry;
4037
use PHPUnit\Metadata\TestWith;
38+
use PHPUnit\Util\Test;
4139
use ReflectionClass;
4240
use ReflectionMethod;
4341
use Throwable;
@@ -111,19 +109,6 @@ private function dataProvidedByMethods(string $className, string $methodName, Me
111109
foreach ($dataProvider as $_dataProvider) {
112110
assert($_dataProvider instanceof DataProviderMetadata);
113111

114-
if (is_a($_dataProvider->className(), TestCase::class, true) &&
115-
str_starts_with($_dataProvider->methodName(), 'test')) {
116-
Event\Facade::emitter()->testRunnerTriggeredPhpunitWarning(
117-
sprintf(
118-
'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',
119-
$_dataProvider->className(),
120-
$_dataProvider->methodName(),
121-
$className,
122-
$methodName,
123-
),
124-
);
125-
}
126-
127112
$dataProviderMethod = new Event\Code\ClassMethod($_dataProvider->className(), $_dataProvider->methodName());
128113

129114
Event\Facade::emitter()->dataProviderMethodCalled(
@@ -137,6 +122,18 @@ private function dataProvidedByMethods(string $className, string $methodName, Me
137122
$class = new ReflectionClass($_dataProvider->className());
138123
$method = $class->getMethod($_dataProvider->methodName());
139124

125+
if (Test::isTestMethod($method)) {
126+
Event\Facade::emitter()->testRunnerTriggeredPhpunitWarning(
127+
sprintf(
128+
'Method %s::%s() used by test method %s::%s() is also a test method',
129+
$_dataProvider->className(),
130+
$_dataProvider->methodName(),
131+
$className,
132+
$methodName,
133+
),
134+
);
135+
}
136+
140137
if (!$method->isPublic()) {
141138
throw new InvalidDataProviderException(
142139
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)