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