fb46a217be7ef62eb9e60e0f807d9e6e6ea27b32
[imager-graph.git] / t / x50vstyle.t
1 #!perl -w
2 use strict;
3 use Imager::Graph::Line;
4 use lib 't/lib';
5 use Imager::Font::Test;
6 use Test::More;
7 use Imager::Test qw(is_image_similar is_image);
8
9 -d 'testout' 
10   or mkdir "testout", 0700 
11   or die "Could not create output directory: $!";
12
13 ++$|;
14
15 use Imager qw(:handy);
16
17 #my $fontfile = 'ImUgly.ttf';
18 #my $font = Imager::Font->new(file=>$fontfile, type => 'ft2', aa=>1)
19 #  or plan skip_all => "Cannot create font object: ",Imager->errstr,"\n";
20 my $font = Imager::Font::Test->new();
21
22 my @data1 =
23   (
24     100, 180, 80, 20, 2, 1, 0.5 ,
25   );
26 my @labels = qw(alpha beta gamma delta epsilon phi gi);
27
28 plan tests => 29;
29
30 # this may change output quality too
31 print "# Imager version: $Imager::VERSION\n";
32 print "# Font type: ",ref $font,"\n";
33
34 {
35   my $vert = Imager::Graph::Vertical->new;
36   ok($vert, "creating chart object");
37   $vert->set_y_tics(10);
38
39   $vert->add_line_data_series(\@data1, "Test Line");
40
41   my $img1;
42   { # default outline of chart area
43     $img1 = $vert->draw
44       (
45        labels => \@labels,
46        font => $font, 
47        title => "Test",
48       )
49         or print "# ", $vert->error, "\n";
50
51     ok($img1, "made the image");
52
53     ok($img1->write(file => "testout/x50line_def.ppm"),
54        "save to testout");
55
56     cmpimg($img1, "xtestimg/x50line_def.png", 60_000);
57   }
58
59   { # no outline
60     my $img2 = $vert->draw
61       (
62        labels => \@labels,
63        font => $font, 
64        title => "Test",
65        features => [ qw/nograph_outline/ ],
66       )
67         or print "# ", $vert->error, "\n";
68
69     isnt($img1, $img2, "make sure they're different images");
70
71     ok($img2, "made the image");
72
73     ok($img2->write(file => "testout/x50line_noout.ppm"),
74        "save to testout");
75
76     cmpimg($img2, "xtestimg/x50line_noout.png", 60_000);
77
78     my $img3 = $vert->draw
79       (
80        labels => \@labels,
81        font => $font, 
82        title => "Test",
83        features => "nograph_outline",
84       )
85         or print "# ", $vert->error, "\n";
86     ok($img3, "made with scalar features");
87     is_image($img3, $img2, "check that both feature mechanisms act the same");
88
89     my $img4 = $vert->draw
90       (
91        labels => \@labels,
92        font => $font, 
93        title => "Test",
94        features => { "graph_outline" => 0 },
95       )
96         or print "# ", $vert->error, "\n";
97     ok($img4, "made with hashref features");
98     is_image($img4, $img2, "check that all feature mechanisms act the same");
99   }
100
101   {
102     # check no state remembered from nograph_outline
103     my $img5 = $vert->draw
104       (
105        labels => \@labels,
106        font => $font, 
107        title => "Test",
108       )
109         or print "# ", $vert->error, "\n";
110     ok($img5, "make with border again to check no state held");
111     is_image($img1, $img5, "check no state held");
112   }
113
114   { # styled outline
115     my $img6 = $vert->draw
116       (
117        labels => \@labels,
118        font => $font,
119        title => "Test styled outline",
120        graph =>
121        {
122         outline =>
123         {
124          color => "#fff",
125          style => "dashed",
126         },
127        },
128       );
129     ok($img6, "make chart with dashed outline of graph area");
130     ok($img6->write(file => "testout/x50line_dashout.ppm"),
131        "save it");
132     cmpimg($img6, "xtestimg/x50line_dashout.png", 80_000);
133   }
134
135   { # no outline, styled fill
136     my $img7 = $vert->draw
137       (
138        labels => \@labels,
139        font => $font,
140        title => "Test styled outline",
141        features => "nograph_outline",
142        graph =>
143        {
144         fill => { solid => "ffffffC0" },
145        },
146       )
147         or print "# ", $vert->error, "\n";
148     ok($img7, "made the image");
149     ok($img7->write(file => "testout/x50line_fill.ppm"),
150        "save it");
151     cmpimg($img7, "xtestimg/x50line_fill.png", 80_000);
152   }
153
154   { # gridlines
155     my $img8 = $vert->draw
156       (
157        labels => \@labels,
158        font => $font,
159        title => "gridlines",
160        features => "horizontal_gridlines",
161        hgrid => { style => "dashed", color => "#A0A0A0" },
162       )
163         or print "# ", $vert->error, "\n";
164     ok($img8, "made the gridline image");
165     ok($img8->write(file => "testout/x50line_grid.ppm"),
166        "save it");
167     cmpimg($img8, "xtestimg/x50line_grid.png", 60_000);
168
169     # default horizontal gridlines
170     my $imgb = $vert->draw
171       (
172        labels => \@labels,
173        font => $font,
174        title => "gridlines",
175        features => "horizontal_gridlines",
176       )
177         or print "# ", $vert->error, "\n";
178     ok($imgb, "made the gridline image");
179     ok($imgb->write(file => "testout/x50line_griddef.ppm"),
180        "save it");
181     cmpimg($imgb, "xtestimg/x50line_griddef.png", 60_000);
182
183   }
184
185   { # gridlines (set by method)
186     my $vert2 = Imager::Graph::Vertical->new;
187     $vert2->show_horizontal_gridlines();
188     $vert2->set_horizontal_gridline_style(style => "dashed", color => "#A0A0A0");
189     $vert2->set_labels(\@labels);
190     $vert2->set_title("gridlines");
191     $vert2->add_line_data_series(\@data1, "Test Line");
192     $vert2->set_y_tics(10);
193     $vert2->set_font($font);
194
195     my $img9 = $vert2->draw
196       (
197        #labels => \@labels,
198        #font => $font,
199        #title => "gridlines",
200        #features => "horizontal_gridlines",
201        #hgrid => { style => "dashed", color => "#A0A0A0" },
202       )
203         or print "# ", $vert2->error, "\n";
204     ok($img9, "made the gridline image (set by methods)");
205     ok($img9->write(file => "testout/x50line_gridm.ppm"),
206        "save it");
207     cmpimg($img9, "xtestimg/x50line_grid.png", 60_000);
208   }
209 }
210
211 END {
212   unless ($ENV{IMAGER_GRAPH_KEEP_FILES}) {
213     unlink "testout/x50line_def.ppm";
214     unlink "testout/x50line_noout.ppm";
215     unlink "testout/x50line_dashout.ppm";
216     unlink "testout/x50line_fill.ppm";
217     unlink "testout/x50line_grid.ppm";
218     unlink "testout/x50line_griddef.ppm";
219     unlink "testout/x50line_gridm.ppm";
220   }
221 }
222
223 sub cmpimg {
224   my ($img, $file, $limit) = @_;
225
226   $limit ||= 10000;
227
228  SKIP:
229   {
230     $Imager::formats{png}
231       or skip("No PNG support", 1);
232
233     my $cmpimg = Imager->new;
234     $cmpimg->read(file=>$file)
235       or return ok(0, "Cannot read $file: ".$cmpimg->errstr);
236     my $diff = Imager::i_img_diff($img->{IMG}, $cmpimg->{IMG});
237     is_image_similar($img, $cmpimg, $limit, "Comparison to $file ($diff)");
238   }
239 }