Skip to content

Commit

Permalink
[11.x] Fixes PHPUnit 11 support (#49959)
Browse files Browse the repository at this point in the history
* Fixes PHPUnit 11 support

* Apply fixes from StyleCI

* Fully reverts to changes like before

* Removes non used phpstan error

* Fixes test suite

---------

Co-authored-by: StyleCI Bot <bot@styleci.io>
  • Loading branch information
nunomaduro and StyleCIBot authored Feb 3, 2024
1 parent 1d89f34 commit 4346406
Show file tree
Hide file tree
Showing 14 changed files with 599 additions and 711 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
fail-fast: true
matrix:
php: [8.2, 8.3]
phpunit: ['10.5', '11.0']
phpunit: ['10.5', '11.0.1']
stability: [prefer-lowest, prefer-stable]

name: PHP ${{ matrix.php }} - PHPUnit ${{ matrix.phpunit }} - ${{ matrix.stability }}
Expand Down
1 change: 0 additions & 1 deletion phpstan.src.neon.dist
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,5 @@ parameters:
- "#should always throw an exception or terminate script execution#"
- "#Instantiated class [a-zA-Z0-9\\\\_]+ not found.#"
- "#Unsafe usage of new static#"
- "#has an uninitialized readonly property#"
excludePaths:
- "src/Illuminate/Testing/ParallelRunner.php"
136 changes: 129 additions & 7 deletions src/Illuminate/Testing/Constraints/ArraySubset.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,139 @@

namespace Illuminate\Testing\Constraints;

use ArrayObject;
use PHPUnit\Framework\Constraint\Constraint;
use PHPUnit\Runner\Version;
use SebastianBergmann\Comparator\ComparisonFailure;
use SebastianBergmann\Exporter\Exporter;
use Traversable;

if (str_starts_with(Version::series(), '10')) {
class ArraySubset extends Constraint
class ArraySubset extends Constraint
{
/**
* @var iterable
*/
protected $subset;

/**
* @var bool
*/
protected $strict;

/**
* Create a new array subset constraint instance.
*
* @param iterable $subset
* @param bool $strict
* @return void
*/
public function __construct(iterable $subset, bool $strict = false)
{
use Concerns\ArraySubset;
$this->strict = $strict;
$this->subset = $subset;
}
} else {
readonly class ArraySubset extends Constraint

/**
* Evaluates the constraint for parameter $other.
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other
* @param string $description
* @param bool $returnResult
* @return bool|null
*
* @throws \PHPUnit\Framework\ExpectationFailedException
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
*/
public function evaluate($other, string $description = '', bool $returnResult = false): ?bool
{
use Concerns\ArraySubset;
// type cast $other & $this->subset as an array to allow
// support in standard array functions.
$other = $this->toArray($other);
$this->subset = $this->toArray($this->subset);

$patched = array_replace_recursive($other, $this->subset);

if ($this->strict) {
$result = $other === $patched;
} else {
$result = $other == $patched;
}

if ($returnResult) {
return $result;
}

if (! $result) {
$f = new ComparisonFailure(
$patched,
$other,
var_export($patched, true),
var_export($other, true)
);

$this->fail($other, $description, $f);
}

return null;
}

/**
* Returns a string representation of the constraint.
*
* @return string
*
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
*/
public function toString(): string
{
return 'has the subset '.(new Exporter)->export($this->subset);
}

/**
* Returns the description of the failure.
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other
* @return string
*
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
*/
protected function failureDescription($other): string
{
return 'an array '.$this->toString();
}

/**
* Returns the description of the failure.
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param iterable $other
* @return array
*/
protected function toArray(iterable $other): array
{
if (is_array($other)) {
return $other;
}

if ($other instanceof ArrayObject) {
return $other->getArrayCopy();
}

if ($other instanceof Traversable) {
return iterator_to_array($other);
}

return (array) $other;
}
}
139 changes: 0 additions & 139 deletions src/Illuminate/Testing/Constraints/Concerns/ArraySubset.php

This file was deleted.

82 changes: 0 additions & 82 deletions src/Illuminate/Testing/Constraints/Concerns/CountInDatabase.php

This file was deleted.

Loading

0 comments on commit 4346406

Please sign in to comment.