Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php declare(strict_types=1);/** This file is part of sebastian/comparator.** (c) Sebastian Bergmann <sebastian@phpunit.de>** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/namespace SebastianBergmann\Comparator;use function get_class;use function in_array;use function is_object;use function sprintf;use function substr_replace;/*** Compares objects for equality.*/class ObjectComparator extends ArrayComparator{/*** Returns whether the comparator can compare two values.** @param mixed $expected The first value to compare* @param mixed $actual The second value to compare** @return bool*/public function accepts($expected, $actual){return is_object($expected) && is_object($actual);}/*** Asserts that two values are equal.** @param mixed $expected First value to compare* @param mixed $actual Second value to compare* @param float $delta Allowed numerical distance between two values to consider them equal* @param bool $canonicalize Arrays are sorted before comparison when set to true* @param bool $ignoreCase Case is ignored when set to true* @param array $processed List of already processed elements (used to prevent infinite recursion)** @throws ComparisonFailure*/public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false, array &$processed = [])/*: void*/{if (get_class($actual) !== get_class($expected)) {throw new ComparisonFailure($expected,$actual,$this->exporter->export($expected),$this->exporter->export($actual),false,sprintf('%s is not instance of expected class "%s".',$this->exporter->export($actual),get_class($expected)));}// don't compare twice to allow for cyclic dependenciesif (in_array([$actual, $expected], $processed, true) ||in_array([$expected, $actual], $processed, true)) {return;}$processed[] = [$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 testedif ($actual !== $expected) {try {parent::assertEquals($this->toArray($expected),$this->toArray($actual),$delta,$canonicalize,$ignoreCase,$processed);} catch (ComparisonFailure $e) {throw new 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.');}}}/*** Converts an object to an array containing all of its private, protected* and public properties.** @param object $object** @return array*/protected function toArray($object){return $this->exporter->toArray($object);}}