remove redundant '; 1' after require
[p5sagit/Function-Parameters.git] / t / info.t
index a241450..b708be5 100644 (file)
--- a/t/info.t
+++ b/t/info.t
@@ -2,10 +2,16 @@
 use warnings FATAL => 'all';
 use strict;
 
-use Test::More tests => 68;
+use Test::More
+       eval { require Moo }
+       ? (tests => 122)
+       : (skip_all => "Moo required for testing parameter introspection")
+;
 
 use Function::Parameters;
 
+sub Inf () { 0 + 'Inf' }
+
 fun foo($pr1, $pr2, $po1 = 1, $po2 = 2, :$no1 = 3, :$no2 = 4, %r) {}
 
 {
@@ -21,6 +27,8 @@ fun foo($pr1, $pr2, $po1 = 1, $po2 = 2, :$no1 = 3, :$no2 = 4, %r) {}
        is_deeply [$info->named_optional], [qw($no1 $no2)];
        is scalar $info->named_optional, 2;
        is $info->slurpy, '%r';
+       is $info->args_min, 2;
+       is $info->args_max, Inf;
 }
 
 {
@@ -36,6 +44,8 @@ fun foo($pr1, $pr2, $po1 = 1, $po2 = 2, :$no1 = 3, :$no2 = 4, %r) {}
        is_deeply [$info->named_optional], [];
        is scalar $info->named_optional, 0;
        is $info->slurpy, undef;
+       is $info->args_min, 5;
+       is $info->args_max, Inf;
 }
 
 sub bar {}
@@ -59,6 +69,8 @@ method baz($class: $po1 = 1, $po2 = 2, $po3 = 3, :$no1 = 4, @rem) {}
        is_deeply [$info->named_optional], [qw($no1)];
        is scalar $info->named_optional, 1;
        is $info->slurpy, '@rem';
+       is $info->args_min, 1;
+       is $info->args_max, Inf;
 }
 
 {
@@ -74,6 +86,8 @@ method baz($class: $po1 = 1, $po2 = 2, $po3 = 3, :$no1 = 4, @rem) {}
        is_deeply [$info->named_optional], [];
        is scalar $info->named_optional, 0;
        is $info->slurpy, undef;
+       is $info->args_min, 1;
+       is $info->args_max, 1;
 }
 
 {
@@ -90,6 +104,8 @@ method baz($class: $po1 = 1, $po2 = 2, $po3 = 3, :$no1 = 4, @rem) {}
        is_deeply [$info->named_optional], [];
        is scalar $info->named_optional, 0;
        is $info->slurpy, '@_';
+       is $info->args_min, 0;
+       is $info->args_max, Inf;
 }
 
 {
@@ -105,5 +121,31 @@ method baz($class: $po1 = 1, $po2 = 2, $po3 = 3, :$no1 = 4, @rem) {}
        is_deeply [$info->named_optional], [];
        is scalar $info->named_optional, 0;
        is $info->slurpy, '@_';
+       is $info->args_min, 1;
+       is $info->args_max, Inf;
 }
 
+{
+       my @fs;
+       for my $i (qw(aku soku zan)) {
+               push @fs, [$i => fun (:$sin, :$swift, :$slay) { $i }];
+       }
+       for my $kf (@fs) {
+               my ($i, $f) = @$kf;
+               my $info = Function::Parameters::info $f;
+               is $info->keyword, 'fun';
+               is $info->invocant, undef;
+               is_deeply [$info->positional_required], [];
+               is scalar $info->positional_required, 0;
+               is_deeply [$info->positional_optional], [];
+               is scalar $info->positional_optional, 0;
+               is_deeply [$info->named_required], [qw($sin $swift $slay)];
+               is scalar $info->named_required, 3;
+               is_deeply [$info->named_optional], [];
+               is scalar $info->named_optional, 0;
+               is $info->slurpy, undef;
+               is $info->args_min, 6;
+               is $info->args_max, Inf;
+               is $f->(), $i;
+       }
+}