Test project for media files management.
<?php declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Event\Code;
use const DEBUG_BACKTRACE_IGNORE_ARGS;
use const DEBUG_BACKTRACE_PROVIDE_OBJECT;
use function assert;
use function debug_backtrace;
use function is_numeric;
use PHPUnit\Event\TestData\DataFromDataProvider;
use PHPUnit\Event\TestData\DataFromTestDependency;
use PHPUnit\Event\TestData\TestDataCollection;
use PHPUnit\Framework\TestCase;
use PHPUnit\Metadata\Parser\Registry as MetadataRegistry;
use PHPUnit\Util\Exporter;
use PHPUnit\Util\Reflection;
/**
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
*
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final readonly class TestMethodBuilder
{
public static function fromTestCase(TestCase $testCase): TestMethod
{
$methodName = $testCase->name();
assert(!empty($methodName));
$location = Reflection::sourceLocationFor($testCase::class, $methodName);
return new TestMethod(
$testCase::class,
$methodName,
$location['file'],
$location['line'],
TestDoxBuilder::fromTestCase($testCase),
MetadataRegistry::parser()->forClassAndMethod($testCase::class, $methodName),
self::dataFor($testCase),
);
}
/**
* @throws NoTestCaseObjectOnCallStackException
*/
public static function fromCallStack(): TestMethod
{
foreach (debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS) as $frame) {
if (isset($frame['object']) && $frame['object'] instanceof TestCase) {
return $frame['object']->valueObjectForEvents();
}
}
throw new NoTestCaseObjectOnCallStackException;
}
private static function dataFor(TestCase $testCase): TestDataCollection
{
$testData = [];
if ($testCase->usesDataProvider()) {
$dataSetName = $testCase->dataName();
if (is_numeric($dataSetName)) {
$dataSetName = (int) $dataSetName;
}
$testData[] = DataFromDataProvider::from(
$dataSetName,
Exporter::export($testCase->providedData()),
$testCase->dataSetAsStringWithData(),
);
}
if ($testCase->hasDependencyInput()) {
$testData[] = DataFromTestDependency::from(
Exporter::export($testCase->dependencyInput()),
);
}
return TestDataCollection::fromArray($testData);
}
}