Perl6-Pugs

 view release on metacpan or  search on metacpan

misc/old_pugs_perl5_backend/Perl6-Value/t/code.t  view on Meta::CPAN

#!/usr/bin/perl

use strict;
use warnings;

use Perl6::Code;
# use Data::Dumper;
use PadWalker;

use Test::More tests => 21;

%Perl6::MultiSub::SUBS = ();
%Perl6::NamedSub::SUBS = ();

sub body (&) { @_ }
sub params {
    [ map { Perl6::Param->new( 'type' => undef, 'name' => $_ ) } @_ ]  
}
sub mksub {
    my ($params, $body) = @_;
    return Sub->new( '$.body' => $body, '$.params' => $params);
}
sub mk_named_sub {
    my ($name, $params, $body) = @_;
    my $sub = Sub->new( '$.name' => $name, '$.body' => $body, '$.params' => $params);
    $Perl6::NamedSub::SUBS{$name} = $sub;
}
sub call_named_sub {
    my ($name, @args) = @_;
    (exists $Perl6::NamedSub::SUBS{$name})
        || die "No sub found called '$name'";
    my $sub = $Perl6::NamedSub::SUBS{$name};
    $sub->do(@args);
    # $sub->return_value;
}
sub mk_multi_sub {
    my ($name, @subs) = @_;
    my $sub = MultiSub->new( '$.name' => $name, '@.subs' => \@subs);
    $Perl6::MultiSub::SUBS{$name} = $sub;
}
sub call_multi_sub {
    my ($name, @args) = @_;
    (exists $Perl6::MultiSub::SUBS{$name})
        || die "No sub found called '$name'";
    my $sub = $Perl6::MultiSub::SUBS{$name};
    $sub->do(@args);
    # $sub->return_value;
}

# see t/80_Code.t
#    sub bind_params { ...

{
    # un-named Sub

    my $sub = mksub params('$name'), body {
            my $sub = shift;
            my %param = $sub->bind_params( @_ );  
            "Hello from $param{'$name'}";        
    };
    isa_ok($sub, 'Sub', 'un-named Sub');
    isa_ok($sub, 'Code', '... Code');
    is( $sub->perl->unboxed, 'sub (Any $name) {...}', '... $sub.perl' );
    is( $sub->arity, 1, '... $sub.arity' );
    is( $sub->name, undef, '... $sub.name' );

    # $sub->do('Stevan');
    is( $sub->do('Stevan'), 'Hello from Stevan', '... got the right return value');



( run in 3.070 seconds using v1.01-cache-2.11-cpan-63c85eba8c4 )