]>
Commit | Line | Data |
---|---|---|
35574351 TC |
1 | #!perl -w |
2 | use strict; | |
3 | use Imager::Graph::Pie; | |
86cab8ec TC |
4 | use lib 't/lib'; |
5 | use Imager::Font::Test; | |
bfcf9414 | 6 | use Test::More; |
35574351 TC |
7 | |
8 | -d 'testout' | |
9 | or mkdir "testout", 0700 | |
10 | or die "Could not create output directory: $!"; | |
11 | ||
12 | ++$|; | |
35574351 | 13 | |
35574351 TC |
14 | use Imager qw(:handy); |
15 | ||
86cab8ec TC |
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(); | |
35574351 TC |
20 | |
21 | my @data = ( 100, 180, 80, 20, 2, 1, 0.5 ); | |
22 | my @labels = qw(alpha beta gamma delta epsilon phi gi); | |
23 | ||
26c93f46 | 24 | plan tests => 16; |
bfcf9414 | 25 | |
35574351 TC |
26 | my $pie = Imager::Graph::Pie->new; |
27 | ok($pie, "creating pie chart object"); | |
28 | ||
29 | # this may change output quality too | |
35574351 TC |
30 | |
31 | print "# Imager version: $Imager::VERSION\n"; | |
32 | print "# Font type: ",ref $font,"\n"; | |
33 | ||
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' }, | |
bfcf9414 | 38 | ); |
35574351 | 39 | |
bfcf9414 TC |
40 | ok($img1, "drawing first pie chart") |
41 | or print "# ",$pie->error,"\n"; | |
35574351 | 42 | cmpimg($img1, "testimg/t10_pie1.png", 196880977); |
bfcf9414 | 43 | $img1->write(file=>'testout/t10_pie1.ppm') |
35574351 TC |
44 | or die "Cannot save pie1: ",$img1->errstr,"\n"; |
45 | ||
46 | my $img2 = $pie->draw(data=>\@data, | |
47 | labels=>\@labels, | |
48 | font=>$font, | |
49 | title=>{ text=>'Imager::Graph::Pie', size=>36 }, | |
50 | features=>{ labelspconly=>1, _debugblur=>1, | |
51 | legend=>1 }, | |
7b94e723 | 52 | legend=>{ border=>'000000', fill=>'C0C0C0', }, |
35574351 | 53 | fills=>[ qw(404040 606060 808080 A0A0A0 C0C0C0 E0E0E0) ], |
bfcf9414 | 54 | ); |
35574351 | 55 | |
bfcf9414 TC |
56 | ok($img2, "drawing second pie chart") |
57 | or print "# ",$pie->error,"\n"; | |
35574351 | 58 | cmpimg($img2, "testimg/t10_pie2.png", 255956289); |
bfcf9414 | 59 | $img2->write(file=>'testout/t10_pie2.ppm') |
35574351 TC |
60 | or die "Cannot save pie2: ",$img2->errstr,"\n"; |
61 | ||
26c93f46 TC |
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); | |
71 | ||
72 | my $img4 = $pie->draw(data=>\@data, labels=>\@labels, | |
73 | font=>$font, style=>'fount_rad', | |
74 | features=>[ 'legend', 'labelspc', ], | |
75 | legend=>{ valign=>'bottom', | |
76 | halign=>'left', | |
77 | border=>'000080' }); | |
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); | |
83 | ||
84 | my $img5 = $pie->draw(data=>\@data, labels=>\@labels, | |
85 | font=>$font, style=>'mono', | |
86 | features=>[ 'allcallouts', 'labelspc' ], | |
87 | legend=>{ valign=>'bottom', | |
88 | halign=>'right' }); | |
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); | |
94 | ||
95 | my $img6 = $pie->draw(data=>\@data, labels=>\@labels, | |
96 | font=>$font, style=>'fount_lin', | |
97 | features=>[ 'allcallouts', 'labelspc', 'legend' ], | |
98 | legend=> | |
99 | { | |
100 | valign=>'top', | |
101 | halign=>'center', | |
102 | orientation => 'horizontal', | |
103 | fill => { solid => Imager::Color->new(0, 0, 0, 32) }, | |
104 | patchborder => undef, | |
105 | #size => 30, | |
106 | }); | |
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); | |
112 | ||
bfcf9414 | 113 | { |
26c93f46 TC |
114 | # RT #34813 |
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); | |
118 | ||
119 | my $img = $pie->draw | |
120 | ( | |
121 | data => \@data, | |
122 | labels => \@labels, | |
123 | font => $font, | |
124 | features => [ 'legend', 'labelspc', 'outline' ], | |
125 | ); | |
126 | ok($img, "create graph with no 'others'"); | |
127 | ok($img->write(file => 'testout/t10_noother.ppm'), | |
128 | "save it"); | |
129 | cmpimg($img, 'testimg/t10_noother.png', 500_000); | |
35574351 | 130 | } |
35574351 TC |
131 | |
132 | sub cmpimg { | |
133 | my ($img, $file, $limit) = @_; | |
134 | ||
135 | $limit ||= 10000; | |
136 | ||
bfcf9414 TC |
137 | SKIP: |
138 | { | |
139 | $Imager::formats{png} | |
140 | or skip("No PNG support", 1); | |
141 | ||
35574351 TC |
142 | my $cmpimg = Imager->new; |
143 | $cmpimg->read(file=>$file) | |
144 | or return ok(0, "Cannot read $file: ".$cmpimg->errstr); | |
145 | my $diff = Imager::i_img_diff($img->{IMG}, $cmpimg->{IMG}); | |
bfcf9414 | 146 | cmp_ok($diff, '<', $limit, "Comparison to $file ($diff)"); |
35574351 TC |
147 | } |
148 | } |