mirror of
https://github.com/predis/predis.git
synced 2026-08-30 12:15:03 +00:00
[tests] Add a PHPUnit constraint to verify commands.
Commands are verified by checking their IDs and optionally arguments. Passing a command instance is only a shortcut to set the expected ID and arguments, commands are never compared for identity but always for equivalence.
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Predis package.
|
||||
*
|
||||
* (c) Daniele Alessandri <suppakilla@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Predis\Command\CommandInterface;
|
||||
|
||||
/**
|
||||
* Constraint that verifies a redis command.
|
||||
*/
|
||||
class RedisCommandConstraint extends PHPUnit_Framework_Constraint
|
||||
{
|
||||
protected $commandID;
|
||||
protected $arguments;
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
*/
|
||||
public function __construct($command = null, array $arguments = null)
|
||||
{
|
||||
if ($command instanceof CommandInterface) {
|
||||
$this->commandID = $command->getId();
|
||||
$this->arguments = $arguments ?: $commant->getArguments();
|
||||
} else {
|
||||
$this->commandID = $command;
|
||||
$this->arguments = $arguments;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function matches($other)
|
||||
{
|
||||
if (!$other instanceof CommandInterface) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->commandID && $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 arguments of a
|
||||
* command do not match.
|
||||
*/
|
||||
public function toString()
|
||||
{
|
||||
$string = 'is a Redis command';
|
||||
|
||||
if ($this->commandID) {
|
||||
$string .= " with ID `{$this->commandID}";
|
||||
}
|
||||
|
||||
if ($this->arguments) {
|
||||
$string .= " and the following arguments:\n\n";
|
||||
$string .= PHPUnit_Util_Type::export($this->arguments);
|
||||
}
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function failureDescription($other)
|
||||
{
|
||||
$string = is_object($other) ? get_class($other) : $other;
|
||||
|
||||
return "$string {$this->toString()}";
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@
|
||||
require __DIR__.'/../autoload.php';
|
||||
|
||||
require __DIR__.'/PHPUnit/ArrayHasSameValuesConstraint.php';
|
||||
require __DIR__.'/PHPUnit/RedisCommandConstraint.php';
|
||||
require __DIR__.'/PHPUnit/CommandTestCase.php';
|
||||
require __DIR__.'/PHPUnit/ConnectionTestCase.php';
|
||||
require __DIR__.'/PHPUnit/RedisProfileTestCase.php';
|
||||
|
||||
Reference in New Issue
Block a user