5 private $_wanted = array();
6 private $_actual = array();
8 public function __construct($wanted, $actual)
10 if ($this->_invalidString($wanted)) {
11 throw new PHPT_Util_Diff_InvalidParameter('wanted');
13 if ($this->_invalidString($actual)) {
14 throw new PHPT_Util_Diff_InvalidParameter('actual');
16 $standardize_eol = array($this, '_standardizeEol');
17 $this->_wanted
= array_map($standardize_eol, explode("\n", $wanted));
18 $this->_actual
= array_map($standardize_eol, explode("\n", $actual));
21 public function __toString()
23 if ($this->_cheapComparison()) {
29 $actual_diff = array_diff_assoc($this->_wanted
, $this->_actual
);
30 $wanted_diff = array_diff_assoc($this->_actual
, $this->_wanted
);
32 foreach ($wanted_diff as $key => $value) {
37 $return[sprintf('%03d>', $key)] = sprintf('%03d+ %s', $key, $value);
40 foreach ($actual_diff as $key => $value) {
45 $return[sprintf('%03d<', $key)] = sprintf('%03d- %s', $key, $value);
49 return implode(PHP_EOL
, $return);
52 private function _standardizeEol($value)
54 return rtrim($value, "\r");
57 private function _cheapComparison()
59 return strcmp(serialize($this->_wanted
), serialize($this->_actual
)) === 0;
62 private function _invalidString($string)
64 if (is_string($string)) {
66 } elseif (is_object($string)) {
67 return !(method_exists($string, '__toString') && (string)$string == $string);
69 return (string)$string != $string;