use lib qw( ./blib/lib ../blib/lib );
# Check we can create objects and adding data works
# as well as clearing data.
use Test::More tests => 67;
use HTTP::Date;
BEGIN { use_ok( 'SVG::TT::Graph' ); }
BEGIN { use_ok( 'SVG::TT::Graph::Pie' ); }
BEGIN { use_ok( 'SVG::TT::Graph::Line' ); }
BEGIN { use_ok( 'SVG::TT::Graph::Bar' ); }
BEGIN { use_ok( 'SVG::TT::Graph::BarHorizontal' ); }
BEGIN { use_ok( 'SVG::TT::Graph::BarLine' ); }
BEGIN { use_ok( 'SVG::TT::Graph::TimeSeries' ); }
# Different data for different graph types
my @titles = ('Sales 2002', 'Sales 2003');
# data for timeseries
my @data_cpu_02 = (['2003-09-03 09:30:00',23],['2003-09-03 09:45:00',54],['2003-09-03 10:00:00',67],['2003-09-03 10:15:00',12]);
my @data_cpu_03 = ('2003-09-04 23:00:21',30,'2005-01-01 00:45:09',10.2);
# data for all other graphs
my @data_fields = ('Jan', 'Feb', 'Mar');
my @data_sales_02 = (12, 45, 21);
my @data_sales_03 = (24, 55, 61);
# Test all graph types
my @types = qw(Line Bar BarHorizontal Pie BarLine TimeSeries);
foreach my $type (@types) {
my @fields;
my @data1;
my @data2;
my $quer1;
my $quer2;
my $res1;
my $res2;
if ($type eq 'TimeSeries') {
@fields = undef;
@data1 = @data_cpu_02;
$quer1 = $data_cpu_02[0][0];
$res1 = $data_cpu_02[0][1];
@data2 = @data_cpu_03;
$quer2 = $data_cpu_03[2];
$res2 = $data_cpu_03[3];
} else {
@fields = @data_fields;
@data1 = @data_sales_02;
$quer1 = $fields[1];
$res1 = $data1[1];
@data2 = @data_sales_03;
$quer2 = $fields[2];
$res2 = $data2[2];
}
my $module = "SVG::TT::Graph::$type";
eval {
my $gr = $module->new({
});
};
if (scalar @fields > 1) {
ok($@,'Croak ok as no fields supplied');
} else {
ok(!$@, 'Croak not ok as no fields need to be supplied');
}
my $graph = $module->new({
'fields' => \@fields,
});
isa_ok($graph,$module);
# Check we croak if no data
eval {
$graph->burn();
};
ok($@, 'Burn method croaked as expected - no data has been set');
$graph->add_data({
'data' => \@data1,
'title' => $titles[0],
});
is(scalar(@{$graph->{data}}), 1, 'Data set 1 added');
is($graph->{data}->[0]->{title}, $titles[0], 'Data set 1 - title set ok');
if ($type eq 'TimeSeries') {
my $found = 0;
for my $pair (@{$graph->{data}->[0]->{pairs}}) {
my ($date, $value) = @$pair;
if (str2time($quer1) == $date) {
$found = 1;
last;
}
}
is $found, 1, 'Data set 1 - data set ok';
} else {
is($graph->{data}->[0]->{data}->{$quer1}, $res1, 'Data set 1 - data set ok');
}
$graph->add_data({
'data' => \@data2,
'title' => $titles[1],
});
is(scalar(@{$graph->{data}}), 2, 'Data set 2 added');
is($graph->{data}->[1]->{title}, $titles[1], 'Data set 2 - title set ok');
if ($type eq 'TimeSeries') {
my $found = 0;
for my $pair (@{$graph->{data}->[1]->{pairs}}) {
my ($date, $value) = @$pair;
if (str2time($quer2) == $date) {
$found = 1;
last;
}
}
is $found, 1, 'Data set 2 - data set ok';
} else {
is($graph->{data}->[1]->{data}->{$quer2}, $res2, 'Data set 2 - data set ok');
}
$graph->clear_data();
is(scalar(@{$graph->{data}}),0,'Data cleared ok');
}