The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use Test::More tests => 33;
use strict;
use File::Basename;
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

require GD::Graph::lines;
$foo = GD::Graph::lines->new(1200,300);
eval {
	$SIG{ALRM} = sub { die "alarmed" } ;
	alarm 1;
	$foo->plot([ [1..4],[(-1)x4]]);
};
ok(!$@, "No timeout");