X-Git-Url: http://git.imager.perl.org/imager.git/blobdiff_plain/fe10c10a91f8aa0cabc73a1e3765a434107cd34d..bb7a34c3fd9acc706fc56f67d5a6ff62bc093dd9:/t/t1000files.t diff --git a/t/t1000files.t b/t/t1000files.t index e7938eeb..10bbc474 100644 --- a/t/t1000files.t +++ b/t/t1000files.t @@ -4,14 +4,17 @@ # the file format use strict; -use lib 't'; -use Test::More tests => 3; +use Test::More tests => 43; use Imager; -Imager::init_log("testout/t1000files.log", 1); +-d "testout" or mkdir "testout"; + +Imager->open_log(log => "testout/t1000files.log"); SKIP: { + # Test that i_test_format_probe() doesn't pollute stdout + # Initally I tried to write this test using open to redirect files, # but there was a buffering problem that made it so the data wasn't # being written to the output file. This external perl call avoids @@ -45,3 +48,197 @@ PERL is($out, '', "output should be empty"); } +# test the file limit functions +# by default the limits are zero (unlimited) +print "# image file limits\n"; +is_deeply([ Imager->get_file_limits() ], [0, 0, 0x40000000 ], + "check defaults"); +ok(Imager->set_file_limits(width=>100), "set only width"); +is_deeply([ Imager->get_file_limits() ], [100, 0, 0x40000000 ], + "check width set"); +ok(Imager->set_file_limits(height=>150, bytes=>10000), + "set height and bytes"); +is_deeply([ Imager->get_file_limits() ], [ 100, 150, 10000 ], + "check all values now set"); +ok(Imager->set_file_limits(reset=>1, height => 99), + "set height and reset"); +is_deeply([ Imager->get_file_limits() ], [ 0, 99, 0 ], + "check only height is set"); +ok(Imager->set_file_limits(reset=>1), + "just reset"); +is_deeply([ Imager->get_file_limits() ], [ 0, 0, 0 ], + "check all are reset"); + +# test error handling for loading file handers +{ + # first, no module at all + { + my $data = "abc"; + ok(!Imager->new(data => $data, filetype => "unknown"), + "try to read an unknown file type"); + like(Imager->errstr, qr(^format 'unknown' not supported - formats .* - Can't locate Imager/File/UNKNOWN.pm or Imager/File/UNKNOWNReader.pm$), + "check error message"); + } + { + my $data; + my $im = Imager->new(xsize => 10, ysize => 10); + ok(!$im->write(data => \$data, type => "unknown"), + "try to write an unknown file type"); + like($im->errstr, qr(^format 'unknown' not supported - formats .* - Can't locate Imager/File/UNKNOWN.pm or Imager/File/UNKNOWNWriter.pm$), + "check error message"); + } + push @INC, "t/t1000lib"; + { + my $data = "abc"; + ok(!Imager->new(data => $data, filetype => "bad"), + "try to read an bad (other load failure) file type"); + like(Imager->errstr, qr(^format 'bad' not supported - formats .* available for reading - This module fails to load$), + "check error message"); + } + { + my $data; + my $im = Imager->new(xsize => 10, ysize => 10); + ok(!$im->write(data => \$data, type => "bad"), + "try to write an bad file type"); + like($im->errstr, qr(^format 'bad' not supported - formats .* available for writing - This module fails to load$), + "check error message"); + } +} + +# check file type probe +probe_ok("49492A41", undef, "not quite tiff"); +probe_ok("4D4D0041", undef, "not quite tiff"); +probe_ok("49492A00", "tiff", "tiff intel"); +probe_ok("4D4D002A", "tiff", "tiff motorola"); +probe_ok("474946383961", "gif", "gif 89"); +probe_ok("474946383761", "gif", "gif 87"); +probe_ok(<close_log; + +unless ($ENV{IMAGER_KEEP_FILES}) { + unlink "testout/t1000files.log"; +} + +sub probe_ok { + my ($packed, $exp_type, $name) = @_; + + my $builder = Test::Builder->new; + $packed =~ tr/ \r\n//d; # remove whitespace used for layout + my $data = pack("H*", $packed); + + my $io = Imager::io_new_buffer($data); + my $result = Imager::i_test_format_probe($io, -1); + + return $builder->is_eq($result, $exp_type, $name) +}