-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
ArraySubsetTest.php
89 lines (80 loc) · 3.03 KB
/
ArraySubsetTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (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 PHPUnit\Framework\Constraint;
use PHPUnit\Framework\ExpectationFailedException;
/**
* @small
*/
final class ArraySubsetTest extends ConstraintTestCase
{
public static function evaluateDataProvider(): array
{
return [
'loose array subset and array other' => [
'expected' => true,
'subset' => ['bar' => 0],
'other' => ['foo' => '', 'bar' => '0'],
'strict' => false,
],
'strict array subset and array other' => [
'expected' => false,
'subset' => ['bar' => 0],
'other' => ['foo' => '', 'bar' => '0'],
'strict' => true,
],
'loose array subset and ArrayObject other' => [
'expected' => true,
'subset' => ['bar' => 0],
'other' => new \ArrayObject(['foo' => '', 'bar' => '0']),
'strict' => false,
],
'strict ArrayObject subset and array other' => [
'expected' => true,
'subset' => new \ArrayObject(['bar' => 0]),
'other' => ['foo' => '', 'bar' => 0],
'strict' => true,
],
];
}
/**
* @param bool $expected
* @param array|\Traversable $subset
* @param array|\Traversable $other
* @param bool $strict
*
* @throws ExpectationFailedException
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
* @dataProvider evaluateDataProvider
*/
public function testEvaluate($expected, $subset, $other, $strict): void
{
$constraint = new ArraySubset($subset, $strict);
$this->assertSame($expected, $constraint->evaluate($other, '', true));
}
public function testEvaluateWithArrayAccess(): void
{
$arrayAccess = new \ArrayAccessible(['foo' => 'bar']);
$constraint = new ArraySubset(['foo' => 'bar']);
$this->assertTrue($constraint->evaluate($arrayAccess, '', true));
}
public function testEvaluateFailMessage(): void
{
$constraint = new ArraySubset(['foo' => 'bar']);
try {
$constraint->evaluate(['baz' => 'bar'], '', false);
$this->fail(\sprintf('Expected %s to be thrown.', ExpectationFailedException::class));
} catch (ExpectationFailedException $expectedException) {
$comparisonFailure = $expectedException->getComparisonFailure();
$this->assertNotNull($comparisonFailure);
$this->assertStringContainsString("'foo' => 'bar'", $comparisonFailure->getExpectedAsString());
$this->assertStringContainsString("'baz' => 'bar'", $comparisonFailure->getActualAsString());
}
}
}