PHP Classes

File: tests/TypeTest.php

Recommend this page to a friend!
  Packages of Rodolfo Berrios Arce   Parameter   tests/TypeTest.php   Download  
File: tests/TypeTest.php
Role: Class source
Content type: text/plain
Description: Class source
Class: Parameter
Validate function parameters with PHP attributes
Author: By
Last change:
Date: 1 year ago
Size: 2,427 bytes
 

Contents

Class file image Download
<?php

/*
 * This file is part of Chevere.
 *
 * (c) Rodolfo Berrios <rodolfo@chevere.org>
 *
 * 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\TypeInterface;
use Chevere\Parameter\Type;
use Exception;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
use stdClass;

final class TypeTest extends TestCase
{
    public function testInvalidArgument(): void
    {
        $this->expectException(InvalidArgumentException::class);
        new Type('TypeSome');
    }

    public function testTypes(): void
    {
        $resource = fopen(__FILE__, 'r');
        if (! is_resource($resource)) {
            $this->markTestIncomplete('Unable to open ' . __FILE__);
        }
        $scalars = ['bool', 'int', 'float', 'string'];
        foreach ([
            Type::BOOL => true,
            Type::INT => 1,
            Type::FLOAT => 13.13,
            Type::STRING => 'test',
            Type::ARRAY => ['test'],
            Type::OBJECT => new stdClass(),
            Type::CALLABLE => 'phpinfo',
            Type::ITERABLE => [4, 2, 1, 3],
            Type::NULL => null,
            Type::RESOURCE => $resource,
        ] as $key => $val) {
            $type = new Type($key);
            $this->assertSame($key, $type->primitive());
            $this->assertSame($key, $type->typeHinting());
            $this->assertTrue($type->validate($val));
            $this->assertSame(in_array($key, $scalars, true), $type->isScalar());
        }
        /** @var resource $resource */
        fclose($resource);
    }

    public function testClassName(): void
    {
        $type = new Type(Exception::class);
        $this->assertSame(Type::PRIMITIVE_CLASS_NAME, $type->primitive());
        $this->assertSame(Exception::class, $type->typeHinting());
        $this->assertTrue($type->validate(new Exception()));
        $this->assertFalse($type->isScalar());
    }

    public function testInterfaceName(): void
    {
        $type = new Type(TypeInterface::class);
        $this->assertSame(Type::PRIMITIVE_INTERFACE_NAME, $type->primitive());
        $this->assertSame(TypeInterface::class, $type->typeHinting());
        $this->assertTrue($type->validate(new Type(Type::STRING)));
        $this->assertFalse($type->validate(new Exception()));
    }
}