use strict;
use warnings;
use XML::Simple;
BEGIN {
@__PACKAGE__::XML::ISA = qw/ XML::Simple /;
my %order = (
TestResult => [
qw/xmlns xmlns:xsi xsi:schemaLocation Result Comments Parameters Files Images
/],
);
*__PACKAGE__::XML::sorted_keys = sub {
my ( $self, $name, $h ) = @_;
return @{ $order{$name} } if $order{$name};
sort keys %$h;
};
}
sub new {
my ($class) = @_;
my $self = {
_xml => {
"xmlns" => "Someinfo",
"xmlns:xsi" => "Someinfo",
"xsi:schemaLocation" => "Someinfo",
},
};
bless $self => $class;
}
sub comments {
my ( $self, $comments ) = @_;
$self->{_xml}{Comments} = { content => $comments };
}
sub result {
my ( $self, $result ) = @_;
$self->{_xml}{Result} = { content => $result };
}
sub image {
my ( $self, $image, $desc ) = @_;
my $imageid = "Image" . $image;
$self->{_xml}{Images}{$imageid} = { content => $desc };
}
sub file {
my ( $self, $file, $desc ) = @_;
my $fileid = "File" . $file;
$self->{_xml}{Files}{$fileid} = { content => $desc };
}
sub parameter {
my ( $self, $group, $key, $value ) = @_;
my $groupid = "Group".$group;
my $keyid = "Key".$key;
$self->{_xml}{Parameters}{Parameter}{$groupid}{Parameter}{$keyid} = { content => $value };
}
sub as_xml {
my ($self) = @_;
my $file_name = "output.xml";
my $serialize = __PACKAGE__::XML->new;
my @arrayout= $serialize->XMLout(
$self->{_xml},
GroupTags => {
Files => "File",
Images => "Image",
Parameters => "ParameterGroup",
ParameterGroup => "Parameter"
},
KeyAttr => {
ParameterGroup => "+ID",
Parameter => "+key",
File => "+key",
Image => "+key",
},
RootName => "TestResult",
XMLDecl => 1,
);
foreach ( @arrayout ) {
open FH, ">>$file_name" or die "can't open '$file_name': $!";
print FH $_;
close FH;
}
####
my $tr = Reporting->new;
$tr->parameter(1, 1, "Some Process A Happened");
$tr->parameter(1, 2, "Some Process B Happened");
$tr->parameter(2, 1, "Some Process A Happened");
$tr->parameter(3, 1, "Some Process Happened");
$tr->image(1, "Some info");
$tr->parameter(6, 1, "Some Process Z Happened");
$tr->file(10, "Some File");
$tr->result("Pass");
$tr->comments("Executed Successfully");
print $tr->as_xml;
####
Pass
Executed Successfully
Some Process A Happened
Some Process B Happened
Some Process A Happened
Some Process Happened
Some Process Z Happened
Some File
Some info
####
Some Value
Some Value
Some Value
Some Value
Some Value
Some Value