Skip to content
Snippets Groups Projects
Commit 09630f08 authored by Jan Kuchař's avatar Jan Kuchař
Browse files

simple support for mixed pseudo-type

parent 3294b799
Branches
Tags
1 merge request!3simple support for mixed pseudo-type
Pipeline #11469 passed
......@@ -91,4 +91,12 @@ final class FunctionSignatureAssertionError extends \AssertionError {
"Expected return type of type '$expectedReturnType', but given function declares '$actualReturnType'."
);
}
public static function parameterDoesNotAcceptAllRequiredValues(\ReflectionFunction $reflection, \ReflectionType $reflectionType): self
{
return new self(
$reflection,
"Parameter of given function does not accept all required values. Parameter restricts input values to {$reflectionType}, assertion requires mixed. (=must accept everything)"
);
}
};
......@@ -55,6 +55,17 @@ final class SignatureAssertionUtil
): void
{
$reflectionType = $parameterReflection->getType();
if ($expectedParameterType === 'mixed') {
// must accept everything
if ($reflectionType === NULL) {
return;
}
throw FunctionSignatureAssertionError::parameterDoesNotAcceptAllRequiredValues(
$functionReflection,
$reflectionType
);
}
assert($reflectionType instanceof \ReflectionType);
// checks:
......@@ -80,7 +91,7 @@ final class SignatureAssertionUtil
// Return-type:
private static function checkReturnType(?string $expectedReturnType, \ReflectionFunction $reflection): void
{
if ($expectedReturnType === NULL) {
if ($expectedReturnType === NULL || $expectedReturnType === 'mixed') {
return;
}
......
<?php declare(strict_types=1);
namespace MyTestNamespace;
require __DIR__ . '/bootstrap.php';
require __DIR__ . '/testClasses.php';
use function Grifart\AssertFunction\{assertSignature, nullable, params};
use Grifart\AssertFunction\FunctionSignatureAssertionError;
use Tester\Assert;
$place = 'tests/' . basename(__FILE__) . ':' . (__LINE__ +2) . ' ';
$fn = function(string $p1, $p2) {};
assertSignature($fn, params('string', 'mixed'), 'mixed');
Assert::true(true); // if assertion do not fail, we are OK
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment