Parse-Method-Signatures

 view release on metacpan or  search on metacpan

t/struct.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More tests => 43;
use Test::Differences;
use Test::Moose;
use MooseX::Types::Structured qw/Dict/;

use Parse::Method::Signatures;

use aliased 'Parse::Method::Signatures::Param';

BEGIN {
    eval "use aliased 'Parse::Method::Signatures::Param::${_}'"
        for qw/Named Positional Bindable Placeholder/;

    eval "use aliased 'Parse::Method::Signatures::Param::Unpacked::${_}' => 'Unpacked${_}'"
        for qw/Array Hash/;
}

{
    my $sig = Parse::Method::Signatures->signature('(Str $name)');

    ok(!$sig->has_named_params);
    ok($sig->has_positional_params);
    is(scalar @{ $sig->positional_params }, 1);

    my ($param) = $sig->positional_params;
    isa_ok($param, Param);
    ok($param->has_type_constraints);
    #is($param->type_constraints->data, 'Str');
    is($param->variable_name, '$name');
    ok($param->required);
    ok(!$param->has_constraints);

    does_ok($param, $_) for Positional, Bindable;

    my $tc = $param->meta_type_constraint;
    isa_ok($tc, 'Moose::Meta::TypeConstraint');
    is($tc->name, 'Str');
}
{
    my $sig = Parse::Method::Signatures->signature('(Str :$who, Int :$age where { $_ > 0 })');

    ok(!$sig->has_positional_params);
    ok($sig->has_named_params);
    is(scalar @{ $sig->named_params }, 2);

    my @params = $sig->named_params;
    isa_ok($_, Param) for @params;
    for my $param (@params) {
        does_ok($param, $_) for Named, Bindable;
    }

    my ($who, $age) = @params;
    #is($who->type_constraints->data, 'Str');
    is($who->variable_name, '$who');
    ok(!$who->required);
    ok(!$who->has_constraints);
    my $tc = $who->meta_type_constraint;
    isa_ok($tc, 'Moose::Meta::TypeConstraint');
    is($tc->name, 'Str');

    #is($age->type_constraints->data, 'Int');
    is($age->variable_name, '$age');



( run in 1.026 second using v1.01-cache-2.11-cpan-39bf76dae61 )