# image too big for format tests, for each entry point
{
- my $im = Imager->new(xsize => 256, ysize => 255);
+ my $im = Imager->new(xsize => 257, ysize => 256);
my $data;
ok(!$im->write(data => \$data, type=>'ico'),
"image too large");
}
{
- my $im = Imager->new(xsize => 256, ysize => 255);
+ my $im = Imager->new(xsize => 257, ysize => 256);
my $data;
ok(!Imager->write_multi({ data => \$data, type=>'ico' }, $im, $im),
"image too large");
}
{
- my $im = Imager->new(xsize => 256, ysize => 255);
+ my $im = Imager->new(xsize => 257, ysize => 256);
my $data;
ok(!$im->write(data => \$data, type=>'cur'),
"image too large");
}
{
- my $im = Imager->new(xsize => 256, ysize => 255);
+ my $im = Imager->new(xsize => 257, ysize => 256);
my $data;
ok(!Imager->write_multi({ data => \$data, type=>'cur' }, $im),
"image too large");
# low level write failure tests for each entry point (fail on write)
{
my $im = Imager->new(xsize => 10, ysize => 10);
- ok(!$im->write(callback => \&write_failure, maxbuffer => 1, type=>'ico'),
+ my $io = Imager::io_new_cb(\&write_failure, undef, undef, undef, 1);
+ $io->set_buffered(0);
+ ok(!$im->write(io => $io, type=>'ico'),
"low level write failure (ico)");
is($im->errstr, "Write failure: synthetic error", "check message");
}
{
my $im = Imager->new(xsize => 10, ysize => 10);
- ok(!$im->write(callback => \&write_failure, maxbuffer => 1, type=>'cur'),
+ my $io = Imager::io_new_cb(\&write_failure, undef, undef, undef, 1);
+ $io->set_buffered(0);
+ ok(!$im->write(io => $io, type=>'cur'),
"low level write failure (cur)");
is($im->errstr, "Write failure: synthetic error", "check message");
}
{
my $im = Imager->new(xsize => 10, ysize => 10);
- ok(!Imager->write_multi({ callback => \&write_failure, maxbuffer => 1, type=>'ico' }, $im, $im),
+ my $io = Imager::io_new_cb(\&write_failure, undef, undef, undef, 1);
+ $io->set_buffered(0);
+ ok(!Imager->write_multi({ io => $io, type=>'ico' }, $im, $im),
"low level write_multi failure (ico)");
is(Imager->errstr, "Write failure: synthetic error", "check message");
Imager->_set_error('');
{
my $im = Imager->new(xsize => 10, ysize => 10);
- ok(!Imager->write_multi({ callback => \&write_failure, maxbuffer => 1, type=>'cur' }, $im, $im),
+ my $io = Imager::io_new_cb(\&write_failure, undef, undef, undef, 1);
+ $io->set_buffered(0);
+ ok(!Imager->write_multi({ io => $io, type=>'cur' }, $im, $im),
"low level write_multi failure (cur)");
is(Imager->errstr, "Write failure: synthetic error", "check message");
Imager->_set_error('');
{
my $im = Imager->new(xsize => 10, ysize => 10);
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(6), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(6)),
"second write (resource) should fail (ico)");
is($im->errstr, "Write failure: limit reached", "check message");
$im->_set_error('');
- ok(!$im->write(type => 'cur', callback => WriteLimit->new(6), maxbuffer => 1),
+ ok(!$im->write(type => 'cur', io => limited_write_io(6)),
"second (resource) write should fail (cur)");
is($im->errstr, "Write failure: limit reached", "check message");
$im->_set_error('');
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(22), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(22)),
"third write (bmi) should fail (32-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
$im->_set_error('');
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(62), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(62)),
"fourth write (data) should fail (32-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
$im->_set_error('');
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(462), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(462)),
"mask write should fail (32-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
}
$im->addcolors(colors => [ $red, $blue ]);
$im->box(filled => 1, color => $red, ymax => 5);
$im->box(filled => 1, color => $blue, ymin => 6);
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(22), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(22)),
"third write (bmi) should fail (1-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(66), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(66)),
"fourth write (palette) should fail (1-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(74), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(74)),
"fifth write (image) should fail (1-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
my $data;
$im->addcolors(colors => [ ($red, $blue) x 8 ]);
$im->box(filled => 1, color => $red, ymax => 5);
$im->box(filled => 1, color => $blue, ymin => 6);
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(22), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(22)),
"third write (bmi) should fail (4-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(66), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(66)),
"fourth write (palette) should fail (4-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(130), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(130)),
"fifth write (image) should fail (4-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
my $data;
$im->addcolors(colors => [ ($red, $blue) x 9 ]);
$im->box(filled => 1, color => $red, ymax => 5);
$im->box(filled => 1, color => $blue, ymin => 6);
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(22), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(22)),
"third write (bmi) should fail (8-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(62), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(62)),
"fourth write (palette) should fail (8-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(62 + 1024), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(62 + 1024)),
"fifth write (image) should fail (8-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
- ok(!$im->write(type => 'ico', callback => WriteLimit->new(62 + 1024 + 10), maxbuffer => 1),
+ ok(!$im->write(type => 'ico', io => limited_write_io(62 + 1024 + 10)),
"sixth write (zeroes) should fail (8-bit)");
is($im->errstr, "Write failure: limit reached", "check message");
my $data;
return;
}
-package WriteLimit;
-use overload
- '&{}' => \&limited_write,
- 'bool' => sub { 1 };
+sub limited_write_io {
+ my ($limit) = @_;
-sub new {
- my ($class, $limit) = @_;
+ my $io = Imager::io_new_cb(limited_write($limit), undef, undef, undef, 1);
+ $io->set_buffered(0);
- bless
- {
- do_write =>
+ return $io;
+}
+
+sub limited_write {
+ my ($limit) = @_;
+
+ return
sub {
my ($data) = @_;
$limit -= length $data;
Imager::i_push_error(0, "limit reached");
return;
}
- }
- },$class;
-}
-
-sub limited_write {
- my ($self) = @_;
- return $self->{do_write};
+ };
}