Skip to content

Commit addfba2

Browse files
committed
Merge branch 'dev' into PHPUnit_8
2 parents 7aae6b8 + da3d172 commit addfba2

File tree

4 files changed

+189
-5
lines changed

4 files changed

+189
-5
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ composer.lock
99
/.phpunit.result.cache
1010

1111
/coverage
12+
/.phpunit.cache

README.md

Lines changed: 131 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,131 @@
1-
# phpunit-array-contains-asserts
2-
Provides PHPUnit assertions to test array contains data or structure
1+
# PHPUnit arrayContains asserts
2+
3+
Provides PHPUnit assertions to test then array-like data contains expected data with expected structure.
4+
5+
This PHPUnit extension was written for PHPUnit 10, but also has branches for PHPUnit 8 and PHPUnit 9 . If it doesn't
6+
work properly, please don't hesitate to open
7+
a [new Issue on GitHub](https://github.com/alezhu/phpunit-array-contains-asserts/issues), or, even better, create a Pull
8+
Request with a proposed fix .
9+
10+
**Table of contents:**
11+
12+
1. [Install](#install)
13+
2. [Usage](#usage)
14+
1. [Constraint `ArrayContains`](#constraint-ArrayContains)
15+
2. [Constraint `ArrayContainsOnly`](#constraint-ArrayContainsOnly)
16+
17+
Install
18+
-------
19+
20+
`PHPUnit arrayContains asserts` is available
21+
on [Packagist.org](https://packagist.org/packages/alezhu/phpunit-array-contains-asserts) and can be installed
22+
using [Composer](https://getcomposer.org/):
23+
24+
```shell
25+
composer require --dev alezhu/phpunit-array-contains-asserts
26+
```
27+
28+
Usage
29+
-----
30+
31+
There are three (basically equivalent) options to use `PHPUnitArrayAssertions`:
32+
33+
- By using the
34+
static [class `Alezhu\PHPUnitArrayContainsAsserts\Assert`](https://github.com/alezhu/phpunit-array-contains-asserts/blob/main/src/Assert.php)
35+
- By using
36+
the [trait `Alezhu\PHPUnitArrayContainsAsserts\ArrayContainsTrait`](https://github.com/alezhu/phpunit-array-contains-asserts/blob/main/src/ArrayContainsTrait.php)
37+
in your test case
38+
- By creating
39+
new [constraint instances](https://github.com/alezhu/phpunit-array-contains-asserts/tree/main/src/Constraint) (`Alezhu\PHPUnitArrayContainsAsserts\Constraint\…`)
40+
41+
All options do the same, the only difference is that the static class and trait both
42+
throw [class `Alezhu\PHPUnitArrayContainsAsserts\Exception\InvalidArgumentTypeException`](https://github.com/alezhu/phpunit-array-contains-asserts/blob/main/src/Exception/InvalidArgumentTypeException.php) (
43+
or `PHPUnit\Framework\InvalidArgumentException` for PHPUnit 9 and 8) exceptions for
44+
invalid parameters.
45+
Creating new constraint instances is useful for advanced assertions, e.g. together
46+
with `PHPUnit\Framework\Constraint\LogicalAnd`.
47+
48+
### Constraint `ArrayContains`
49+
50+
The [`ArrayContains` constraint](https://github.com/alezhu/phpunit-array-contains-asserts/blob/main/src/Constraint/ArrayContains.php)
51+
asserts that an array contains all expected values (for non-associative arrays) or all expected keys with expected
52+
values (for associative arrays).
53+
54+
Expected values can be set directly or via another PHPUnit constraints (`PHPUnit\Framework\Constraint\...`).
55+
56+
Expected and actual data can be array or iterator or inherit ArrayObject or implements ArrayAccess+Countable interfaces.
57+
58+
Expected and actual data must have same associative kind.
59+
60+
**Usage:**
61+
62+
```php
63+
use Alezhu\PHPUnitArrayContainsAsserts\Assert;
64+
use PHPUnit\Framework\Constraint\IsType;
65+
66+
//Passed
67+
Assert::assertArrayContains(
68+
[
69+
"foo" => new isType(IsType::TYPE_STRING),
70+
"baz" => 1
71+
],
72+
[
73+
"foo" => "value",
74+
"bar" => true,
75+
"baz" => 1
76+
]
77+
);
78+
//Not Passed
79+
Assert::assertArrayContains(
80+
[
81+
"foo" => new isType(IsType::TYPE_STRING),
82+
"baz" => 1
83+
],
84+
[
85+
"foo" => "bar",
86+
]
87+
);
88+
```
89+
90+
### Constraint `ArrayContainsOnly`
91+
92+
The [`ArrayContainsOnly` constraint](https://github.com/alezhu/phpunit-array-contains-asserts/blob/main/src/Constraint/ArrayContainsOnly.php)
93+
asserts that an array contains **only** all expected values (for non-associative arrays) or ***only*** all expected keys
94+
with expected values (for associative arrays).
95+
96+
Expected values can be set directly or via another PHPUnit constraints (`PHPUnit\Framework\Constraint\...`).
97+
98+
Expected and actual data can be array or iterator or inherit ArrayObject or implements ArrayAccess+Countable interfaces.
99+
100+
Expected and actual data must have same associative kind.
101+
102+
**Usage:**
103+
104+
```php
105+
use Alezhu\PHPUnitArrayContainsAsserts\Assert;
106+
use PHPUnit\Framework\Constraint\IsType;
107+
108+
//Passed
109+
Assert::assertArrayContainsOnly(
110+
[
111+
"foo" => new isType(IsType::TYPE_STRING),
112+
"baz" => 1
113+
],
114+
[
115+
"foo" => "value",
116+
"baz" => 1
117+
]
118+
);
119+
//Not Passed
120+
Assert::assertArrayContainsOnly(
121+
[
122+
"foo" => new isType(IsType::TYPE_STRING),
123+
"baz" => 1
124+
],
125+
[
126+
"foo" => "bar",
127+
"bar" => true,
128+
"baz" => 1
129+
]
130+
);
131+
```

tests/Alezhu/PHPUnitArrayContainsAsserts/Constraint/ArrayContainsTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Alezhu\PHPUnitArrayContainsAsserts\Constraint\ArrayContains;
66
use PHPUnit\Framework\AssertionFailedError;
7+
use PHPUnit\Framework\Constraint\IsType;
78
use PHPUnit\Framework\ExpectationFailedException;
89
use PHPUnit\Framework\TestCase;
910
use SebastianBergmann\Exporter\Exporter;
@@ -36,7 +37,7 @@ public function test_matches_unassoc_should_be_valid_if_all_expected_values_in_r
3637

3738
public function test_matches_assoc_should_be_valid_if_all_expected_values_in_result()
3839
{
39-
$instance = new ArrayContains(["foo" => self::isType("string"), "bar" => 1]);
40+
$instance = new ArrayContains(["foo" => self::isType(IsType::TYPE_STRING), "bar" => 1]);
4041
$result = $instance->evaluate(["bar" => 1, "foo" => "value", "baz" => true], '', true);
4142
self::assertTrue($result);
4243
}
@@ -79,7 +80,7 @@ public function test_matches_assoc_should_raise_exception_if_some_of_expected_ke
7980
{
8081
$this->expectException(ExpectationFailedException::class);
8182
$result = ["bar" => "value"];
82-
$instance = new ArrayContains(["foo" => self::isType("string"), "bar" => 1]);
83+
$instance = new ArrayContains(["foo" => self::isType(IsType::TYPE_STRING), "bar" => 1]);
8384
$exporter = new Exporter();
8485
$this->expectExceptionMessage(
8586
sprintf(
@@ -95,7 +96,7 @@ public function test_matches_assoc_should_raise_exception_if_some_of_expected_va
9596
{
9697
$this->expectException(ExpectationFailedException::class);
9798
$result = ["bar" => "value", "foo" => "value"];
98-
$instance = new ArrayContains(["foo" => self::isType("string"), "bar" => 1]);
99+
$instance = new ArrayContains(["foo" => self::isType(IsType::TYPE_STRING), "bar" => 1]);
99100
$exporter = new Exporter();
100101
$this->expectExceptionMessage(
101102
sprintf(

tests/ArrayContainsTraitTest.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace Alezhu\PHPUnitArrayContainsAsserts\Tests;
4+
5+
6+
use Alezhu\PHPUnitArrayContainsAsserts\Assert;
7+
use Alezhu\PHPUnitArrayContainsAsserts\Exception\InvalidArgumentTypeException;
8+
use PHPUnit\Framework\TestCase;
9+
10+
class ArrayContainsTraitTest extends TestCase
11+
{
12+
public function test_assertArrayContains_should_be_valid_for_valid_arguments()
13+
{
14+
Assert::assertArrayContains(["foo" => "bar", "baz" => 1], ["foo" => "bar", "baz" => 1]);
15+
}
16+
17+
public function test_assertArrayContainsOnly_should_be_valid_for_valid_arguments()
18+
{
19+
Assert::assertArrayContainsOnly(["foo" => "bar", "baz" => 1], ["foo" => "bar", "baz" => 1]);
20+
}
21+
22+
public function test_assertArrayContains_should_raise_exception_if_passed_not_array_like_subset()
23+
{
24+
$this->expectException(InvalidArgumentTypeException::class);
25+
$this->expectExceptionMessage("Argument #1 must be array or ArrayAccess or Iterator");
26+
27+
Assert::assertArrayContains("string", []);
28+
}
29+
30+
public function test_assertArrayContains_should_raise_exception_if_passed_not_array_like_actual()
31+
{
32+
$this->expectException(InvalidArgumentTypeException::class);
33+
$this->expectExceptionMessage("Argument #2 must be array or ArrayAccess or Iterator");
34+
35+
Assert::assertArrayContains([], "string");
36+
}
37+
38+
public function test_assertArrayContainsOnly_should_raise_exception_if_passed_not_array_like_subset()
39+
{
40+
$this->expectException(InvalidArgumentTypeException::class);
41+
$this->expectExceptionMessage("Argument #1 must be array or ArrayAccess or Iterator");
42+
43+
Assert::assertArrayContainsOnly("string", []);
44+
}
45+
46+
public function test_assertArrayContainsOnly_should_raise_exception_if_passed_not_array_like_actual()
47+
{
48+
$this->expectException(InvalidArgumentTypeException::class);
49+
$this->expectExceptionMessage("Argument #2 must be array or ArrayAccess or Iterator");
50+
51+
Assert::assertArrayContainsOnly([], "string");
52+
}
53+
}

0 commit comments

Comments
 (0)