Chris@0
|
1 <?php
|
Chris@0
|
2 /*
|
Chris@14
|
3 * This file is part of sebastian/comparator.
|
Chris@0
|
4 *
|
Chris@0
|
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
|
Chris@0
|
6 *
|
Chris@0
|
7 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
8 * file that was distributed with this source code.
|
Chris@0
|
9 */
|
Chris@0
|
10
|
Chris@0
|
11 namespace SebastianBergmann\Comparator;
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * Compares scalar or NULL values for equality.
|
Chris@0
|
15 */
|
Chris@0
|
16 class ScalarComparator extends Comparator
|
Chris@0
|
17 {
|
Chris@0
|
18 /**
|
Chris@0
|
19 * Returns whether the comparator can compare two values.
|
Chris@0
|
20 *
|
Chris@14
|
21 * @param mixed $expected The first value to compare
|
Chris@14
|
22 * @param mixed $actual The second value to compare
|
Chris@14
|
23 *
|
Chris@0
|
24 * @return bool
|
Chris@14
|
25 *
|
Chris@0
|
26 * @since Method available since Release 3.6.0
|
Chris@0
|
27 */
|
Chris@0
|
28 public function accepts($expected, $actual)
|
Chris@0
|
29 {
|
Chris@14
|
30 return ((\is_scalar($expected) xor null === $expected) &&
|
Chris@14
|
31 (\is_scalar($actual) xor null === $actual))
|
Chris@0
|
32 // allow comparison between strings and objects featuring __toString()
|
Chris@14
|
33 || (\is_string($expected) && \is_object($actual) && \method_exists($actual, '__toString'))
|
Chris@14
|
34 || (\is_object($expected) && \method_exists($expected, '__toString') && \is_string($actual));
|
Chris@0
|
35 }
|
Chris@0
|
36
|
Chris@0
|
37 /**
|
Chris@0
|
38 * Asserts that two values are equal.
|
Chris@0
|
39 *
|
Chris@0
|
40 * @param mixed $expected First value to compare
|
Chris@0
|
41 * @param mixed $actual Second value to compare
|
Chris@0
|
42 * @param float $delta Allowed numerical distance between two values to consider them equal
|
Chris@0
|
43 * @param bool $canonicalize Arrays are sorted before comparison when set to true
|
Chris@0
|
44 * @param bool $ignoreCase Case is ignored when set to true
|
Chris@0
|
45 *
|
Chris@0
|
46 * @throws ComparisonFailure
|
Chris@0
|
47 */
|
Chris@0
|
48 public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false)
|
Chris@0
|
49 {
|
Chris@0
|
50 $expectedToCompare = $expected;
|
Chris@0
|
51 $actualToCompare = $actual;
|
Chris@0
|
52
|
Chris@0
|
53 // always compare as strings to avoid strange behaviour
|
Chris@0
|
54 // otherwise 0 == 'Foobar'
|
Chris@14
|
55 if (\is_string($expected) || \is_string($actual)) {
|
Chris@0
|
56 $expectedToCompare = (string) $expectedToCompare;
|
Chris@0
|
57 $actualToCompare = (string) $actualToCompare;
|
Chris@0
|
58
|
Chris@0
|
59 if ($ignoreCase) {
|
Chris@14
|
60 $expectedToCompare = \strtolower($expectedToCompare);
|
Chris@14
|
61 $actualToCompare = \strtolower($actualToCompare);
|
Chris@0
|
62 }
|
Chris@0
|
63 }
|
Chris@0
|
64
|
Chris@0
|
65 if ($expectedToCompare != $actualToCompare) {
|
Chris@14
|
66 if (\is_string($expected) && \is_string($actual)) {
|
Chris@0
|
67 throw new ComparisonFailure(
|
Chris@0
|
68 $expected,
|
Chris@0
|
69 $actual,
|
Chris@0
|
70 $this->exporter->export($expected),
|
Chris@0
|
71 $this->exporter->export($actual),
|
Chris@0
|
72 false,
|
Chris@0
|
73 'Failed asserting that two strings are equal.'
|
Chris@0
|
74 );
|
Chris@0
|
75 }
|
Chris@0
|
76
|
Chris@0
|
77 throw new ComparisonFailure(
|
Chris@0
|
78 $expected,
|
Chris@0
|
79 $actual,
|
Chris@0
|
80 // no diff is required
|
Chris@0
|
81 '',
|
Chris@0
|
82 '',
|
Chris@0
|
83 false,
|
Chris@14
|
84 \sprintf(
|
Chris@0
|
85 'Failed asserting that %s matches expected %s.',
|
Chris@0
|
86 $this->exporter->export($actual),
|
Chris@0
|
87 $this->exporter->export($expected)
|
Chris@0
|
88 )
|
Chris@0
|
89 );
|
Chris@0
|
90 }
|
Chris@0
|
91 }
|
Chris@0
|
92 }
|