|
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 | +``` |
0 commit comments