From d5242a59d035e46774f2e634b374bc39ff62cb95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Bundyra?= Date: Fri, 23 Feb 2024 09:51:20 +0000 Subject: [PATCH] Narrow type on assertCount and assertNotCount --- .../AssertTypeSpecifyingExtensionHelper.php | 14 +++++++++++++ tests/Type/PHPUnit/data/assert-function.php | 21 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/Type/PHPUnit/Assert/AssertTypeSpecifyingExtensionHelper.php b/src/Type/PHPUnit/Assert/AssertTypeSpecifyingExtensionHelper.php index 61bb6dd..4951257 100644 --- a/src/Type/PHPUnit/Assert/AssertTypeSpecifyingExtensionHelper.php +++ b/src/Type/PHPUnit/Assert/AssertTypeSpecifyingExtensionHelper.php @@ -136,6 +136,20 @@ private static function getExpressionResolvers(): array { if (self::$resolvers === null) { self::$resolvers = [ + 'Count' => static function (Scope $scope, Arg $expected, Arg $actual): Identical { + return new Identical( + $expected->value, + new FuncCall(new Name('count'), [$actual]) + ); + }, + 'NotCount' => static function (Scope $scope, Arg $expected, Arg $actual): BooleanNot { + return new BooleanNot( + new Identical( + $expected->value, + new FuncCall(new Name('count'), [$actual]) + ) + ); + }, 'InstanceOf' => static function (Scope $scope, Arg $class, Arg $object): Instanceof_ { return new Instanceof_( $object->value, diff --git a/tests/Type/PHPUnit/data/assert-function.php b/tests/Type/PHPUnit/data/assert-function.php index 15c4371..10fb417 100644 --- a/tests/Type/PHPUnit/data/assert-function.php +++ b/tests/Type/PHPUnit/data/assert-function.php @@ -7,6 +7,8 @@ use function PHPUnit\Framework\assertContains; use function PHPUnit\Framework\assertContainsEquals; use function PHPUnit\Framework\assertContainsOnlyInstancesOf; +use function PHPUnit\Framework\assertCount; +use function PHPUnit\Framework\assertNotCount; use function PHPUnit\Framework\assertEmpty; use function PHPUnit\Framework\assertInstanceOf; use function PHPUnit\Framework\assertObjectHasAttribute; @@ -90,4 +92,23 @@ public function containsOnlyInstancesOf(array $a, \Traversable $b): void assertType('Traversable', $b); } + public function count(array $a, \Countable $b): void + { + assertCount(3, $a); + assertType('non-empty-array', $a); + + assertCount(7, $b); + assertType('Countable', $b); + } + + public function notCount(array $a, array $b): void + { + assertNotCount(0, $a); + assertType('non-empty-array', $a); + + // still might be empty + assertNotCount(1, $b); + assertType('array', $b); + } + }