2 #@ Usage: ./cc-test.sh [--check-only s-mailx-binary]
3 #@ TODO _All_ the tests should happen in a temporary subdir.
6 # We need *stealthmua* regardless of $SOURCE_DATE_EPOCH, the program name as
7 # such is a compile-time variable
8 ARGS
='-:/ -# -Sdotlock-ignore-error -Sexpandaddr=restrict'
9 ARGS
="${ARGS}"' -Smime-encoding=quoted-printable -Snosave -Sstealthmua'
10 ADDARG_UNI
=-Sttycharset=UTF-8
15 #UTF8_LOCALE= autodetected unless set
17 # Note valgrind has problems with FDs in forked childs, which causes some tests
18 # to fail (the FD is rewound and thus will be dumped twice)
20 #MEMTESTER='valgrind --leak-check=full --log-file=.vl-%p '
22 if ( command -v command ) >/dev
/null
2>&1; then :; else
29 MAKE
="${MAKE:-`command -v make`}"
30 awk=${awk:-`command -v awk`}
31 cat=${cat:-`command -v cat`}
32 cksum=${cksum:-`command -v cksum`}
33 rm=${rm:-`command -v rm`}
34 sed=${sed:-`command -v sed`}
35 grep=${grep:-`command -v grep`}
37 # Problem: force $SHELL to be a real shell. It seems some testing environments
38 # use nologin(?), but we need a real shell for command execution
39 if { echo ${SHELL} | ${grep} nologin; } >/dev
/null
2>&1; then
40 echo >&2 '$SHELL seems to be nologin, overwriting to /bin/sh!'
45 # We sometimes "fake" sendmail(1) a.k.a. *mta* with a shell wrapper, and it
46 # happens that /bin/sh is often terribly slow
47 if command -v dash
>/dev
/null
2>&1; then
48 MYSHELL
="`command -v dash`"
49 elif command -v mksh
>/dev
/null
2>&1; then
50 MYSHELL
="`command -v mksh`"
57 export ARGS ADDARG_UNI CONF BODY MBOX MAIL MAKE
awk cat cksum rm sed grep
61 # Wed Oct 2 01:50:07 UTC 1996
62 SOURCE_DATE_EPOCH
=844221007
64 export LC_ALL LANG TZ SOURCE_DATE_EPOCH
68 echo >&2 "Usage: ./cc-test.sh [--check-only s-mailx-binary]"
73 if [ "${1}" = --check-only ]; then
76 [ -x "${MAILX}" ] || usage
79 MAILX
="${MEMTESTER}${MAILX}"
82 if [ -n "${CHECK_ONLY}" ] && [ -z "${UTF8_LOCALE}" ]; then
83 # Try ourselfs for nl_langinfo(CODESET) output first (requires a new version)
84 i
=`LC_ALL=C.utf8 "${RAWMAILX}" ${ARGS} -X '
86 \if [ "${ttycharset}" @i=% utf ]
93 \eval xcall cset_test "${@}"
97 \call cset_test C.UTF-8 POSIX.utf8 POSIX.UTF-8 en_EN.utf8 en_EN.UTF-8 \
98 en_US.utf8 en_US.UTF-8
100 [ $?
-eq 0 ] && UTF8_LOCALE
=$i
102 if [ -z "${UTF8_LOCALE}" ] && command -v locale
>/dev
/null
2>&1; then
103 UTF8_LOCALE
=`locale -a | { m=
105 if { echo ${n} | ${grep} -i 'utf-\{0,1\}8'; } >/dev/null 2>&1; then
107 if { echo ${n} | ${grep} -e POSIX -e en_EN -e en_US; }; then
121 trap "${rm} -rf \"${BODY}\" \"${MBOX}\" \${TRAP_EXIT_ADDONS}" EXIT
122 trap "exit 1" HUP INT TERM
125 # Test all configs TODO doesn't cover all *combinations*, stupid!
129 NOTME["OPT_AUTOCC"] = 1
130 NOTME["OPT_DEBUG"] = 1
131 NOTME["OPT_DEVEL"] = 1
132 NOTME["OPT_NOEXTMD5"] = 1
133 NOTME["OPT_ASAN_ADDRESS"] = 1
134 NOTME["OPT_ASAN_MEMORY"] = 1
135 NOTME["OPT_FORCED_STACKPROT"] = 1
136 NOTME["OPT_NOMEMDBG"] = 1
137 NOTME["OPT_NYD2"] = 1
140 /^[[:space:]]*OPT_/ {
141 sub(/^[[:space:]]*/, "")
142 # This bails for UnixWare 7.1.4 awk(1), but preceeding = with \
143 # does not seem to be a compliant escape for =
145 $1 = substr($1, 1, index($1, "=") - 1)
151 # Doing this completely sequentially and not doing make distclean in
152 # between runs should effectively result in lesser compilations.
153 # It is completely dumb nonetheless... TODO
154 for (j = 1; j < i; ++j) {
155 for (k = 1; k < j; ++k)
157 for (k = j; k < i; ++k)
159 printf "OPT_AUTOCC=1\n"
161 for (j = 1; j < i; ++j) {
162 for (k = 1; k < j; ++k)
164 for (k = j; k < i; ++k)
166 printf "OPT_AUTOCC=1\n"
169 for (j = 1; j < i; ++j) {
170 for (k = 1; k < j; ++k)
172 for (k = j; k < i; ++k)
174 printf "OPT_AUTOCC=1\n"
175 printf "OPT_DEBUG=1\n"
177 for (j = 1; j < i; ++j) {
178 for (k = 1; k < j; ++k)
180 for (k = j; k < i; ++k)
182 printf "OPT_AUTOCC=1\n"
183 printf "OPT_DEBUG=1\n"
186 printf "CONFIG=NULL OPT_AUTOCC=0\n"
187 printf "CONFIG=NULL OPT_AUTOCC=1\n"
188 printf "CONFIG=NULLI OPT_AUTOCC=0\n"
189 printf "CONFIG=NULLI OPT_AUTOCC=1\n"
190 printf "CONFIG=MINIMAL OPT_AUTOCC=0\n"
191 printf "CONFIG=MINIMAL OPT_AUTOCC=1\n"
192 printf "CONFIG=NETSEND OPT_AUTOCC=0\n"
193 printf "CONFIG=NETSEND OPT_AUTOCC=1\n"
194 printf "CONFIG=MAXIMAL OPT_AUTOCC=0\n"
195 printf "CONFIG=MAXIMAL OPT_AUTOCC=1\n"
196 printf "CONFIG=DEVEL OPT_AUTOCC=0\n"
197 printf "CONFIG=DEVEL OPT_AUTOCC=1\n"
198 printf "CONFIG=ODEVEL OPT_AUTOCC=0\n"
199 printf "CONFIG=ODEVEL OPT_AUTOCC=1\n"
202 printf "\n\n##########\n$c\n"
203 printf "\n\n##########\n$c\n" >&2
204 sh
-c "${MAKE} ${c} all test"
210 ( "${RAWMAILX}" ${ARGS} -X'echo $features' -Xx |
211 ${grep} +${1} ) >/dev
/null
2>&1
215 ${rm} -rf "${BODY}" "${MBOX}" ${TRAP_EXIT_ADDONS}
223 restat
=${?} tid=${1} eestat=${2} f=${3} s=${4}
224 #x=`echo ${tid} | tr "/:=" "__-"`
225 #cp -f "${f}" "${TMPDIR}/${x}"
226 [ "${eestat}" != - ] && [ "${restat}" != "${eestat}" ] &&
227 err
"${tid}" 'unexpected exit status: '"${restat} != ${eestat}"
228 csum
="`${cksum} < ${f}`"
229 if [ "${csum}" = "${s}" ]; then
230 printf '%s: ok\n' "${tid}"
233 printf '%s: error: checksum mismatch (got %s)\n' "${tid}" "${csum}"
239 printf '%s: error: %s\n' ${1} "${2}"
243 [ $?
-ne 0 ] && err
$1 'unexpected non-0 exit status'
247 [ $?
-eq 0 ] && err
$1 'unexpected 0 exit status'
250 if ( [ "$((1 + 1))" = 2 ] ) >/dev
/null
2>&1; then
252 echo "$((${1} + ${2}))"
254 elif command -v expr >/dev
/null
2>&1; then
256 echo `expr ${1} + ${2}`
260 echo `${awk} 'BEGIN{print '${1}' + '${2}'}'`
264 if ( [ "$((2 % 3))" = 2 ] ) >/dev
/null
2>&1; then
266 echo "$((${1} % ${2}))"
268 elif command -v expr >/dev
/null
2>&1; then
270 echo `expr ${1} % ${2}`
274 echo `${awk} 'BEGIN{print '${1}' % '${2}'}'`
279 # Basic (easily testable) behaviour tests
281 t_behave_X_opt_input_command_stack
284 t_behave_input_inject_semicolon_seq
285 t_behave_commandalias
288 t_behave_macro_param_shift
300 # FIXME t_behave_mlist
303 t_behave_record_a_resend
306 t_behave_compose_hooks
307 t_behave_message_injections
308 t_behave_mime_types_load_control
313 t_behave_mass_recipients
314 t_behave_lreply_futh_rth_etc
315 t_behave_iconv_mbyte_base64
318 t_behave_X_opt_input_command_stack
() {
321 ${cat} <<- '__EOT' > "${BODY}"
329 echo "define mac1 {";\
330 echo " echo mac1-1 via1 \$0";\
332 echo " echo mac1-2";\
334 echo " echo mac1-3";\
337 echo "define mac2 {";\
338 echo " echo mac2-1 via1 \$0";\
340 echo " echo mac2-2";\
346 echo echo 1-1-1 via1 \$0;\
358 # The -X option supports multiline arguments, and those can internally use
359 # reverse solidus newline escaping. And all -X options are joined...
361 < "${BODY}" ${MAILX} ${ARGS} \
376 echo "define mac1 {";\
377 echo " echo mac1-1 via2 \$0";\
379 echo " echo mac1-2";\
381 echo " echo mac1-3";\
384 echo "define mac2 {";\
385 echo " echo mac2-1 via2 \$0";\
387 echo " echo mac2-2";\
393 echo echo 1-1-1 via2 \$0;\
407 check behave:x_opt_input_command_stack 0 "${MBOX}" '1786542668 416'
412 t_behave_X_errexit() {
415 ${cat} <<- '__EOT' > "${BODY}"
421 </dev/null ${MAILX} ${ARGS} -Snomemdebug \
422 -X'echo one' -X' echos nono ' -X'echo two' \
424 check behave:x_errexit-1 0 "${MBOX}" '916157812 53'
426 </dev/null ${MAILX} ${ARGS} -X'source '"${BODY}" -Snomemdebug \
428 check behave:x_errexit-2 0 "${MBOX}" '916157812 53'
430 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Snomemdebug \
432 check behave
:x_errexit-3
0 "${MBOX}" '916157812 53'
436 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
437 -X'echo one' -X' echos nono ' -X'echo two' \
439 check behave
:x_errexit-4
1 "${MBOX}" '2118430867 49'
441 </dev
/null
${MAILX} ${ARGS} -X'source '"${BODY}" -Serrexit -Snomemdebug \
443 check behave:x_errexit-5 1 "${MBOX}" '2118430867 49'
445 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
447 check behave
:x_errexit-6
1 "${MBOX}" '12955965 172'
449 </dev
/null MAILRC
="${BODY}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
451 check behave:x_errexit-7 1 "${MBOX}" '12955965 172'
453 ## Repeat 4-7 with ignerr set
455 ${sed} -e 's/^echos /ignerr echos /' < "${BODY}" > "${MBOX}"
457 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
458 -X'echo one' -X'ignerr echos nono ' -X'echo two' \
460 check behave
:x_errexit-8
0 "${BODY}" '916157812 53'
462 </dev
/null
${MAILX} ${ARGS} -X'source '"${MBOX}" -Serrexit -Snomemdebug \
464 check behave:x_errexit-9 0 "${BODY}" '916157812 53'
466 </dev/null MAILRC="${MBOX}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
468 check behave
:x_errexit-10
0 "${BODY}" '916157812 53'
470 </dev
/null MAILRC
="${MBOX}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
472 check behave:x_errexit-11 0 "${BODY}" '916157812 53'
480 ${cat} <<- '__EOT' > "${BODY}"
499 echo 'a${DIET}b${TIED}c\${DIET}d\${TIED}e' # COMMENT
500 echo "a${DIET}b${TIED}c\${DIET}d\${TIED}e"
501 echo $
'a${DIET}b${TIED}c\${DIET}d\${TIED}e'
503 echo a$
'\101\0101\x41\u0041\u41\U00000041\U41'c
504 echo a$
'\u0041\u41\u0C1\U00000041\U41'c
527 echo a$
'b\U0000000'dt
528 echo a$
'b\U00000000'du
538 if [ -z "${UTF8_LOCALE}" ]; then
539 echo 'Skip behave:wysh_unicode, no UTF8_LOCALE'
541 < "${BODY}" DIET
=CURD TIED
= \
542 LC_ALL
=${UTF8_LOCALE} ${MAILX} ${ARGS} 2>/dev/null > "${MBOX}"
543 check behave:wysh_unicode 0 "${MBOX}" '475805847 317'
546 < "${BODY}" DIET=CURD TIED= ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
547 check behave:wysh_c 0 "${MBOX}" '1473887148 321'
552 t_behave_input_inject_semicolon_seq() {
555 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
560 echon this_is_mymac
;call mydeepmac
;echon
';';
562 echon one
';';call mymac
;echon two
";";call mymac
;echo three$
';';
564 echon this_is_mymac
;call mydeepmac
;echon
,TOO
'!;';
566 echon one
';';call mymac
;echon two
";";call mymac
;echo three$
';';
569 check behave
:input_inject_semicolon_seq
0 "${MBOX}" '512117110 140'
574 t_behave_commandalias
() {
577 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
578 commandalias echo echo hoho
582 commandalias XxX XxXx
583 commandalias XxXx XxXxX
584 commandalias XxXxX XxXxXx
585 commandalias XxXxXx echo huhu
586 commandalias XxXxXxX echo huhu
588 commandalias XxXxXx XxXxXxX
591 commandalias XxXxXx echo huhu
595 check behave:commandalias 0 "${MBOX}" '3694143612 31'
603 # Nestable conditions test
604 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
626 if $dietcurd == 'yoho'
631 if $dietcurd @
== 'Yoho'
636 if $dietcurd == 'Yoho'
641 if $dietcurd != 'yoho'
646 if $dietcurd @
!= 'Yoho'
651 if $dietcurd != 'Yoho'
712 if $dietcurd == 'yohu'
714 elif $dietcurd == 'yoha'
716 elif $dietcurd == 'yohe'
718 elif $dietcurd == 'yoho'
720 if $dietcurd == 'yohu'
722 elif $dietcurd == 'yoha'
724 elif $dietcurd == 'yohe'
726 elif $dietcurd == 'yoho'
728 if $dietcurd == 'yohu'
730 elif $dietcurd == 'yoha'
732 elif $dietcurd == 'yohe'
734 elif $dietcurd == 'yoho'
883 set diet
=abc curd
=abc
889 set diet
=abc curd
=abcd
895 # 1. Shitty grouping capabilities as of today
896 unset diet curd ndefined
897 if [ [ false
] ||
[ false
] ||
[ true
] ] && [ [ false
] ||
[ true
] ] && \
903 if [ [ [ [ 0 ] ||
[ 1 ] ] && [ [ 1 ] ||
[ 0 ] ] ] && [ 1 ] ] && [ yes ]
908 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ]
913 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ [ 1 ] ] ]
918 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ [ 1 ] ] ||
[ 1 ] ] && [ no
]
923 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ [ 1 ] ] ||
[ 1 ] ] \
929 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
934 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 0 ] ]
939 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 0 ] ] && [ 1 ] ] ] && [ 1 ] ]
944 if [ [ [ [ [ [ [ 0 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
949 if [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] && [ 0 ]
954 if [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] && [ 1 ]
959 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 0 ]
964 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 1 ]
969 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 0 ] ||
[ 1 ] && [ 0 ]
974 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 0 ] ||
[ 1 ] && [ 1 ]
980 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
986 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
991 # 2. Shitty grouping capabilities as of today
992 unset diet curd ndefined
993 if [ false || false || true
] && [ false || true
] && yes
998 if [ [ [ 0 ||
1 ] && [ 1 ||
0 ] ] && 1 ] && [ yes ]
1003 if [ 1 ||
0 ||
0 ||
0 ]
1008 if [ 1 ||
0 ||
0 ||
0 ||
[ 1 ] ]
1013 if [ 1 ||
0 ||
0 ||
0 ||
[ 1 ] ||
1 ] && no
1018 if [ 1 ||
0 ||
0 ||
0 ||
1 ||
[ 1 ] ] && no ||
[ yes ]
1023 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && 1 ] ] && [ 1 ] ]
1028 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && [ 1 ] ] ] && 0 ]
1033 if [ [ [ [ [ [ [ 1 ] ] && 1 ] && 0 ] && [ 1 ] ] ] && 1 ]
1038 if [ [ [ [ [ [ 0 ] && 1 ] && 1 ] && 1 ] ] && 1 ]
1043 if 1 ||
0 ||
0 ||
0 && 0
1048 if 1 ||
0 ||
0 ||
0 && 1
1053 if 0 ||
0 ||
0 ||
1 && 0
1058 if 0 ||
0 ||
0 ||
1 && 1
1063 if 0 ||
0 ||
0 ||
1 && 0 ||
1 && 0
1068 if 0 ||
0 ||
0 ||
1 && 0 ||
1 && 1
1074 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1079 if $diet == 'yo' && $curd == 'ho' && $ndefined
1085 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1090 if $diet == 'yo' && $curd == 'ho' && $ndefined
1095 if [ [ [ [ [ [ $diet == 'yo' && $curd == 'ho' && $ndefined ] ] ] ] ] ]
1100 # Some more en-braced variables
1102 if ${diet} == ${curd}
1107 if ${diet} != ${curd}
1123 if ! 0 && ! ! 1 && ! ! ! ! 2 && 3
1128 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ ! 2 ] ] ] && 3
1133 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1138 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1143 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1148 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1153 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1158 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] ||
3
1163 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! ! [ 2 ] ] ] ] ]
1169 if ! 0 && ! ! 1 && ! ! ! 0 && 3
1174 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ 0 ] ] ] && 3
1179 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ [ 0 ] ] ] ] ] && 3
1184 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! ! [ ! [ ! 0 ] ] ] ] && ! 3
1189 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ ! [ ! [ ! [ ! 0 ] ] ] ] && 3
1194 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! ! [ ! [ ! [ ! [ 0 ] ] ] ] ] && 3
1199 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! ! 0 ] ] ] ] && 3
1204 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ ! 0 ] ] ] ] ] ||
3
1209 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! [ 0 ] ] ] ] ]
1216 check behave
:if-normal
0 "${MBOX}" '1688759742 719'
1218 if have_feat regex
; then
1219 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
1221 if $dietcurd =~ '^yo.*'
1226 if $dietcurd =~ '^Yo.*'
1231 if $dietcurd @=~ '^Yo.*'
1236 if $dietcurd =~ '^yOho.+'
1241 if $dietcurd @!~ '.*Ho$'
1246 if $dietcurd !~ '.+yohO$'
1251 if [ $dietcurd @i!~ '.+yoho$' ]
1256 if ! [ $dietcurd @i=~ '.+yoho$' ]
1261 if ! ! [ $dietcurd @i!~ '.+yoho$' ]
1266 if ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ]
1271 if [ ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ] ]
1276 if ! [ ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1281 if ! ! ! $dietcurd !~ '.+yoho$'
1286 if ! ! ! $dietcurd =~ '.+yoho$'
1291 if ! [ ! ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1296 set diet=abc curd='^abc$'
1302 set diet=abc curd='^abcd$'
1310 check behave:if-regex 0 "${MBOX}" '1115671789 95'
1312 printf 'behave:if-regex: unsupported, skipped\n'
1318 t_behave_localopts() {
1321 # Nestable conditions test
1322 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1337 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1342 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1343 echo "$gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2"
1352 echo active trouble
: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1354 echo active null
: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1363 wysh
set y
=$1; shift; eval localopts
$y; localopts
$1; shift
1370 wysh
set y
=$1; shift; eval localopts
$y; localopts
$1; shift
1377 echo ----- $1: $2 -> $3 -> $4
1385 call llx
'call off' on on on
1386 call llx
'call off' off on on
1387 call llx
'call off' on off on
1388 call llx
'call off' on off off
1389 localopts call-fixate on
1390 call llx
'call-fixate on' on on on
1391 call llx
'call-fixate on' off on on
1392 call llx
'call-fixate on' on off on
1393 call llx
'call-fixate on' on off off
1394 unset x
;localopts call on
1395 call llx
'call on' on on on
1396 call llx
'call on' off on on
1397 call llx
'call on' on off on
1398 call llx
'call on' on off off
1403 check behave
:localopts
0 "${MBOX}" '4016155249 1246'
1408 t_behave_macro_param_shift
() {
1411 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
1414 echo t2.0 has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1419 echo t2.1 has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1420 if [ $# > 1 ] || [ $ignerr == '' ]
1425 echo t2.2:$? has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1427 echo t2.3:$? has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1431 echo t2.4:$? has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1436 call t2 1 you get four args
1437 echo t1.1: $?';' ignerr ($ignerr) should not exist
1438 call t2 1 you get 'three args'
1439 echo t1.2: $?';' ignerr ($ignerr) should not exist
1440 call t2 1 you 'get two args'
1441 echo t1.3: $?';' ignerr ($ignerr) should not exist
1442 call t2 1 'you get one arg'
1443 echo t1.4: $?';' ignerr ($ignerr) should not exist
1444 ignerr call t2 '' 'you get one arg'
1445 echo t1.5: $?';' ignerr ($ignerr) should not exist
1450 check behave:macro_param_shift 0 "${MBOX}" '1402489146 1682'
1455 t_behave_addrcodec() {
1458 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
1459 vput addrcodec res e
1 <doog@def
>
1460 echo $?
/$^ERRNAME
$res
1461 eval vput addrcodec res d
$res
1462 echo $?
/$^ERRNAME
$res
1463 vput addrcodec res e
2 .
<doog@def
>
1464 echo $?
/$^ERRNAME
$res
1465 eval vput addrcodec res d
$res
1466 echo $?
/$^ERRNAME
$res
1467 vput addrcodec res e
3 Sauer Dr.
<doog@def
>
1468 echo $?
/$^ERRNAME
$res
1469 eval vput addrcodec res d
$res
1470 echo $?
/$^ERRNAME
$res
1471 vput addrcodec res e
3.50 Sauer
(Ma
) Dr.
<doog@def
>
1472 echo $?
/$^ERRNAME
$res
1473 eval vput addrcodec res d
$res
1474 echo $?
/$^ERRNAME
$res
1475 vput addrcodec res e
3.51 Sauer
(Ma
) "Dr." <doog@def
>
1476 echo $?
/$^ERRNAME
$res
1477 eval vput addrcodec res d
$res
1478 echo $?
/$^ERRNAME
$res
1480 vput addrcodec res
+e
4 Sauer
(Ma
) Dr.
<doog@def
>
1481 echo $?
/$^ERRNAME
$res
1482 eval vput addrcodec res d
$res
1483 echo $?
/$^ERRNAME
$res
1484 vput addrcodec res
+e
5 Sauer
(Ma
) Braten Dr.
<doog@def
>
1485 echo $?
/$^ERRNAME
$res
1486 eval vput addrcodec res d
$res
1487 echo $?
/$^ERRNAME
$res
1488 vput addrcodec res
+e
6 Sauer
(Ma
) Braten Dr.
(Heu
) <doog@def
>
1489 echo $?
/$^ERRNAME
$res
1490 eval vput addrcodec res d
$res
1491 echo $?
/$^ERRNAME
$res
1492 vput addrcodec res
+e
7 Sauer
(Ma
) Braten Dr.
(Heu
) <doog@def
> (bu
)
1493 echo $?
/$^ERRNAME
$res
1494 eval vput addrcodec res d
$res
1495 echo $?
/$^ERRNAME
$res
1496 vput addrcodec res
+e
8 \
1497 Dr. Sauer
(Ma
) Braten Dr.
(Heu
) <doog@def
> (bu
) Boom. Boom
1498 echo $?
/$^ERRNAME
$res
1499 eval vput addrcodec res d
$res
1500 echo $?
/$^ERRNAME
$res
1501 vput addrcodec res
+e
9 Dr.Sauer
(Ma
)Braten Dr.
(Heu
) <doog@def
>
1502 echo $?
/$^ERRNAME
$res
1503 eval vput addrcodec res d
$res
1504 echo $?
/$^ERRNAME
$res
1505 vput addrcodec res
+e
10 (Ma
)Braten Dr.
(Heu
) <doog@def
>
1506 echo $?
/$^ERRNAME
$res
1507 eval vput addrcodec res d
$res
1508 echo $?
/$^ERRNAME
$res
1509 vput addrcodec res
+e
11 (Ma
)Braten Dr
"." (Heu
) <doog@def
>
1510 echo $?
/$^ERRNAME
$res
1511 eval vput addrcodec res d
$res
1512 echo $?
/$^ERRNAME
$res
1513 vput addrcodec res
+e
12 Dr. Sauer
(Ma
) Braten Dr.
(u
) <doog@def
>
1514 echo $?
/$^ERRNAME
$res
1515 eval vput addrcodec res d
$res
1516 echo $?
/$^ERRNAME
$res
1517 vput addrcodec res
+e
13(Ma
)Braten Dr.
(Heu
) <doog@def
>
1518 echo $?
/$^ERRNAME
$res
1519 eval vput addrcodec res d
$res
1520 echo $?
/$^ERRNAME
$res
1521 vput addrcodec res
+e
14 Hey
, Du
<doog@def
> Wie
() findet Dr. das?
()
1522 echo $?
/$^ERRNAME
$res
1523 eval vput addrcodec res d
$res
1524 echo $?
/$^ERRNAME
$res
1525 vput addrcodec res
+e
15 \
1526 Hey
, Du
<doog@def
> Wie
() findet
"" Dr.
"" das?
()
1527 echo $?
/$^ERRNAME
$res
1528 eval vput addrcodec res d
$res
1529 echo $?
/$^ERRNAME
$res
1530 vput addrcodec res
+e
16 \
1531 "Hey," "Du" <doog@def
> "Wie()" findet
"" Dr.
"" das?
()
1532 echo $?
/$^ERRNAME
$res
1533 eval vput addrcodec res d
$res
1534 echo $?
/$^ERRNAME
$res
1535 vput addrcodec res
+e
17 \
1536 "Hey" Du
<doog@def
> "Wie() findet " " Dr. """ das?
()
1537 echo $?
/$^ERRNAME
$res
1538 eval vput addrcodec res d
$res
1539 echo $?
/$^ERRNAME
$res
1540 vput addrcodec res
+e
18 \
1541 <doog@def
> "Hey" Du
"Wie() findet " " Dr. """ das?
()
1542 echo $?
/$^ERRNAME
$res
1543 eval vput addrcodec res d
$res
1544 echo $?
/$^ERRNAME
$res
1545 vput addrcodec res
+e
19 Hey\
,\" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1546 echo $?
/$^ERRNAME
$res
1547 eval vput addrcodec res d
$res
1548 echo $?
/$^ERRNAME
$res
1550 vput addrcodec res
++e
20 Hey\
,\" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1551 echo $?
/$^ERRNAME
$res
1552 vput addrcodec res
++e
21 Hey\
,\"" <doog@def> "Wie
()" findet \" Dr. \" das?
1553 echo $?/$^ERRNAME $res
1554 eval vput addrcodec res d $res
1555 echo $?/$^ERRNAME $res
1557 vput addrcodec res +++e 22 Hey\\,\" <doog@def> "Wie
()" findet \" Dr. \" das?
1558 echo $?/$^ERRNAME $res
1559 eval vput addrcodec res d $res
1560 echo $?/$^ERRNAME $res
1562 vput addrcodec res s \
1563 "23 Hey
\\,\\\" \"Wie
" () "\" findet
\\\" Dr.
\\\" das?
" <doog@def>
1564 echo $?/$^ERRNAME $res
1567 check behave:addrcodec 0 "${MBOX}" '429099645 2414'
1575 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev
/null
1576 vput vexpr res
= 9223372036854775807
1577 echo $?
/$^ERRNAME
$res
1578 vput vexpr res
= 9223372036854775808
1579 echo $?
/$^ERRNAME
$res
1580 vput vexpr res
=@
9223372036854775808
1581 echo $?
/$^ERRNAME
$res
1582 vput vexpr res
= -9223372036854775808
1583 echo $?
/$^ERRNAME
$res
1584 vput vexpr res
= -9223372036854775809
1585 echo $?
/$^ERRNAME
$res
1586 vput vexpr res
=@
-9223372036854775809
1587 echo $?
/$^ERRNAME
$res
1590 echo $?
/$^ERRNAME
$res
1592 echo $?
/$^ERRNAME
$res
1594 echo $?
/$^ERRNAME
$res
1596 vput vexpr res
+ 0 0
1597 echo $?
/$^ERRNAME
$res
1598 vput vexpr res
+ 0 1
1599 echo $?
/$^ERRNAME
$res
1600 vput vexpr res
+ 1 1
1601 echo $?
/$^ERRNAME
$res
1603 vput vexpr res
+ 9223372036854775807 0
1604 echo $?
/$^ERRNAME
$res
1605 vput vexpr res
+ 9223372036854775807 1
1606 echo $?
/$^ERRNAME
$res
1607 vput vexpr res
+@
9223372036854775807 1
1608 echo $?
/$^ERRNAME
$res
1609 vput vexpr res
+ 0 9223372036854775807
1610 echo $?
/$^ERRNAME
$res
1611 vput vexpr res
+ 1 9223372036854775807
1612 echo $?
/$^ERRNAME
$res
1613 vput vexpr res
+@
1 9223372036854775807
1614 echo $?
/$^ERRNAME
$res
1616 vput vexpr res
+ -9223372036854775808 0
1617 echo $?
/$^ERRNAME
$res
1618 vput vexpr res
+ -9223372036854775808 -1
1619 echo $?
/$^ERRNAME
$res
1620 vput vexpr res
+@
-9223372036854775808 -1
1621 echo $?
/$^ERRNAME
$res
1622 vput vexpr res
+ 0 -9223372036854775808
1623 echo $?
/$^ERRNAME
$res
1624 vput vexpr res
+ -1 -9223372036854775808
1625 echo $?
/$^ERRNAME
$res
1626 vput vexpr res
+@
-1 -9223372036854775808
1627 echo $?
/$^ERRNAME
$res
1629 vput vexpr res
- 0 0
1630 echo $?
/$^ERRNAME
$res
1631 vput vexpr res
- 0 1
1632 echo $?
/$^ERRNAME
$res
1633 vput vexpr res
- 1 1
1634 echo $?
/$^ERRNAME
$res
1636 vput vexpr res
- 9223372036854775807 0
1637 echo $?
/$^ERRNAME
$res
1638 vput vexpr res
- 9223372036854775807 -1
1639 echo $?
/$^ERRNAME
$res
1640 vput vexpr res
-@
9223372036854775807 -1
1641 echo $?
/$^ERRNAME
$res
1642 vput vexpr res
- 0 9223372036854775807
1643 echo $?
/$^ERRNAME
$res
1644 vput vexpr res
- -1 9223372036854775807
1645 echo $?
/$^ERRNAME
$res
1646 vput vexpr res
- -2 9223372036854775807
1647 echo $?
/$^ERRNAME
$res
1648 vput vexpr res
-@
-2 9223372036854775807
1649 echo $?
/$^ERRNAME
$res
1651 vput vexpr res
- -9223372036854775808 +0
1652 echo $?
/$^ERRNAME
$res
1653 vput vexpr res
- -9223372036854775808 +1
1654 echo $?
/$^ERRNAME
$res
1655 vput vexpr res
-@
-9223372036854775808 +1
1656 echo $?
/$^ERRNAME
$res
1657 vput vexpr res
- 0 -9223372036854775808
1658 echo $?
/$^ERRNAME
$res
1659 vput vexpr res
- +1 -9223372036854775808
1660 echo $?
/$^ERRNAME
$res
1661 vput vexpr res
-@
+1 -9223372036854775808
1662 echo $?
/$^ERRNAME
$res
1664 vput vexpr res
+ -13 -2
1665 echo $?
/$^ERRNAME
$res
1666 vput vexpr res
- 0 0
1667 echo $?
/$^ERRNAME
$res
1668 vput vexpr res
- 0 1
1669 echo $?
/$^ERRNAME
$res
1670 vput vexpr res
- 1 1
1671 echo $?
/$^ERRNAME
$res
1672 vput vexpr res
- -13 -2
1673 echo $?
/$^ERRNAME
$res
1675 vput vexpr res
* 0 0
1676 echo $?
/$^ERRNAME
$res
1677 vput vexpr res
* 0 1
1678 echo $?
/$^ERRNAME
$res
1679 vput vexpr res
* 1 1
1680 echo $?
/$^ERRNAME
$res
1681 vput vexpr res
* -13 -2
1682 echo $?
/$^ERRNAME
$res
1684 vput vexpr res
/ 0 0
1685 echo $?
/$^ERRNAME
$res
1686 vput vexpr res
/ 0 1
1687 echo $?
/$^ERRNAME
$res
1688 vput vexpr res
/ 1 1
1689 echo $?
/$^ERRNAME
$res
1690 vput vexpr res
/ -13 -2
1691 echo $?
/$^ERRNAME
$res
1693 vput vexpr res
% 0 0
1694 echo $?
/$^ERRNAME
$res
1695 vput vexpr res
% 0 1
1696 echo $?
/$^ERRNAME
$res
1697 vput vexpr res
% 1 1
1698 echo $?
/$^ERRNAME
$res
1699 vput vexpr res
% -13 -2
1700 echo $?
/$^ERRNAME
$res
1703 check behave
:vexpr-numeric
0 "${MBOX}" '1723609217 1048'
1705 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" #2>/dev/null
1706 vput vexpr res find 'bananarama' 'nana'
1707 echo $?/$^ERRNAME :$res:
1708 vput vexpr res find 'bananarama' 'bana'
1709 echo $?/$^ERRNAME :$res:
1710 vput vexpr res find 'bananarama' 'Bana'
1711 echo $?/$^ERRNAME :$res:
1712 vput vexpr res find 'bananarama' 'rama'
1713 echo $?/$^ERRNAME :$res:
1715 vput vexpr res ifind 'bananarama' 'nana'
1716 echo $?/$^ERRNAME :$res:
1717 vput vexpr res ifind 'bananarama' 'bana'
1718 echo $?/$^ERRNAME :$res:
1719 vput vexpr res ifind 'bananarama' 'Bana'
1720 echo $?/$^ERRNAME :$res:
1721 vput vexpr res ifind 'bananarama' 'rama'
1722 echo $?/$^ERRNAME :$res:
1724 vput vexpr res substring 'bananarama' 1
1725 echo $?/$^ERRNAME :$res:
1726 vput vexpr res substring 'bananarama' 3
1727 echo $?/$^ERRNAME :$res:
1728 vput vexpr res substring 'bananarama' 5
1729 echo $?/$^ERRNAME :$res:
1730 vput vexpr res substring 'bananarama' 7
1731 echo $?/$^ERRNAME :$res:
1732 vput vexpr res substring 'bananarama' 9
1733 echo $?/$^ERRNAME :$res:
1734 vput vexpr res substring 'bananarama' 10
1735 echo $?/$^ERRNAME :$res:
1736 vput vexpr res substring 'bananarama' 1 3
1737 echo $?/$^ERRNAME :$res:
1738 vput vexpr res substring 'bananarama' 3 3
1739 echo $?/$^ERRNAME :$res:
1740 vput vexpr res substring 'bananarama' 5 3
1741 echo $?/$^ERRNAME :$res:
1742 vput vexpr res substring 'bananarama' 7 3
1743 echo $?/$^ERRNAME :$res:
1744 vput vexpr res substring 'bananarama' 9 3
1745 echo $?/$^ERRNAME :$res:
1746 vput vexpr res substring 'bananarama' 10 3
1747 echo $?/$^ERRNAME :$res:
1749 vput vexpr res substring 'bananarama' -1
1750 echo $?/$^ERRNAME :$res:
1751 vput vexpr res substring 'bananarama' -3
1752 echo $?/$^ERRNAME :$res:
1753 vput vexpr res substring 'bananarama' -5
1754 echo $?/$^ERRNAME :$res:
1755 vput vexpr res substring 'bananarama' -7
1756 echo $?/$^ERRNAME :$res:
1757 vput vexpr res substring 'bananarama' -9
1758 echo $?/$^ERRNAME :$res:
1759 vput vexpr res substring 'bananarama' -10
1760 echo $?/$^ERRNAME :$res:
1761 vput vexpr res substring 'bananarama' 1 -3
1762 echo $?/$^ERRNAME :$res:
1763 vput vexpr res substring 'bananarama' 3 -3
1764 echo $?/$^ERRNAME :$res:
1765 vput vexpr res substring 'bananarama' 5 -3
1766 echo $?/$^ERRNAME :$res:
1767 vput vexpr res substring 'bananarama' 7 -3
1768 echo $?/$^ERRNAME :$res:
1769 vput vexpr res substring 'bananarama' 9 -3
1770 echo $?/$^ERRNAME :$res:
1771 vput vexpr res substring 'bananarama' 10 -3
1772 echo $?/$^ERRNAME :$res:
1774 vput vexpr res trim 'Cocoon Cocoon'
1775 echo $?/$^ERRNAME :$res:
1776 vput vexpr res trim ' Cocoon Cocoon '
1777 echo $?/$^ERRNAME :$res:
1778 vput vexpr res trim-front 'Cocoon Cocoon'
1779 echo $?/$^ERRNAME :$res:
1780 vput vexpr res trim-front ' Cocoon Cocoon '
1781 echo $?/$^ERRNAME :$res:
1782 vput vexpr res trim-end 'Cocoon Cocoon'
1783 echo $?/$^ERRNAME :$res:
1784 vput vexpr res trim-end ' Cocoon Cocoon '
1785 echo $?/$^ERRNAME :$res:
1788 check behave:vexpr-string 0 "${MBOX}" '3182004322 601'
1790 if have_feat regex; then
1791 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" #2>/dev/null
1792 vput vexpr res regex
'bananarama' 'nana'
1793 echo $?
/$^ERRNAME
:$res:
1794 vput vexpr res regex
'bananarama' 'bana'
1795 echo $?
/$^ERRNAME
:$res:
1796 vput vexpr res regex
'bananarama' 'Bana'
1797 echo $?
/$^ERRNAME
:$res:
1798 vput vexpr res regex
'bananarama' 'rama'
1799 echo $?
/$^ERRNAME
:$res:
1801 vput vexpr res iregex
'bananarama' 'nana'
1802 echo $?
/$^ERRNAME
:$res:
1803 vput vexpr res iregex
'bananarama' 'bana'
1804 echo $?
/$^ERRNAME
:$res:
1805 vput vexpr res iregex
'bananarama' 'Bana'
1806 echo $?
/$^ERRNAME
:$res:
1807 vput vexpr res iregex
'bananarama' 'rama'
1808 echo $?
/$^ERRNAME
:$res:
1810 vput vexpr res regex
'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
1811 echo $?
/$^ERRNAME
:$res:
1812 vput vexpr res regex
'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
1813 echo $?
/$^ERRNAME
:$res:
1814 vput vexpr res regex
'bananarama' 'Bana(.+)' '\$1\$0'
1815 echo $?
/$^ERRNAME
:$res:
1816 vput vexpr res regex
'bananarama' '(.+)rama' '\$1\$0'
1817 echo $?
/$^ERRNAME
:$res:
1819 vput vexpr res iregex
'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
1820 echo $?
/$^ERRNAME
:$res:
1821 vput vexpr res iregex
'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
1822 echo $?
/$^ERRNAME
:$res:
1823 vput vexpr res iregex
'bananarama' 'Bana(.+)' '\$1\$0'
1824 echo $?
/$^ERRNAME
:$res:
1825 vput vexpr res iregex
'bananarama' '(.+)rama' '\$1\$0'
1826 echo $?
/$^ERRNAME
:$res:
1830 check behave
:vexpr-regex
0 "${MBOX}" '3270360157 311'
1832 printf 'behave:vexpr-regex: unsupported, skipped\n'
1838 t_behave_call_ret
() {
1841 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
1846 vput vexpr j '&' $i 7
1852 vput vexpr j '&' $i 7
1858 echo ! The end for $1
1862 # Transport $?/$! up the call chain
1868 wysh set i=$? j=$! k=$^ERRNAME
1872 echo ! The end for $1
1873 return $i $^ERR-BUSY
1877 # Up and down it goes
1884 vput vexpr k - $1 $2
1888 echo "# <$i/$j> .. "
1892 eval echon
"<\$1=\$i/\$^ERRNAME-$j "
1895 echo ! The end
for $1=$i/$2
1899 return $i $^ERR-BUSY
1905 call w1
0; echo ?
=$?
!=$
!; echo -----;
1906 call w2
0; echo ?
=$?
!=$^ERRNAME
; echo -----;
1907 call w3
0 1; echo ?
=$?
!=$^ERRNAME
; echo -----;
1910 check behave
:call_ret
0 "${MBOX}" '1572045517 5922'
1918 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
1923 vput vexpr j '&' $i 7
1929 echo ! The end for $1/$2
1931 return $i $^ERR-BUSY
1942 echo ?=$? !=$^ERRNAME
1945 echo ?=$? !=$^ERRNAME
1947 echo ?=$? !=$^ERRNAME
1950 check behave:xcall-1 0 "${MBOX}" '2401702082 23801'
1954 ${cat} <<- '__EOT' > "${BODY}"
1959 vput vexpr j '&' $i 7
1965 echo ! The end for $1
1968 echo would be err with errexit
1977 echo zwei, ?=$? !=$!
1978 localopts yes; set errexit
1980 echo drei, ?=$? !=$^ERRNAME
1982 echo vier, ?=$? !=$^ERRNAME, this is an error
1985 echo outer 1, ?=$? !=$^ERRNAME
1987 echo outer 2, ?=$? !=$^ERRNAME, could be error if xxxign non-empty
1989 echo outer 3, ?=$? !=$^ERRNAME
1990 echo this is definitely an error
1993 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign ignerr' -Snomemdebug \
1995 check behave
:xcall-2
0 "${MBOX}" '3900716531 4200'
1997 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign " "' -Snomemdebug \
1999 check behave:xcall-3 1 "${MBOX}" '1006776201 2799'
2004 t_behave_vpospar() {
2007 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2008 vpospar
set hey
, "'you ", world
!
2009 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2010 vput vpospar x quote
; echo x
<$x>
2011 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2012 vput vpospar y quote
;echo y
<$y>
2013 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2014 eval vpospar
set ${y};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2015 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2018 echo infun2
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2019 vput vpospar z quote
;echo infun2
:z
<$z>
2023 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2024 vput vpospar y quote
;echo infun
:y
<$y>
2025 eval vpospar
set ${x};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2026 vpospar
clear;echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2028 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2029 eval vpospar
set ${y};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2032 call infun This
"in a" fun
2033 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2034 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2036 check behave
:vpospar-1
0 "${MBOX}" '155175639 866'
2039 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2041 echo ifs<$ifs> ifs-ws<$ifs-ws>
2042 vpospar set hey, "'you ", world!
2043 echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2044 vput vpospar x quote; echo x<$x>
2045 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2046 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2049 echo ifs<$ifs> ifs-ws<$ifs-ws>
2050 vpospar set hey, "'you
", world!
2051 echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2052 vput vpospar x quote; echo x<$x>
2053 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2054 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2057 echo ifs<$ifs> ifs-ws<$ifs-ws>
2058 vpospar set hey, "'you ", world!
2059 echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2060 vput vpospar x quote; echo x<$x>
2061 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2062 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2064 check behave:vpospar-ifs 0 "${MBOX}" '2015927702 706'
2069 t_behave_atxplode() {
2071 TRAP_EXIT_ADDONS="./.t*"
2073 ${cat} > ./.t.sh <<- '___
'; ${cat} > ./.t.rc <<- '___
'
2076 printf " (1/$#: <$1>)"
2078 if [ $# -gt 0 ]; then
2092 printf yyy;yyy 'xxx' "b\$
'\t'u
' "
2093 printf xxx;xxx arg ,b u.
2094 printf xxx;xxx arg , .
2095 printf xxx;xxx arg ,ball.
2101 echon " (1/$#: <$1>)"
2116 echon yyy;call yyy '\call xxx' "b\$
'\t'u
' "
2117 echon xxx;call xxx arg ,b u.
2118 echon xxx;call xxx arg , .
2119 echon xxx;call xxx arg ,ball.
2122 ${MAILX} ${ARGS} -X'source ./.t.rc' -Xx > "${MBOX}" 2>&1
2123 check behave:atxplode-1 0 "${MBOX}" '41566293 164'
2125 #${SHELL} ./.t.sh > ./.tshout 2>&1
2126 #check behave:atxplode:disproof-1 0 ./.tshout '41566293 164'
2133 TRAP_EXIT_ADDONS="./.t*"
2135 ${cat} <<- '__EOT
' > .tin
2136 hey1, "'you
", world!
2137 hey2, "'you ", bugs bunny!
2142 ${cat} <<- '__EOT
' |\
2143 ${MAILX} ${ARGS} -X'readctl create ./.tin' > "${MBOX}" 2>&1
2145 echo $?/$^ERRNAME / <$a><$b><$c>
2147 echo $?/$^ERRNAME / <$a><$b><$c>
2149 echo $?/$^ERRNAME / <$a><$b><$c>
2151 echo $?/$^ERRNAME / <$a><$b><$c>
2152 unset a b c;read a b c
2153 echo $?/$^ERRNAME / <$a><$b><$c>
2154 readctl remove ./.tin;echo readctl remove:$?/$^ERRNAME
2156 check behave:read-1 0 "${MBOX}" '1527910147 173'
2158 ${cat} <<- '__EOT
' > .tin2
2159 hey2.0,:"'you
",:world!:mars.:
2160 hey2.1,:"'you ",:world!
2161 hey2.2,:"'you
",:bugs bunny!
2167 ${cat} <<- '__EOT' |\
2168 6< .tin2 ${MAILX} ${ARGS} -X 'readctl create 6' > "${MBOX}" 2>&1
2171 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2173 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2175 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2177 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2179 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2181 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2182 unset a b c
;read a b c
2183 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2185 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2186 readctl remove
6;echo readctl remove
:$?
/$^ERRNAME
2188 check behave
:read-ifs
0 "${MBOX}" '890153490 298'
2190 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2192 readall d; echo $?/$^ERRNAME / <$d>
2193 wysh set d;readall d;echo $?/$^ERRNAME / <$d>
2194 readctl create .tin2
2195 readall d; echo $?/$^ERRNAME / <$d>
2196 wysh set d;readall d;echo $?/$^ERRNAME / <$d>
2197 readctl remove .tin;echo $?/$^ERRNAME;\
2198 readctl remove .tin2;echo $?/$^ERRNAME
2200 check behave:readall 0 "${MBOX}" '860434889 333'
2207 TRAP_EXIT_ADDONS=".
/.t
*"
2211 while [ ${i} -lt 112 ]; do
2212 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
2213 "${MBOX}" "${i}" "${i}"
2216 ) | ${MAILX} ${ARGS}
2217 check behave:mbox-1 0 "${MBOX}" '1140119864 13780'
2223 ' "${MBOX}" .tmbox1 .tmbox1 |
2224 ${MAILX} ${ARGS} > .tlst
2225 check behave:mbox-2 0 .tlst '2739893312 9103'
2231 ' "${MBOX}" .tmbox2 .tmbox2 |
2232 ${MAILX} ${ARGS} > .tlst
2233 check behave:mbox-3 0 .tlst '1702194178 9110'
2235 # only the odd (even)
2237 printf 'File "file://%s
"
2240 while [ ${i} -lt 112 ]; do
2242 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2249 ) | ${MAILX} ${ARGS} > .tlst
2250 check behave:mbox-4 0 .tmbox3 '631132924 6890'
2251 check behave:mbox-5 - .tlst '2960975049 4573'
2254 printf 'file "file://%s
"
2257 while [ ${i} -lt 112 ]; do
2259 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2267 ' .tmbox3 .tmbox3 .tmbox2
2268 ) |
${MAILX} ${ARGS} > .tlst
2269 check behave
:mbox-6
0 .tmbox3
'1387070539 13655'
2270 ${sed} 2d
< .tlst
> .tlstx
2271 check behave
:mbox-7
- .tlstx
'2729940494 13645'
2276 t_behave_alternates
() {
2278 TRAP_EXIT_ADDONS
="./.t*"
2280 ${cat} <<-_EOT > ./.tsendmail.sh
2282 (echo 'From Valeriana Sat Jul 08 15:54:03 2017' && ${cat} && echo
2285 chmod 0755 .
/.tsendmail.sh
2287 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
> .
/.tall
2>&1
2291 alternates a1@b1 a2@b2 a3@b3
2296 echo $?
/$^ERRNAME
<$rv>
2301 echo $?
/$^ERRNAME
<$rv>
2304 echo $?
/$^ERRNAME
<$rv>
2307 echo $?
/$^ERRNAME
<$rv>
2311 alternates a1@b1 a2@b2 a3@b3
2314 echo $?
/$^ERRNAME
<$rv>
2317 echo $?
/$^ERRNAME
<$rv>
2320 echo $?
/$^ERRNAME
<$rv>
2323 alternates a1@b1 a2@b2 a3@b3
2326 echo $?
/$^ERRNAME
<$rv>
2329 echo $?
/$^ERRNAME
<$rv>
2332 echo $?
/$^ERRNAME
<$rv>
2336 alternates a1@b1 a2@b2 a3@b3
2339 echo $?
/$^ERRNAME
<$rv>
2343 alternates a1@b1 a1@c1 a1@d1 a2@b2 a3@b3 a3@c3 a3@d3
2345 ~s all alternates
, only a1@b1 remains
2347 ~b a3@b3 a3@c3 a3@d3
2356 alternates a1@b1 a1@c1 a2@b2 a3@b3
2358 ~s a1@b1 a1@d1
, and a3@c3 a3@d3 remain
2360 ~b a3@b3 a3@c3 a3@d3
2367 alternates a1@b1 a2@b2 a3
; set allnet
2369 ~s all alternates via allnet
, only a1@b1 remains
2371 ~b a3@b3 a3@c3 a3@d3
2382 echo $?
/$^ERRNAME
<$rv>
2386 echo $?
/$^ERRNAME
<$rv>
2390 echo $?
/$^ERRNAME
<$rv>
2394 echo $?
/$^ERRNAME
<$rv>
2398 echo $?
/$^ERRNAME
<$rv>
2402 alternates a1@b1 a2@b2
2405 echo $?
/$^ERRNAME
<$rv>
2406 alternates a3@b3 a4@b4
2409 echo $?
/$^ERRNAME
<$rv>
2411 check behave
:alternates-1
0 "${MBOX}" '142184864 515'
2412 check behave
:alternates-2
- .tall
'1878598364 505'
2419 TRAP_EXIT_ADDONS
="./.t*"
2421 ${cat} <<-_EOT > ./.tsendmail.sh
2423 (echo 'From Hippocastanum Mon Jun 19 15:07:07 2017' && ${cat} && echo
2426 chmod 0755 .
/.tsendmail.sh
2428 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
> .
/.tall
2>&1
2430 alias a1 ex2@a1.ple
"EX3 <ex3@a1.ple>"
2432 alias a2 ex1@a2.ple ex2@a2.ple ex3@a2.ple ex4@a2.ple
2434 alias a4 a5 ex1@a4.ple
2436 alias a6 a7 ex1@a6.ple
2450 check behave
:alias-1
0 "${MBOX}" '2496925843 272'
2451 check behave
:alias-2
- .tall
'3548953204 152'
2453 # TODO t_behave_alias: n_ALIAS_MAXEXP is compile-time constant,
2454 # TODO need to somehow provide its contents to the test, then test
2459 t_behave_filetype
() {
2461 TRAP_EXIT_ADDONS
="./.t*"
2463 ${cat} <<-_EOT > ./.tsendmail.sh
2465 (echo 'From Alchemilla Wed Apr 25 15:12:13 2017' && ${cat} && echo
2468 chmod 0755 .
/.tsendmail.sh
2470 printf 'm m1@e.t\nL1\nHy1\n~.\nm m2@e.t\nL2\nHy2\n~@ %s\n~.\n' \
2471 "${SRCDIR}snailmail.jpg" | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2472 check behave:filetype-1 0 "${MBOX}" '1594682963 13520'
2474 if command -v gzip >/dev/null 2>&1; then
2477 printf 'File "%s
"\ncopy 1 ./.t.mbox.gz
2478 copy 2 ./.t.mbox.gz' "${MBOX}" |
2480 -X'filetype gz gzip\ -dc gzip\ -c'
2481 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2483 -X'filetype gz gzip\ -dc gzip\ -c'
2485 check behave:filetype-2 - ".
/.t.mbox
" '1594682963 13520'
2486 check behave:filetype-3 - ".
/.t.out
" '2494681730 102'
2488 echo 'behave:filetype-2: unsupported, skipped'
2489 echo 'behave:filetype-3: unsupported, skipped'
2494 printf 'File "%s
"\ncopy 1 ./.t.mbox.gz
2500 -X'filetype gz gzip\ -dc gzip\ -c' \
2501 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" \
2502 "echo eins
;echo zwei
;echo und mit
${sed} bist Du dabei
;${cat}"'
2503 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2505 -X'filetype gz gzip\ -dc gzip\ -c' \
2506 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" kill\ 0'
2508 check behave:filetype-4 - ".
/.t.mbox
" '2886541147 27060'
2509 check behave:filetype-5 - ".
/.t.out
" '838452520 172'
2514 t_behave_record_a_resend() {
2516 TRAP_EXIT_ADDONS=".
/.t.record .
/.t.resent
"
2520 m %s\n~s Subject 1.\nHello.\n~.
2521 set record-files add-file-recipients
2522 m %s\n~s Subject 2.\nHello.\n~.
2524 resend 2 ./.t.resent
2525 Resend 1 ./.t.resent
2527 resend 2 ./.t.resent
2528 Resend 1 ./.t.resent
2529 ' ./.t.record "${MBOX}" "${MBOX}" "${MBOX}" |
2532 check behave:record_a_resend-1 0 "${MBOX}" '3057873538 256'
2533 check behave:record_a_resend-2 - .t.record '391356429 460'
2534 check behave:record_a_resend-3 - .t.resent '2685231691 648'
2539 t_behave_e_H_L_opts() {
2541 TRAP_EXIT_ADDONS=".
/.tsendmail.sh .
/.t.mbox
"
2544 ${MAILX} ${ARGS} -ef ./.t.mbox
2545 echo ${?} > "${MBOX}"
2547 ${cat} <<-_EOT > ./.tsendmail.sh
2549 (echo 'From Alchemilla Wed Apr 07 17:03:33 2017' && ${cat} && echo
2552 chmod 0755 ./.tsendmail.sh
2553 printf 'm me@exam.ple\nLine 1.\nHello.\n~.\n' |
2554 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2555 printf 'm you@exam.ple\nLine 1.\nBye.\n~.\n' |
2556 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2558 ${MAILX} ${ARGS} -ef ./.t.mbox
2559 echo ${?} >> "${MBOX}"
2560 ${MAILX} ${ARGS} -efL @t@me ./.t.mbox
2561 echo ${?} >> "${MBOX}"
2562 ${MAILX} ${ARGS} -efL @t@you ./.t.mbox
2563 echo ${?} >> "${MBOX}"
2564 ${MAILX} ${ARGS} -efL '@>@Line 1' ./.t.mbox
2565 echo ${?} >> "${MBOX}"
2566 ${MAILX} ${ARGS} -efL '@>@Hello.' ./.t.mbox
2567 echo ${?} >> "${MBOX}"
2568 ${MAILX} ${ARGS} -efL '@>@Bye.' ./.t.mbox
2569 echo ${?} >> "${MBOX}"
2570 ${MAILX} ${ARGS} -efL '@>@Good bye.' ./.t.mbox
2571 echo ${?} >> "${MBOX}"
2573 ${MAILX} ${ARGS} -fH ./.t.mbox >> "${MBOX}"
2574 echo ${?} >> "${MBOX}"
2575 ${MAILX} ${ARGS} -fL @t@me ./.t.mbox >> "${MBOX}"
2576 echo ${?} >> "${MBOX}"
2577 ${MAILX} ${ARGS} -fL @t@you ./.t.mbox >> "${MBOX}"
2578 echo ${?} >> "${MBOX}"
2579 ${MAILX} ${ARGS} -fL '@>@Line 1' ./.t.mbox >> "${MBOX}"
2580 echo ${?} >> "${MBOX}"
2581 ${MAILX} ${ARGS} -fL '@>@Hello.' ./.t.mbox >> "${MBOX}"
2582 echo ${?} >> "${MBOX}"
2583 ${MAILX} ${ARGS} -fL '@>@Bye.' ./.t.mbox >> "${MBOX}"
2584 echo ${?} >> "${MBOX}"
2585 ${MAILX} ${ARGS} -fL '@>@Good bye.' ./.t.mbox >> "${MBOX}" 2>/dev
/null
2586 echo ${?} >> "${MBOX}"
2588 check behave
:e_H_L_opts
- "${MBOX}" '1708955574 678'
2593 t_behave_compose_hooks
() { # TODO monster
2595 TRAP_EXIT_ADDONS
="./.t*"
2597 (echo line one
&&echo line two
&&echo line three
) > .
/.treadctl
2598 (echo echo four
&&echo echo five
&&echo echo six
) > .
/.tattach
2600 ${cat} <<-_EOT > ./.tsendmail.sh
2602 (echo 'From PrimulaVeris Wed Apr 10 22:59:00 2017' && ${cat} && echo
2605 chmod 0755 .
/.tsendmail.sh
2607 ${cat} <<'__EOT__' > ./.trc
2609 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
2612 vput vexpr es substr "$1" 0 1
2617 define read_mline_res {
2618 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
2619 echo $len/$es/$^ERRNAME: $hl
2620 if [ $es -ne $^ERR-NONE ]
2621 xcall bail read_mline_res
2623 \xcall read_mline_res
2628 echo "~^header list"; read hl; echo $hl;\
2629 call xerr "$hl" "in_addr ($xh) 0-1"
2631 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
2632 read es; echo $es; call xerr "$es" "ins_addr $xh 1-1"
2633 echo "~^header insert $xh <${xh}2@exam.ple>";\
2634 read es; echo $es; call xerr "$es" "ins_addr $xh 1-2"
2635 echo "~^header insert $xh ${xh}3@exam.ple";\
2636 read es; echo $es; call xerr "$es" "ins_addr $xh 1-3"
2637 echo "~^header list $xh"; read hl; echo $hl;\
2638 call xerr "$hl" "ins_addr $xh 1-4"
2639 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 1-5"
2642 if [ "$t_remove" == "" ]
2646 echo "~^header remove $xh"; read es; call xerr $es "ins_addr $xh 2-1"
2647 echo "~^header remove $xh"; read es; vput vexpr es substr $es 0 3
2649 xcall bail "ins_addr $xh 2-2"
2651 echo "~^header list $xh"; read es; vput vexpr es substr $es 0 3
2653 xcall bail "ins_addr $xh 2-3"
2655 echo "~^header show $xh"; read es; vput vexpr es substr $es 0 3
2657 xcall bail "ins_addr $xh 2-4"
2661 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
2662 read es; echo $es; call xerr "$es" "ins_addr $xh 3-1"
2663 echo "~^header insert $xh <${xh}2@exam.ple>";\
2664 read es; echo $es; call xerr "$es" "ins_addr $xh 3-2"
2665 echo "~^header insert $xh ${xh}3@exam.ple";\
2666 read es; echo $es; call xerr "$es" "ins_addr $xh 3-3"
2667 echo "~^header list $xh"; read hl; echo $hl;\
2668 call xerr "$hl" "ins_addr $xh 3-4"
2669 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 3-5"
2672 echo "~^header remove-at $xh 1"; read es;\
2673 call xerr $es "ins_addr $xh 3-6"
2674 echo "~^header remove-at $xh 1"; read es;\
2675 call xerr $es "ins_addr $xh 3-7"
2676 echo "~^header remove-at $xh 1"; read es;\
2677 call xerr $es "ins_addr $xh 3-8"
2678 echo "~^header remove-at $xh 1"; read es;\
2679 vput vexpr es substr $es 0 3
2681 xcall bail "ins_addr $xh 3-9"
2683 echo "~^header remove-at $xh T"; read es;\
2684 vput vexpr es substr $es 0 3
2686 xcall bail "ins_addr $xh 3-10"
2688 echo "~^header list $xh"; read es;\
2689 vput vexpr es substr $es 0 3
2691 xcall bail "ins_addr $xh 3-11"
2693 echo "~^header show $xh"; read es;\
2694 vput vexpr es substr $es 0 3
2696 xcall bail "ins_addr $xh 3-12"
2700 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
2701 read es; echo $es; call xerr "$es" "ins_addr $xh 4-1"
2702 echo "~^header insert $xh <${xh}2@exam.ple> (comment) \"Quot(e)d\"";\
2703 read es; echo $es; call xerr "$es" "ins_addr $xh 4-2"
2704 echo "~^header insert $xh ${xh}3@exam.ple";\
2705 read es; echo $es; call xerr "$es" "ins_addr $xh 4-3"
2706 echo "~^header list $xh"; read hl; echo $hl;\
2707 call xerr "$hl" "header list $xh 3-4"
2708 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 4-5"
2711 echo "~^header remove-at $xh 3"; read es;\
2712 call xerr $es "ins_addr $xh 4-6"
2713 echo "~^header remove-at $xh 2"; read es;\
2714 call xerr $es "ins_addr $xh 4-7"
2715 echo "~^header remove-at $xh 1"; read es;\
2716 call xerr $es "ins_addr $xh 4-8"
2717 echo "~^header remove-at $xh 1"; read es;\
2718 vput vexpr es substr $es 0 3
2720 xcall bail "ins_addr $xh 4-9"
2722 echo "~^header remove-at $xh T"; read es;\
2723 vput vexpr es substr $es 0 3
2725 xcall bail "ins_addr $xh 4-10"
2727 echo "~^header list $xh"; read es;\
2728 vput vexpr es substr $es 0 3
2730 xcall bail "ins_addr $xh 4-11"
2732 echo "~^header show $xh"; read es;\
2733 vput vexpr es substr $es 0 3
2735 xcall bail "ins_addr $xh 4-12"
2739 wysh set xh=$1 mult=$2
2740 echo "~^header list"; read hl; echo $hl;\
2741 call xerr "$hl" "ins_ref ($xh) 0-1"
2743 echo "~^header insert $xh <$xh@exam.ple>";\
2744 read es; echo $es; call xerr "$es" "ins_ref $xh 1-1"
2746 echo "~^header insert $xh <${xh}2@exam.ple>";\
2747 read es; echo $es; call xerr "$es" "ins_ref $xh 1-2"
2748 echo "~^header insert $xh ${xh}3@exam.ple";\
2749 read es; echo $es; call xerr "$es" "ins_ref $xh 1-3"
2751 echo "~^header insert $xh <${xh}2@exam.ple>"; read es;\
2752 vput vexpr es substr $es 0 3
2754 xcall bail "ins_ref $xh 1-4"
2758 echo "~^header list $xh"; read hl; echo $hl;\
2759 call xerr "$hl" "ins_ref $xh 1-5"
2760 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 1-6"
2763 if [ "$t_remove" == "" ]
2767 echo "~^header remove $xh"; read es;\
2768 call xerr $es "ins_ref $xh 2-1"
2769 echo "~^header remove $xh"; read es;\
2770 vput vexpr es substr $es 0 3
2772 xcall bail "ins_ref $xh 2-2"
2774 echo "~^header list $xh"; read es;\
2775 vput vexpr es substr $es 0 3
2777 xcall bail "$es ins_ref $xh 2-3"
2779 echo "~^header show $xh"; read es;\
2780 vput vexpr es substr $es 0 3
2782 xcall bail "ins_ref $xh 2-4"
2786 echo "~^header insert $xh <$xh@exam.ple>";\
2787 read es; echo $es; call xerr "$es" "ins_ref $xh 3-1"
2789 echo "~^header insert $xh <${xh}2@exam.ple>";\
2790 read es; echo $es; call xerr "$es" "ins_ref $xh 3-2"
2791 echo "~^header insert $xh ${xh}3@exam.ple";\
2792 read es; echo $es; call xerr "$es" "ins_ref $xh 3-3"
2794 echo "~^header list $xh";\
2795 read hl; echo $hl; call xerr "$hl" "ins_ref $xh 3-4"
2796 echo "~^header show $xh";\
2797 read es; call xerr $es "ins_ref $xh 3-5"
2800 echo "~^header remove-at $xh 1"; read es;\
2801 call xerr $es "ins_ref $xh 3-6"
2802 if [ $mult -ne 0 ] && [ $xh != subject ]
2803 echo "~^header remove-at $xh 1"; read es;\
2804 call xerr $es "ins_ref $xh 3-7"
2805 echo "~^header remove-at $xh 1"; read es;\
2806 call xerr $es "ins_ref $xh 3-8"
2808 echo "~^header remove-at $xh 1"; read es;\
2809 vput vexpr es substr $es 0 3
2811 xcall bail "ins_ref $xh 3-9"
2813 echo "~^header remove-at $xh T"; read es;\
2814 vput vexpr es substr $es 0 3
2816 xcall bail "ins_ref $xh 3-10"
2818 echo "~^header show $xh"; read es;\
2819 vput vexpr es substr $es 0 3
2821 xcall bail "ins_ref $xh 3-11"
2825 echo "~^header insert $xh <$xh@exam.ple> ";\
2826 read es; echo $es; call xerr "$es" "ins_ref $xh 4-1"
2828 echo "~^header insert $xh <${xh}2@exam.ple> ";\
2829 read es; echo $es; call xerr "$es" "ins_ref $xh 4-2"
2830 echo "~^header insert $xh ${xh}3@exam.ple";\
2831 read es; echo $es; call xerr "$es" "ins_ref $xh 4-3"
2833 echo "~^header list $xh"; read hl; echo $hl;\
2834 call xerr "$hl" "ins_ref $xh 4-4"
2835 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 4-5"
2838 if [ $mult -ne 0 ] && [ $xh != subject ]
2839 echo "~^header remove-at $xh 3"; read es;\
2840 call xerr $es "ins_ref $xh 4-6"
2841 echo "~^header remove-at $xh 2"; read es;\
2842 call xerr $es "ins_ref $xh 4-7"
2844 echo "~^header remove-at $xh 1"; read es;\
2845 call xerr $es "ins_ref $xh 4-8"
2846 echo "~^header remove-at $xh 1"; read es;\
2847 vput vexpr es substr $es 0 3
2849 xcall bail "ins_ref $xh 4-9"
2851 echo "~^header remove-at $xh T"; read es;\
2852 vput vexpr es substr $es 0 3
2854 xcall bail "ins_ref $xh 4-10"
2856 echo "~^header show $xh"; read es;\
2857 vput vexpr es substr $es 0 3
2859 xcall bail "ins_ref $xh 4-11"
2864 # In collect.c order
2866 call ins_ref sender 0 # Not a "ref", but works
2870 call ins_addr reply-To
2871 call ins_addr mail-Followup-to
2872 call ins_ref messAge-id 0
2873 call ins_ref rEfErEncEs 1
2874 call ins_ref in-Reply-to 1
2875 call ins_ref subject 1 # Not a "ref", but works (with tweaks)
2876 call ins_addr freeForm1
2877 call ins_addr freeform2
2879 echo "~^header show MAILX-Command"; read es; call xerr $es "t_header 1000"
2881 echo "~^header show MAILX-raw-TO"; read es; call xerr $es "t_header 1001"
2889 echo "~^attachment";\
2890 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
2892 xcall bail "attach 0-1"
2895 echo "~^attach attribute ./.treadctl";\
2896 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
2898 xcall bail "attach 0-2"
2900 echo "~^attachment attribute-at 1";\
2901 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
2903 xcall bail "attach 0-3"
2906 echo "~^attachment insert ./.treadctl=ascii";\
2907 read hl; echo $hl; call xerr "$hl" "attach 1-1"
2908 echo "~^attachment list";\
2909 read es; echo $es;call xerr "$es" "attach 1-2"
2911 echo "~^attachment attribute ./.treadctl";\
2912 read es; echo $es;call xerr "$es" "attach 1-3"
2914 echo "~^attachment attribute .treadctl";\
2915 read es; echo $es;call xerr "$es" "attach 1-4"
2917 echo "~^attachment attribute-at 1";\
2918 read es; echo $es;call xerr "$es" "attach 1-5"
2921 echo "~^attachment attribute-set ./.treadctl filename rctl";\
2922 read es; echo $es;call xerr "$es" "attach 1-6"
2923 echo "~^attachment attribute-set .treadctl content-description Au";\
2924 read es; echo $es;call xerr "$es" "attach 1-7"
2925 echo "~^attachment attribute-set-at 1 content-id <10.du@ich>";\
2926 read es; echo $es;call xerr "$es" "attach 1-8"
2928 echo "~^attachment attribute ./.treadctl";\
2929 read es; echo $es;call xerr "$es" "attach 1-9"
2931 echo "~^attachment attribute .treadctl";\
2932 read es; echo $es;call xerr "$es" "attach 1-10"
2934 echo "~^attachment attribute rctl";\
2935 read es; echo $es;call xerr "$es" "attach 1-11"
2937 echo "~^attachment attribute-at 1";\
2938 read es; echo $es;call xerr "$es" "attach 1-12"
2942 echo "~^attachment insert ./.tattach=latin1";\
2943 read hl; echo $hl; call xerr "$hl" "attach 2-1"
2944 echo "~^attachment list";\
2945 read es; echo $es;call xerr "$es" "attach 2-2"
2947 echo "~^attachment attribute ./.tattach";\
2948 read es; echo $es;call xerr "$es" "attach 2-3"
2950 echo "~^attachment attribute .tattach";\
2951 read es; echo $es;call xerr "$es" "attach 2-4"
2953 echo "~^attachment attribute-at 2";\
2954 read es; echo $es;call xerr "$es" "attach 2-5"
2957 echo "~^attachment attribute-set ./.tattach filename tat";\
2958 read es; echo $es;call xerr "$es" "attach 2-6"
2960 "~^attachment attribute-set .tattach content-description Au2";\
2961 read es; echo $es;call xerr "$es" "attach 2-7"
2962 echo "~^attachment attribute-set-at 2 content-id <20.du@wir>";\
2963 read es; echo $es;call xerr "$es" "attach 2-8"
2965 "~^attachment attribute-set-at 2 content-type application/x-sh";\
2966 read es; echo $es;call xerr "$es" "attach 2-9"
2968 echo "~^attachment attribute ./.tattach";\
2969 read es; echo $es;call xerr "$es" "attach 2-10"
2971 echo "~^attachment attribute .tattach";\
2972 read es; echo $es;call xerr "$es" "attach 2-11"
2974 echo "~^attachment attribute tat";\
2975 read es; echo $es;call xerr "$es" "attach 2-12"
2977 echo "~^attachment attribute-at 2";\
2978 read es; echo $es;call xerr "$es" "attach 2-13"
2982 if [ "$t_remove" == "" ]
2986 echo "~^attachment remove ./.treadctl"; read es;\
2987 call xerr $es "attach 3-1"
2988 echo "~^attachment remove ./.tattach"; read es;\
2989 call xerr $es "attach 3-2"
2990 echo "~^ attachment remove ./.treadctl"; read es;\
2991 vput vexpr es substr $es 0 3
2993 xcall bail "attach 3-3"
2995 echo "~^ attachment remove ./.tattach"; read es;\
2996 vput vexpr es substr $es 0 3
2998 xcall bail "attach 3-4"
3000 echo "~^attachment list"; read es;\
3001 vput vexpr es substr $es 0 3
3003 xcall bail "attach 3-5"
3007 echo "~^attachment insert ./.tattach=latin1";\
3008 read hl; echo $hl; call xerr "$hl" "attach 4-1"
3009 echo "~^attachment insert ./.tattach=latin1";\
3010 read hl; echo $hl; call xerr "$hl" "attach 4-2"
3011 echo "~^attachment list";\
3012 read es; echo $es;call xerr "$es" "attach 4-3"
3014 echo "~^ attachment remove .tattach"; read es;\
3015 vput vexpr es substr $es 0 3
3017 xcall bail "attach 4-4 $es"
3019 echo "~^attachment remove-at T"; read es;\
3020 vput vexpr es substr $es 0 3
3022 xcall bail "attach 4-5"
3024 echo "~^attachment remove ./.tattach"; read es;\
3025 call xerr $es "attach 4-6"
3026 echo "~^attachment remove ./.tattach"; read es;\
3027 call xerr $es "attach 4-7"
3028 echo "~^ attachment remove ./.tattach"; read es;\
3029 vput vexpr es substr $es 0 3
3031 xcall bail "attach 4-8 $es"
3033 echo "~^attachment list"; read es;\
3034 vput vexpr es substr $es 0 3
3036 xcall bail "attach 4-9"
3040 echo "~^attachment insert ./.tattach=latin1";\
3041 read hl; echo $hl; call xerr "$hl" "attach 5-1"
3042 echo "~^attachment insert ./.tattach=latin1";\
3043 read hl; echo $hl; call xerr "$hl" "attach 5-2"
3044 echo "~^attachment insert ./.tattach=latin1";\
3045 read hl; echo $hl; call xerr "$hl" "attach 5-3"
3046 echo "~^attachment list";\
3047 read es; echo $es;call xerr "$es" "attach 5-4"
3050 echo "~^attachment remove-at 3"; read es;\
3051 call xerr $es "attach 5-5"
3052 echo "~^attachment remove-at 3"; read es;\
3053 vput vexpr es substr $es 0 3
3055 xcall bail "attach 5-6"
3057 echo "~^attachment remove-at 2"; read es;\
3058 call xerr $es "attach 5-7"
3059 echo "~^attachment remove-at 2"; read es;\
3060 vput vexpr es substr $es 0 3
3062 xcall bail "attach 5-8"
3064 echo "~^attachment remove-at 1"; read es;\
3065 call xerr $es "attach 5-9"
3066 echo "~^attachment remove-at 1"; read es;\
3067 vput vexpr es substr $es 0 3
3069 xcall bail "attach 5-10"
3072 echo "~^attachment list"; read es;\
3073 vput vexpr es substr $es 0 3
3075 xcall bail "attach 5-11"
3079 echo "~^attachment insert ./.tattach=latin1";\
3080 read hl; echo $hl; call xerr "$hl" "attach 6-1"
3081 echo "~^attachment insert ./.tattach=latin1";\
3082 read hl; echo $hl; call xerr "$hl" "attach 6-2"
3083 echo "~^attachment insert ./.tattach=latin1";\
3084 read hl; echo $hl; call xerr "$hl" "attach 6-3"
3085 echo "~^attachment list";\
3086 read es; echo $es;call xerr "$es" "attach 6-4"
3089 echo "~^attachment remove-at 1"; read es;\
3090 call xerr $es "attach 6-5"
3091 echo "~^attachment remove-at 1"; read es;\
3092 call xerr $es "attach 6-6"
3093 echo "~^attachment remove-at 1"; read es;\
3094 call xerr $es "attach 6-7"
3095 echo "~^attachment remove-at 1"; read es;\
3096 vput vexpr es substr $es 0 3
3098 xcall bail "attach 6-8"
3101 echo "~^attachment list"; read es;\
3102 vput vexpr es substr $es 0 3
3104 xcall bail "attach 6-9"
3116 echo on-compose-enter, mailx-command<$mailx-command>
3117 alternates alter1@exam.ple alter2@exam.ple
3119 set autocc='alter1@exam.ple alter2@exam.ple'
3120 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3121 echo mailx-subject<$mailx-subject>
3122 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3123 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3124 mailx-raw-bcc<$mailx-raw-bcc>
3125 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3126 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3129 echo on-compose-leave, mailx-command<$mailx-command>
3131 eval alternates $al alter3@exam.ple alter4@exam.ple
3133 set autobcc='alter3@exam.ple alter4@exam.ple'
3134 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3135 echo mailx-subject<$mailx-subject>
3136 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3137 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3138 mailx-raw-bcc<$mailx-raw-bcc>
3139 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3140 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3143 echo on-compose-cleanup, mailx-command<$mailx-command>
3146 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3147 echo mailx-subject<$mailx-subject>
3148 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3149 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3150 mailx-raw-bcc<$mailx-raw-bcc>
3151 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3152 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3154 wysh set on-compose-splice=t_ocs \
3155 on-compose-enter=t_oce on-compose-leave=t_ocl \
3156 on-compose-cleanup=t_occ
3160 printf 'm this-goes@nowhere\nbody\n!.\n' |
3161 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3162 -X'source ./.trc' -Smta=.
/.tsendmail.sh \
3164 ${cat} .
/.tall
>> "${MBOX}"
3165 check behave
:compose_hooks-1
0 "${MBOX}" '522535560 10101'
3168 printf 'm this-goes@nowhere\nbody\n!.\n' |
3169 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3170 -St_remove=1 -X'source ./.trc' -Smta=.
/.tsendmail.sh \
3172 ${cat} .
/.tall
>> "${MBOX}"
3173 check behave
:compose_hooks-2
0 "${MBOX}" '3654000499 12535'
3177 # Some state machine stress, shell compose hook, localopts for hook, etc.
3178 # readctl in child. ~r as HERE document
3180 printf 'm ex@am.ple\nbody\n!.\nvar t_oce t_ocs t_ocs_sh t_ocl t_occ autocc' |
3181 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3182 -Smta=.
/.tsendmail.sh \
3185 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
3188 vput vexpr es substr "$1" 0 1
3193 define read_mline_res {
3194 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3195 echo $len/$es/$^ERRNAME: $hl
3196 if [ $es -ne $^ERR-NONE ]
3197 xcall bail read_mline_res
3199 \xcall read_mline_res
3203 vput vexpr i + 1 "$2"
3205 vput vexpr j % $i 10
3212 eval \\$j _work $1 $i
3215 vput vexpr i + $i "$1"
3219 wysh set line; read line;wysh set es=$? en=$^ERRNAME ;\
3220 echo read:$es/$en: $line
3221 if [ "${es}" -ne -1 ]
3224 readctl remove $cwd/.treadctl; echo readctl remove:$?/$^ERRNAME
3229 echo "~^header list"; read hl; echo $hl;\
3230 vput vexpr es substr "$hl" 0 1
3232 xcall bail "header list"
3235 call _work 1; echo $?
3236 echo "~^header insert cc splicy diet <splice@exam.ple> spliced";\
3237 read es; echo $es; vput vexpr es substr "$es" 0 1
3239 xcall bail "be diet"
3241 echo "~^header insert cc <splice2@exam.ple>";\
3242 read es; echo $es; vput vexpr es substr "$es" 0 1
3244 xcall bail "be diet2"
3247 call _work 2; echo $?
3248 echo "~^header insert bcc juicy juice <juice@exam.ple> spliced";\
3249 read es; echo $es;vput vexpr es substr "$es" 0 1
3251 xcall bail "be juicy"
3253 echo "~^header insert bcc juice2@exam.ple";\
3254 read es; echo $es;vput vexpr es substr "$es" 0 1
3256 xcall bail "be juicy2"
3258 echo "~^header insert bcc juice3 <juice3@exam.ple>";\
3259 read es; echo $es;vput vexpr es substr "$es" 0 1
3261 xcall bail "be juicy3"
3263 echo "~^header insert bcc juice4@exam.ple";\
3264 read es; echo $es;vput vexpr es substr "$es" 0 1
3266 xcall bail "be juicy4"
3269 echo "~^header remove-at bcc 3";\
3270 read es; echo $es;vput vexpr es substr "$es" 0 1
3272 xcall bail "remove juicy5"
3274 echo "~^header remove-at bcc 2";\
3275 read es; echo $es;vput vexpr es substr "$es" 0 1
3277 xcall bail "remove juicy6"
3279 echo "~^header remove-at bcc 3";\
3280 read es; echo $es;vput vexpr es substr "$es" 0 3
3282 xcall bail "failed to remove-at"
3284 # Add duplicates which ought to be removed!
3285 echo "~^header insert bcc juice4@exam.ple";\
3286 read es; echo $es;vput vexpr es substr "$es" 0 1
3288 xcall bail "be juicy4-1"
3290 echo "~^header insert bcc juice4@exam.ple";\
3291 read es; echo $es;vput vexpr es substr "$es" 0 1
3293 xcall bail "be juicy4-2"
3295 echo "~^header insert bcc juice4@exam.ple";\
3296 read es; echo $es;vput vexpr es substr "$es" 0 1
3298 xcall bail "be juicy4-3"
3303 call _work 3; echo $?
3305 vput ! i echo just knock if you can hear me;\
3307 while [ $i -lt 24 ]; do printf "%s " $i; i=`expr $i + 1`; done;\
3309 echon shell-cmd says $?/$^ERRNAME: $i
3310 echo "~x will not become interpreted, we are reading until __EOT"
3312 read r_status; echo "~~r status output: $r_status"
3313 echo "~:echo $? $! $^ERRNAME"
3315 echo "~~r status from parent: $r_status"
3318 call _work 4; echo $?
3319 vput cwd cwd;echo cwd:$?
3320 readctl create $cwd/.treadctl ;echo readctl:$?/$^ERRNAME;\
3324 call _work 5; echo $?
3325 echo "~^header show MAILX-Command"; read es;\
3326 call xerr $es "t_header 1000"; call read_mline_res
3327 echo "~^header show MAILX-raw-TO"; read es;\
3328 call xerr $es "t_header 1001"; xcall read_mline_res
3330 echoerr IT IS WRONG IF YOU SEE THIS
3333 echo on-compose-enter, mailx-command<$mailx-command>
3334 set t_oce autobcc=oce@exam.ple
3335 alternates alter1@exam.ple alter2@exam.ple
3337 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3338 echo mailx-subject<$mailx-subject>
3339 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3340 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3341 mailx-raw-bcc<$mailx-raw-bcc>
3342 echo mailx-orig-from<$mailx-orig-from> \
3343 mailx-orig-to<$mailx-orig-to> \
3344 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3347 echo on-compose-leave, mailx-command<$mailx-command>
3348 set t_ocl autocc=ocl@exam.ple
3350 alternates alter3@exam.ple alter4@exam.ple
3352 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3353 echo mailx-subject<$mailx-subject>
3354 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3355 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3356 mailx-raw-bcc<$mailx-raw-bcc>
3357 echo mailx-orig-from<$mailx-orig-from> \
3358 mailx-orig-to<$mailx-orig-to> \
3359 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3362 echo on-compose-cleanup, mailx-command<$mailx-command>
3363 set t_occ autocc=occ@exam.ple
3366 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3367 echo mailx-subject<$mailx-subject>
3368 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3369 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3370 mailx-raw-bcc<$mailx-raw-bcc>
3371 echo mailx-orig-from<$mailx-orig-from> \
3372 mailx-orig-to<$mailx-orig-to> \
3373 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3375 wysh set on-compose-splice=t_ocs \
3376 on-compose-splice-shell="read ver;printf \"t_ocs-shell\\n\
3377 ~t shell@exam.ple\\n~:set t_ocs_sh\\n\"" \
3378 on-compose-enter=t_oce on-compose-leave=t_ocl \
3379 on-compose-cleanup=t_occ
3381 ex0_test behave
:compose_hooks-3
3382 ${cat} .
/.tnotes
>> "${MBOX}"
3384 check behave
:compose_hooks-3
- "${MBOX}" '679526364 2431'
3386 # Reply, forward, resend, Resend
3389 printf 'set from=f1@z\nm t1@z\nb1\n!.\nset from=f2@z\nm t2@z\nb2\n!.\n' |
3390 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3391 -Smta=.
/.tsendmail.sh
3394 echo start: $? $! $^ERRNAME
3396 echo File: $? $! $^ERRNAME;echo;echo
3398 this is content of reply 1
3400 echo reply 1: $? $! $^ERRNAME;echo;echo
3402 this is content of Reply 1 2
3404 echo Reply 1 2: $? $! $^ERRNAME;echo;echo
3405 forward 1 fwdex@am.ple
3406 this is content of forward 1
3408 echo forward 1: $? $! $^ERRNAME;echo;echo
3409 resend 1 2 resendex@am.ple
3410 echo resend 1 2: $? $! $^ERRNAME;echo;echo
3411 Resend 1 2 Resendex@am.ple
3412 echo Resend 1 2: $? $! $^ERRNAME;echo;echo
3414 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3415 -Smta=.
/.tsendmail.sh \
3418 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
3421 vput vexpr es substr "$1" 0 1
3426 define read_mline_res {
3427 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3428 echo mline_res:$len/$es/$^ERRNAME: $hl
3429 if [ $es -ne $^ERR-NONE ]
3430 xcall bail read_mline_res
3432 \xcall read_mline_res
3436 echo "~^header show $1"; read es;\
3437 call xerr $es "work_hl $1"; echo $1; call read_mline_res
3445 echo t_ocs version $ver
3446 echo "~^header list"; read hl; echo $hl;\
3447 echoerr the header list is $hl;\
3448 call xerr "$hl" "header list"
3449 eval vpospar set $hl
3452 echoerr IT IS WRONG IF YOU SEE THIS
3455 echo on-XY-enter, mailx-command<$mailx-command>
3456 set t_oce autobcc=oce@exam.ple
3457 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3458 echo mailx-subject<$mailx-subject>
3459 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3460 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3461 mailx-raw-bcc<$mailx-raw-bcc>
3462 echo mailx-orig-from<$mailx-orig-from> \
3463 mailx-orig-to<$mailx-orig-to> \
3464 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3467 echo on-XY-leave, mailx-command<$mailx-command>
3468 set t_ocl autocc=ocl@exam.ple
3469 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3470 echo mailx-subject<$mailx-subject>
3471 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3472 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3473 mailx-raw-bcc<$mailx-raw-bcc>
3474 echo mailx-orig-from<$mailx-orig-from> \
3475 mailx-orig-to<$mailx-orig-to> \
3476 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3479 echo on-XY-cleanup, mailx-command<$mailx-command>
3480 set t_occ autocc=occ@exam.ple
3481 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3482 echo mailx-subject<$mailx-subject>
3483 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3484 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3485 mailx-raw-bcc<$mailx-raw-bcc>
3486 echo mailx-orig-from<$mailx-orig-from> \
3487 mailx-orig-to<$mailx-orig-to> \
3488 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3490 wysh set on-compose-splice=t_ocs \
3491 on-compose-enter=t_oce on-compose-leave=t_ocl \
3492 on-compose-cleanup=t_occ \
3493 on-resend-enter=t_oce on-resend-cleanup=t_occ
3495 ex0_test behave
:compose_hooks-4
3496 ${cat} .
/.tnotes
>> "${MBOX}"
3498 check behave
:compose_hooks-4
- "${MBOX}" '3038884027 7516'
3503 t_behave_message_injections
() {
3505 TRAP_EXIT_ADDONS
="./.t*"
3507 ${cat} <<-_EOT > ./.tsendmail.sh
3509 (echo 'From Echinacea Tue Jun 20 15:54:02 2017' && ${cat} && echo
3512 chmod 0755 .
/.tsendmail.sh
3514 echo mysig
> .
/.tmysig
3516 echo some-body |
${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh \
3517 -Smessage-inject-head=head-inject \
3518 -Smessage-inject-tail=tail-inject \
3519 -Ssignature=.
/.tmysig \
3520 ex@am.ple
> .
/.tall
2>&1
3521 check behave
:message_injections-1
0 "${MBOX}" '2434746382 134'
3522 check behave
:message_injections-2
- .tall
'4294967295 0' # empty file
3524 ${cat} <<-_EOT > ./.template
3528 Subject: This subject is
3530 Body, body, body me.
3532 < .
/.template
${MAILX} ${ARGS} -t -Smta=.
/.tsendmail.sh \
3533 -Smessage-inject-head=head-inject \
3534 -Smessage-inject-tail=tail-inject \
3535 -Ssignature=.
/.tmysig \
3537 check behave
:message_injections-3
0 "${MBOX}" '3114203412 198'
3538 check behave
:message_injections-4
- .tall
'4294967295 0' # empty file
3543 t_behave_mime_types_load_control
() {
3545 TRAP_EXIT_ADDONS
="./.t*"
3547 ${cat} <<-_EOT > ./.tmts1
3548 @ application/mathml+xml mathml
3550 ${cat} <<-_EOT > ./.tmts2
3551 @ x-conference/x-cooltalk ice
3553 @ application/aga-aga aga
3556 ${cat} <<-_EOT > ./.tmts1.mathml
3557 <head>nonsense ML</head>
3559 ${cat} <<-_EOT > ./.tmts2.ice
3562 printf 'of which the c\x01rack is coming soon' > .
/.tmtsx.doom
3563 printf 'of which the c\x01rack is coming soon' > .
/.tmtsx.aga
3577 ' "${MBOX}" "${MBOX}" |
3579 -Smimetypes-load-control=f
=.
/.tmts1
,f
=.
/.tmts2 \
3581 ex0_test behave
:mime_types_load_control
3583 ${cat} "${MBOX}" >> .
/.tout
3584 check behave
:mime_types_load_control-1
- .
/.tout
'1441260727 2449'
3586 echo type |
${MAILX} ${ARGS} -R \
3587 -Smimetypes-load-control=f
=.
/.tmts1
,f
=.
/.tmts3 \
3588 -f "${MBOX}" >> .
/.tout
2>&1
3589 check behave
:mime_types_load_control-2
0 .
/.tout
'1441391438 3646'
3595 have_feat smime ||
{
3596 echo 'behave:s/mime: unsupported, skipped'
3601 TRAP_EXIT_ADDONS
="./.t.conf ./.tkey.pem ./.tcert.pem ./.tpair.pem"
3602 TRAP_EXIT_ADDONS
="${TRAP_EXIT_ADDONS} ./.VERIFY ./.DECRYPT ./.ENCRYPT"
3603 TRAP_EXIT_ADDONS
="${TRAP_EXIT_ADDONS} ./.tsendmail.sh"
3605 printf 'behave:s/mime: .. generating test key and certificate ..\n'
3606 ${cat} <<-_EOT > ./.t.conf
3609 default_keyfile = keyfile.pem
3610 distinguished_name = req_distinguished_name
3611 attributes = req_attributes
3615 [ req_distinguished_name ]
3622 emailAddress = test@localhost
3627 openssl req
-x509 -nodes -days 3650 -config .
/.t.conf \
3628 -newkey rsa
:1024 -keyout .
/.tkey.pem
-out .
/.tcert.pem
>/dev
/null
2>&1
3629 ${cat} .
/.tkey.pem .
/.tcert.pem
> .
/.tpair.pem
3632 printf 'behave:s/mime:sign/verify: '
3633 echo bla |
${MAILX} ${ARGS} \
3634 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3635 -Ssmime-sign -Sfrom=test@localhost \
3636 -s 'S/MIME test' .
/.VERIFY
3637 if [ $?
-eq 0 ]; then
3648 /^Content-Description: /{ skip = 2; print; next }
3649 /^$/{ if(skip) --skip }
3652 < .
/.VERIFY
> "${MBOX}"
3653 check behave
:s
/mime
:sign
/verify
:checksum
- "${MBOX}" '2900817158 648'
3655 printf 'behave:s/mime:sign/verify:verify '
3656 printf 'verify\nx\n' |
3658 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3659 -Ssmime-sign -Sfrom=test@localhost \
3661 -f .
/.VERIFY
>/dev
/null
2>&1
3662 if [ $?
-eq 0 ]; then
3671 printf 'behave:s/mime:sign/verify:disproof-1 '
3672 if openssl smime
-verify -CAfile .
/.tcert.pem \
3673 -in .
/.VERIFY
>/dev
/null
2>&1; then
3682 # (signing +) encryption / decryption
3683 ${cat} <<-_EOT > ./.tsendmail.sh
3685 (echo 'From Euphrasia Thu Apr 27 17:56:23 2017' && ${cat}) > ./.ENCRYPT
3687 chmod 0755 .
/.tsendmail.sh
3689 printf 'behave:s/mime:encrypt+sign: '
3692 -Ssmime-force-encryption \
3693 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3694 -Smta=.
/.tsendmail.sh \
3695 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3696 -Ssmime-sign -Sfrom=test@localhost \
3697 -s 'S/MIME test' recei@ver.com
3698 if [ $?
-eq 0 ]; then
3702 printf 'error: encrypt+sign failed\n'
3705 ${sed} -e '/^$/,$d' < .
/.ENCRYPT
> "${MBOX}"
3706 check behave
:s
/mime
:encrypt
+sign
:checksum
- "${MBOX}" '1937410597 327'
3708 printf 'behave:s/mime:decrypt+verify: '
3709 printf 'decrypt ./.DECRYPT\nfi ./.DECRYPT\nverify\nx\n' |
3711 -Ssmime-force-encryption \
3712 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3713 -Smta=.
/.tsendmail.sh \
3714 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3715 -Ssmime-sign -Sfrom=test@localhost \
3717 -f .
/.ENCRYPT
>/dev
/null
2>&1
3718 if [ $?
-eq 0 ]; then
3727 /^Content-Description: /{ skip = 2; print; next }
3728 /^$/{ if(skip) --skip }
3731 < .
/.DECRYPT
> "${MBOX}"
3732 check behave
:s
/mime
:decrypt
+verify
:checksum
- "${MBOX}" '1720739247 931'
3734 printf 'behave:s/mime:decrypt+verify:disproof-1: '
3735 if (openssl smime
-decrypt -inkey .
/.tkey.pem
-in .
/.ENCRYPT |
3736 openssl smime
-verify -CAfile .
/.tcert.pem
) >/dev
/null
2>&1; then
3743 printf "behave:s/mime:encrypt: "
3744 echo bla |
${MAILX} ${ARGS} \
3745 -Ssmime-force-encryption \
3746 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3747 -Smta=.
/.tsendmail.sh \
3748 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3749 -Sfrom=test@localhost \
3750 -s 'S/MIME test' recei@ver.com
3751 if [ $?
-eq 0 ]; then
3758 # Same as behave:s/mime:encrypt+sign:checksum above
3759 ${sed} -e '/^$/,$d' < .
/.ENCRYPT
> "${MBOX}"
3760 check behave
:s
/mime
:encrypt
:checksum
- "${MBOX}" '1937410597 327'
3763 printf 'decrypt ./.DECRYPT\nx\n' |
${MAILX} ${ARGS} \
3764 -Ssmime-force-encryption \
3765 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3766 -Smta=.
/.tsendmail.sh \
3767 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3768 -Sfrom=test@localhost \
3770 -f .
/.ENCRYPT
>/dev
/null
2>&1
3771 check behave
:s
/mime
:decrypt
0 "./.DECRYPT" '2624716890 422'
3773 printf 'behave:s/mime:decrypt:disproof-1: '
3774 if openssl smime
-decrypt -inkey .
/.tkey.pem \
3775 -in .
/.ENCRYPT
>/dev
/null
2>&1; then
3785 t_behave_maildir
() {
3787 TRAP_EXIT_ADDONS
="./.t*"
3791 while [ ${i} -lt 112 ]; do
3792 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
3793 "${MBOX}" "${i}" "${i}"
3796 ) |
${MAILX} ${ARGS}
3797 check behave
:maildir-1
0 "${MBOX}" '1140119864 13780'
3803 ' "${MBOX}" .tmdir1 .tmdir1 |
3804 ${MAILX} ${ARGS} -Snewfolders=maildir
> .tlst
3805 check behave
:maildir-2
0 .tlst
'1797938753 9103'
3808 copy * "maildir://%s"
3811 ' "${MBOX}" .tmdir2 .tmdir2 |
3812 ${MAILX} ${ARGS} > .tlst
3813 check behave
:maildir-3
0 .tlst
'1155631089 9113'
3815 printf 'File "maildir://%s"
3819 ' .tmdir2 .tmbox1 .tmbox1 |
3820 ${MAILX} ${ARGS} > .tlst
3821 check behave
:maildir-4
0 .tmbox1
'2646131190 13220'
3822 check behave
:maildir-5
- .tlst
'3701297796 9110'
3824 # only the odd (even)
3826 printf 'File "maildir://%s"
3829 while [ ${i} -lt 112 ]; do
3831 [ ${j} -eq 1 ] && printf '%s ' "${i}"
3838 ) |
${MAILX} ${ARGS} > .tlst
3839 check behave
:maildir-6
0 .tmbox2
'142890131 6610'
3840 check behave
:maildir-7
- .tlst
'960096773 4573'
3843 printf 'file "maildir://%s"
3846 while [ ${i} -lt 112 ]; do
3848 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
3856 ' .tmbox2 .tmbox2 .tmdir2
3857 ) | ${MAILX} ${ARGS} > .tlst
3858 check behave:maildir-8 0 .tmbox2 '3806905791 13100'
3859 ${sed} 2d < .tlst > .tlstx
3860 check behave:maildir-9 - .tlstx '4216815295 13645'
3865 t_behave_mass_recipients() {
3867 TRAP_EXIT_ADDONS=".
/.t
*"
3869 ${cat} <<-_EOT > ./.tsendmail.sh
3871 (echo 'From Eucalyptus Sat Jul 08 21:14:57 2017' && ${cat} && echo
3874 chmod 0755 ./.tsendmail.sh
3876 ${cat} <<'__EOT__' > ./.trc
3878 echoerr "Failed
: $1. Bailing out
"; echo "~x
"; xit
3881 wysh set nr=$1 hn=$2
3882 echo "~
$hn $hn$nr@
$hn"; echo '~:echo $?'; read es
3884 xcall bail "ins_addr
$hn 1-$nr"
3886 vput vexpr nr + $nr 1
3887 if [ "$nr" -le "$maximum" ]
3888 xcall ins_addr $nr $hn
3892 wysh set nr=$1 hn=$2
3893 alternates $hn$nr@$hn
3894 vput vexpr nr + $nr 2
3895 if [ "$nr" -le "$maximum" ]
3896 xcall bld_alter $nr $hn
3906 if [ "$t_remove" != '' ]
3911 set on-compose-splice=t_ocs on-compose-leave=t_ocl
3915 printf 'm this-goes@nowhere\nbody\n!.\n' |
3916 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3917 -X'source ./.trc' -Smta=./.tsendmail.sh -Smaximum=2001 \
3919 ${cat} ./.tall >> "${MBOX}"
3920 check behave:mass_recipients-1 0 "${MBOX}" '2912243346 51526'
3923 printf 'm this-goes@nowhere\nbody\n!.\n' |
3924 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3925 -St_remove=1 -X'source ./.trc' -Smta=./.tsendmail.sh -Smaximum=2001 \
3927 ${cat} ./.tall >> "${MBOX}"
3928 check behave:mass_recipients-2 0 "${MBOX}" '4097804632 34394'
3933 t_behave_lreply_futh_rth_etc() {
3935 TRAP_EXIT_ADDONS=".
/.t
*"
3937 ${cat} <<-_EOT > ./.tsendmail.sh
3939 (echo 'From HumulusLupulus Thu Jul 27 14:41:20 2017' && ${cat} && echo
3942 chmod 0755 ./.tsendmail.sh
3944 ${cat} <<-_EOT > ./.tmbox
3945 From neverneverland Sun Jul 23 13:46:25 2017
3946 Subject: Bugstop: five miles out 1
3947 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
3948 From: mister originator <mr@originator>
3949 To: bugstop-commit@five.miles.out, laber@backe.eu
3951 Mail-Followup-To: bugstop@five.miles.out, laber@backe.eu, is@a.list
3952 In-reply-to: <20170719111113.bkcMz%laber@backe.eu>
3953 Date: Wed, 19 Jul 2017 09:22:57 -0400
3954 Message-Id: <20170719132257.766AF781267@originator>
3957 > |Sorry, I think I misunderstand something. I would think that
3961 From neverneverland Fri Jul 7 22:39:11 2017
3962 Subject: Bugstop: five miles out 2
3963 Reply-To: mister originator2<mr2@originator>,bugstop@five.miles.out,is@a.list
3964 Content-Transfer-Encoding: 7bit
3965 From: mister originator <mr@originator>
3966 To: bugstop-commit@five.miles.out
3968 Message-ID: <149945963975.28888.6950788126957753723.reportbug@five.miles.out>
3969 Date: Fri, 07 Jul 2017 16:33:59 -0400
3972 capable of changing back.
3974 From neverneverland Fri Jul 7 22:42:00 2017
3975 Subject: Bugstop: five miles out 3
3976 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
3977 Content-Transfer-Encoding: 7bit
3978 From: mister originator <mr@originator>
3979 To: bugstop-commit@five.miles.out
3981 Message-ID: <149945963975.28888.6950788126957753746.reportbug@five.miles.out>
3982 Date: Fri, 07 Jul 2017 16:33:59 -0400
3983 List-Post: <mailto:bugstop@five.miles.out>
3986 are you ready, boots?
3988 From neverneverland Sat Aug 19 23:15:00 2017
3989 Subject: Bugstop: five miles out 4
3990 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
3991 Content-Transfer-Encoding: 7bit
3992 From: mister originator <mr@originator>
3993 To: bugstop@five.miles.out
3995 Message-ID: <149945963975.28888.6950788126qtewrqwer.reportbug@five.miles.out>
3996 Date: Fri, 07 Jul 2017 16:33:59 -0400
3997 List-Post: <mailto:bugstop@five.miles.out>
4000 are you ready, boots?
4005 ${cat} <<-'_EOT' | ${MAILX} ${ARGS} -Sescape=! -Smta=./.tsendmail.sh \
4006 -Rf ./.tmbox >> "${MBOX}" 2>&1
4008 wysh set m="This is text of
\"reply
${1}.
"
4019 echo -----After reply
$1.1
- $1.3
: $?
/$^ERRNAME
4022 wysh
set m
="This is text of \"Reply ${1}."
4028 echo -----After Reply $1.$2: $?/$^ERRNAME
4037 wysh set m="This is text of \"Lreply ${1}." on-compose-splice=_Lh n=$2
4041 # We need two indirections for this test: one for the case that Lreply
4042 # fails because of missing recipients: we need to read EOF next, thus
4043 # place this in _Ls last; and second for the succeeding cases EOF is
4044 # not what these should read, so go over the backside and splice it in!
4046 echo -----After Lreply $1.$2: $?/$^ERRNAME
4049 localopts call-fixate yes
4051 call R $1 1; call R $1 2; call R $1 3; call R $1 4
4052 call L $1 1; call L $1 2; call L $1 3
4055 echo;echo '===== CHANGING
=== '"$*"' =====';echo
4059 set from=laber@backe.eu
4062 call tweak set reply-to-honour
4064 call tweak set followup-to
4066 call tweak set followup-to-honour
4068 call tweak mlist bugstop@five.miles.out
4070 call tweak mlsubscribe bugstop@five.miles.out
4072 call tweak set recipients-in-cc
4076 check behave:lreply_futh_rth_etc 0 "${MBOX}" '940818845 29373'
4081 t_behave_iconv_mbyte_base64() {
4083 TRAP_EXIT_ADDONS="./.t*"
4085 if [ -n "${UTF8_LOCALE}" ] && have_feat iconv &&
4086 command -v iconv >/dev/null 2>&1 &&
4087 ( iconv -l | ${grep} -i -e iso-2022-jp -e euc-jp) >/dev/null 2>&1; then
4090 echo 'behave
:iconv_mbyte_base64
: unsupported
, skipped
'
4094 ${cat} <<-_EOT > ./.tsendmail.sh
4096 (echo 'From DroseriaRotundifolia Thu Aug
03 17:26:25 2017' && ${cat} &&
4099 chmod 0755 ./.tsendmail.sh
4101 if ( iconv -l | ${grep} -i iso-2022-jp ) >/dev/null 2>&1; then
4103 set ttycharset
=utf-8 sendcharsets
=iso-2022-jp
4105 !s Japanese from UTF-8 to ISO-2022-JP
4106 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの
1種をシジュウカラと呼ぶ。
4108 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4111 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4113 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの
1種をシジュウカラと呼ぶ。
4116 set ttycharset
=iso-2022-jp charset-7bit
=iso-2022-jp sendcharsets
=utf-8
4118 !s Japanese from ISO-2022-JP to UTF-8
, eh
, no
, also ISO-2022-JP
4119 \e$B%%7%%8%%e
%%&%%+%%i2J
!J
%%7%%8%%e
%%&%%+%%i$
+!"3XL>\e(B Paridae\e$B!K$O!"D
;N
`%%9%%:%%aL\\$N2J$G$"$k!#%%7%%8%%e%%&%%+%%i!J;M==?}!K$HAm>N$5$l$k$,!"695A$K$O$3$N\e(B1\e$B<o$r%%7%%8%%e%%&%%+%%i$H8F$V!#\e(B
4121 \e$B%%+%%s%%`%%j
%%,%%i
!J3XL
>\e(BParus cristatus
\e$B!K
$O!"%%9%%:%%aL\\%%7%%8%%e%%&%%+%%i2J$KJ,N`$5$l$kD;N`$N0l<o!#\e(B
4124 \e$B%%+%%s%%`%%j%%,%%i!J3XL>\e(BParus cristatus\e$B!K$O!"%%9%%:%%aL
\\%%7%%8%%e
%%&%%+%%i2J
$KJ,N
`$5$l$kD;N`$N0l<o
!#\e(B
4126 \e$B%%7%%8%%e
%%&%%+%%i2J
!J
%%7%%8%%e
%%&%%+%%i$
+!"3XL>\e(B Paridae\e$B!K$O!"D
;N
`%%9%%:%%aL\\$N2J$G$"$k!#%%7%%8%%e%%&%%+%%i!J;M==?}!K$HAm>N$5$l$k$,!"695A$K$O$3$N\e(B1\e$B<o$r%%7%%8%%e%%&%%+%%i$H8F$V!#\e(B
4128 ' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} -Smta=./.tsendmail.sh \
4129 -Sescape=! -Smime-encoding=base64 2>./.terr
4130 check behave:iconv_mbyte_base64-1 0 "${MBOX}" '3428985079 1976'
4131 check behave:iconv_mbyte_base64-2 - ./.terr '4294967295 0'
4133 printf 'eval f 1; write ./.twrite\n' |
4134 ${MAILX} ${ARGS} ${ADDARG_UNI} -Rf "${MBOX}" >./.tlog 2>&1
4135 check behave:iconv_mbyte_base64-3 0 ./.twrite '1259742080 686'
4136 check behave:iconv_mbyte_base64-4 - ./.tlog '3956097665 119'
4138 echo 'behave:iconv_mbyte_base64: ISO-2022-JP unsupported, skipping 1-4'
4141 if ( iconv -l | ${grep} -i euc-jp ) >/dev/null 2>&1; then
4142 rm -f "${MBOX}" ./.twrite
4144 set ttycharset=utf-8 sendcharsets=euc-jp
4146 !s Japanese from UTF-8 to EUC-JP
4147 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4149 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4152 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4154 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4157 set ttycharset=EUC-JP sendcharsets=utf-8
4159 !s Japanese from EUC-JP to UTF-8
4160 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4162 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4165 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4167 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4169 ' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} -Smta=./.tsendmail.sh \
4170 -Sescape=! -Smime-encoding=base64 2>./.terr
4171 check behave:iconv_mbyte_base64-5 0 "${MBOX}" '1686827547 2051'
4172 check behave:iconv_mbyte_base64-6 - ./.terr '4294967295 0'
4174 printf 'eval f 1; write ./.twrite\n' |
4175 ${MAILX} ${ARGS} ${ADDARG_UNI} -Rf "${MBOX}" >./.tlog 2>&1
4176 check behave:iconv_mbyte_base64-7 0 ./.twrite '1259742080 686'
4177 check behave:iconv_mbyte_base64-8 - ./.tlog '500059195 119'
4179 echo 'behave:iconv_mbyte_base64: EUC-JP unsupported, skipping 5-8'
4186 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
4187 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
4188 # Note we unfortunately need to place some statements without proper
4189 # indentation because of continuation problems
4193 # MIME encoding (QP) stress message body
4195 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
4196 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
4197 "wasde willst, gelle, gelle, gelle, gelle, gelle.\r\n"\
4198 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst \r\n"\
4199 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1\r\n"\
4200 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12\r\n"\
4201 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123\r\n"\
4202 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234\r\n"\
4203 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345\r\n"\
4204 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456\r\n"\
4205 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234567\r\n"\
4206 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345678\r\n"\
4207 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456789\r\n"\
4208 "Unn ausserdem habe ich trailing SP/HT/SP/HT whitespace \r\n"\
4209 "Unn ausserdem habe ich trailing HT/SP/HT/SP whitespace \r\n"\
4210 "auf den zeilen vorher.\r\n"\
4211 "From am Zeilenbeginn und From der Mitte gibt es auch.\r\n"\
4213 "Die letzte Zeile war nur ein Punkt.\r\n"\
4215 "Das waren deren zwei.\r\n"\
4217 "Die letzte Zeile war ein Leerschritt.\n"\
4218 "=VIER = EQUAL SIGNS=ON A LINE=\r\n"\
4221 "Die letzte Zeile war nur ein Punkt, mit Unix Zeilenende.\n"\
4223 "Das waren deren zwei. ditto.\n"\
4225 "Unn ausseerdem habe ich trailing SP/HT/SP/HT whitespace \n"\
4226 "Unn ausseerdem habe ich trailing HT/SP/HT/SP whitespace \n"\
4227 "auf den zeilen vorher.\n"\
4229 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.\n"\
4230 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.1"\
4232 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4234 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4236 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4238 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4240 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4242 "QP am Zeilenende über soft-nl hinweg\n"\
4243 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4245 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4247 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4249 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4251 "=VIER = EQUAL SIGNS=ON A LINE=\n"\
4253 "Die letzte Zeile war ein Leerschritt.\n"\
4257 # MIME encoding (QP) stress message subject
4258 SUB="Äbrä Kä?dä=brö Fü?di=bus? \
4259 adadaddsssssssddddddddddddddddddddd\
4260 ddddddddddddddddddddddddddddddddddd\
4261 ddddddddddddddddddddddddddddddddddd\
4262 dddddddddddddddddddd Hallelulja? Od\
4263 er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee\
4264 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\
4265 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f\
4266 fffffffffffffffffffffffffffffffffff\
4267 fffffffffffffffffffff ggggggggggggg\
4268 ggggggggggggggggggggggggggggggggggg\
4269 ggggggggggggggggggggggggggggggggggg\
4270 ggggggggggggggggggggggggggggggggggg\
4273 # Three tests for MIME encoding and (a bit) content classification.
4274 # At the same time testing -q FILE, < FILE and -t FILE
4277 < "${BODY}" ${MAILX} ${ARGS} ${ADDARG_UNI} \
4278 -a "${BODY}" -s "${SUB}" "${MBOX}"
4279 check content:001 0 "${MBOX}" '1145066634 6654'
4282 < /dev/null ${MAILX} ${ARGS} ${ADDARG_UNI} \
4283 -a "${BODY}" -s "${SUB}" -q "${BODY}" "${MBOX}"
4284 check content:002 0 "${MBOX}" '1145066634 6654'
4287 ( echo "To: ${MBOX}" && echo "Subject: ${SUB}" && echo &&
4289 ) | ${MAILX} ${ARGS} ${ADDARG_UNI} -Snodot -a "${BODY}" -t
4290 check content:003 0 "${MBOX}" '1145066634 6654'
4292 # Test for [260e19d] (Juergen Daubert)
4294 echo body | ${MAILX} ${ARGS} "${MBOX}"
4295 check content:004 0 "${MBOX}" '2917662811 98'
4297 # Sending of multiple mails in a single invocation
4299 ( printf "m ${MBOX}\n~s subject1\nE-Mail Körper 1\n~.\n" &&
4300 printf "m ${MBOX}\n~s subject2\nEmail body 2\n~.\n" &&
4302 ) | ${MAILX} ${ARGS} ${ADDARG_UNI}
4303 check content:005 0 "${MBOX}" '2098659767 358'
4307 # "Test for" [d6f316a] (Gavin Troy)
4309 printf "m ${MBOX}\n~s subject1\nEmail body\n~.\nfi ${MBOX}\np\nx\n" |
4310 ${MAILX} ${ARGS} ${ADDARG_UNI} -Spipe-text/plain="@* ${cat}" > "${BODY}"
4311 check content:006 0 "${MBOX}" '2099098650 122'
4312 check content:006-1 - "${BODY}" '794542938 174'
4314 # "Test for" [c299c45] (Peter Hofmann) TODO shouldn't end up QP-encoded?
4317 for(i = 0; i < 10000; ++i)
4319 #printf "\xF0\x90\x87\x90"
4320 }' | ${MAILX} ${ARGS} ${ADDARG_UNI} -s TestSubject "${MBOX}"
4321 check content:007 0 "${MBOX}" '534262374 61816'
4323 ## Test some more corner cases for header bodies (as good as we can today) ##
4327 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4328 -s 'a̲b̲c̲d̲e̲f̲h̲i̲k̲l̲m̲n̲o̲r̲s̲t̲u̲v̲w̲x̲z̲a̲b̲c̲d̲e̲f̲h̲i̲k̲l̲m̲n̲o̲r̲s̲t̲u̲v̲w̲x̲z̲' \
4330 check content:008 0 "${MBOX}" '3370931614 375'
4332 # Single word (overlong line split -- bad standard! Requires injection of
4333 # artificial data!! But can be prevented by using RFC 2047 encoding)
4335 i=`${awk} 'BEGIN{for(i=0; i<92; ++i) printf "0123456789_"}'`
4336 echo | ${MAILX} ${ARGS} -s "${i}" "${MBOX}"
4337 check content:009 0 "${MBOX}" '489922370 1718'
4339 # Combination of encoded words, space and tabs of varying sort
4341 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4342 -s "1Abrä Kaspas1 2Abra Katä b_kaspas2 \
4343 3Abrä Kaspas3 4Abrä Kaspas4 5Abrä Kaspas5 \
4344 6Abra Kaspas6 7Abrä Kaspas7 8Abra Kaspas8 \
4345 9Abra Kaspastäb4-3 10Abra Kaspas1 _ 11Abra Katäb1 \
4346 12Abra Kadabrä1 After Tab after Täb this is NUTS" \
4348 check content:010 0 "${MBOX}" '1676887734 591'
4350 # Overlong multibyte sequence that must be forcefully split
4351 # todo This works even before v15.0, but only by accident
4353 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4354 -s "✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4355 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4356 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄" \
4358 check content:011 0 "${MBOX}" '3029301775 659'
4362 echo | ${MAILX} ${ARGS} \
4363 -s "1-1 B2 B3 B4 B5 B6 B\
4364 1-2 B2 B3 B4 B5 B6 B\
4365 1-3 B2 B3 B4 B5 B6 B\
4366 1-4 B2 B3 B4 B5 B6 B\
4367 1-5 B2 B3 B4 B5 B6 B\
4368 1-6 B2 B3 B4 B5 B6 " \
4370 check content:012 0 "${MBOX}" '4126167195 297'
4372 # Leading and trailing WS
4374 echo | ${MAILX} ${ARGS} \
4375 -s " 2-1 B2 B3 B4 B5 B6 B\
4376 1-2 B2 B3 B4 B5 B6 B\
4377 1-3 B2 B3 B4 B5 B6 B\
4378 1-4 B2 B3 B4 B5 B6 " \
4380 check content:013 0 "${MBOX}" '3600624479 236'
4382 # Quick'n dirty RFC 2231 test; i had more when implementing it, but until we
4383 # have a (better) test framework materialize a quick shot
4385 TRAP_EXIT_ADDONS=./.ttt
4387 mkdir ./.ttt || exit 1
4391 : > 'diet\ is \curd.txt'
4392 : > 'diet "is" curd.txt'
4394 : > höde__tröge__müde__dätte__hätte__vülle__gülle__äse__äße__säuerliche__kräuter__österliche__grüße__mäh.txt
4395 : > höde__tröge__müde__dätte__hätte__vuelle__guelle__aese__aesse__sauerliche__kräuter__österliche__grüße__mäh.txt
4396 : > hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt
4397 : > ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
4399 echo bla | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4400 -a "./.ttt/ma'ger.txt" -a "./.ttt/mä'ger.txt" \
4401 -a './.ttt/diet\ is \curd.txt' -a './.ttt/diet "is" curd.txt' \
4402 -a ./.ttt/höde-tröge.txt \
4403 -a ./.ttt/höde__tröge__müde__dätte__hätte__vülle__gülle__äse__äße__säuerliche__kräuter__österliche__grüße__mäh.txt \
4404 -a ./.ttt/höde__tröge__müde__dätte__hätte__vuelle__guelle__aese__aesse__sauerliche__kräuter__österliche__grüße__mäh.txt \
4405 -a ./.ttt/hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt \
4406 -a ./.ttt/✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt \
4408 check content:014-1 0 "${MBOX}" '684985954 3092'
4410 # `resend
' test, reusing $MBOX
4412 printf "Resend ${BODY}\nx\n" | ${MAILX} ${ARGS} -Rf "${MBOX}"
4413 check content:014-2 0 "${BODY}" '684985954 3092'
4416 printf "resend ${BODY}\nx\n" | ${MAILX} ${ARGS} -Rf "${MBOX}"
4417 check content:014-3 0 "${BODY}" '3130352658 3148'
4423 # if have_feat devel; then
4424 # ARGS="${ARGS} -Smemdebug"
4428 if [ -n "${UTF8_LOCALE}" ]; then
4429 printf 'Using Unicode locale
%s
\n' "${UTF8_LOCALE}"
4431 printf 'No Unicode locale found
, disabling Unicode tests
\n'
4438 if [ -z "${CHECK_ONLY}" ]; then
4444 [ ${ESTAT} -eq 0 ] && echo Ok || echo >&2 'Errors occurred
'