From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#!/usr/bin/perl -w
use strict;
BEGIN
{
$| = 1;
unshift @INC, '../blib/lib';
chdir 't' if -d 't';
plan tests => 104;
use_ok( 'Mail::Graph' );
}
my $mg = Mail::Graph->new( input => '.', output => '.', );
is (ref($mg),'Mail::Graph', 'Could construct object');
is ($mg->error()||'','','without error');
can_ok ('Mail::Graph', qw/ error new generate/);
# some internal tests
my ($day,$month,$year,$dow,$hour,$minute,$second,$offset) =
Mail::Graph->_parse_date('');
is ($day,0); is ($month,0); is ($year,0); is ($hour,0);
is ($minute,0); is ($second,0); is ($offset,0);
($day,$month,$year,$dow,$hour,$minute,$second,$offset) =
Mail::Graph->_parse_date('Tue Oct 27 18:38:52 1998');
is ($day,27); is ($month,10); is ($year,1998); is ($hour,18);
is ($minute,38); is ($second,52); is ($offset,0); is ($dow,2);
($day,$month,$year,$dow,$hour,$minute,$second,$offset) =
Mail::Graph->_parse_date('Sun, 19 Jul 1998 23:49:16 +0200');
is ($day,19); is ($month,7); is ($year,1998); is ($hour,23);
is ($minute,49); is ($second,16); is ($offset,'+0200'); is ($dow,7);
##############################################################################
# test default options
my $def = {
input => 'archives',
output => 'spams',
items => 'spams',
height => 200,
template => 'index.tpl',
no_title => 0,
filter_domains => [ ],
filter_target => [ ],
average => 7,
average_daily => 14,
last_date => undef,
generate => {
month => 1,
yearly => 1,
day => 1,
daily => 1,
dow => 1,
monthly => 1,
hour => 1,
toplevel => 1,
rule => 1,
target => 1,
domain => 1,
last_x_days => 30,
score_histogram => 5,
score_scatter => 5,
score_daily => 60,
},
};
$mg = Mail::Graph->new( );
foreach (keys %$def)
{
if (! ref $def->{$_})
{
print "# Tried $_\n" unless is($mg->{_options}->{$_},$def->{$_}, $_);
}
}
$def = {
input => '.',
output => '.',
items => 'mails',
height => 202,
template => 'index1.tpl',
no_title => 1,
filter_domains => [ 'example.com' ],
filter_target => [ 'example@example.com', 'sample', ],
average => 17,
average_daily => 24,
last_date => '2002-08-2',
generate => {
month => 1,
yearly => 1,
day => 1,
daily => 1,
dow => 1,
monthly => 1,
hour => 1,
toplevel => 1,
rule => 1,
target => 1,
domain => 1,
last_x_days => 40,
},
};
$mg = Mail::Graph->new( $def );
foreach my $k (keys %$def)
{
if (! ref $def->{$k})
{
is ($mg->{_options}->{$k},$def->{$k}, $k);
}
}
##############################################################################
# tests for the _average function
my $data = {
'1/1/1900' => 10, # avrg: 10/7 => 1
'2/1/1900' => 20, # 30/7 =>
'3/1/1900' => 30, # 60/7
'4/1/1900' => 40, # 100/7
'5/1/1900' => 50, # 150/7
'6/1/1900' => 60, # 210/7
'7/1/1900' => 70, # 280/7
'8/1/1900' => undef, # 270/7
'9/1/1900' => 10, # 260/7
'10/1/1900' => 20, # 250/7
'11/1/1900' => 30, # 240/7
'12/1/1900' => 40, # 230/7
'13/1/1900' => 50, # 220/7
};
my $result = {
'1/1/1900' =>
int((10)/7),
'2/1/1900' =>
int((10+20)/7),
'3/1/1900' =>
int((10+20+30)/7),
'4/1/1900' =>
int((10+20+30+40)/7),
'5/1/1900' =>
int((10+20+30+40+50)/7),
'6/1/1900' =>
int((10+20+30+40+50+60)/7),
'7/1/1900' =>
int((10+20+30+40+50+60+70)/7),
'8/1/1900' =>
int((20+30+40+50+60+70+0)/7),
'9/1/1900' =>
int((30+40+50+60+70+0+10)/7),
'10/1/1900' =>
int((40+50+60+70+0+10+20)/7),
'11/1/1900' =>
int((50+60+70+0+10+20+30)/7),
'12/1/1900' =>
int((60+70+0+10+20+30+40)/7),
'13/1/1900' =>
int((70+0+10+20+30+40+50)/7),
};
my $res =
Mail::Graph::_average (
{
_options => { average => 7, generate => { last_x_days => 30 }, },
}, $data,
);
foreach my $k (keys %$res)
{
is ($res->{$k}->[1],$result->{$k}, $k);
}
###############################################################################
# test conversation functions
my $month_table = { jan => 1, feb => 2, mar => 3, apr => 4, may => 5, jun => 6,
jul => 7, aug => 8, sep => 9, oct => 10, nov => 11, dec => 12 };
foreach my $m (keys %$month_table)
{
is (Mail::Graph::_month_to_num(lc($m)),$month_table->{$m});
is (Mail::Graph::_month_to_num(uc($m)),$month_table->{$m});
is (Mail::Graph::_month_to_num(ucfirst($m)),$month_table->{$m});
}
# _add_percentage
my $stats = { wahl => {
'red' => 38.5,
'black' => 38.5,
'green' => 8.6,
'yellow' => 7.4,
'darkred' => 4,
'purple-green-dotted' => 3,
} };
my $percent = {
'red' => 38.5,
'black' => 38.5,
'green' => 8.6,
'yellow' => 7.4,
'darkred' => 4,
'purple-green-dotted' => 3,
};
Mail::Graph->_add_percentage($stats, 'wahl');
foreach my $key (keys %{$stats->{wahl}})
{
is ($stats->{wahl}->{$key},
"$percent->{$key}, $percent->{$key}%", $key);
}