diff --git a/src/functions.php b/src/functions.php index 876282c76f73b4c64dbf67a3f14f3c3733406cbf..fda6ddb18835d1eaa2c36e7f5f5ce89e6163449d 100644 --- a/src/functions.php +++ b/src/functions.php @@ -10,22 +10,22 @@ namespace Grifart\AssertFunction; -function parameters(string ...$params): array +function params(string ...$params): array { return $params; } -function optional(string $classType): string +function nullable(string $classType): string { return '?' . $classType; } -function assertFunction(callable $function, array $parameters, ?string $expectedReturnType): void +function assertSignature(callable $function, array $parameters, ?string $expectedReturnType): void { // todo: call assert(__impl()); $reflection = new \ReflectionFunction($function); - // NUMBER PARAMETERS CHECK: + // NUMBER OF PARAMETERS CHECK: $numberOfParameters = $reflection->getNumberOfParameters(); assert( $numberOfParameters === count($parameters), diff --git a/tests/fn.assertFunction.allOptional.phpt b/tests/fn.assertSignature.allOptional.phpt similarity index 55% rename from tests/fn.assertFunction.allOptional.phpt rename to tests/fn.assertSignature.allOptional.phpt index baed2d8ab08ac52b6b937b9e4efe113eb04bff84..9f845dcaafcf8c490ed32f98f37813d68012e398 100644 --- a/tests/fn.assertFunction.allOptional.phpt +++ b/tests/fn.assertSignature.allOptional.phpt @@ -2,31 +2,31 @@ namespace MyTestNamespace; require __DIR__ . '/bootstrap.php'; require __DIR__ . '/testClasses.php'; -use function Grifart\AssertFunction\{assertFunction, optional, parameters}; +use function Grifart\AssertFunction\{assertSignature, nullable, params}; use Tester\Assert; $fn = function(?T1 $t1, ?T2 $t2): ?T3 {return new T3;}; -assertFunction($fn, parameters(optional(T1::class), optional(T2::class)), optional(T3::class)); +assertSignature($fn, params(nullable(T1::class), nullable(T2::class)), nullable(T3::class)); // missing optional check Assert::exception(function () use ($fn) { - assertFunction($fn, parameters(T1::class, optional(T2::class)), optional(T3::class)); + assertSignature($fn, params(T1::class, nullable(T2::class)), nullable(T3::class)); }, \AssertionError::class /* todo: assert message */); Assert::exception(function () use ($fn) { - assertFunction($fn, parameters(optional(T1::class), T2::class), optional(T3::class)); + assertSignature($fn, params(nullable(T1::class), T2::class), nullable(T3::class)); }, \AssertionError::class /* todo: assert message */); Assert::exception(function () use ($fn) { - assertFunction($fn, parameters(optional(T1::class), optional(T2::class)), T3::class); + assertSignature($fn, params(nullable(T1::class), nullable(T2::class)), T3::class); }, \AssertionError::class /* todo: assert message */); // Wrong return type type Assert::exception(function () use ($fn) { - assertFunction($fn, parameters(optional(T1::class), optional(T2::class)), optional(T2::class)); + assertSignature($fn, params(nullable(T1::class), nullable(T2::class)), nullable(T2::class)); }, \AssertionError::class /* todo: assert message */); // Wrong parameter type Assert::exception(function () use ($fn) { - assertFunction($fn, parameters(optional(T1::class), optional(T1::class)), optional(T3::class)); + assertSignature($fn, params(nullable(T1::class), nullable(T1::class)), nullable(T3::class)); }, \AssertionError::class /* todo: assert message */); diff --git a/tests/fn.assertFunction.allRequired.phpt b/tests/fn.assertSignature.allRequired.phpt similarity index 52% rename from tests/fn.assertFunction.allRequired.phpt rename to tests/fn.assertSignature.allRequired.phpt index 05f7078b00c66961c1a98765bbb886999b20db33..6fa1c31cc9d4d8f3db632f0e6e14e32db3265744 100644 --- a/tests/fn.assertFunction.allRequired.phpt +++ b/tests/fn.assertSignature.allRequired.phpt @@ -2,19 +2,22 @@ namespace MyTestNamespace; require __DIR__ . '/bootstrap.php'; require __DIR__ . '/testClasses.php'; -use function Grifart\AssertFunction\{assertFunction, optional, parameters}; +use function Grifart\AssertFunction\{assertSignature, nullable, params}; use Tester\Assert; $f1 = function(T1 $t1, T2 $t2): T3 {return new T3;}; -assertFunction($f1, parameters(T1::class, T2::class), T3::class); + +// Positive scenario +assertSignature($f1, params(T1::class, T2::class), T3::class); // Optional by accident: parameter Assert::exception(function () use ($f1) { - assertFunction($f1, parameters(optional(T1::class), T2::class), T3::class); + assertSignature($f1, params(nullable(T1::class), T2::class), T3::class); }, \AssertionError::class); // Optional by accident: return type Assert::exception(function () use ($f1) { - assertFunction($f1, parameters(T1::class, T2::class), optional(T3::class)); + assertSignature($f1, params(T1::class, T2::class), nullable(T3::class)); +// assertFunction($f1, [params(T1::class, T2::class) => nullable(T3::class)]); }, \AssertionError::class); diff --git a/tests/fn.assertFunction.wrongNumberOfArguments.phpt b/tests/fn.assertSignature.wrongNumberOfArguments.phpt similarity index 63% rename from tests/fn.assertFunction.wrongNumberOfArguments.phpt rename to tests/fn.assertSignature.wrongNumberOfArguments.phpt index da9e242d0657336e534f12e3a2053d8e5c6ff661..1956fabb492bbfb6f9b9dde5c704c7f2f3e07fbc 100644 --- a/tests/fn.assertFunction.wrongNumberOfArguments.phpt +++ b/tests/fn.assertSignature.wrongNumberOfArguments.phpt @@ -2,16 +2,16 @@ namespace MyTestNamespace; require __DIR__ . '/bootstrap.php'; require __DIR__ . '/testClasses.php'; -use function Grifart\AssertFunction\{assertFunction, optional, parameters}; +use function Grifart\AssertFunction\{assertSignature, nullable, params}; use Tester\Assert; -$position = 'assert-function-signature/tests/fn.assertFunction.wrongNumberOfArguments.phpt:9'; +$position = 'assert-function-signature/tests/fn.assertSignature.wrongNumberOfArguments.phpt:9'; $f1 = function(T1 $t1, T2 $t2): T3 {return new T3;}; // Wrong number of arguments Assert::exception( function () use ($f1) { - assertFunction($f1, parameters(T1::class), T3::class); + assertSignature($f1, params(T1::class), T3::class); }, \AssertionError::class, "$position Given wrong number of parameters. Expected 1, 2 given." @@ -19,7 +19,7 @@ Assert::exception( Assert::exception( function () use ($f1) { - assertFunction($f1, parameters(T1::class, T2::class, T1::class), T3::class); + assertSignature($f1, params(T1::class, T2::class, T1::class), T3::class); }, \AssertionError::class, "$position Given wrong number of parameters. Expected 3, 2 given." diff --git a/tests/fn.optional.phpt b/tests/fn.optional.phpt index fe4fd77edf0f8aad63f2643a075d185c66135fe9..157edcbf37d648afbd5626649bfa6762cb8bb105 100644 --- a/tests/fn.optional.phpt +++ b/tests/fn.optional.phpt @@ -2,9 +2,9 @@ namespace MyTestNamespace; require __DIR__ . '/bootstrap.php'; -use function Grifart\AssertFunction\optional; +use function Grifart\AssertFunction\nullable; use Tester\Assert; class TestClass {}; -Assert::equal('?MyTestNamespace\TestClass', optional(TestClass::class)); +Assert::equal('?MyTestNamespace\TestClass', nullable(TestClass::class)); diff --git a/tests/fn.parameters.phpt b/tests/fn.parameters.phpt index e00071fc8b1f43a5528eea02a98c8f1b8723b4f9..9e0fb3420da675731bbf3f44b9f3f0acf7e0059f 100644 --- a/tests/fn.parameters.phpt +++ b/tests/fn.parameters.phpt @@ -2,17 +2,17 @@ namespace MyTestNamespace; require __DIR__ . '/bootstrap.php'; -use function Grifart\AssertFunction\optional; -use function Grifart\AssertFunction\parameters; +use function Grifart\AssertFunction\nullable; +use function Grifart\AssertFunction\params; use Tester\Assert; class TestClass {}; -Assert::equal(['MyTestNamespace\TestClass'], parameters(TestClass::class)); +Assert::equal(['MyTestNamespace\TestClass'], params(TestClass::class)); Assert::equal([ 'MyTestNamespace\TestClass', 'MyTestNamespace\TestClass' -], parameters( +], params( TestClass::class, TestClass::class )); @@ -20,7 +20,7 @@ Assert::equal([ Assert::equal([ '?MyTestNamespace\TestClass', 'MyTestNamespace\TestClass' -], parameters( - optional(TestClass::class), +], params( + nullable(TestClass::class), TestClass::class ));