our
@ISA
=
qw(Exporter)
;
our
@EXPORT
= (
qw/
chunk_ok
fake_wpng
rmfile
round_trip
skip_itxt
skip_old
/
,
@Image::PNG::Const::EXPORT_OK
,
@Image::PNG::Libpng::EXPORT_OK
,
@Test::More::EXPORT
);
my
$builder
= Test::More->builder;
binmode
$builder
->output,
":encoding(utf8)"
;
binmode
$builder
->failure_output,
":encoding(utf8)"
;
binmode
$builder
->todo_output,
":encoding(utf8)"
;
binmode
STDOUT,
":encoding(utf8)"
;
binmode
STDERR,
":encoding(utf8)"
;
sub
import
{
my
(
$class
) =
@_
;
strict->
import
();
utf8->
import
();
warnings->
import
();
Test::More->
import
();
Image::PNG::Libpng->
import
(
':all'
);
Image::PNG::Const->
import
(
':all'
);
IPNGLT->export_to_level (1);
}
sub
skip_itxt
{
if
(! libpng_supports (
'iTXt'
) ||
! libpng_supports (
'zTXt'
) ||
! libpng_supports (
'tEXt'
) ||
! libpng_supports (
'TEXT'
)) {
plan
skip_all
=>
'your libpng does not support iTXt/zTXt/tEXt'
,
return
1;
}
return
0;
}
my
$oldmajor
= 0;
my
$oldminor
= 5;
my
$oldpatch
= 12;
sub
skip_old
{
my
$libpngver
= Image::PNG::Libpng::get_libpng_ver ();
if
(
$libpngver
!~ /^([0-9]+)\.([0-9]+)\.([0-9]+)/) {
plan
skip_all
=>
"Incomprehensible libpng version $libpngver"
;
return
1;
}
my
(
$major
,
$minor
,
$patch
) = ($1, $2, $3);
if
(
$major
> 1 ||
$minor
> 6) {
return
0;
}
if
(
$major
<=
$oldmajor
) {
plan
skip_all
=>
"Skipping: libpng major version $libpngver <= $oldmajor"
;
return
1;
}
if
(
$minor
<=
$oldminor
) {
plan
skip_all
=>
"Skipping: libpng minor version $libpngver <= $oldminor"
;
return
1;
}
if
(
$patch
<=
$oldpatch
) {
plan
skip_all
=>
"Skipping: libpng patch $libpngver <= $oldpatch"
;
return
1;
}
return
0;
}
sub
round_trip
{
my
(
$png
,
$filename
) =
@_
;
rmfile (
$filename
);
$png
->write_png_file (
$filename
);
my
$rpng
= read_png_file (
$filename
);
rmfile (
$filename
);
return
$rpng
;
}
sub
rmfile
{
my
(
$filename
) =
@_
;
if
(-f
$filename
) {
unlink
$filename
or
warn
"Failed to unlink '$filename': $!"
;
}
}
my
%default
= (
width
=> 1,
height
=> 1,
bit_depth
=> 8,
color_type
=> PNG_COLOR_TYPE_GRAY,
);
sub
fake_wpng
{
my
(
$ihdr
) =
@_
;
if
(!
defined
$ihdr
) {
$ihdr
= \
%default
;
}
for
my
$k
(
keys
%default
) {
if
(!
defined
$ihdr
->{
$k
}) {
$ihdr
->{
$k
} =
$default
{
$k
};
}
}
my
$longpng
= create_write_struct ();
$longpng
->set_IHDR (
$ihdr
);
$longpng
->set_rows ([
'X'
]);
return
$longpng
;
}
sub
chunk_ok
{
my
(
$chunk
) =
@_
;
if
(! libpng_supports (
$chunk
)) {
plan
skip_all
=>
"This libpng doesn't support '$chunk'"
}
}
1;