From b7b82d82e88ab1e7b5c9d3aad4248cdebd0cb818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kucha=C5=99?= <honza.kuchar@grifart.cz> Date: Thu, 27 Apr 2017 10:09:00 +0200 Subject: [PATCH] polished API - renamed assertFunction --> assertSignature - optional() -> nullable() --- src/functions.php | 8 ++++---- ...al.phpt => fn.assertSignature.allOptional.phpt} | 14 +++++++------- ...ed.phpt => fn.assertSignature.allRequired.phpt} | 11 +++++++---- ...fn.assertSignature.wrongNumberOfArguments.phpt} | 8 ++++---- tests/fn.optional.phpt | 4 ++-- tests/fn.parameters.phpt | 12 ++++++------ 6 files changed, 30 insertions(+), 27 deletions(-) rename tests/{fn.assertFunction.allOptional.phpt => fn.assertSignature.allOptional.phpt} (55%) rename tests/{fn.assertFunction.allRequired.phpt => fn.assertSignature.allRequired.phpt} (52%) rename tests/{fn.assertFunction.wrongNumberOfArguments.phpt => fn.assertSignature.wrongNumberOfArguments.phpt} (63%) diff --git a/src/functions.php b/src/functions.php index 876282c..fda6ddb 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 baed2d8..9f845dc 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 05f7078..6fa1c31 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 da9e242..1956fab 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 fe4fd77..157edcb 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 e00071f..9e0fb34 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 )); -- GitLab