The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;
use Apache::Test;
use Apache::TestUtil qw(t_cmp);
use Apache::TestRequest qw(GET);
use File::Temp qw(tempfile);
use PAR::WebStart;

my $config   = Apache::Test::config();
my $hostport = Apache::TestRequest::hostport($config) || '';

plan tests => 29;

my $uri = "http://$hostport/webstart?arg1=arg;arg2=3";

my $result = GET $uri;
ok t_cmp($result->code, 200, "Get $uri");

my $content = $result->content;
ok t_cmp(defined $content, 1, "Checking content");

my ($fh, $file) = tempfile();
print $fh $content;
close $fh;
ok t_cmp(-e $file, 1, "$file exists");

my $obj = PAR::WebStart->new(file => $file);
ok t_cmp(ref($obj), 'PAR::WebStart');
my $cfg = $obj->{cfg};
ok t_cmp(defined $cfg, 1);

ok t_cmp($cfg->{pnlp}->{spec}, '0.1', 'spec');
ok t_cmp($cfg->{pnlp}->{codebase}, "http://$hostport/lib/apps", 'codebase');
ok t_cmp($cfg->{pnlp}->{href}, $uri, 'href');
ok t_cmp($cfg->{information}->{seen}, 1, 'information');
ok t_cmp($cfg->{title}->{value}, 'My App', 'title');
ok t_cmp($cfg->{vendor}->{value}, 'me.com', 'vendor');
ok t_cmp($cfg->{homepage}->{href}, "http://$hostport/docs/hello.html",
        'homepage');
ok t_cmp($cfg->{description}->[0]->{value}, 'A Perl WebStart Application',
        'description');
ok t_cmp($cfg->{perlws}->{version}, '0.1', 'perlws');

ok t_cmp($cfg->{resources}->{os}, 'MSWin32', 'os');
ok t_cmp($cfg->{resources}->{arch}, 'MSWin32-x86-multi-thread', 'arch');

ok t_cmp($cfg->{'allow-unsigned-pars'}->{seen}, 1, 'allow unsigned pars');

my $par_ref = $cfg->{par};
ok t_cmp(scalar(@$par_ref), 2, 'par files');
ok t_cmp($par_ref->[0]->{href}, 'A.par', 'A.par');
ok t_cmp($par_ref->[1]->{href}, 'C.par', 'C.par');

ok t_cmp($cfg->{'application-desc'}->{'main-par'}, 'A', 'main-par');
my $arg_ref = $cfg->{argument};
ok t_cmp(scalar(@$arg_ref), 4, 'args');
ok t_cmp($arg_ref->[0]->{value}, '--verbose', 'arg 1');
ok t_cmp($arg_ref->[1]->{value}, '--debug', 'arg 2');
ok t_cmp($arg_ref->[2]->{value}, '--arg1=arg', 'arg 3');
ok t_cmp($arg_ref->[3]->{value}, '--arg2=3', 'arg 4');

my $mod_ref = $cfg->{module};
ok t_cmp(scalar(@$mod_ref), 2, 'modules');
ok t_cmp($mod_ref->[0]->{value}, 'Tk', 'Tk');
ok t_cmp($mod_ref->[1]->{value}, 'LWP', 'LWP');

unlink($file);