#!./perl
use Getargs::Long;
use Test::More tests => 12;
require 't/code.pl';
package BAR;
sub make { bless {}, shift }
package FOO;
@ISA = qw(BAR);
package main;
my $FOO = FOO->make;
my $BAR = BAR->make;
sub try {
my ($x, $y, $z, $t) = getargs(@_, qw(x=i y=ARRAY z t=FOO));
return ($x, $y, $z, $t);
}
sub tryw {
my ($x, $y, $z, $t) = getargs(@_, [qw(x=i y=ARRAY z t=FOO)]);
return ($x, $y, $z, $t);
}
my ($x, $y, $z, $t);
eval { try(-x => -2, -t => $FOO, -Other => 1, -y => [], -z => undef) };
like($@,qr/switch: -Other\b/);
eval { try(-x => -2, -t => $FOO, -Y => [], -z => undef) };
like($@,qr/\bargument 'y' missing\b/);
($x, $y, $z, $t) = try(-x => -2, -t => $FOO, -y => [qw(A C)], -z => undef);
is($x,-2);
is(ref $y eq 'ARRAY' && $y->[1] eq 'C',1);
ok(!defined $z);
is(ref $t,'FOO');
eval { tryw(-x => -2, -t => $FOO, -Other => 1, -y => [], -z => undef) };
like($@,qr/switch: -Other\b/);
eval { tryw(-x => -2, -t => $FOO, -Y => [], -z => undef) };
like($@,qr/switch: -Y\b/);
($x, $y, $z, $t) = tryw(-t => $FOO, -z => []);
ok(!defined $x);
ok(!defined $y);
is(ref $z,'ARRAY');
is(ref $t,ref $FOO);