#!/usr/bin/perl
use strict;
use lib qw {blib/lib};
use Regexp::Common;
use t::Common;
$^W = 1;
$DEBUG = 1;
sub create_parts;
my $prospero = $RE {URI} {prospero};
# No point in crosschecking, URI creation is tag independent.
my @tests = (
[prospero => $prospero => {prospero => NORMAL_PASS | FAIL}],
);
my ($good, $bad) = create_parts;
run_tests version => "Regexp::Common::URI::prospero",
tests => \@tests,
good => $good,
bad => $bad,
query => \&prospero,
wanted => \&wanted,
filter => \&filter,
;
sub prospero {
my ($tag, $host, $port, $ppath, $fieldnames, $fieldvalues) =
($_ [0], @{$_ [1]});
my $prospero = "prospero://";
$prospero .= $host if defined $host;
$prospero .= ":$port" if defined $port;
$prospero .= "/$ppath" if defined $ppath;
if (defined $fieldnames) {
foreach my $i (0 .. $#$fieldnames) {
$prospero .= ";$fieldnames->[$i]";
$prospero .= "=$fieldvalues->[$i]" if defined $fieldvalues -> [$i];
}
}
$prospero;
}
sub wanted {
my ($tag, $parts) = @_;
my @wanted;
$wanted [0] = $_;
$wanted [1] = "prospero";
$wanted [2] = $$parts [0]; # host.
$wanted [3] = $$parts [1]; # port.
$wanted [4] = $$parts [2]; # ppart.
$wanted [5] = "";
if (defined $$parts [3]) {
foreach my $i (0 .. $#{$$parts [3]}) {
$wanted [5] .= ";${$$parts [3]}[$i]=${$$parts [4]}[$i]";
}
}
\@wanted;
}
sub create_parts {
my (@good, @bad);
# Hosts.
$good [0] = [qw /www.abigail.be www.PERL.com a.b.c.d.e.f.g.h.i.j.k.x
127.0.0.1 w--w--w.abigail.be w3.abigail.be/];
$bad [0] = [qw /www.example..com w+w.example.com w--.example.com
127.0.0.0.1 -w.example.com www.example.1com/];
# Ports.
$good [1] = [undef, 1525];
$bad [1] = ["", qw /: port/];
# Ppart
$good [2] = ["", qw {part foo/bar fnord:&=?%FF}];
$bad [2] = [undef, qw {~}, ' '];
# Fieldname
$good [3] = [undef, [qw /name/], [qw /name1 name2/], [""], ["", ""],
["", qw /name/], [qw /fnord:&?%FF/]];
$bad [3] = [[qw /name==/], ['~']];
# Fieldvalue
$good [4] = [undef, [qw /value/], [qw /value1 value2/], [""], ["", ""],
["", qw /value/], [qw /fnord:&?%FF/]];
$bad [4] = [[qw /value==/], ['~'], [undef], [undef, undef]];
return (\@good, \@bad);
}
sub filter {
return 1 if !defined ${$_ [0]} [3] && !defined ${$_ [0]} [4];
return 0 if defined ${$_ [0]} [3] && !defined ${$_ [0]} [4] ||
!defined ${$_ [0]} [3] && defined ${$_ [0]} [4];
return 0 if @{${$_ [0]} [3]} != @{${$_ [0]} [4]};
return 1;
}
__END__