1 <?php
2 /*
3  * This file is part of PHPUnit.
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 
11 class PHPUnit_Framework_Constraint_ArraySubsetTest extends PHPUnit_Framework_TestCase
12 {
13     /**
14      * @param bool              $expected
15      * @param array|Traversable $subset
16      * @param array|Traversable $other
17      * @param bool              $strict
18      * @dataProvider evaluateDataProvider
19      */
20     public function testEvaluate($expected, $subset, $other, $strict)
21     {
22         $constraint = new PHPUnit_Framework_Constraint_ArraySubset($subset, $strict);
23 
24         $this->assertSame($expected, $constraint->evaluate($other, '', true));
25     }
26 
27     public static function evaluateDataProvider()
28     {
29         return [
30             'loose array subset and array other' => [
31                 'expected' => true,
32                 'subset'   => ['bar' => 0],
33                 'other'    => ['foo' => '', 'bar' => '0'],
34                 'strict'   => false
35             ],
36             'strict array subset and array other' => [
37                 'expected' => false,
38                 'subset'   => ['bar' => 0],
39                 'other'    => ['foo' => '', 'bar' => '0'],
40                 'strict'   => true
41             ],
42             'loose array subset and ArrayObject other' => [
43                 'expected' => true,
44                 'subset'   => ['bar' => 0],
45                 'other'    => new ArrayObject(['foo' => '', 'bar' => '0']),
46                 'strict'   => false
47             ],
48             'strict ArrayObject subset and array other' => [
49                 'expected' => true,
50                 'subset'   => new ArrayObject(['bar' => 0]),
51                 'other'    => ['foo' => '', 'bar' => 0],
52                 'strict'   => true
53             ],
54         ];
55     }
56 
57     public function testEvaluateWithArrayAccess()
58     {
59         $arrayAccess = new ArrayAccessible(['foo' => 'bar']);
60 
61         $constraint = new PHPUnit_Framework_Constraint_ArraySubset(['foo' => 'bar']);
62 
63         $this->assertTrue($constraint->evaluate($arrayAccess, '', true));
64     }
65 }
66