mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
Merge pull request #1237 from smirok/teamcity-fix-for-tests-with-dataset
fix: unify the `locationHint` prefix and prettify both `locationHint` and `name` parameters for testing with datasets
This commit is contained in:
@ -18,6 +18,7 @@ use PHPUnit\Event\Test\Failed;
|
||||
use PHPUnit\Event\Test\MarkedIncomplete;
|
||||
use PHPUnit\Event\Test\Skipped;
|
||||
use PHPUnit\Event\TestSuite\TestSuite;
|
||||
use PHPUnit\Event\TestSuite\TestSuiteForTestMethodWithDataProvider;
|
||||
use PHPUnit\Framework\Exception as FrameworkException;
|
||||
use PHPUnit\TestRunner\TestResult\TestResult as PhpUnitTestResult;
|
||||
|
||||
@ -147,6 +148,13 @@ final readonly class Converter
|
||||
*/
|
||||
public function getTestSuiteName(TestSuite $testSuite): string
|
||||
{
|
||||
if ($testSuite instanceof TestSuiteForTestMethodWithDataProvider) {
|
||||
$firstTest = $this->getFirstTest($testSuite);
|
||||
if ($firstTest != null) {
|
||||
return $this->getTestMethodNameWithoutDatasetSuffix($firstTest);
|
||||
}
|
||||
}
|
||||
|
||||
$name = $testSuite->name();
|
||||
|
||||
if (! str_starts_with($name, self::PREFIX)) {
|
||||
@ -168,6 +176,35 @@ final readonly class Converter
|
||||
* Gets the test suite location.
|
||||
*/
|
||||
public function getTestSuiteLocation(TestSuite $testSuite): ?string
|
||||
{
|
||||
$firstTest = $this->getFirstTest($testSuite);
|
||||
if ($firstTest == null) {
|
||||
return null;
|
||||
}
|
||||
$path = $firstTest->testDox()->prettifiedClassName();
|
||||
$classRelativePath = $this->toRelativePath($path);
|
||||
|
||||
if ($testSuite instanceof TestSuiteForTestMethodWithDataProvider) {
|
||||
$methodName = $this->getTestMethodNameWithoutDatasetSuffix($firstTest);
|
||||
|
||||
return "$classRelativePath::$methodName";
|
||||
}
|
||||
|
||||
return $classRelativePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the prettified test method name without dataset-related suffix.
|
||||
*/
|
||||
private function getTestMethodNameWithoutDatasetSuffix(TestMethod $testMethod): string
|
||||
{
|
||||
return Str::beforeLast($testMethod->testDox()->prettifiedMethodName(), ' with data set ');
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first test from the test suite.
|
||||
*/
|
||||
private function getFirstTest(TestSuite $testSuite): ?TestMethod
|
||||
{
|
||||
$tests = $testSuite->tests()->asArray();
|
||||
|
||||
@ -181,9 +218,7 @@ final readonly class Converter
|
||||
throw ShouldNotHappen::fromMessage('Not an instance of TestMethod');
|
||||
}
|
||||
|
||||
$path = $firstTest->testDox()->prettifiedClassName();
|
||||
|
||||
return $this->toRelativePath($path);
|
||||
return $firstTest;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -38,7 +38,7 @@ final class ServiceMessage
|
||||
{
|
||||
return new self('testSuiteStarted', [
|
||||
'name' => $name,
|
||||
'locationHint' => $location === null ? null : "file://$location",
|
||||
'locationHint' => $location === null ? null : "pest_qn://$location",
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user