Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 343 lines (300 sloc) 11.527 kb
63e0dc0 - the internal function used to probe file formats if the type
Tony Cook authored
1 #!perl -w
2
3 # This file is for testing file functionality that is independent of
4 # the file format
5
6 use strict;
e1558ff Tony Cook added the check_file_limits() method to Imager
authored
7 use Test::More tests => 85;
63e0dc0 - the internal function used to probe file formats if the type
Tony Cook authored
8 use Imager;
9
40e78f9 Tony Cook RT#65088 make sure each test script that needs testout/ creates it
authored
10 -d "testout" or mkdir "testout";
11
cc59ead Tony Cook clean up test files by default for some more test scripts
authored
12 Imager->open_log(log => "testout/t1000files.log");
63e0dc0 - the internal function used to probe file formats if the type
Tony Cook authored
13
14 SKIP:
15 {
bb7a34c Tony Cook note the purpose of a complex test
authored
16 # Test that i_test_format_probe() doesn't pollute stdout
17
63e0dc0 - the internal function used to probe file formats if the type
Tony Cook authored
18 # Initally I tried to write this test using open to redirect files,
19 # but there was a buffering problem that made it so the data wasn't
20 # being written to the output file. This external perl call avoids
21 # that problem
22
23 my $test_script = 'testout/t1000files_probe.pl';
24
25 # build a temp test script to use
26 ok(open(SCRIPT, "> $test_script"), "open test script")
27 or skip("no test script $test_script: $!", 2);
28 print SCRIPT <<'PERL';
29 #!perl
30 use Imager;
31 use strict;
32 my $file = shift or die "No file supplied";
33 open FH, "< $file" or die "Cannot open file: $!";
34 binmode FH;
35 my $io = Imager::io_new_fd(fileno(FH));
36 Imager::i_test_format_probe($io, -1);
37 PERL
38 close SCRIPT;
39 my $perl = $^X;
40 $perl = qq/"$perl"/ if $perl =~ / /;
41
42 print "# script: $test_script\n";
43 my $cmd = "$perl -Mblib $test_script t/t1000files.t";
44 print "# command: $cmd\n";
45
46 my $out = `$cmd`;
47 is($?, 0, "command successful");
48 is($out, '', "output should be empty");
49 }
50
7715772 - convert t/t107bmp.t to Test::More
Tony Cook authored
51 # test the file limit functions
52 # by default the limits are zero (unlimited)
53 print "# image file limits\n";
8d14daa Tony Cook switch to using size_t and i_img_dim strictly
authored
54 is_deeply([ Imager->get_file_limits() ], [0, 0, 0x40000000 ],
7715772 - convert t/t107bmp.t to Test::More
Tony Cook authored
55 "check defaults");
56 ok(Imager->set_file_limits(width=>100), "set only width");
8d14daa Tony Cook switch to using size_t and i_img_dim strictly
authored
57 is_deeply([ Imager->get_file_limits() ], [100, 0, 0x40000000 ],
7715772 - convert t/t107bmp.t to Test::More
Tony Cook authored
58 "check width set");
59 ok(Imager->set_file_limits(height=>150, bytes=>10000),
60 "set height and bytes");
61 is_deeply([ Imager->get_file_limits() ], [ 100, 150, 10000 ],
62 "check all values now set");
e1558ff Tony Cook added the check_file_limits() method to Imager
authored
63 ok(Imager->check_file_limits(width => 100, height => 30),
64 "check 100 x 30 (def channels, sample_size) ok")
65 or diag(Imager->errstr);
66 ok(Imager->check_file_limits(width => 100, height => 100, channels => 1),
67 "check 100 x 100 x 1 (def sample_size) ok")
68 or diag(Imager->errstr);
69 ok(Imager->check_file_limits(width => 100, height => 100, channels => 1),
70 "check 100 x 100 x 1 (def sample_size) ok")
71 or diag(Imager->errstr);
72 ok(!Imager->check_file_limits(width => 100, height => 100, channels => 1, sample_size => "float"),
73 "check 100 x 100 x 1 x float should fail");
74 ok(!Imager->check_file_limits(width => 100, height => 100, channels => 0),
75 "0 channels should fail");
76 is(Imager->errstr, "file size limit - channels 0 out of range",
77 "check error message");
78 ok(!Imager->check_file_limits(width => 0, height => 100),
79 "0 width should fail");
80 is(Imager->errstr, "file size limit - image width of 0 is not positive",
81 "check error message");
82 ok(!Imager->check_file_limits(width => 100, height => 0),
83 "0 height should fail");
84 is(Imager->errstr, "file size limit - image height of 0 is not positive",
85 "check error message");
86 ok(!Imager->check_file_limits(width => 10, height => 10, sample_size => 0),
87 "0 sample_size should fail");
88 is(Imager->errstr, "file size limit - sample_size 0 out of range",
89 "check error message");
90 ok(!Imager->check_file_limits(width => 10, height => 10, sample_size => 1000),
91 "1000 sample_size should fail");
92 is(Imager->errstr, "file size limit - sample_size 1000 out of range",
93 "check error message");
7715772 - convert t/t107bmp.t to Test::More
Tony Cook authored
94 ok(Imager->set_file_limits(reset=>1, height => 99),
95 "set height and reset");
85cae6e Tony Cook set_file_limits(reset => 1) now resets to defaults, not zero.
authored
96 is_deeply([ Imager->get_file_limits() ], [ 0, 99, 0x40000000 ],
7715772 - convert t/t107bmp.t to Test::More
Tony Cook authored
97 "check only height is set");
98 ok(Imager->set_file_limits(reset=>1),
99 "just reset");
85cae6e Tony Cook set_file_limits(reset => 1) now resets to defaults, not zero.
authored
100 is_deeply([ Imager->get_file_limits() ], [ 0, 0, 0x40000000 ],
7715772 - convert t/t107bmp.t to Test::More
Tony Cook authored
101 "check all are reset");
db7a875 - eliminate sign warning from image.c
Tony Cook authored
102
e1558ff Tony Cook added the check_file_limits() method to Imager
authored
103 # bad parameters
104 is_deeply([ Imager->check_file_limits() ], [],
105 "missing size paramaters");
106 is(Imager->errstr, "check_file_limits: width must be defined",
107 "check message");
108 is_deeply([ Imager->check_file_limits(width => 100.5) ], [],
109 "non-integer parameter");
110 is(Imager->errstr, "check_file_limits: width must be a positive integer",
111 "check message");
112
5970bd3 Tony Cook [rt #69194] include more information in read()/write() error messages
authored
113 # test error handling for loading file handers
114 {
115 # first, no module at all
116 {
117 my $data = "abc";
118 ok(!Imager->new(data => $data, filetype => "unknown"),
119 "try to read an unknown file type");
120 like(Imager->errstr, qr(^format 'unknown' not supported - formats .* - Can't locate Imager/File/UNKNOWN.pm or Imager/File/UNKNOWNReader.pm$),
121 "check error message");
122 }
123 {
124 my $data;
125 my $im = Imager->new(xsize => 10, ysize => 10);
126 ok(!$im->write(data => \$data, type => "unknown"),
127 "try to write an unknown file type");
128 like($im->errstr, qr(^format 'unknown' not supported - formats .* - Can't locate Imager/File/UNKNOWN.pm or Imager/File/UNKNOWNWriter.pm$),
129 "check error message");
130 }
131 push @INC, "t/t1000lib";
132 {
133 my $data = "abc";
134 ok(!Imager->new(data => $data, filetype => "bad"),
135 "try to read an bad (other load failure) file type");
07b0697 Tony Cook adjust the test error messages to match the new module load errors
authored
136 like(Imager->errstr, qr(^format 'bad' not supported - formats .* available for reading - This module fails to load loading Imager/File/BAD.pm$),
5970bd3 Tony Cook [rt #69194] include more information in read()/write() error messages
authored
137 "check error message");
138 }
139 {
140 my $data;
141 my $im = Imager->new(xsize => 10, ysize => 10);
142 ok(!$im->write(data => \$data, type => "bad"),
143 "try to write an bad file type");
07b0697 Tony Cook adjust the test error messages to match the new module load errors
authored
144 like($im->errstr, qr(^format 'bad' not supported - formats .* available for writing - This module fails to load loading Imager/File/BAD.pm$),
5970bd3 Tony Cook [rt #69194] include more information in read()/write() error messages
authored
145 "check error message");
146 }
147 }
148
db7a875 - eliminate sign warning from image.c
Tony Cook authored
149 # check file type probe
150 probe_ok("49492A41", undef, "not quite tiff");
151 probe_ok("4D4D0041", undef, "not quite tiff");
152 probe_ok("49492A00", "tiff", "tiff intel");
153 probe_ok("4D4D002A", "tiff", "tiff motorola");
154 probe_ok("474946383961", "gif", "gif 89");
155 probe_ok("474946383761", "gif", "gif 87");
ea1136f - i_test_format_probe() now attempts to detect MS Windows Icon/cursor fi...
Tony Cook authored
156 probe_ok(<<TGA, "tga", "TGA");
157 00 00 0A 00 00 00 00 00 00 00 00 00 96 00 96 00
158 18 20 FF 00 00 00 95 00 00 00 FF 00 00 00 95 00
159 00 00 FF 00 00 00 95 00 00 00 FF 00 00 00 95 00
160 00 00 FF 00 00 00 95 00 00 00 FF 00 00 00 95 00
161 TGA
162
c5a24cc - some TGA images weren't being detected correctly as TGA images
Tony Cook authored
163 probe_ok(<<TGA, "tga", "TGA 32-bit");
164 00 00 0A 00 00 00 00 00 00 00 00 00 0A 00 0A 00
165 20 08 84 00 00 00 00 84 FF FF FF FF 84 00 00 00
166 00 84 FF FF FF FF 84 00 00 00 00 84 FF FF FF FF
167 TGA
168
ea1136f - i_test_format_probe() now attempts to detect MS Windows Icon/cursor fi...
Tony Cook authored
169 probe_ok(<<ICO, "ico", "Windows Icon");
170 00 00 01 00 02 00 20 20 10 00 00 00 00 00 E8 02
171 00 00 26 00 00 00 20 20 00 00 00 00 00 00 A8 08
172 00 00 0E 03 00 00 28 00 00 00 20 00 00 00 40 00
173 ICO
db7a875 - eliminate sign warning from image.c
Tony Cook authored
174
681d28f i_test_format_probe:
Tony Cook authored
175 probe_ok(<<ICO, "cur", "Windows Cursor");
176 00 00 02 00 02 00 20 20 10 00 00 00 00 00 E8 02
177 00 00 26 00 00 00 20 20 00 00 00 00 00 00 A8 08
178 00 00 0E 03 00 00 28 00 00 00 20 00 00 00 40 00
179 ICO
180
d5477d3 - Finished/rewrote Arnar's old SGI RGB file format support, so Imager
Tony Cook authored
181 probe_ok(<<SGI, "sgi", "SGI RGB");
8b302e4 add format probes for SGI RGB, ILBM, XPM, PCX, FITS, Photoshop, EPS
Tony Cook authored
182 01 DA 01 01 00 03 00 96 00 96 00 03 00 00 00 00
183 00 00 00 FF 00 00 00 00 6E 6F 20 6E 61 6D 65 00
184 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d5477d3 - Finished/rewrote Arnar's old SGI RGB file format support, so Imager
Tony Cook authored
185 SGI
8b302e4 add format probes for SGI RGB, ILBM, XPM, PCX, FITS, Photoshop, EPS
Tony Cook authored
186
187 probe_ok(<<ILBM, "ilbm", "ILBM");
188 46 4F 52 4D 00 00 60 7A 49 4C 42 4D 42 4D 48 44
189 00 00 00 14 00 96 00 96 00 00 00 00 18 00 01 80
190 00 00 0A 0A 00 96 00 96 42 4F 44 59 00 00 60 51
191 ILBM
192
193 probe_ok(<<XPM, "xpm", "XPM");
194 2F 2A 20 58 50 4D 20 2A 2F 0A 73 74 61 74 69 63
195 20 63 68 61 72 20 2A 6E 6F 6E 61 6D 65 5B 5D 20
196 3D 20 7B 0A 2F 2A 20 77 69 64 74 68 20 68 65 69
197 XPM
198
199 probe_ok(<<PCX, "pcx", 'PCX');
200 0A 05 01 08 00 00 00 00 95 00 95 00 96 00 96 00
201 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
202 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
203 PCX
204
205 probe_ok(<<FITS, "fits", "FITS");
206 53 49 4D 50 4C 45 20 20 3D 20 20 20 20 20 20 20
207 20 20 20 20 20 20 20 20 20 20 20 20 20 54 20 20
208 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
209 FITS
210
211 probe_ok(<<PSD, "psd", "Photoshop");
212 38 42 50 53 00 01 00 00 00 00 00 00 00 06 00 00
213 00 3C 00 00 00 96 00 08 00 03 00 00 00 00 00 00
214 0B E6 38 42 49 4D 03 ED 00 00 00 00 00 10 00 90
215 PSD
216
217 probe_ok(<<EPS, "eps", "Encapsulated Postscript");
218 25 21 50 53 2D 41 64 6F 62 65 2D 32 2E 30 20 45
219 50 53 46 2D 32 2E 30 0A 25 25 43 72 65 61 74 6F
220 72 3A 20 70 6E 6D 74 6F 70 73 0A 25 25 54 69 74
221 EPS
222
681d28f i_test_format_probe:
Tony Cook authored
223 probe_ok(<<UTAH, "utah", "Utah RLE");
224 52 CC 00 00 00 00 0A 00 0A 00 0A 03 08 00 08 00
225 2F 00 48 49 53 54 4F 52 59 3D 70 6E 6D 74 6F 72
226 6C 65 20 6F 6E 20 54 68 75 20 4D 61 79 20 31 31
227 20 31 36 3A 33 35 3A 34 33 20 32 30 30 36 0A 09
228 UTAH
229
603dfac add a magic entry to detect XWD files
Tony Cook authored
230 probe_ok(<<XWD, "xwd", "X Window Dump");
231 00 00 00 69 00 00 00 07 00 00 00 02 00 00 00 18
232 00 00 01 E4 00 00 01 3C 00 00 00 00 00 00 00 00
233 00 00 00 20 00 00 00 00 00 00 00 20 00 00 00 20
234 00 00 07 90 00 00 00 04 00 FF 00 00 00 00 FF 00
235 XWD
236
33fc0c9 add detection of BZIP2 and gzip data
Tony Cook authored
237 probe_ok(<<GZIP, "gzip", "gzip compressed");
238 1F 8B 08 08 C2 81 BD 44 02 03 49 6D 61 67 65 72
239 2D 30 2E 35 31 5F 30 33 2E 74 61 72 00 EC 5B 09
240 40 53 C7 BA 9E 24 AC 01 D9 44 04 44 08 8B B2 8A
241 C9 C9 42 92 56 41 50 20 A0 02 41 41 01 17 48 80
242 GZIP
243
244 probe_ok(<<BZIP2, "bzip2", "bzip2 compressed");
245 42 5A 68 39 31 41 59 26 53 59 0F D8 8C 09 00 03
246 28 FF FF FF FF FB 7F FB 77 FF EF BF 6B 7F BE FF
247 FF DF EE C8 0F FF F3 FF FF FF FC FF FB B1 FF FB
248 F4 07 DF D0 03 B8 03 60 31 82 05 2A 6A 06 83 20
249 BZIP2
250
bca6a3d detect some more file types
Tony Cook authored
251 probe_ok(<<WEBP, "webp", "Google WEBP");
252 52 49 46 46 2C 99 00 00 57 45 42 50 56 50 38 20
253 20 99 00 00 70 7A 02 9D 01 2A E0 01 80 02 00 87
254 08 85 85 88 85 84 88 88 83 AF E2 F7 64 1F 98 55
255 1B 6A 70 F5 8A 45 09 95 0C 09 7E 25 D9 2E 46 44
256 07 84 FB 01 FD 2C 8A 2F 97 CC ED DB 50 0F 11 3B
257 WEBP
258
259 probe_ok(<<JPEG2K, "jp2", "JPEG 2000");
260 00 00 00 0C 6A 50 20 20 0D 0A 87 0A 00 00 00 14
261 66 74 79 70 6A 70 32 20 00 00 00 00 6A 70 32 20
262 00 00 00 2D 6A 70 32 68 00 00 00 16 69 68 64 72
263 00 00 02 80 00 00 01 E0 00 03 07 07 00 00 00 00
264 00 0F 63 6F 6C 72 01 00 00 00 00 00 10 00 00 00
265 00 6A 70 32 63 FF 4F FF 51 00 2F 00 00 00 00 01
266 JPEG2K
267
4f21e06 Tony Cook [rt #72475] make the error messages from read() match reality
authored
268 { # RT 72475
269 # check error messages from read/read_multi
270 my $data = "nothing useful";
271 my @mult_data = Imager->read_multi(data => $data);
272 is(@mult_data, 0, "read_multi with non-image input data should fail");
273 is(Imager->errstr,
274 "type parameter missing and it couldn't be determined from the file contents",
275 "check the error message");
276
277 my @mult_file = Imager->read_multi(file => "t/t1000files.t");
278 is(@mult_file, 0, "read_multi with non-image filename should fail");
279 is(Imager->errstr,
280 "type parameter missing and it couldn't be determined from the file contents or file name",
281 "check the error message");
282
283 my $im = Imager->new;
284 ok(!$im->read(data => $data), "read from non-image data should fail");
285 is($im->errstr,
286 "type parameter missing and it couldn't be determined from the file contents",
287 "check the error message");
288
289 ok(!$im->read(file => "t/t1000files.t"),
290 "read from non-image file should fail");
291 is($im->errstr,
292 "type parameter missing and it couldn't be determined from the file contents or file name",
293 "check the error message");
294 }
295
296 {
297 # test def_guess_type
298 my @tests =
299 (
300 pnm => "pnm",
301 GIF => "gif",
302 tif => "tiff",
303 TIFF => "tiff",
304 JPG => "jpeg",
305 rle => "utah",
306 bmp => "bmp",
307 dib => "bmp",
308 rgb => "sgi",
309 BW => "sgi",
310 TGA => "tga",
311 CUR => "cur",
312 ico => "ico",
313 ILBM => "ilbm",
314 pcx => "pcx",
315 psd => "psd",
316 );
317
318 while (my ($ext, $expect) = splice(@tests, 0, 2)) {
319 my $filename = "foo.$ext";
320 is(Imager::def_guess_type($filename), $expect,
321 "type for $filename should be $expect");
322 }
323 }
324
cc59ead Tony Cook clean up test files by default for some more test scripts
authored
325 Imager->close_log;
326
327 unless ($ENV{IMAGER_KEEP_FILES}) {
328 unlink "testout/t1000files.log";
329 }
330
db7a875 - eliminate sign warning from image.c
Tony Cook authored
331 sub probe_ok {
332 my ($packed, $exp_type, $name) = @_;
333
334 my $builder = Test::Builder->new;
ea1136f - i_test_format_probe() now attempts to detect MS Windows Icon/cursor fi...
Tony Cook authored
335 $packed =~ tr/ \r\n//d; # remove whitespace used for layout
db7a875 - eliminate sign warning from image.c
Tony Cook authored
336 my $data = pack("H*", $packed);
337
338 my $io = Imager::io_new_buffer($data);
339 my $result = Imager::i_test_format_probe($io, -1);
340
341 return $builder->is_eq($result, $exp_type, $name)
342 }
Something went wrong with that request. Please try again.