Files
predis/tests/PHPUnit/CommandTestCase.php
T
Daniele Alessandri dc14c29676 Rename certain namespaces, interfaces and classes.
Now we follow a Symfony2-like naming convention for namespaces, interfaces
and classes sticking with one clear rule.

- Renamed namespaces:

  - Predis\Network
  - Predis\Profiles
  - Predis\Iterators
  - Predis\Options
  - Predis\Commands
  - Predis\Commands\Processors

- Renamed interfaces:

  - Predis\IReplyObject
  - Predis\IRedisServerError
  - Predis\IConnectionFactory
  - Predis\IConnectionParameters
  - Predis\Options\IOption
  - Predis\Options\IClientOptions
  - Predis\Profile\IServerProfile
  - Predis\Pipeline\IPipelineExecutor
  - Predis\Distribution\INodeKeyGenerator
  - Predis\Distribution\IDistributionStrategy
  - Predis\Protocol\IProtocolProcessor
  - Predis\Protocol\IResponseReader
  - Predis\Protocol\IResponseHandler
  - Predis\Protocol\ICommandSerializer
  - Predis\Protocol\IComposableProtocolProcessor
  - Predis\Network\IConnection
  - Predis\Network\IConnectionSingle
  - Predis\Network\IConnectionComposable
  - Predis\Network\IConnectionCluster
  - Predis\Network\IConnectionReplication
  - Predis\Commands\ICommand
  - Predis\Commands\IPrefixable
  - Predis\Command\Processor\ICommandProcessor
  - Predis\Command\Processor\ICommandProcessorChain
  - Predis\Command\Processor\IProcessingSupport

- Renamed Classes:

  - Predis\Commands\Command
  - Predis\Network\ConnectionBase

- Classes moved to different namespaces:

  - Predis\MonitorContext

Meh
2012-01-31 18:19:18 +01:00

175 lines
4.2 KiB
PHP

<?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.
*/
namespace Predis\Command;
use \PHPUnit_Framework_TestCase as StandardTestCase;
use Predis\Client;
use Predis\Profile\ServerProfile;
use Predis\Profile\ServerProfileInterface;
/**
*
*/
abstract class CommandTestCase extends StandardTestCase
{
/**
* Returns the expected command.
*
* @return CommandInterface|string Instance or FQN of the expected command.
*/
protected abstract function getExpectedCommand();
/**
* Returns the expected command ID.
*
* @return string
*/
protected abstract function getExpectedId();
/**
* Returns a new command instance.
*
* @return CommandInterface
*/
protected function getCommand()
{
$command = $this->getExpectedCommand();
return $command instanceof CommandInterface ? $command : new $command();
}
/**
* Return the server profile used during the tests.
*
* @return ServerProfileInterface
*/
protected function getProfile()
{
return ServerProfile::get(REDIS_SERVER_VERSION);
}
/**
* Returns a new client instance.
*
* @param Boolean $connect Flush selected database before returning the client.
* @return Client
*/
protected function getClient($flushdb = true)
{
$profile = $this->getProfile();
if (!$profile->supportsCommand($id = $this->getExpectedId())) {
$this->markTestSkipped("The profile {$profile->getVersion()} does not support command {$id}");
}
$parameters = array(
'host' => REDIS_SERVER_HOST,
'port' => REDIS_SERVER_PORT,
);
$options = array(
'profile' => $profile
);
$client = new Client($parameters, $options);
$client->connect();
$client->select(REDIS_SERVER_DBNUM);
if ($flushdb) {
$client->flushdb();
}
return $client;
}
/**
* Returns wether the command is prefixable or not.
*
* @return Boolean
*/
protected function isPrefixable()
{
return $this->getCommand() instanceof PrefixableCommandInterface;
}
/**
* Returns a new command instance with the specified arguments.
*
* @param ... List of arguments for the command.
* @return CommandInterface
*/
protected function getCommandWithArguments(/* arguments */)
{
return $this->getCommandWithArgumentsArray(func_get_args());
}
/**
* Returns a new command instance with the specified arguments.
*
* @param array $arguments Arguments for the command.
* @return CommandInterface
*/
protected function getCommandWithArgumentsArray(Array $arguments)
{
$command = $this->getCommand();
$command->setArguments($arguments);
return $command;
}
/**
* Sleep the test case with microseconds resolution.
*
* @param float $seconds Seconds to sleep.
*/
protected function sleep($seconds)
{
usleep($seconds * 1000000);
}
/**
* Asserts that two arrays have the same values, even if with different order.
*
* @param Array $expected Expected array.
* @param Array $actual Actual array.
*/
protected function assertSameValues(Array $expected, Array $actual)
{
$this->assertThat($expected, new \ArrayHasSameValuesConstraint($actual));
}
/**
* @group disconnected
*/
public function testCommandId()
{
$command = $this->getCommand();
$this->assertInstanceOf('Predis\Command\CommandInterface', $command);
$this->assertEquals($this->getExpectedId(), $command->getId());
}
/**
* @group disconnected
*/
public function testRawArguments()
{
$expected = array('1st', '2nd', '3rd', '4th');
$command = $this->getCommand();
$command->setRawArguments($expected);
$this->assertSame($expected, $command->getArguments());
}
}