| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 87df766 commit 9452e3c
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -276,6 +276,21 @@ private static function getExpressionResolvers(): array | |||
| 276 | 276 | 'ObjectHasAttribute' => static function (Scope $scope, Arg $property, Arg $object): FuncCall { | |
| 277 | 277 | return new FuncCall(new Name('property_exists'), [$object, $property]); | |
| 278 | 278 | }, | |
| 279 | + 'Contains' => static function (Scope $scope, Arg $needle, Arg $haystack): Expr { | ||
| 280 | + return new Expr\BinaryOp\BooleanOr( | ||
| 281 | + new Expr\Instanceof_($haystack->value, new Name('Traversable')), | ||
| 282 | + new FuncCall(new Name('in_array'), [$needle, $haystack, new Arg(new ConstFetch(new Name('true')))]) | ||
| 283 | + ); | ||
| 284 | + }, | ||
| 285 | + 'ContainsEquals' => static function (Scope $scope, Arg $needle, Arg $haystack): Expr { | ||
| 286 | + return new Expr\BinaryOp\BooleanOr( | ||
| 287 | + new Expr\Instanceof_($haystack->value, new Name('Traversable')), | ||
| 288 | + new Expr\BinaryOp\BooleanAnd( | ||
| 289 | + new Expr\BooleanNot(new Expr\Empty_($haystack->value)), | ||
| 290 | + new FuncCall(new Name('in_array'), [$needle, $haystack, new Arg(new ConstFetch(new Name('false')))]) | ||
| 291 | + ) | ||
| 292 | + ); | ||
| 293 | + }, | ||
| 279 | 294 | 'ContainsOnlyInstancesOf' => static function (Scope $scope, Arg $className, Arg $haystack): Expr { | |
| 280 | 295 | return new Expr\BinaryOp\BooleanOr( | |
| 281 | 296 | new Expr\Instanceof_($haystack->value, new Name('Traversable')), | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -4,6 +4,8 @@ | |||
| 4 | 4 | ||
| 5 | 5 | use function PHPStan\Testing\assertType; | |
| 6 | 6 | use function PHPUnit\Framework\assertArrayHasKey; | |
| 7 | + use function PHPUnit\Framework\assertContains; | ||
| 8 | + use function PHPUnit\Framework\assertContainsEquals; | ||
| 7 | 9 | use function PHPUnit\Framework\assertContainsOnlyInstancesOf; | |
| 8 | 10 | use function PHPUnit\Framework\assertEmpty; | |
| 9 | 11 | use function PHPUnit\Framework\assertInstanceOf; | |
@@ -61,6 +63,24 @@ public function testEmpty($a): void | |||
| 61 | 63 | assertType("0|0.0|''|'0'|array{}|Countable|EmptyIterator|false|null", $a); | |
| 62 | 64 | } | |
| 63 | 65 | ||
| 66 | + public function contains(array $a, \Traversable $b): void | ||
| 67 | + { | ||
| 68 | + assertContains('foo', $a); | ||
| 69 | + assertType('non-empty-array', $a); | ||
| 70 | + | ||
| 71 | + assertContains('foo', $b); | ||
| 72 | + assertType('Traversable', $b); | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + public function containsEquals(array $a, \Traversable $b): void | ||
| 76 | + { | ||
| 77 | + assertContainsEquals('foo', $a); | ||
| 78 | + assertType('non-empty-array', $a); | ||
| 79 | + | ||
| 80 | + assertContainsEquals('foo', $b); | ||
| 81 | + assertType('Traversable', $b); | ||
| 82 | + } | ||
| 83 | + | ||
| 64 | 84 | public function containsOnlyInstancesOf(array $a, \Traversable $b): void | |
| 65 | 85 | { | |
| 66 | 86 | assertContainsOnlyInstancesOf(\stdClass::class, $a); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments