]> git.draconx.ca Git - liblbx.git/blob - tests/moo2data.at
240787c10d8425b6b480d97d308708b4bfb0ca59
[liblbx.git] / tests / moo2data.at
1 # Copyright © 2013, 2021 Nick Bowler
2 #
3 # This program is free software: you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation, either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
15
16 AT_BANNER([Original data file tests])
17
18 AT_ARG_OPTION_ARG([moo2-datadir],
19   [AS_HELP_STRING([--moo2-datadir],
20     [location of original MOO2 data files
21      (default: \${datadir}/moo2-data)], [17])],
22   [moo2_datadir=$at_optarg], [moo2_datadir=$datadir/moo2-data])
23
24 m4_divert_push([PREPARE_TESTS])dnl
25 # Compute MD5 hash of standard input.
26 test_md5sum () {
27   set x `md5sum </dev/null`
28   case $2 in
29   d41d8cd98f00b204e9800998ecf8427e) set x `md5sum && echo $?` ;;
30   *) return 77 ;;
31   esac
32   echo $2
33   eval "return \$$#"
34 }
35 m4_divert_pop([PREPARE_TESTS])
36
37 dnl TEST_REQUIRE_MOO2_DATA(file ...)
38 dnl
39 dnl Copy (or link) one or more MOO2 data files from the MOO2 installation
40 dnl directory into the current test case directory.  Installed filenames are
41 dnl matched case-insensitively and copied to the name specified.
42 dnl
43 dnl The test group will be skipped if any requested file does not exist.
44 m4_define([TEST_REQUIRE_MOO2_DATA_CASEWRAP],
45   [@<:@m4_toupper([$1])m4_tolower([$1])@:>@])
46 m4_define([TEST_REQUIRE_MOO2_DATA], [AT_KEYWORDS([$1])dnl
47 m4_foreach_w([DATAFILE], [$1],
48   [m4_pushdef([PATTERN],
49     [$][1/]m4_dquote(m4_map([$0_CASEWRAP],
50       m4_cdr(m4_bpatsubst(m4_defn([DATAFILE]), [.], [,[[\&]]])))))dnl
51 test -f DATAFILE || for f in m4_join([ ],
52   PATTERN(["$moo2_datadir"]),
53   PATTERN([/usr/share/moo2-data]))
54 do
55   test -f "$f" && { $LN_S "$f" DATAFILE || cp "$f" DATAFILE; } && break
56 done
57 AT_SKIP_IF([test ! -f "$f"])
58 m4_popdef([PATTERN])])])
59
60 dnl TEST_UNPACK_MOO2_DATA(file ...)
61 dnl
62 dnl Wrapper around TEST_REQUIRE_MOO2_DATA that unpacks each file (which should
63 dnl be archives).
64 m4_define([TEST_UNPACK_MOO2_DATA],
65 [TEST_REQUIRE_MOO2_DATA([$1])dnl
66 m4_map_args_w([$1], [AT_CHECK([lbxtool -xf ]], [)], [
67 ])])
68
69 dnl TEST_CHECK_PAM_MD5(file, expected_md5, [header = value] ...)
70 dnl
71 dnl Compute and validate the MD5 hash over the plane data from a PAM image.
72 dnl Additional arguments specify PAM header fields that should be checked.
73 m4_define([TEST_CHECK_PAM_MD5],
74 [exec 3<$1; AT_CHECK([pam_check_header <&3 \
75   m4_map_args_sep([m4_apply([m4_car], m4_split(], [))], [ ], m4_shift2($@))
76 status=$?
77 echo $pam_TUPLTYPE >$1.tt
78 exit $?], [0],[m4_map_args([m4_n], m4_shift2($@))])
79 AT_CHECK([test_md5sum <&3 >$1.md5])
80 exec 3<&-
81
82 # For reliable verification of images with transparency, we must have a known
83 # constant colour value for transparent pixels.  We can use netpbm tools to
84 # zero out those pixels.  For affected image formats, if we cannot normalize
85 # the transparent pixels we have to skip the test if verification would fail.
86
87 md5_reliable=true
88 read pam_TUPLTYPE <$1.tt
89 AS_CASE([$pam_TUPLTYPE],
90   [GRAYSCALE_ALPHA], [alpha=1],
91   [RGB_ALPHA], [alpha=3],
92   [alpha=0])
93 AS_IF([test "$alpha" -gt 0],
94 [$PAMCHANNEL "$alpha" <$1 >$1.msk &&
95   $PAMARITH -and $1 $1.msk >$1.fix &&
96   { pam_read_header && test_md5sum; } <$1.fix >$1.tmp &&
97   mv -f $1.tmp $1.md5 ||
98   md5_reliable=false
99 AT_CHECK([$md5_reliable || { read x <$1.md5; test x"$x" = x"$2" || exit 77; }])
100 ])
101 AT_CHECK([cat $1.md5], [0], [m4_n([$2])])])
102
103 # Image with transparency and embedded palette
104 AT_SETUP([logo.lbx.000])
105
106 TEST_UNPACK_MOO2_DATA([logo.lbx])
107 AT_CHECK([lbximg -F pam -df logo.lbx.000])
108 TEST_CHECK_PAM_MD5([out.000.pam],
109   [e51c564aa638dc62dd1fd79e6f6cc375],
110   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB_ALPHA])
111
112 AT_CLEANUP
113
114 # Animation with embedded palette
115 AT_SETUP([logo.lbx.001])
116
117 TEST_UNPACK_MOO2_DATA([logo.lbx])
118 AT_CHECK([lbximg -F pam -df logo.lbx.001])
119 TEST_CHECK_PAM_MD5([out.000.pam],
120   [13a60ede277eebe8fec69f03c5cb5843],
121   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB])
122 TEST_CHECK_PAM_MD5([out.030.pam],
123   [c687fc35b940d0bfdaea5b6d51aa03c4],
124   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB])
125 TEST_CHECK_PAM_MD5([out.063.pam],
126   [7c694409997fe15272abe71f3fea2759],
127   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB])
128
129 AT_CLEANUP
130
131 # Animation with external palette
132 AT_SETUP([mainmenu.lbx.000])
133
134 TEST_UNPACK_MOO2_DATA([fonts.lbx mainmenu.lbx])
135 AT_CHECK([lbximg -F pam -df mainmenu.lbx.000 -p fonts.lbx.006])
136 TEST_CHECK_PAM_MD5([out.000.pam],
137   [7c3b347e03d42cd7bd1597f9dd58594e],
138   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB])
139 TEST_CHECK_PAM_MD5([out.015.pam],
140   [2a66f4c30ca315cc061606b27cef4adf],
141   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB])
142 TEST_CHECK_PAM_MD5([out.049.pam],
143   [848e33a0addc6e9acdc4fee6cbd56639],
144   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB])
145
146 AT_CLEANUP
147
148 # Image with external palette
149 AT_SETUP([mainmenu.lbx.007])
150
151 TEST_UNPACK_MOO2_DATA([fonts.lbx mainmenu.lbx])
152 AT_CHECK([lbximg -F pam -df mainmenu.lbx.007 -p fonts.lbx.006])
153 TEST_CHECK_PAM_MD5([out.000.pam],
154   [f301ffcc1a2faa3a0aa68514784012ec],
155   [WIDTH = 153], [HEIGHT = 22], [TUPLTYPE = RGB])
156
157 AT_CLEANUP
158
159 # Image with embedded palette
160 AT_SETUP([mainmenu.lbx.021])
161
162 TEST_UNPACK_MOO2_DATA([mainmenu.lbx])
163 AT_CHECK([lbximg -F pam -df mainmenu.lbx.021])
164 TEST_CHECK_PAM_MD5([out.000.pam],
165   [848e33a0addc6e9acdc4fee6cbd56639],
166   [WIDTH = 640], [HEIGHT = 480], [TUPLTYPE = RGB])
167
168 AT_CLEANUP
169
170 # Animation with transparency, override palette and non-zero chunk size
171 AT_SETUP([monster.lbx.007])
172
173 TEST_UNPACK_MOO2_DATA([fonts.lbx monster.lbx])
174 AT_CHECK(
175   [lbximg -F pam -df monster.lbx.007 -p fonts.lbx.004 -O monster.lbx.014])
176 TEST_CHECK_PAM_MD5([out.000.pam],
177   [35d32459bfce6b19df14cafd2faf398b],
178   [WIDTH = 59], [HEIGHT = 62], [TUPLTYPE = RGB_ALPHA])
179 TEST_CHECK_PAM_MD5([out.005.pam],
180   [924fafdc83e0414331e0c627c3f9b3c7],
181   [WIDTH = 59], [HEIGHT = 62], [TUPLTYPE = RGB_ALPHA])
182 TEST_CHECK_PAM_MD5([out.019.pam],
183   [272ca2d13132a1b0497e47225ee680e2],
184   [WIDTH = 59], [HEIGHT = 62], [TUPLTYPE = RGB_ALPHA])
185
186 AT_CLEANUP
187
188 # Image with transparency, external and override palettes
189 AT_SETUP([ships.lbx.042])
190
191 TEST_UNPACK_MOO2_DATA([fonts.lbx ships.lbx])
192 AT_CHECK([lbximg -F pam -df ships.lbx.042 -p fonts.lbx.012 -O ships.lbx.049])
193 TEST_CHECK_PAM_MD5([out.000.pam], [4ababc13ae860494d4f512f8ebeca834],
194   [WIDTH = 52], [HEIGHT = 52], [TUPLTYPE = RGB_ALPHA])
195
196 AT_CLEANUP
197
198 # Image with raw frame format
199 AT_SETUP([starbg.lbx.009])
200
201 TEST_UNPACK_MOO2_DATA([fonts.lbx starbg.lbx])
202 AT_CHECK([lbximg -F pam -df starbg.lbx.009 -p fonts.lbx.005])
203 TEST_CHECK_PAM_MD5([out.000.pam],
204   [3b6ccbe3fc46e13c1fa80edf611d7a62],
205   [WIDTH = 61], [HEIGHT = 56], [TUPLTYPE = RGB])
206
207 AT_CLEANUP