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

#!perl
use Test::More tests => 33;
use strict;
use_ok('GD::Graph');
my $graph = GD::Graph->new(200,200);
ok($graph,"Got an object from new()");
isa_ok($graph,"GD::Graph");
#bug 20802
my @candidates = (
[ qw(gif logo.gif logo_gif_noext) ],
[ qw(jpeg logo.jpeg logo_jpeg_noext logo.jpg) ],
[ qw(png logo.png logo_ping_noext logo_alt.PNG) ],
[ qw(xbm logo.xbm logo_xbm_noext) ],
[ qw(xpm logo.xpm logo_xpm_noext) ],
);
my $icon_dir = dirname(__FILE__) . "/images";
foreach my $group (@candidates) {
# no skipping for now
my ($type,$withext, $noext,$other) = @$group;
my $tests = $other ? 6 : 4;
unless (my $method = GD::Image->can("newFrom\u$type")) {
my $count = defined $other ? 6 : 4;
pass("Skipping: GD appears not to support importing \U$type\E files") for 1..$tests;
next;
} else {
my $quirky_test = eval { GD::Image->$method ; $@ };
if ($quirky_test && $quirky_test =~ /libgd was not built with/) {
pass("Skipping: GD *really* doesn't support importing \U$type\E files")
for 1..$tests;
next;
}
}
$graph->set(logo=> "$icon_dir/$withext");
ok(my $logo = $graph->_read_logo_file,
"_read_logo_file succeeds for $type with file extension");
isa_ok($logo,"GD::Image");
$graph->set(logo=>"$icon_dir/$noext");
ok($logo = $graph->_read_logo_file,
"_read_logo_file succeeds for $type without file extension");
isa_ok($logo,"GD::Image");
next unless defined $other;
$graph->set(logo=>"$icon_dir/$other");
ok($logo = $graph->_read_logo_file,
"_read_logo_file succeeds for $type with alternate extension");
isa_ok($logo,"GD::Image");
}
my @buggy_sets = (
[ (1)x5 ],
[ (0)x5 ],
[ (-1)x5 ],
);
use_ok('GD::Graph::bars');
# and now we attempt to reproduce more annoying bugs...
# this is at axestype.pm line 1902
my $foo = GD::Graph::bars->new(100,100);
$foo->set(y_min_value=>1,y_max_value=>1);
ok ( eval { $foo->plot([ [ map "label$_", 1..3], [(1)x3]]) },
"freakish divide-by-zero trick");
ok(!$@, "No fatalities on the above");
# other possibilities for the same bug: setup_x_step_size_v (line 597), _h (628)
# create_y_labels? (if "tick_number" is set to 0)
$foo = GD::Graph::bars->new(100,100);
$foo->set_legend(qw(Longlegenditemasdfasdf the heck));
my $stat = eval { $foo->plot([ ['A'..'F'], [(0)x7] , [(0)x7] , [(0)x7] ]); };
ok(!$@, "Survived 20792");
ok($stat, "and got a result");
#25975 is a duplicate of #5282
$foo = GD::Graph::lines->new(1200,300);
eval {
$SIG{ALRM} = sub { die "alarmed" } ;
alarm 1;
$foo->plot([ [1..4],[(-1)x4]]);
};
ok(!$@, "No timeout");