popen.c: some cleanup, use other wait_child() from now on
[s-mailx.git] / cc-test.sh
blob8359c9794a054f4d33d0820169862fdcf7aba9f5
1 #!/bin/sh -
2 #@ Usage: ./cc-test.sh [--check-only [nail-binary]]
4 NAIL=./s-nail
5 CONF=./conf.rc
6 BODY=./.cc-body.txt
7 MBOX=./.cc-test.mbox
9 awk=`command -pv awk`
10 cat=`command -pv cat`
11 cksum=`command -pv cksum`
12 MAKE="${MAKE:-`command -pv make`}"
13 rm=`command -pv rm`
15 ## -- >8 -- 8< -- ##
17 # NOTE! UnixWare 7.1.4 gives ISO-10646-Minimum-European-Subset for
18 # nl_langinfo(CODESET), then, so also overwrite ttycharset.
19 # (In addition this setup allows us to succeed on TinyCore 4.4 that has no
20 # other locales than C/POSIX installed by default!)
21 LC=en_US.UTF-8
22 LC_ALL=${LC} LANG=${LC}
23 ttycharset=UTF-8
24 export LC_ALL LANG ttycharset
26 ESTAT=0
28 usage() {
29 echo >&2 "Usage: ./cc-test.sh [--check-only [nail-binary]]"
30 exit 1
33 CHECK_ONLY=
34 [ ${#} -gt 0 ] && {
35 [ "${1}" = --check-only ] || usage
36 [ ${#} -gt 2 ] && usage
37 [ ${#} -eq 2 ] && NAIL="${2}"
38 [ -x "${NAIL}" ] || usage
39 CHECK_ONLY=1
42 # cc_all_configs()
43 # Test all configs TODO doesn't cover all *combinations*, stupid!
44 cc_all_configs() {
45 < ${CONF} ${awk} '
46 BEGIN {i = 0}
47 /^[[:space:]]*WANT_/ {
48 sub(/^[[:space:]]*/, "")
49 sub(/=.*$/, "")
50 data[i++] = $1
52 END {
53 for (j = 0; j < i; ++j) {
54 for (k = 0; k < j; ++k)
55 printf data[k] "=1 "
56 for (k = j; k < i; ++k)
57 printf data[k] "=0 "
58 printf "\n"
59 for (k = 0; k < j; ++k)
60 printf data[k] "=0 "
61 for (k = j; k < i; ++k)
62 printf data[k] "=1 "
63 printf "\n"
66 ' | while read c; do
67 printf "\n\n##########\n$c\n"
68 printf "\n\n##########\n$c\n" >&2
69 sh -c "${MAKE} ${c}"
70 ${MAKE} distclean
71 done
74 # cksum_test()
75 # Read mailbox $2, strip non-constant headers and MIME boundaries, query the
76 # cksum(1) of the resulting data and compare against the checksum $3
77 cksum_test() {
78 tid=$1 f=$2 s=$3
79 printf "${tid}: "
80 csum="`sed -e '/^From /d' -e '/^Date: /d' \
81 -e '/^ boundary=/d' -e '/^--=_/d' < \"${f}\" | cksum`";
82 if [ "${csum}" = "${s}" ]; then
83 printf 'ok\n'
84 else
85 ESTAT=1
86 printf 'error: checksum mismatch\n'
90 # t_behave()
91 # Basic (easily testable) behaviour tests
92 t_behave() {
93 # Test for [d1f1a19]
94 ${rm} -f "${MBOX}"
95 printf 'echo +nix\nset folder=/\necho +nix\nset nofolder\necho +nix' |
96 MAILRC=/dev/null "${NAIL}" -n -# -SPAGER="${cat}" > "${MBOX}"
97 cksum_test behave:1 "${MBOX}" '4214021069 15'
100 # t_content()
101 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
102 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
103 # Note we unfortunately need to place some statements without proper
104 # indentation because of continuation problems
105 t_content() {
106 ${rm} -f "${BODY}" "${MBOX}"
108 # MIME CTE (QP) stress message body
109 printf \
110 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
111 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
112 "wasde willst, gelle, gelle, gelle, gelle, gelle.\r\n"\
113 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst \r\n"\
114 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1\r\n"\
115 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12\r\n"\
116 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123\r\n"\
117 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234\r\n"\
118 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345\r\n"\
119 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456\r\n"\
120 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234567\r\n"\
121 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345678\r\n"\
122 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456789\r\n"\
123 "Unn ausserdem habe ich trailing SP/HT/SP/HT whitespace \r\n"\
124 "Unn ausserdem habe ich trailing HT/SP/HT/SP whitespace \r\n"\
125 "auf den zeilen vorher.\r\n"\
126 "From am Zeilenbeginn und From der Mitte gibt es auch.\r\n"\
127 ".\r\n"\
128 "Die letzte Zeile war nur ein Punkt.\r\n"\
129 "..\r\n"\
130 "Das waren deren zwei.\r\n"\
131 " \r\n"\
132 "Die letzte Zeile war ein Leerschritt.\n"\
133 "=VIER = EQUAL SIGNS=ON A LINE=\r\n"\
134 "Prösterchen.\r\n"\
135 ".\n"\
136 "Die letzte Zeile war nur ein Punkt, mit Unix Zeilenende.\n"\
137 "..\n"\
138 "Das waren deren zwei. ditto.\n"\
139 "Prösterchen.\n"\
140 "Unn ausseerdem habe ich trailing SP/HT/SP/HT whitespace \n"\
141 "Unn ausseerdem habe ich trailing HT/SP/HT/SP whitespace \n"\
142 "auf den zeilen vorher.\n"\
143 "ditto.\n"\
144 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.\n"\
145 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.1"\
146 "\n"\
147 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
148 "\n"\
149 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
150 "3\n"\
151 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
152 "34\n"\
153 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
154 "345\n"\
155 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
156 "3456\n"\
157 "=VIER = EQUAL SIGNS=ON A LINE=\n"\
158 " \n"\
159 "Die letzte Zeile war ein Leerschritt.\n"\
160 ' '\
161 > "${BODY}"
163 # MIME CTE (QP) stress message subject
164 SUB='Äbrä Kä?dä=brö Fü?di=bus? '\
165 'adadaddsssssssddddddddddddddddddddd'\
166 'ddddddddddddddddddddddddddddddddddd'\
167 'ddddddddddddddddddddddddddddddddddd'\
168 'dddddddddddddddddddd Hallelulja? Od'\
169 'er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
170 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
171 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f'\
172 'fffffffffffffffffffffffffffffffffff'\
173 'fffffffffffffffffffff ggggggggggggg'\
174 'ggggggggggggggggggggggggggggggggggg'\
175 'ggggggggggggggggggggggggggggggggggg'\
176 'ggggggggggggggggggggggggggggggggggg'\
177 'gggggggggggggggg'
179 # Three tests for MIME-CTE and (a bit) content classification.
180 # At the same time testing -q FILE, < FILE and -t FILE
181 ${rm} -f "${MBOX}"
182 < "${BODY}" MAILRC=/dev/null \
183 "${NAIL}" -n -Sstealthmua -a "${BODY}" -s "${SUB}" "${MBOX}"
184 cksum_test content:1 "${MBOX}" '2606934084 5649'
186 ${rm} -f "${MBOX}"
187 < /dev/null MAILRC=/dev/null \
188 "${NAIL}" -n -Sstealthmua -a "${BODY}" -s "${SUB}" \
189 -q "${BODY}" "${MBOX}"
190 cksum_test content:2 "${MBOX}" '2606934084 5649'
192 ${rm} -f "${MBOX}"
193 ( echo "To: ${MBOX}" && echo "Subject: ${SUB}" && echo &&
194 ${cat} "${BODY}"
195 ) | MAILRC=/dev/null "${NAIL}" -n -Sstealthmua -a "${BODY}" -t
196 cksum_test content:3 "${MBOX}" '799758423 5648'
198 # Test for [260e19d]. Juergen Daubert.
199 ${rm} -f "${MBOX}"
200 echo body | MAILRC=/dev/null "${NAIL}" -n -Sstealthmua "${MBOX}"
201 cksum_test content:4 "${MBOX}" '506144051 104'
203 # Sending of multiple mails in a single invocation
204 ${rm} -f "${MBOX}"
205 ( printf "m ${MBOX}\n~s subject1\nE-Mail Körper 1\n.\n" &&
206 printf "m ${MBOX}\n~s subject2\nEmail body 2\n.\n" &&
207 echo x
208 ) | MAILRC=/dev/null "${NAIL}" -n -# -Sstealthmua
209 cksum_test content:5 "${MBOX}" '2028749685 277'
211 ${rm} -f "${BODY}" "${MBOX}"
214 if [ -z "${CHECK_ONLY}" ]; then
215 cc_all_configs
216 printf "\n\n######## STARTING TESTS ########\n\n"
217 "${MAKE}" devel
220 t_behave
221 t_content
223 [ ${ESTAT} -eq 0 ] && echo Ok || echo >&2 'Errors occurred'
224 [ -n "${CHECK_ONLY}" ] || "${MAKE}" distclean
226 exit ${ESTAT}
227 # vim:set fenc=utf8:s-it-mode