| 
<?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 ArrayObject;
 use Chevere\Parameter\Cast;
 use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class CastTest extends TestCase
 {
 public static function dataProviderCast(): array
 {
 return [
 [null, 'mixed'],
 [1, 'int'],
 [1.1, 'float'],
 [true, 'bool'],
 ['string', 'string'],
 [[], 'array'],
 [new Cast(''), 'object'],
 [
 fn () => null,
 'callable',
 ],
 [[], 'iterable'],
 [1, 'nullInt'],
 [null, 'nullInt'],
 [1.1, 'nullFloat'],
 [null, 'nullFloat'],
 [true, 'nullBool'],
 [null, 'nullBool'],
 ['string', 'nullString'],
 [null, 'nullString'],
 [[], 'nullArray'],
 [null, 'nullArray'],
 [new Cast(''), 'nullObject'],
 [null, 'nullObject'],
 [
 fn () => null,
 'nullCallable',
 ],
 [
 null,
 'nullCallable',
 ],
 [[], 'nullIterable'],
 [null, 'nullIterable'],
 ];
 }
 
 #[DataProvider('dataProviderCast')]
 public function testCast($expected, string $method): void
 {
 $cast = new Cast($expected);
 $this->assertSame($expected, $cast->{$method}());
 }
 
 public function testArrayAccess(): void
 {
 $input = ['foo'];
 $value = new ArrayObject($input);
 $cast = new Cast($value);
 $this->assertSame($input, $cast->array());
 }
 }
 
 |