<?php
/*
* This file is part of Chevere.
*
* (c) Rodolfo Berrios <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chevere\Tests;
use Chevere\Parameter\Interfaces\StringParameterInterface;
use Chevere\Parameter\StringParameter;
use Chevere\Regex\Regex;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
use TypeError;
use function Chevere\Parameter\string;
final class StringParameterTest extends TestCase
{
public function testConstruct(): void
{
$regex = StringParameterInterface::PATTERN_DEFAULT;
$parameter = new StringParameter();
$this->assertSame(null, $parameter->default());
$this->assertSame('', $parameter->description());
$this->assertEquals($parameter, string());
$this->assertSame($regex, $parameter->regex()->__toString());
$this->assertSame([
'type' => 'string',
'description' => '',
'default' => null,
'regex' => $parameter->regex()->noDelimiters(),
], $parameter->schema());
$description = 'ola k ase';
$parameter = new StringParameter($description);
$this->assertSame($description, $parameter->description());
}
public function testWithRegex(): void
{
$regex = new Regex('/^[0-9+]$/');
$parameter = (new StringParameter())->withRegex($regex);
$this->assertSame($regex->__toString(), $parameter->regex()->__toString());
$this->assertSame([
'type' => 'string',
'description' => '',
'default' => null,
'regex' => $regex->noDelimiters(),
], $parameter->schema());
}
public function testWithDescription(): void
{
$parameter = new StringParameter();
$try = 'description';
$this->assertSame('', $parameter->description());
$parameterWith = $parameter->withDescription($try);
$this->assertNotSame($parameter, $parameterWith);
$this->assertSame($try, $parameterWith->description());
}
public function testWithDefault(): void
{
$default = 'some value';
$parameter = new StringParameter('test');
$parameterWithDefault = $parameter->withDefault($default);
(new ParameterHelper())->testWithParameterDefault(
primitive: 'string',
parameter: $parameter,
default: $default,
parameterWithDefault: $parameterWithDefault
);
}
public function testWithDefaultRegexAware(): void
{
$parameter = (new StringParameter('test'))->withDefault('a');
$parameterWithRegex = $parameter
->withRegex(new Regex('/^a|b$/'));
$this->assertNotSame($parameter, $parameterWithRegex);
$this->expectException(InvalidArgumentException::class);
$parameterWithRegex->withDefault('');
}
public function testAssertCompatible(): void
{
$regex = new Regex('/^[0-9+]$/');
$regexAlt = new Regex('/^[a-z+]$/');
$parameter = (new StringParameter())->withRegex($regex);
$compatible = (new StringParameter())->withRegex($regex);
$parameter->assertCompatible($compatible);
$compatible->assertCompatible($parameter);
$notCompatible = (new StringParameter())->withRegex($regexAlt);
$this->expectException(InvalidArgumentException::class);
$parameter->assertCompatible($notCompatible);
}
public function testInvoke(): void
{
$parameter = new StringParameter();
$parameter('100');
$this->expectException(TypeError::class);
$parameter(false);
}
}
|