<?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\src; 
 
use Chevere\Parameter\Attributes\ArrayAttr; 
use Chevere\Parameter\Attributes\BoolAttr; 
use Chevere\Parameter\Attributes\EnumAttr; 
use Chevere\Parameter\Attributes\IntAttr; 
use Chevere\Parameter\Attributes\IterableAttr; 
use Chevere\Parameter\Attributes\ReturnAttr; 
use Chevere\Parameter\Attributes\StringAttr; 
use SensitiveParameter; 
use function Chevere\Parameter\Attributes\arrayArguments; 
use function Chevere\Parameter\Attributes\arrayAttr; 
use function Chevere\Parameter\Attributes\returnAttr; 
use function Chevere\Parameter\Attributes\stringAttr; 
use function Chevere\Parameter\Attributes\valid; 
use function PHPUnit\Framework\assertSame; 
 
#[ReturnAttr( 
    new BoolAttr() 
)] 
function usesAttr( 
    #[ArrayAttr( 
        id: new IntAttr(min: 1), 
        role: new ArrayAttr( 
            mask: new IntAttr(min: 64), 
            name: new StringAttr(), 
            tenants: new IterableAttr( 
                new IntAttr(min: 1, max: 5) 
            ) 
        ), 
    )] 
    array $spooky 
): bool { 
    valid(); 
    valid('spooky'); 
    arrayAttr('spooky')($spooky); 
    assertSame( 
        $spooky['id'], 
        arrayArguments('spooky')->required('id')->int() 
    ); 
 
    return returnAttr()(true); 
} 
 
function noUsesAttr( 
    array $spooky 
): bool { 
    valid('spooky'); 
 
    return returnAttr()(true); 
} 
 
function withDefaultError( 
    #[IntAttr(min: 2)] 
    int $int = 1 
): void { 
} 
 
#[ReturnAttr( 
    new IntAttr(min: 100, max: 200) 
)] 
function validates( 
    #[IntAttr(min: 1, max: 100)] 
    int $base, 
    #[IntAttr(min: 1, max: 5)] 
    int $times = 1, 
    string $name = '', 
): int { 
    return $base * $times; 
} 
 
function usesSensitiveParameterAttr( 
    #[SensitiveParameter] 
    #[IntAttr(min: 1000)] 
    int $code, 
    #[SensitiveParameter] 
    #[EnumAttr('super', 'safe')] 
    string $password 
): void { 
    valid(); 
} 
 
 |