فهرست منبع

[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.
Daniele Alessandri 11 سال پیش
والد
کامیت
d16a1c8705
2فایلهای تغییر یافته به همراه98 افزوده شده و 0 حذف شده
  1. 97 0
      tests/PHPUnit/RedisCommandConstraint.php
  2. 1 0
      tests/bootstrap.php

+ 97 - 0
tests/PHPUnit/RedisCommandConstraint.php

@@ -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()}";
+    }
+}

+ 1 - 0
tests/bootstrap.php

@@ -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/ServerVersionTestCase.php';