Example #1
0
    /**
     * Asserts that two values are equal.
     *
     * @param  mixed $expected The first value to compare
     * @param  mixed $actual The second value to compare
     * @param  float $delta The allowed numerical distance between two values to
     *                      consider them equal
     * @param  bool  $canonicalize If set to TRUE, arrays are sorted before
     *                             comparison
     * @param  bool  $ignoreCase If set to TRUE, upper- and lowercasing is
     *                           ignored when comparing string values
     * @throws PHPUnit_Framework_ComparisonFailure Thrown when the comparison
     *                           fails. Contains information about the
     *                           specific errors that lead to the failure.
     */
    public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE, array &$processed = array())
    {
        if (get_class($actual) !== get_class($expected)) {
            throw new PHPUnit_Framework_ComparisonFailure(
              $expected,
              $actual,
              PHPUnit_Util_Type::export($expected),
              PHPUnit_Util_Type::export($actual),
              FALSE,
              sprintf(
                '%s is not instance of expected class "%s".',

                PHPUnit_Util_Type::export($actual),
                get_class($expected)
              )
            );
        }

        // don't compare twice to allow for cyclic dependencies
        if (in_array(array($actual, $expected), $processed, TRUE) ||
            in_array(array($expected, $actual), $processed, TRUE)) {
            return;
        }

        $processed[] = array($actual, $expected);

        // don't compare objects if they are identical
        // this helps to avoid the error "maximum function nesting level reached"
        // CAUTION: this conditional clause is not tested
        if ($actual !== $expected) {
            try {
                parent::assertEquals($this->toArray($expected), $this->toArray($actual), $delta, $canonicalize, $ignoreCase, $processed);
            }

            catch (PHPUnit_Framework_ComparisonFailure $e) {
                throw new PHPUnit_Framework_ComparisonFailure(
                  $expected,
                  $actual,
                  // replace "Array" with "MyClass object"
                  substr_replace($e->getExpectedAsString(), get_class($expected).' Object', 0, 5),
                  substr_replace($e->getActualAsString(), get_class($actual).' Object', 0, 5),
                  FALSE,
                  'Failed asserting that two objects are equal.'
                );
            }
        }
    }
 /**
  * {@inheritdoc}
  * @param Enumerable $actual
  */
 public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE, array &$processed = array())
 {
     parent::assertEquals($expected, $actual->toArrayDeep(), $delta, $canonicalize, $ignoreCase, $processed);
 }