1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
<?php
/*
* This file is part of the Predis package.
*
* (c) 2009-2020 Daniele Alessandri
* (c) 2021-2025 Till Krüss
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Predis\Command\CommandInterface;
use SebastianBergmann\Exporter\Exporter;
/**
* PHPUnit constraint to verify that a Redis command matches certain conditions.
*/
class RedisCommandConstraint extends PHPUnit\Framework\Constraint\Constraint
{
protected $commandID;
protected $arguments;
/**
* @param string|CommandInterface $command Expected command instance or command ID
* @param ?array $arguments Expected command arguments
*/
public function __construct($command, ?array $arguments = null)
{
if ($command instanceof CommandInterface) {
$this->commandID = strtoupper($command->getId());
$this->arguments = $arguments ?: $command->getArguments();
} else {
$this->commandID = strtoupper($command);
$this->arguments = $arguments;
}
}
/**
* {@inheritdoc}
*/
public function matches($other): bool
{
if (!$other instanceof CommandInterface) {
return false;
}
if ($this->commandID && strtoupper($other->getId()) !== $this->commandID) {
return false;
}
if ($this->arguments !== null) {
$otherArguments = $other->getArguments();
if (count($this->arguments) !== count($otherArguments)) {
return false;
}
for ($i = 0; $i < count($this->arguments); ++$i) {
if (((string) $this->arguments[$i]) !== ((string) $otherArguments[$i])) {
return false;
}
}
}
return true;
}
/**
* {@inheritdoc}
*
* @todo Improve output using diff when expected and actual do not match.
*/
public function toString(): string
{
$exporter = new Exporter();
$string = 'is a Redis command';
if ($this->commandID) {
$string .= " with ID '{$this->commandID}'";
}
if ($this->arguments) {
$string .= " and the following arguments:\n\n";
$string .= $exporter->export($this->arguments);
}
return $string;
}
/**
* {@inheritdoc}
*/
protected function failureDescription($other): string
{
$string = is_object($other) ? get_class($other) : $other;
return "$string {$this->toString()}";
}
}
|