3 use Imager::Graph::Pie;
5 use Imager::Font::Test;
9 or mkdir "testout", 0700
10 or die "Could not create output directory: $!";
14 use Imager qw(:handy);
16 #my $fontfile = 'ImUgly.ttf';
17 #my $font = Imager::Font->new(file=>$fontfile, type => 'ft2', aa=>1)
18 # or plan skip_all => "Cannot create font object: ",Imager->errstr,"\n";
19 my $font = Imager::Font::Test->new();
21 my @data = ( 100, 180, 80, 20, 2, 1, 0.5 );
22 my @labels = qw(alpha beta gamma delta epsilon phi gi);
26 my $pie = Imager::Graph::Pie->new;
27 ok($pie, "creating pie chart object");
29 # this may change output quality too
31 print "# Imager version: $Imager::VERSION\n";
32 print "# Font type: ",ref $font,"\n";
34 my $img1 = $pie->draw(data=>\@data, labels=>\@labels, font=>$font,
35 title=>{ text=>'Imager::Graph::Pie', size=>32 },
36 features=>{ outline=>1, labels=>1, pieblur=>0, },
37 outline=>{ line => '404040' },
40 ok($img1, "drawing first pie chart")
41 or print "# ",$pie->error,"\n";
42 cmpimg($img1, "testimg/t10_pie1.png", 196880977);
43 $img1->write(file=>'testout/t10_pie1.ppm')
44 or die "Cannot save pie1: ",$img1->errstr,"\n";
46 my $img2 = $pie->draw(data=>\@data,
49 title=>{ text=>'Imager::Graph::Pie', size=>36 },
50 features=>{ labelspconly=>1, _debugblur=>1,
52 legend=>{ border=>'000000', fill=>'C0C0C0', },
53 fills=>[ qw(404040 606060 808080 A0A0A0 C0C0C0 E0E0E0) ],
56 ok($img2, "drawing second pie chart")
57 or print "# ",$pie->error,"\n";
58 cmpimg($img2, "testimg/t10_pie2.png", 255956289);
59 $img2->write(file=>'testout/t10_pie2.ppm')
60 or die "Cannot save pie2: ",$img2->errstr,"\n";
62 my $img3 = $pie->draw(data=>\@data, labels=>\@labels,
63 font=>$font, style=>'fount_lin',
64 features=>[ 'legend', 'labelspconly', ],
65 legend=>{ valign=>'center' });
66 ok($img3, "third chart")
67 or print "# ",$pie->error,"\n";
68 $img3->write(file=>'testout/t10_lin_fount.ppm')
69 or die "Cannot save pie3: ",$img3->errstr,"\n";
70 cmpimg($img3, "testimg/t10_lin_fount.png", 180_000);
72 my $img4 = $pie->draw(data=>\@data, labels=>\@labels,
73 font=>$font, style=>'fount_rad',
74 features=>[ 'legend', 'labelspc', ],
75 legend=>{ valign=>'bottom',
78 ok($img4, "fourth chart")
79 or print "# ",$pie->error,"\n";
80 $img4->write(file=>'testout/t10_rad_fount.ppm')
81 or die "Cannot save pie3: ",$img4->errstr,"\n";
82 cmpimg($img4, "testimg/t10_rad_fount.png", 120_000);
84 my $img5 = $pie->draw(data=>\@data, labels=>\@labels,
85 font=>$font, style=>'mono',
86 features=>[ 'allcallouts', 'labelspc' ],
87 legend=>{ valign=>'bottom',
89 ok($img5, "fifth chart")
90 or print "# ",$pie->error,"\n";
91 $img5->write(file=>'testout/t10_mono.ppm')
92 or die "Cannot save pie3: ",$img5->errstr,"\n";
93 cmpimg($img5, "testimg/t10_mono.png", 550_000);
95 my $img6 = $pie->draw(data=>\@data, labels=>\@labels,
96 font=>$font, style=>'fount_lin',
97 features=>[ 'allcallouts', 'labelspc', 'legend' ],
102 orientation => 'horizontal',
103 fill => { solid => Imager::Color->new(0, 0, 0, 32) },
104 patchborder => undef,
107 ok($img6, "sixth chart")
108 or print "# ",$pie->error,"\n";
109 $img6->write(file=>'testout/t10_hlegend.ppm')
110 or die "Cannot save pie6: ",$img5->errstr,"\n";
111 cmpimg($img6, "testimg/t10_hlegend.png", 550_000);
115 # zero sized segments were drawn to cover the whole circle
116 my @data = ( 10, 8, 5, 0.000 );
117 my @labels = qw(alpha beta gamma);
124 features => [ 'legend', 'labelspc', 'outline' ],
126 ok($img, "create graph with no 'others'");
127 ok($img->write(file => 'testout/t10_noother.ppm'),
129 cmpimg($img, 'testimg/t10_noother.png', 500_000);
133 # no font parameter would crash
139 ok(!$im, "should fail to produce titled graph with no font");
140 like($pie->error, qr/title\.font/, "message should mention which font");
146 features => [ 'legend' ],
148 ok(!$im, "should fail to produce legended graph with no font");
149 like($pie->error, qr/legend\.font/, "message should mention which font");
155 features => [ 'legend' ],
156 legend => { orientation => "horizontal" },
158 ok(!$im, "should fail to produce horizontal legended graph with no font");
159 like($pie->error, qr/legend\.font/, "message should mention which font");
166 ok(!$im, "should fail to produce labelled graph with no font");
167 like($pie->error, qr/label\.font/, "message should mention which font");
172 or skip("No font to setup the callout font", 2);
177 features => [ 'allcallouts' ],
178 label => { font => $font },
180 ok(!$im, "should fail to produce callout labelled graph with no font");
181 like($pie->error, qr/callout\.font/, "message should mention which font");
186 my ($img, $file, $limit) = @_;
192 $Imager::formats{png}
193 or skip("No PNG support", 1);
195 my $cmpimg = Imager->new;
196 $cmpimg->read(file=>$file)
197 or return ok(0, "Cannot read $file: ".$cmpimg->errstr);
198 my $diff = Imager::i_img_diff($img->{IMG}, $cmpimg->{IMG});
199 cmp_ok($diff, '<', $limit, "Comparison to $file ($diff)");