Support PHPUnit 8 and PHPUnit 9 in constraint compatibility trait

This commit is contained in:
Andreas Braun 2020-10-22 14:14:44 +02:00
parent 5a4be6841d
commit f79ad80009
No known key found for this signature in database
GPG Key ID: 101B1FBCCA55FAFC
6 changed files with 213 additions and 26 deletions

View File

@ -20,9 +20,19 @@ if (\PHP_VERSION_ID < 70000 || !$r->getMethod('matches')->hasReturnType()) {
{
use Legacy\ConstraintTraitForV6;
}
} else {
} elseif ($r->getProperty('exporter')->isProtected()) {
trait ConstraintTrait
{
use Legacy\ConstraintTraitForV7;
}
} elseif (\PHP_VERSION < 70100 || !$r->getMethod('evaluate')->hasReturnType()) {
trait ConstraintTrait
{
use Legacy\ConstraintTraitForV8;
}
} else {
trait ConstraintTrait
{
use Legacy\ConstraintTraitForV9;
}
}

View File

@ -0,0 +1,62 @@
<?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 ConstraintLogicTrait
{
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 doAdditionalFailureDescription($other): string
{
return '';
}
private function doCount(): int
{
return 1;
}
private function doFailureDescription($other): string
{
return $this->exporter()->export($other).' '.$this->toString();
}
private function doMatches($other): bool
{
return false;
}
private function doToString(): string
{
return '';
}
}

View File

@ -18,6 +18,14 @@ use SebastianBergmann\Exporter\Exporter;
*/
trait ConstraintTraitForV6
{
/**
* @return bool|null
*/
public function evaluate($other, $description = '', $returnResult = false)
{
return $this->doEvaluate($other, $description, $returnResult);
}
/**
* @return int
*/
@ -86,6 +94,25 @@ trait ConstraintTraitForV6
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();

View File

@ -16,6 +16,16 @@ namespace Symfony\Bridge\PhpUnit\Legacy;
*/
trait ConstraintTraitForV7
{
use ConstraintLogicTrait;
/**
* @return bool|null
*/
public function evaluate($other, $description = '', $returnResult = false)
{
return $this->doEvaluate($other, $description, $returnResult);
}
public function count(): int
{
return $this->doCount();
@ -40,29 +50,4 @@ trait ConstraintTraitForV7
{
return $this->doMatches($other);
}
private function doAdditionalFailureDescription($other): string
{
return '';
}
private function doCount(): int
{
return 1;
}
private function doFailureDescription($other): string
{
return $this->exporter()->export($other).' '.$this->toString();
}
private function doMatches($other): bool
{
return false;
}
private function doToString(): string
{
return '';
}
}

View File

@ -0,0 +1,53 @@
<?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 ConstraintTraitForV8
{
use ConstraintLogicTrait;
/**
* @return bool|null
*/
public function evaluate($other, $description = '', $returnResult = false)
{
return $this->doEvaluate($other, $description, $returnResult);
}
public function count(): int
{
return $this->doCount();
}
public function toString(): string
{
return $this->doToString();
}
protected function additionalFailureDescription($other): string
{
return $this->doAdditionalFailureDescription($other);
}
protected function failureDescription($other): string
{
return $this->doFailureDescription($other);
}
protected function matches($other): bool
{
return $this->doMatches($other);
}
}

View File

@ -0,0 +1,50 @@
<?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 ConstraintTraitForV9
{
use ConstraintLogicTrait;
public function evaluate($other, string $description = '', bool $returnResult = false): ?bool
{
return $this->doEvaluate($other, $description, $returnResult);
}
public function count(): int
{
return $this->doCount();
}
public function toString(): string
{
return $this->doToString();
}
protected function additionalFailureDescription($other): string
{
return $this->doAdditionalFailureDescription($other);
}
protected function failureDescription($other): string
{
return $this->doFailureDescription($other);
}
protected function matches($other): bool
{
return $this->doMatches($other);
}
}