X-Git-Url: http://git.draconx.ca/gitweb/liblbx.git/blobdiff_plain/efc068f39f6811cdc0e004d2acf4ef08b2b71c3e..9969a6cd8e946ea3bbcd7f4b357b0e60fc02fe43:/tests/moo2data.at diff --git a/tests/moo2data.at b/tests/moo2data.at new file mode 100644 index 0000000..240787c --- /dev/null +++ b/tests/moo2data.at @@ -0,0 +1,207 @@ +# Copyright © 2013, 2021 Nick Bowler +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +AT_BANNER([Original data file tests]) + +AT_ARG_OPTION_ARG([moo2-datadir], + [AS_HELP_STRING([--moo2-datadir], + [location of original MOO2 data files + (default: \${datadir}/moo2-data)], [17])], + [moo2_datadir=$at_optarg], [moo2_datadir=$datadir/moo2-data]) + +m4_divert_push([PREPARE_TESTS])dnl +# Compute MD5 hash of standard input. +test_md5sum () { + set x `md5sum @]) +m4_define([TEST_REQUIRE_MOO2_DATA], [AT_KEYWORDS([$1])dnl +m4_foreach_w([DATAFILE], [$1], + [m4_pushdef([PATTERN], + [$][1/]m4_dquote(m4_map([$0_CASEWRAP], + m4_cdr(m4_bpatsubst(m4_defn([DATAFILE]), [.], [,[[\&]]])))))dnl +test -f DATAFILE || for f in m4_join([ ], + PATTERN(["$moo2_datadir"]), + PATTERN([/usr/share/moo2-data])) +do + test -f "$f" && { $LN_S "$f" DATAFILE || cp "$f" DATAFILE; } && break +done +AT_SKIP_IF([test ! -f "$f"]) +m4_popdef([PATTERN])])]) + +dnl TEST_UNPACK_MOO2_DATA(file ...) +dnl +dnl Wrapper around TEST_REQUIRE_MOO2_DATA that unpacks each file (which should +dnl be archives). +m4_define([TEST_UNPACK_MOO2_DATA], +[TEST_REQUIRE_MOO2_DATA([$1])dnl +m4_map_args_w([$1], [AT_CHECK([lbxtool -xf ]], [)], [ +])]) + +dnl TEST_CHECK_PAM_MD5(file, expected_md5, [header = value] ...) +dnl +dnl Compute and validate the MD5 hash over the plane data from a PAM image. +dnl Additional arguments specify PAM header fields that should be checked. +m4_define([TEST_CHECK_PAM_MD5], +[exec 3<$1; AT_CHECK([pam_check_header <&3 \ + m4_map_args_sep([m4_apply([m4_car], m4_split(], [))], [ ], m4_shift2($@)) +status=$? +echo $pam_TUPLTYPE >$1.tt +exit $?], [0],[m4_map_args([m4_n], m4_shift2($@))]) +AT_CHECK([test_md5sum <&3 >$1.md5]) +exec 3<&- + +# For reliable verification of images with transparency, we must have a known +# constant colour value for transparent pixels. We can use netpbm tools to +# zero out those pixels. For affected image formats, if we cannot normalize +# the transparent pixels we have to skip the test if verification would fail. + +md5_reliable=true +read pam_TUPLTYPE <$1.tt +AS_CASE([$pam_TUPLTYPE], + [GRAYSCALE_ALPHA], [alpha=1], + [RGB_ALPHA], [alpha=3], + [alpha=0]) +AS_IF([test "$alpha" -gt 0], +[$PAMCHANNEL "$alpha" <$1 >$1.msk && + $PAMARITH -and $1 $1.msk >$1.fix && + { pam_read_header && test_md5sum; } <$1.fix >$1.tmp && + mv -f $1.tmp $1.md5 || + md5_reliable=false +AT_CHECK([$md5_reliable || { read x <$1.md5; test x"$x" = x"$2" || exit 77; }]) +]) +AT_CHECK([cat $1.md5], [0], [m4_n([$2])])]) + +# Image with transparency and embedded palette +AT_SETUP([logo.lbx.000]) + +TEST_UNPACK_MOO2_DATA([logo.lbx]) +AT_CHECK([lbximg -F pam -df logo.lbx.000]) +TEST_CHECK_PAM_MD5([out.000.pam], + [e51c564aa638dc62dd1fd79e6f6cc375], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB_ALPHA]) + +AT_CLEANUP + +# Animation with embedded palette +AT_SETUP([logo.lbx.001]) + +TEST_UNPACK_MOO2_DATA([logo.lbx]) +AT_CHECK([lbximg -F pam -df logo.lbx.001]) +TEST_CHECK_PAM_MD5([out.000.pam], + [13a60ede277eebe8fec69f03c5cb5843], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB]) +TEST_CHECK_PAM_MD5([out.030.pam], + [c687fc35b940d0bfdaea5b6d51aa03c4], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB]) +TEST_CHECK_PAM_MD5([out.063.pam], + [7c694409997fe15272abe71f3fea2759], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB]) + +AT_CLEANUP + +# Animation with external palette +AT_SETUP([mainmenu.lbx.000]) + +TEST_UNPACK_MOO2_DATA([fonts.lbx mainmenu.lbx]) +AT_CHECK([lbximg -F pam -df mainmenu.lbx.000 -p fonts.lbx.006]) +TEST_CHECK_PAM_MD5([out.000.pam], + [7c3b347e03d42cd7bd1597f9dd58594e], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB]) +TEST_CHECK_PAM_MD5([out.015.pam], + [2a66f4c30ca315cc061606b27cef4adf], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB]) +TEST_CHECK_PAM_MD5([out.049.pam], + [848e33a0addc6e9acdc4fee6cbd56639], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB]) + +AT_CLEANUP + +# Image with external palette +AT_SETUP([mainmenu.lbx.007]) + +TEST_UNPACK_MOO2_DATA([fonts.lbx mainmenu.lbx]) +AT_CHECK([lbximg -F pam -df mainmenu.lbx.007 -p fonts.lbx.006]) +TEST_CHECK_PAM_MD5([out.000.pam], + [f301ffcc1a2faa3a0aa68514784012ec], + [WIDTH = 153], [HEIGHT = 22], [TUPLTYPE = RGB]) + +AT_CLEANUP + +# Image with embedded palette +AT_SETUP([mainmenu.lbx.021]) + +TEST_UNPACK_MOO2_DATA([mainmenu.lbx]) +AT_CHECK([lbximg -F pam -df mainmenu.lbx.021]) +TEST_CHECK_PAM_MD5([out.000.pam], + [848e33a0addc6e9acdc4fee6cbd56639], + [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB]) + +AT_CLEANUP + +# Animation with transparency, override palette and non-zero chunk size +AT_SETUP([monster.lbx.007]) + +TEST_UNPACK_MOO2_DATA([fonts.lbx monster.lbx]) +AT_CHECK( + [lbximg -F pam -df monster.lbx.007 -p fonts.lbx.004 -O monster.lbx.014]) +TEST_CHECK_PAM_MD5([out.000.pam], + [35d32459bfce6b19df14cafd2faf398b], + [WIDTH = 59], [HEIGHT = 62], [TUPLTYPE = RGB_ALPHA]) +TEST_CHECK_PAM_MD5([out.005.pam], + [924fafdc83e0414331e0c627c3f9b3c7], + [WIDTH = 59], [HEIGHT = 62], [TUPLTYPE = RGB_ALPHA]) +TEST_CHECK_PAM_MD5([out.019.pam], + [272ca2d13132a1b0497e47225ee680e2], + [WIDTH = 59], [HEIGHT = 62], [TUPLTYPE = RGB_ALPHA]) + +AT_CLEANUP + +# Image with transparency, external and override palettes +AT_SETUP([ships.lbx.042]) + +TEST_UNPACK_MOO2_DATA([fonts.lbx ships.lbx]) +AT_CHECK([lbximg -F pam -df ships.lbx.042 -p fonts.lbx.012 -O ships.lbx.049]) +TEST_CHECK_PAM_MD5([out.000.pam], [4ababc13ae860494d4f512f8ebeca834], + [WIDTH = 52], [HEIGHT = 52], [TUPLTYPE = RGB_ALPHA]) + +AT_CLEANUP + +# Image with raw frame format +AT_SETUP([starbg.lbx.009]) + +TEST_UNPACK_MOO2_DATA([fonts.lbx starbg.lbx]) +AT_CHECK([lbximg -F pam -df starbg.lbx.009 -p fonts.lbx.005]) +TEST_CHECK_PAM_MD5([out.000.pam], + [3b6ccbe3fc46e13c1fa80edf611d7a62], + [WIDTH = 61], [HEIGHT = 56], [TUPLTYPE = RGB]) + +AT_CLEANUP