1<?php
2/*
3 * This file is part of the Comparator package.
4 *
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
9 */
10
11namespace SebastianBergmann\Comparator;
12
13/**
14 * @coversDefaultClass SebastianBergmann\Comparator\ScalarComparator
15 *
16 */
17class ScalarComparatorTest extends \PHPUnit_Framework_TestCase
18{
19    private $comparator;
20
21    protected function setUp()
22    {
23        $this->comparator = new ScalarComparator;
24    }
25
26    public function acceptsSucceedsProvider()
27    {
28        return array(
29          array("string", "string"),
30          array(new ClassWithToString, "string"),
31          array("string", new ClassWithToString),
32          array("string", null),
33          array(false, "string"),
34          array(false, true),
35          array(null, false),
36          array(null, null),
37          array("10", 10),
38          array("", false),
39          array("1", true),
40          array(1, true),
41          array(0, false),
42          array(0.1, "0.1")
43        );
44    }
45
46    public function acceptsFailsProvider()
47    {
48        return array(
49          array(array(), array()),
50          array("string", array()),
51          array(new ClassWithToString, new ClassWithToString),
52          array(false, new ClassWithToString),
53          array(tmpfile(), tmpfile())
54        );
55    }
56
57    public function assertEqualsSucceedsProvider()
58    {
59        return array(
60          array("string", "string"),
61          array(new ClassWithToString, new ClassWithToString),
62          array("string representation", new ClassWithToString),
63          array(new ClassWithToString, "string representation"),
64          array("string", "STRING", true),
65          array("STRING", "string", true),
66          array("String Representation", new ClassWithToString, true),
67          array(new ClassWithToString, "String Representation", true),
68          array("10", 10),
69          array("", false),
70          array("1", true),
71          array(1, true),
72          array(0, false),
73          array(0.1, "0.1"),
74          array(false, null),
75          array(false, false),
76          array(true, true),
77          array(null, null)
78        );
79    }
80
81    public function assertEqualsFailsProvider()
82    {
83        $stringException = 'Failed asserting that two strings are equal.';
84        $otherException = 'matches expected';
85
86        return array(
87          array("string", "other string", $stringException),
88          array("string", "STRING", $stringException),
89          array("STRING", "string", $stringException),
90          array("string", "other string", $stringException),
91          // https://github.com/sebastianbergmann/phpunit/issues/1023
92          array('9E6666666','9E7777777', $stringException),
93          array(new ClassWithToString, "does not match", $otherException),
94          array("does not match", new ClassWithToString, $otherException),
95          array(0, 'Foobar', $otherException),
96          array('Foobar', 0, $otherException),
97          array("10", 25, $otherException),
98          array("1", false, $otherException),
99          array("", true, $otherException),
100          array(false, true, $otherException),
101          array(true, false, $otherException),
102          array(null, true, $otherException),
103          array(0, true, $otherException)
104        );
105    }
106
107    /**
108     * @covers       ::accepts
109     * @dataProvider acceptsSucceedsProvider
110     */
111    public function testAcceptsSucceeds($expected, $actual)
112    {
113        $this->assertTrue(
114          $this->comparator->accepts($expected, $actual)
115        );
116    }
117
118    /**
119     * @covers       ::accepts
120     * @dataProvider acceptsFailsProvider
121     */
122    public function testAcceptsFails($expected, $actual)
123    {
124        $this->assertFalse(
125          $this->comparator->accepts($expected, $actual)
126        );
127    }
128
129    /**
130     * @covers       ::assertEquals
131     * @dataProvider assertEqualsSucceedsProvider
132     */
133    public function testAssertEqualsSucceeds($expected, $actual, $ignoreCase = false)
134    {
135        $exception = null;
136
137        try {
138            $this->comparator->assertEquals($expected, $actual, 0.0, false, $ignoreCase);
139        }
140
141        catch (ComparisonFailure $exception) {
142        }
143
144        $this->assertNull($exception, 'Unexpected ComparisonFailure');
145    }
146
147    /**
148     * @covers       ::assertEquals
149     * @dataProvider assertEqualsFailsProvider
150     */
151    public function testAssertEqualsFails($expected, $actual, $message)
152    {
153        $this->setExpectedException(
154          'SebastianBergmann\\Comparator\\ComparisonFailure', $message
155        );
156        $this->comparator->assertEquals($expected, $actual);
157    }
158}
159