[PhpUnitBridge] bump "php" to 7.1+ and "phpunit" to 7.5+
This commit is contained in:
parent
266a6bb97e
commit
fe24f73ec0
@ -1,6 +1,12 @@
|
||||
CHANGELOG
|
||||
=========
|
||||
|
||||
5.3.0
|
||||
-----
|
||||
|
||||
* bumped the minimum PHP version to 7.1.3
|
||||
* bumped the minimum PHPUnit version to 7.5
|
||||
|
||||
5.1.0
|
||||
-----
|
||||
|
||||
|
@ -45,7 +45,7 @@ class ClassExistsMock
|
||||
|
||||
public static function register($class)
|
||||
{
|
||||
$self = \get_called_class();
|
||||
$self = static::class;
|
||||
|
||||
$mockedNs = [substr($class, 0, strrpos($class, '\\'))];
|
||||
if (0 < strpos($class, '\\Tests\\')) {
|
||||
|
@ -92,7 +92,7 @@ class ClockMock
|
||||
|
||||
public static function register($class)
|
||||
{
|
||||
$self = \get_called_class();
|
||||
$self = static::class;
|
||||
|
||||
$mockedNs = [substr($class, 0, strrpos($class, '\\'))];
|
||||
if (0 < strpos($class, '\\Tests\\')) {
|
||||
|
@ -15,12 +15,7 @@ use PHPUnit\Framework\Constraint\Constraint;
|
||||
use ReflectionClass;
|
||||
|
||||
$r = new ReflectionClass(Constraint::class);
|
||||
if (\PHP_VERSION_ID < 70000 || !$r->getMethod('matches')->hasReturnType()) {
|
||||
trait ConstraintTrait
|
||||
{
|
||||
use Legacy\ConstraintTraitForV6;
|
||||
}
|
||||
} elseif ($r->getProperty('exporter')->isProtected()) {
|
||||
if ($r->getProperty('exporter')->isProtected()) {
|
||||
trait ConstraintTrait
|
||||
{
|
||||
use Legacy\ConstraintTraitForV7;
|
||||
|
@ -11,13 +11,7 @@
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit;
|
||||
|
||||
if (version_compare(\PHPUnit\Runner\Version::id(), '6.0.0', '<')) {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListenerForV5', 'Symfony\Bridge\PhpUnit\CoverageListener');
|
||||
} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListenerForV6', 'Symfony\Bridge\PhpUnit\CoverageListener');
|
||||
} else {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListenerForV7', 'Symfony\Bridge\PhpUnit\CoverageListener');
|
||||
}
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CoverageListenerForV7', 'Symfony\Bridge\PhpUnit\CoverageListener');
|
||||
|
||||
if (false) {
|
||||
class CoverageListener
|
||||
|
@ -25,9 +25,9 @@ use Symfony\Component\ErrorHandler\DebugClassLoader;
|
||||
*/
|
||||
class DeprecationErrorHandler
|
||||
{
|
||||
const MODE_DISABLED = 'disabled';
|
||||
const MODE_WEAK = 'max[total]=999999&verbose=0';
|
||||
const MODE_STRICT = 'max[total]=0';
|
||||
public const MODE_DISABLED = 'disabled';
|
||||
public const MODE_WEAK = 'max[total]=999999&verbose=0';
|
||||
public const MODE_STRICT = 'max[total]=0';
|
||||
|
||||
private $mode;
|
||||
private $configuration;
|
||||
@ -238,13 +238,7 @@ class DeprecationErrorHandler
|
||||
return $this->configuration;
|
||||
}
|
||||
if (false === $mode = $this->mode) {
|
||||
if (isset($_SERVER['SYMFONY_DEPRECATIONS_HELPER'])) {
|
||||
$mode = $_SERVER['SYMFONY_DEPRECATIONS_HELPER'];
|
||||
} elseif (isset($_ENV['SYMFONY_DEPRECATIONS_HELPER'])) {
|
||||
$mode = $_ENV['SYMFONY_DEPRECATIONS_HELPER'];
|
||||
} else {
|
||||
$mode = getenv('SYMFONY_DEPRECATIONS_HELPER');
|
||||
}
|
||||
$mode = $_SERVER['SYMFONY_DEPRECATIONS_HELPER'] ?? $_ENV['SYMFONY_DEPRECATIONS_HELPER'] ?? getenv('SYMFONY_DEPRECATIONS_HELPER');
|
||||
}
|
||||
if ('strict' === $mode) {
|
||||
return $this->configuration = Configuration::inStrictMode();
|
||||
|
@ -278,7 +278,7 @@ class Configuration
|
||||
}
|
||||
|
||||
return new self(
|
||||
isset($normalizedConfiguration['max']) ? $normalizedConfiguration['max'] : [],
|
||||
$normalizedConfiguration['max'] ?? [],
|
||||
'',
|
||||
$verboseOutput,
|
||||
filter_var($normalizedConfiguration['generateBaseline'], \FILTER_VALIDATE_BOOLEAN),
|
||||
|
@ -21,14 +21,14 @@ use Symfony\Component\ErrorHandler\DebugClassLoader;
|
||||
*/
|
||||
class Deprecation
|
||||
{
|
||||
const PATH_TYPE_VENDOR = 'path_type_vendor';
|
||||
const PATH_TYPE_SELF = 'path_type_internal';
|
||||
const PATH_TYPE_UNDETERMINED = 'path_type_undetermined';
|
||||
public const PATH_TYPE_VENDOR = 'path_type_vendor';
|
||||
public const PATH_TYPE_SELF = 'path_type_internal';
|
||||
public const PATH_TYPE_UNDETERMINED = 'path_type_undetermined';
|
||||
|
||||
const TYPE_SELF = 'type_self';
|
||||
const TYPE_DIRECT = 'type_direct';
|
||||
const TYPE_INDIRECT = 'type_indirect';
|
||||
const TYPE_UNDETERMINED = 'type_undetermined';
|
||||
public const TYPE_SELF = 'type_self';
|
||||
public const TYPE_DIRECT = 'type_direct';
|
||||
public const TYPE_INDIRECT = 'type_indirect';
|
||||
public const TYPE_UNDETERMINED = 'type_undetermined';
|
||||
|
||||
private $trace = [];
|
||||
private $message;
|
||||
@ -61,10 +61,10 @@ class Deprecation
|
||||
|
||||
$this->trace = $trace;
|
||||
|
||||
if ('trigger_error' === (isset($trace[1]['function']) ? $trace[1]['function'] : null)
|
||||
&& (DebugClassLoader::class === ($class = (isset($trace[2]['class']) ? $trace[2]['class'] : null)) || LegacyDebugClassLoader::class === $class)
|
||||
&& 'checkClass' === (isset($trace[2]['function']) ? $trace[2]['function'] : null)
|
||||
&& null !== ($extraFile = (isset($trace[2]['args'][1]) ? $trace[2]['args'][1] : null))
|
||||
if ('trigger_error' === ($trace[1]['function'] ?? null)
|
||||
&& (DebugClassLoader::class === ($class = $trace[2]['class'] ?? null) || LegacyDebugClassLoader::class === $class)
|
||||
&& 'checkClass' === ($trace[2]['function'] ?? null)
|
||||
&& null !== ($extraFile = $trace[2]['args'][1] ?? null)
|
||||
&& '' !== $extraFile
|
||||
&& false !== $extraFile = realpath($extraFile)
|
||||
) {
|
||||
@ -118,7 +118,7 @@ class Deprecation
|
||||
}
|
||||
$class = $line['class'];
|
||||
|
||||
return 'ReflectionMethod' === $class || 0 === strpos($class, 'PHPUnit_') || 0 === strpos($class, 'PHPUnit\\');
|
||||
return 'ReflectionMethod' === $class || 0 === strpos($class, 'PHPUnit\\');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -290,7 +290,7 @@ class Deprecation
|
||||
foreach (get_declared_classes() as $class) {
|
||||
if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) {
|
||||
$r = new \ReflectionClass($class);
|
||||
$v = \dirname(\dirname($r->getFileName()));
|
||||
$v = \dirname($r->getFileName(), 2);
|
||||
if (file_exists($v.'/composer/installed.json')) {
|
||||
self::$vendors[] = $v;
|
||||
$loader = require $v.'/autoload.php';
|
||||
|
@ -55,11 +55,7 @@ final class DeprecationGroup
|
||||
*/
|
||||
private function deprecationNotice($message)
|
||||
{
|
||||
if (!isset($this->deprecationNotices[$message])) {
|
||||
$this->deprecationNotices[$message] = new DeprecationNotice();
|
||||
}
|
||||
|
||||
return $this->deprecationNotices[$message];
|
||||
return $this->deprecationNotices[$message] ?? $this->deprecationNotices[$message] = new DeprecationNotice();
|
||||
}
|
||||
|
||||
public function count()
|
||||
|
@ -152,7 +152,7 @@ class DnsMock
|
||||
$records = [];
|
||||
|
||||
foreach (self::$hosts[$hostname] as $record) {
|
||||
if (isset(self::$dnsTypes[$record['type']]) && (self::$dnsTypes[$record['type']] & $type)) {
|
||||
if ((self::$dnsTypes[$record['type']] ?? 0) & $type) {
|
||||
$records[] = array_merge(['host' => $hostname, 'class' => 'IN', 'ttl' => 1, 'type' => $record['type']], $record);
|
||||
}
|
||||
}
|
||||
@ -163,7 +163,7 @@ class DnsMock
|
||||
|
||||
public static function register($class)
|
||||
{
|
||||
$self = \get_called_class();
|
||||
$self = static::class;
|
||||
|
||||
$mockedNs = [substr($class, 0, strrpos($class, '\\'))];
|
||||
if (0 < strpos($class, '\\Tests\\')) {
|
||||
|
@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Legacy;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class CommandForV5 extends \PHPUnit_TextUI_Command
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function createRunner()
|
||||
{
|
||||
$this->arguments['listeners'] = isset($this->arguments['listeners']) ? $this->arguments['listeners'] : [];
|
||||
|
||||
$registeredLocally = false;
|
||||
|
||||
foreach ($this->arguments['listeners'] as $registeredListener) {
|
||||
if ($registeredListener instanceof SymfonyTestsListenerForV5) {
|
||||
$registeredListener->globalListenerDisabled();
|
||||
$registeredLocally = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($this->arguments['configuration'])) {
|
||||
$configuration = $this->arguments['configuration'];
|
||||
if (!$configuration instanceof \PHPUnit_Util_Configuration) {
|
||||
$configuration = \PHPUnit_Util_Configuration::getInstance($this->arguments['configuration']);
|
||||
}
|
||||
foreach ($configuration->getListenerConfiguration() as $registeredListener) {
|
||||
if ('Symfony\Bridge\PhpUnit\SymfonyTestsListener' === ltrim($registeredListener['class'], '\\')) {
|
||||
$registeredLocally = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$registeredLocally) {
|
||||
$this->arguments['listeners'][] = new SymfonyTestsListenerForV5();
|
||||
}
|
||||
|
||||
return parent::createRunner();
|
||||
}
|
||||
}
|
@ -21,14 +21,14 @@ use Symfony\Bridge\PhpUnit\SymfonyTestsListener;
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class CommandForV6 extends BaseCommand
|
||||
class CommandForV7 extends BaseCommand
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function createRunner(): BaseRunner
|
||||
{
|
||||
$this->arguments['listeners'] = isset($this->arguments['listeners']) ? $this->arguments['listeners'] : [];
|
||||
$this->arguments['listeners'] ?? $this->arguments['listeners'] = [];
|
||||
|
||||
$registeredLocally = false;
|
||||
|
@ -31,7 +31,7 @@ class CommandForV9 extends BaseCommand
|
||||
*/
|
||||
protected function createRunner(): BaseRunner
|
||||
{
|
||||
$this->arguments['listeners'] = isset($this->arguments['listeners']) ? $this->arguments['listeners'] : [];
|
||||
$this->arguments['listeners'] ?? $this->arguments['listeners'] = [];
|
||||
|
||||
$registeredLocally = false;
|
||||
|
||||
|
@ -1,130 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Legacy;
|
||||
|
||||
use SebastianBergmann\Exporter\Exporter;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
trait ConstraintTraitForV6
|
||||
{
|
||||
/**
|
||||
* @return bool|null
|
||||
*/
|
||||
public function evaluate($other, $description = '', $returnResult = false)
|
||||
{
|
||||
return $this->doEvaluate($other, $description, $returnResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return $this->doCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function toString()
|
||||
{
|
||||
return $this->doToString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $other
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function additionalFailureDescription($other)
|
||||
{
|
||||
return $this->doAdditionalFailureDescription($other);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Exporter
|
||||
*/
|
||||
protected function exporter()
|
||||
{
|
||||
if (null === $this->exporter) {
|
||||
$this->exporter = new Exporter();
|
||||
}
|
||||
|
||||
return $this->exporter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $other
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function failureDescription($other)
|
||||
{
|
||||
return $this->doFailureDescription($other);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $other
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function matches($other)
|
||||
{
|
||||
return $this->doMatches($other);
|
||||
}
|
||||
|
||||
private function doAdditionalFailureDescription($other)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
private function doCount()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
private function doEvaluate($other, $description, $returnResult)
|
||||
{
|
||||
$success = false;
|
||||
|
||||
if ($this->matches($other)) {
|
||||
$success = true;
|
||||
}
|
||||
|
||||
if ($returnResult) {
|
||||
return $success;
|
||||
}
|
||||
|
||||
if (!$success) {
|
||||
$this->fail($other, $description);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function doFailureDescription($other)
|
||||
{
|
||||
return $this->exporter()->export($other).' '.$this->toString();
|
||||
}
|
||||
|
||||
private function doMatches($other)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
private function doToString()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Legacy;
|
||||
|
||||
/**
|
||||
* CoverageListener adds `@covers <className>` on each test when possible to
|
||||
* make the code coverage more accurate.
|
||||
*
|
||||
* @author Grégoire Pineau <lyrixx@lyrixx.info>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class CoverageListenerForV5 extends \PHPUnit_Framework_BaseTestListener
|
||||
{
|
||||
private $trait;
|
||||
|
||||
public function __construct(callable $sutFqcnResolver = null, $warningOnSutNotFound = false)
|
||||
{
|
||||
$this->trait = new CoverageListenerTrait($sutFqcnResolver, $warningOnSutNotFound);
|
||||
}
|
||||
|
||||
public function startTest(\PHPUnit_Framework_Test $test)
|
||||
{
|
||||
$this->trait->startTest($test);
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Legacy;
|
||||
|
||||
use PHPUnit\Framework\Test;
|
||||
use PHPUnit\Framework\TestListener;
|
||||
use PHPUnit\Framework\TestListenerDefaultImplementation;
|
||||
|
||||
/**
|
||||
* CoverageListener adds `@covers <className>` on each test when possible to
|
||||
* make the code coverage more accurate.
|
||||
*
|
||||
* @author Grégoire Pineau <lyrixx@lyrixx.info>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class CoverageListenerForV6 implements TestListener
|
||||
{
|
||||
use TestListenerDefaultImplementation;
|
||||
|
||||
private $trait;
|
||||
|
||||
public function __construct(callable $sutFqcnResolver = null, $warningOnSutNotFound = false)
|
||||
{
|
||||
$this->trait = new CoverageListenerTrait($sutFqcnResolver, $warningOnSutNotFound);
|
||||
}
|
||||
|
||||
public function startTest(Test $test)
|
||||
{
|
||||
$this->trait->startTest($test);
|
||||
}
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Legacy;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
trait SetUpTearDownTraitForV5
|
||||
{
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public static function setUpBeforeClass()
|
||||
{
|
||||
self::doSetUpBeforeClass();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public static function tearDownAfterClass()
|
||||
{
|
||||
self::doTearDownAfterClass();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
self::doSetUp();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
self::doTearDown();
|
||||
}
|
||||
|
||||
private static function doSetUpBeforeClass()
|
||||
{
|
||||
parent::setUpBeforeClass();
|
||||
}
|
||||
|
||||
private static function doTearDownAfterClass()
|
||||
{
|
||||
parent::tearDownAfterClass();
|
||||
}
|
||||
|
||||
private function doSetUp()
|
||||
{
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
private function doTearDown()
|
||||
{
|
||||
parent::tearDown();
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Legacy;
|
||||
|
||||
/**
|
||||
* Collects and replays skipped tests.
|
||||
*
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class SymfonyTestsListenerForV5 extends \PHPUnit_Framework_BaseTestListener
|
||||
{
|
||||
private $trait;
|
||||
|
||||
public function __construct(array $mockedNamespaces = [])
|
||||
{
|
||||
$this->trait = new SymfonyTestsListenerTrait($mockedNamespaces);
|
||||
}
|
||||
|
||||
public function globalListenerDisabled()
|
||||
{
|
||||
$this->trait->globalListenerDisabled();
|
||||
}
|
||||
|
||||
public function startTestSuite(\PHPUnit_Framework_TestSuite $suite)
|
||||
{
|
||||
$this->trait->startTestSuite($suite);
|
||||
}
|
||||
|
||||
public function addSkippedTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
|
||||
{
|
||||
$this->trait->addSkippedTest($test, $e, $time);
|
||||
}
|
||||
|
||||
public function startTest(\PHPUnit_Framework_Test $test)
|
||||
{
|
||||
$this->trait->startTest($test);
|
||||
}
|
||||
|
||||
public function endTest(\PHPUnit_Framework_Test $test, $time)
|
||||
{
|
||||
$this->trait->endTest($test, $time);
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Legacy;
|
||||
|
||||
use PHPUnit\Framework\BaseTestListener;
|
||||
use PHPUnit\Framework\Test;
|
||||
use PHPUnit\Framework\TestSuite;
|
||||
|
||||
/**
|
||||
* Collects and replays skipped tests.
|
||||
*
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class SymfonyTestsListenerForV6 extends BaseTestListener
|
||||
{
|
||||
private $trait;
|
||||
|
||||
public function __construct(array $mockedNamespaces = [])
|
||||
{
|
||||
$this->trait = new SymfonyTestsListenerTrait($mockedNamespaces);
|
||||
}
|
||||
|
||||
public function globalListenerDisabled()
|
||||
{
|
||||
$this->trait->globalListenerDisabled();
|
||||
}
|
||||
|
||||
public function startTestSuite(TestSuite $suite)
|
||||
{
|
||||
$this->trait->startTestSuite($suite);
|
||||
}
|
||||
|
||||
public function addSkippedTest(Test $test, \Exception $e, $time)
|
||||
{
|
||||
$this->trait->addSkippedTest($test, $e, $time);
|
||||
}
|
||||
|
||||
public function startTest(Test $test)
|
||||
{
|
||||
$this->trait->startTest($test);
|
||||
}
|
||||
|
||||
public function endTest(Test $test, $time)
|
||||
{
|
||||
$this->trait->endTest($test, $time);
|
||||
}
|
||||
}
|
@ -123,7 +123,7 @@ class SymfonyTestsListenerTrait
|
||||
$suiteName = $suite->getName();
|
||||
|
||||
foreach ($suite->tests() as $test) {
|
||||
if (!($test instanceof \PHPUnit_Framework_TestCase || $test instanceof TestCase)) {
|
||||
if (!$test instanceof TestCase) {
|
||||
continue;
|
||||
}
|
||||
if (null === Test::getPreserveGlobalStateSettings(\get_class($test), $test->getName(false))) {
|
||||
@ -158,7 +158,7 @@ class SymfonyTestsListenerTrait
|
||||
$testSuites = [$suite];
|
||||
for ($i = 0; isset($testSuites[$i]); ++$i) {
|
||||
foreach ($testSuites[$i]->tests() as $test) {
|
||||
if ($test instanceof \PHPUnit_Framework_TestSuite || $test instanceof TestSuite) {
|
||||
if ($test instanceof TestSuite) {
|
||||
if (!class_exists($test->getName(), false)) {
|
||||
$testSuites[] = $test;
|
||||
continue;
|
||||
@ -178,11 +178,11 @@ class SymfonyTestsListenerTrait
|
||||
$skipped = [];
|
||||
while ($s = array_shift($suites)) {
|
||||
foreach ($s->tests() as $test) {
|
||||
if ($test instanceof \PHPUnit_Framework_TestSuite || $test instanceof TestSuite) {
|
||||
if ($test instanceof TestSuite) {
|
||||
$suites[] = $test;
|
||||
continue;
|
||||
}
|
||||
if (($test instanceof \PHPUnit_Framework_TestCase || $test instanceof TestCase)
|
||||
if ($test instanceof TestCase
|
||||
&& isset($this->wasSkipped[\get_class($test)][$test->getName()])
|
||||
) {
|
||||
$skipped[] = $test;
|
||||
@ -202,7 +202,7 @@ class SymfonyTestsListenerTrait
|
||||
|
||||
public function startTest($test)
|
||||
{
|
||||
if (-2 < $this->state && ($test instanceof \PHPUnit_Framework_TestCase || $test instanceof TestCase)) {
|
||||
if (-2 < $this->state && $test instanceof TestCase) {
|
||||
// This event is triggered before the test is re-run in isolation
|
||||
if ($this->willBeIsolated($test)) {
|
||||
$this->runsInSeparateProcess = tempnam(sys_get_temp_dir(), 'deprec');
|
||||
@ -280,7 +280,7 @@ class SymfonyTestsListenerTrait
|
||||
unlink($this->runsInSeparateProcess);
|
||||
putenv('SYMFONY_DEPRECATIONS_SERIALIZE');
|
||||
foreach ($deprecations ? unserialize($deprecations) : [] as $deprecation) {
|
||||
$error = serialize(['deprecation' => $deprecation[1], 'class' => $className, 'method' => $test->getName(false), 'triggering_file' => isset($deprecation[2]) ? $deprecation[2] : null]);
|
||||
$error = serialize(['deprecation' => $deprecation[1], 'class' => $className, 'method' => $test->getName(false), 'triggering_file' => $deprecation[2] ?? null]);
|
||||
if ($deprecation[0]) {
|
||||
// unsilenced on purpose
|
||||
trigger_error($error, \E_USER_DEPRECATED);
|
||||
@ -312,7 +312,7 @@ class SymfonyTestsListenerTrait
|
||||
self::$expectedDeprecations = self::$gatheredDeprecations = [];
|
||||
self::$previousErrorHandler = null;
|
||||
}
|
||||
if (!$this->runsInSeparateProcess && -2 < $this->state && ($test instanceof \PHPUnit_Framework_TestCase || $test instanceof TestCase)) {
|
||||
if (!$this->runsInSeparateProcess && -2 < $this->state && $test instanceof TestCase) {
|
||||
if (\in_array('time-sensitive', $groups, true)) {
|
||||
ClockMock::withClockMock(false);
|
||||
}
|
||||
|
@ -11,13 +11,7 @@
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit;
|
||||
|
||||
if (version_compare(\PHPUnit\Runner\Version::id(), '6.0.0', '<')) {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerForV5', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener');
|
||||
} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerForV6', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener');
|
||||
} else {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerForV7', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener');
|
||||
}
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerForV7', 'Symfony\Bridge\PhpUnit\SymfonyTestsListener');
|
||||
|
||||
if (false) {
|
||||
class SymfonyTestsListener
|
||||
|
@ -1,40 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class BootstrapTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @requires PHPUnit < 6.0
|
||||
*/
|
||||
public function testAliasingOfErrorClasses()
|
||||
{
|
||||
$this->assertInstanceOf(
|
||||
\PHPUnit_Framework_Error::class,
|
||||
new \PHPUnit\Framework\Error\Error('message', 0, __FILE__, __LINE__)
|
||||
);
|
||||
$this->assertInstanceOf(
|
||||
\PHPUnit_Framework_Error_Deprecated::class,
|
||||
new \PHPUnit\Framework\Error\Deprecated('message', 0, __FILE__, __LINE__)
|
||||
);
|
||||
$this->assertInstanceOf(
|
||||
\PHPUnit_Framework_Error_Notice::class,
|
||||
new \PHPUnit\Framework\Error\Notice('message', 0, __FILE__, __LINE__)
|
||||
);
|
||||
$this->assertInstanceOf(
|
||||
\PHPUnit_Framework_Error_Warning::class,
|
||||
new \PHPUnit\Framework\Error\Warning('message', 0, __FILE__, __LINE__)
|
||||
);
|
||||
}
|
||||
}
|
@ -33,7 +33,7 @@ class DeprecationTest extends TestCase
|
||||
foreach (get_declared_classes() as $class) {
|
||||
if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) {
|
||||
$r = new \ReflectionClass($class);
|
||||
$vendorDir = \dirname(\dirname($r->getFileName()));
|
||||
$vendorDir = \dirname($r->getFileName(), 2);
|
||||
if (file_exists($vendorDir.'/composer/installed.json') && @mkdir($vendorDir.'/myfakevendor/myfakepackage1', 0777, true)) {
|
||||
break;
|
||||
}
|
||||
@ -61,7 +61,7 @@ class DeprecationTest extends TestCase
|
||||
{
|
||||
$r = new \ReflectionClass(Deprecation::class);
|
||||
|
||||
if (\dirname(\dirname($r->getFileName())) !== \dirname(\dirname(__DIR__))) {
|
||||
if (\dirname($r->getFileName(), 2) !== \dirname(__DIR__, 2)) {
|
||||
$this->markTestSkipped('Test case is not compatible with having the bridge in vendor/');
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ class DeprecationTest extends TestCase
|
||||
foreach (get_declared_classes() as $class) {
|
||||
if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) {
|
||||
$r = new \ReflectionClass($class);
|
||||
$v = \dirname(\dirname($r->getFileName()));
|
||||
$v = \dirname($r->getFileName(), 2);
|
||||
if (file_exists($v.'/composer/installed.json')) {
|
||||
$loader = require $v.'/autoload.php';
|
||||
$reflection = new \ReflectionClass($loader);
|
||||
|
@ -13,13 +13,5 @@ require __DIR__.'/../src/BarCov.php';
|
||||
require __DIR__.'/../src/FooCov.php';
|
||||
|
||||
require __DIR__.'/../../../../Legacy/CoverageListenerTrait.php';
|
||||
|
||||
if (version_compare(\PHPUnit\Runner\Version::id(), '6.0.0', '<')) {
|
||||
require_once __DIR__.'/../../../../Legacy/CoverageListenerForV5.php';
|
||||
} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) {
|
||||
require_once __DIR__.'/../../../../Legacy/CoverageListenerForV6.php';
|
||||
} else {
|
||||
require_once __DIR__.'/../../../../Legacy/CoverageListenerForV7.php';
|
||||
}
|
||||
|
||||
require_once __DIR__.'/../../../../Legacy/CoverageListenerForV7.php';
|
||||
require __DIR__.'/../../../../CoverageListener.php';
|
||||
|
@ -11,10 +11,8 @@
|
||||
|
||||
namespace Symfony\Bridge\PhpUnit\TextUI;
|
||||
|
||||
if (version_compare(\PHPUnit\Runner\Version::id(), '6.0.0', '<')) {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CommandForV5', 'Symfony\Bridge\PhpUnit\TextUI\Command');
|
||||
} elseif (version_compare(\PHPUnit\Runner\Version::id(), '9.0.0', '<')) {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CommandForV6', 'Symfony\Bridge\PhpUnit\TextUI\Command');
|
||||
if (version_compare(\PHPUnit\Runner\Version::id(), '9.0.0', '<')) {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CommandForV7', 'Symfony\Bridge\PhpUnit\TextUI\Command');
|
||||
} else {
|
||||
class_alias('Symfony\Bridge\PhpUnit\Legacy\CommandForV9', 'Symfony\Bridge\PhpUnit\TextUI\Command');
|
||||
}
|
||||
|
@ -15,8 +15,8 @@
|
||||
error_reporting(-1);
|
||||
|
||||
global $argv, $argc;
|
||||
$argv = isset($_SERVER['argv']) ? $_SERVER['argv'] : [];
|
||||
$argc = isset($_SERVER['argc']) ? $_SERVER['argc'] : 0;
|
||||
$argv = $_SERVER['argv'] ?? [];
|
||||
$argc = $_SERVER['argc'] ?? 0;
|
||||
$getEnvVar = function ($name, $default = false) use ($argv) {
|
||||
if (false !== $value = getenv($name)) {
|
||||
return $value;
|
||||
@ -98,19 +98,9 @@ if (\PHP_VERSION_ID >= 80000) {
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '9.4');
|
||||
} elseif (\PHP_VERSION_ID >= 70200) {
|
||||
// PHPUnit 8 requires PHP 7.2+
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '8.3');
|
||||
} elseif (\PHP_VERSION_ID >= 70100) {
|
||||
// PHPUnit 7 requires PHP 7.1+
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '7.5');
|
||||
} elseif (\PHP_VERSION_ID >= 70000) {
|
||||
// PHPUnit 6 requires PHP 7.0+
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '6.5');
|
||||
} elseif (\PHP_VERSION_ID >= 50600) {
|
||||
// PHPUnit 4 does not support PHP 7
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '5.7');
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '8.5');
|
||||
} else {
|
||||
// PHPUnit 5.1 requires PHP 5.6+
|
||||
$PHPUNIT_VERSION = '4.8';
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '7.5');
|
||||
}
|
||||
|
||||
$MAX_PHPUNIT_VERSION = $getEnvVar('SYMFONY_MAX_PHPUNIT_VERSION', false);
|
||||
@ -255,12 +245,12 @@ if (!file_exists("$PHPUNIT_DIR/$PHPUNIT_VERSION_DIR/phpunit") || $configurationH
|
||||
if ($PHPUNIT_REMOVE_RETURN_TYPEHINT) {
|
||||
$alteredCode = preg_replace('/^ ((?:protected|public)(?: static)? function \w+\(\)): void/m', ' $1', $alteredCode);
|
||||
}
|
||||
$alteredCode = preg_replace('/abstract class (?:TestCase|PHPUnit_Framework_TestCase)[^\{]+\{/', '$0 '.\PHP_EOL." use \Symfony\Bridge\PhpUnit\Legacy\PolyfillTestCaseTrait;", $alteredCode, 1);
|
||||
$alteredCode = preg_replace('/abstract class TestCase[^\{]+\{/', '$0 '.\PHP_EOL." use \Symfony\Bridge\PhpUnit\Legacy\PolyfillTestCaseTrait;", $alteredCode, 1);
|
||||
file_put_contents($alteredFile, $alteredCode);
|
||||
|
||||
// Mutate Assert code
|
||||
$alteredCode = file_get_contents($alteredFile = './src/Framework/Assert.php');
|
||||
$alteredCode = preg_replace('/abstract class (?:Assert|PHPUnit_Framework_Assert)[^\{]+\{/', '$0 '.\PHP_EOL." use \Symfony\Bridge\PhpUnit\Legacy\PolyfillAssertTrait;", $alteredCode, 1);
|
||||
$alteredCode = preg_replace('/abstract class Assert[^\{]+\{/', '$0 '.\PHP_EOL." use \Symfony\Bridge\PhpUnit\Legacy\PolyfillAssertTrait;", $alteredCode, 1);
|
||||
file_put_contents($alteredFile, $alteredCode);
|
||||
|
||||
file_put_contents('phpunit', <<<'EOPHP'
|
||||
@ -352,7 +342,7 @@ if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
}
|
||||
|
||||
if ($components) {
|
||||
$skippedTests = isset($_SERVER['SYMFONY_PHPUNIT_SKIPPED_TESTS']) ? $_SERVER['SYMFONY_PHPUNIT_SKIPPED_TESTS'] : false;
|
||||
$skippedTests = $_SERVER['SYMFONY_PHPUNIT_SKIPPED_TESTS'] ?? false;
|
||||
$runningProcs = [];
|
||||
|
||||
foreach ($components as $component) {
|
||||
|
@ -12,96 +12,6 @@
|
||||
use Doctrine\Common\Annotations\AnnotationRegistry;
|
||||
use Symfony\Bridge\PhpUnit\DeprecationErrorHandler;
|
||||
|
||||
if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) {
|
||||
$classes = [
|
||||
'PHPUnit_Framework_Assert', // override PhpUnit's ForwardCompat child class
|
||||
'PHPUnit_Framework_AssertionFailedError', // override PhpUnit's ForwardCompat child class
|
||||
'PHPUnit_Framework_BaseTestListener', // override PhpUnit's ForwardCompat child class
|
||||
|
||||
'PHPUnit_Framework_Constraint',
|
||||
'PHPUnit_Framework_Constraint_ArrayHasKey',
|
||||
'PHPUnit_Framework_Constraint_ArraySubset',
|
||||
'PHPUnit_Framework_Constraint_Attribute',
|
||||
'PHPUnit_Framework_Constraint_Callback',
|
||||
'PHPUnit_Framework_Constraint_ClassHasAttribute',
|
||||
'PHPUnit_Framework_Constraint_ClassHasStaticAttribute',
|
||||
'PHPUnit_Framework_Constraint_Composite',
|
||||
'PHPUnit_Framework_Constraint_Count',
|
||||
'PHPUnit_Framework_Constraint_Exception',
|
||||
'PHPUnit_Framework_Constraint_ExceptionCode',
|
||||
'PHPUnit_Framework_Constraint_ExceptionMessage',
|
||||
'PHPUnit_Framework_Constraint_ExceptionMessageRegExp',
|
||||
'PHPUnit_Framework_Constraint_FileExists',
|
||||
'PHPUnit_Framework_Constraint_GreaterThan',
|
||||
'PHPUnit_Framework_Constraint_IsAnything',
|
||||
'PHPUnit_Framework_Constraint_IsEmpty',
|
||||
'PHPUnit_Framework_Constraint_IsEqual',
|
||||
'PHPUnit_Framework_Constraint_IsFalse',
|
||||
'PHPUnit_Framework_Constraint_IsIdentical',
|
||||
'PHPUnit_Framework_Constraint_IsInstanceOf',
|
||||
'PHPUnit_Framework_Constraint_IsJson',
|
||||
'PHPUnit_Framework_Constraint_IsNull',
|
||||
'PHPUnit_Framework_Constraint_IsTrue',
|
||||
'PHPUnit_Framework_Constraint_IsType',
|
||||
'PHPUnit_Framework_Constraint_JsonMatches',
|
||||
'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider',
|
||||
'PHPUnit_Framework_Constraint_LessThan',
|
||||
'PHPUnit_Framework_Constraint_ObjectHasAttribute',
|
||||
'PHPUnit_Framework_Constraint_PCREMatch',
|
||||
'PHPUnit_Framework_Constraint_SameSize',
|
||||
'PHPUnit_Framework_Constraint_StringContains',
|
||||
'PHPUnit_Framework_Constraint_StringEndsWith',
|
||||
'PHPUnit_Framework_Constraint_StringMatches',
|
||||
'PHPUnit_Framework_Constraint_StringStartsWith',
|
||||
'PHPUnit_Framework_Constraint_TraversableContains',
|
||||
'PHPUnit_Framework_Constraint_TraversableContainsOnly',
|
||||
|
||||
'PHPUnit_Framework_Error_Deprecated',
|
||||
'PHPUnit_Framework_Error_Notice',
|
||||
'PHPUnit_Framework_Error_Warning',
|
||||
'PHPUnit_Framework_Exception',
|
||||
'PHPUnit_Framework_ExpectationFailedException',
|
||||
|
||||
'PHPUnit_Framework_MockObject_MockObject',
|
||||
|
||||
'PHPUnit_Framework_IncompleteTest',
|
||||
'PHPUnit_Framework_IncompleteTestCase',
|
||||
'PHPUnit_Framework_IncompleteTestError',
|
||||
'PHPUnit_Framework_RiskyTest',
|
||||
'PHPUnit_Framework_RiskyTestError',
|
||||
'PHPUnit_Framework_SkippedTest',
|
||||
'PHPUnit_Framework_SkippedTestCase',
|
||||
'PHPUnit_Framework_SkippedTestError',
|
||||
'PHPUnit_Framework_SkippedTestSuiteError',
|
||||
|
||||
'PHPUnit_Framework_SyntheticError',
|
||||
|
||||
'PHPUnit_Framework_Test',
|
||||
'PHPUnit_Framework_TestCase', // override PhpUnit's ForwardCompat child class
|
||||
'PHPUnit_Framework_TestFailure',
|
||||
'PHPUnit_Framework_TestListener',
|
||||
'PHPUnit_Framework_TestResult',
|
||||
'PHPUnit_Framework_TestSuite', // override PhpUnit's ForwardCompat child class
|
||||
|
||||
'PHPUnit_Runner_BaseTestRunner',
|
||||
'PHPUnit_Runner_Version',
|
||||
|
||||
'PHPUnit_Util_Blacklist',
|
||||
'PHPUnit_Util_ErrorHandler',
|
||||
'PHPUnit_Util_Test',
|
||||
'PHPUnit_Util_XML',
|
||||
];
|
||||
foreach ($classes as $class) {
|
||||
class_alias($class, '\\'.strtr($class, '_', '\\'));
|
||||
}
|
||||
|
||||
class_alias('PHPUnit_Framework_Constraint_And', 'PHPUnit\Framework\Constraint\LogicalAnd');
|
||||
class_alias('PHPUnit_Framework_Constraint_Not', 'PHPUnit\Framework\Constraint\LogicalNot');
|
||||
class_alias('PHPUnit_Framework_Constraint_Or', 'PHPUnit\Framework\Constraint\LogicalOr');
|
||||
class_alias('PHPUnit_Framework_Constraint_Xor', 'PHPUnit\Framework\Constraint\LogicalXor');
|
||||
class_alias('PHPUnit_Framework_Error', 'PHPUnit\Framework\Error\Error');
|
||||
}
|
||||
|
||||
// Detect if we need to serialize deprecations to a file.
|
||||
if ($file = getenv('SYMFONY_DEPRECATIONS_SERIALIZE')) {
|
||||
DeprecationErrorHandler::collectDeprecations($file);
|
||||
@ -110,7 +20,7 @@ if ($file = getenv('SYMFONY_DEPRECATIONS_SERIALIZE')) {
|
||||
}
|
||||
|
||||
// Detect if we're loaded by an actual run of phpunit
|
||||
if (!defined('PHPUNIT_COMPOSER_INSTALL') && !class_exists('PHPUnit_TextUI_Command', false) && !class_exists('PHPUnit\TextUI\Command', false)) {
|
||||
if (!defined('PHPUNIT_COMPOSER_INSTALL') && !class_exists('PHPUnit\TextUI\Command', false)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -16,9 +16,9 @@
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9 EVEN ON LATEST SYMFONY VERSIONS TO ALLOW USING",
|
||||
"php": ">=7.1.3 EVEN ON LATEST SYMFONY VERSIONS TO ALLOW USING",
|
||||
"php": "THIS BRIDGE WHEN TESTING LOWEST SYMFONY VERSIONS.",
|
||||
"php": ">=5.5.9"
|
||||
"php": ">=7.1.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/deprecation-contracts": "^2.1",
|
||||
@ -28,7 +28,7 @@
|
||||
"symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
|
||||
},
|
||||
"conflict": {
|
||||
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0|<6.4,>=6.0|9.1.2"
|
||||
"phpunit/phpunit": "<7.5|9.1.2"
|
||||
},
|
||||
"autoload": {
|
||||
"files": [ "bootstrap.php" ],
|
||||
|
Reference in New Issue
Block a user