2 #@ Synopsis: ./cc-test.sh [--check-only s-mailx-binary]
3 #@ ./cc-test.sh --mae-test s-mailx-binary [:TESTNAME:]
4 #@ The latter generates output files.
5 #@ TODO _All_ the tests should happen in a temporary subdir.
8 # Instead of figuring out the environment in here, require a configured build
9 # system and include that! Our makefile and configure ensure that this test
10 # does not run in the configured, but the user environment nonetheless!
11 if [ -f .
/mk-config.ev
]; then
13 if [ -z "${MAILX__CC_TEST_RUNNING}" ]; then
14 MAILX__CC_TEST_RUNNING
=1
15 export MAILX__CC_TEST_RUNNING
16 exec "${SHELL}" "${0}" "${@}"
19 echo >&2 'S-nail/S-mailx is not configured.'
20 echo >&2 'This test script requires the shell environment that only the'
21 echo >&2 'configuration script can figure out, even if it will be used to'
22 echo >&2 'test a different binary than the one that would be produced!'
26 # We need *stealthmua* regardless of $SOURCE_DATE_EPOCH, the program name as
27 # such is a compile-time variable
28 ARGS
='-:/ -# -Sdotlock-ignore-error -Sexpandaddr=restrict'
29 ARGS
="${ARGS}"' -Smime-encoding=quoted-printable -Snosave -Sstealthmua'
30 ADDARG_UNI
=-Sttycharset=UTF-8
35 #UTF8_LOCALE= autodetected unless set
37 # Note valgrind has problems with FDs in forked childs, which causes some tests
38 # to fail (the FD is rewound and thus will be dumped twice)
40 #MEMTESTER='valgrind --leak-check=full --log-file=.vl-%p '
42 ## -- (>8 -- 8<) -- ##
44 ( set -o noglob
) >/dev
/null
2>&1 && noglob_shell
=1 ||
unset noglob_shell
49 printf >&2 -- "${fmt}\\n" "${@}"
54 export ARGS ADDARG_UNI CONF BODY MBOX MAIL MAKE
awk cat cksum rm sed grep
58 # Wed Oct 2 01:50:07 UTC 1996
59 SOURCE_DATE_EPOCH
=844221007
61 export LC_ALL LANG TZ SOURCE_DATE_EPOCH
62 unset POSIXLY_CORRECT LOGNAME USER
65 echo >&2 "Synopsis: ./cc-test.sh [--check-only s-mailx-binary]"
66 echo >&2 "Synopsis: ./cc-test.sh --mae-test s-mailx-binary [:TESTNAME:]"
70 CHECK_ONLY
= MAE_TEST
= MAILX
=
71 if [ "${1}" = --check-only ]; then
74 [ -x "${MAILX}" ] || usage
76 elif [ "${1}" = --mae-test ]; then
79 [ -x "${MAILX}" ] || usage
83 MAILX
="${MEMTESTER}${MAILX}"
86 if [ -n "${CHECK_ONLY}${MAE_TEST}" ] && [ -z "${UTF8_LOCALE}" ]; then
87 # Try ourselfs for nl_langinfo(CODESET) output first (requires a new version)
88 i
=`LC_ALL=C.utf8 "${RAWMAILX}" ${ARGS} -X '
90 \if [ "${ttycharset}" @i=% utf ]
97 \eval xcall cset_test "${@}"
101 \call cset_test C.UTF-8 POSIX.utf8 POSIX.UTF-8 en_EN.utf8 en_EN.UTF-8 \
102 en_US.utf8 en_US.UTF-8
104 [ $?
-eq 0 ] && UTF8_LOCALE
=$i
106 if [ -z "${UTF8_LOCALE}" ] && (locale yesexpr
) >/dev
/null
2>&1; then
107 UTF8_LOCALE
=`locale -a | { m=
109 if { echo ${n} | ${grep} -i 'utf-\{0,1\}8'; } >/dev/null 2>&1; then
111 if { echo ${n} | ${grep} -e POSIX -e en_EN -e en_US; }; then
125 trap "${rm} -rf \"${BODY}\" \"${MBOX}\" \${TRAP_EXIT_ADDONS}" EXIT
126 trap "exit 1" HUP INT TERM
129 # Test all configs TODO doesn't cover all *combinations*, stupid!
133 NOTME["OPT_AUTOCC"] = 1
134 NOTME["OPT_DEBUG"] = 1
135 NOTME["OPT_DEVEL"] = 1
136 NOTME["OPT_NOEXTMD5"] = 1
137 NOTME["OPT_ASAN_ADDRESS"] = 1
138 NOTME["OPT_ASAN_MEMORY"] = 1
139 NOTME["OPT_FORCED_STACKPROT"] = 1
140 NOTME["OPT_NOMEMDBG"] = 1
141 NOTME["OPT_NYD2"] = 1
144 /^[[:space:]]*OPT_/ {
145 sub(/^[[:space:]]*/, "")
146 # This bails for UnixWare 7.1.4 awk(1), but preceeding = with \
147 # does not seem to be a compliant escape for =
149 $1 = substr($1, 1, index($1, "=") - 1)
155 # Doing this completely sequentially and not doing make distclean in
156 # between runs should effectively result in lesser compilations.
157 # It is completely dumb nonetheless... TODO
158 for (j = 1; j < i; ++j) {
159 for (k = 1; k < j; ++k)
161 for (k = j; k < i; ++k)
163 printf "OPT_AUTOCC=1\n"
165 for (j = 1; j < i; ++j) {
166 for (k = 1; k < j; ++k)
168 for (k = j; k < i; ++k)
170 printf "OPT_AUTOCC=1\n"
173 for (j = 1; j < i; ++j) {
174 for (k = 1; k < j; ++k)
176 for (k = j; k < i; ++k)
178 printf "OPT_AUTOCC=1\n"
179 printf "OPT_DEBUG=1\n"
181 for (j = 1; j < i; ++j) {
182 for (k = 1; k < j; ++k)
184 for (k = j; k < i; ++k)
186 printf "OPT_AUTOCC=1\n"
187 printf "OPT_DEBUG=1\n"
190 printf "CONFIG=NULL OPT_AUTOCC=0\n"
191 printf "CONFIG=NULL OPT_AUTOCC=1\n"
192 printf "CONFIG=NULLI OPT_AUTOCC=0\n"
193 printf "CONFIG=NULLI OPT_AUTOCC=1\n"
194 printf "CONFIG=MINIMAL OPT_AUTOCC=0\n"
195 printf "CONFIG=MINIMAL OPT_AUTOCC=1\n"
196 printf "CONFIG=NETSEND OPT_AUTOCC=0\n"
197 printf "CONFIG=NETSEND OPT_AUTOCC=1\n"
198 printf "CONFIG=MAXIMAL OPT_AUTOCC=0\n"
199 printf "CONFIG=MAXIMAL OPT_AUTOCC=1\n"
200 printf "CONFIG=DEVEL OPT_AUTOCC=0\n"
201 printf "CONFIG=DEVEL OPT_AUTOCC=1\n"
202 printf "CONFIG=ODEVEL OPT_AUTOCC=0\n"
203 printf "CONFIG=ODEVEL OPT_AUTOCC=1\n"
206 printf "\n\n##########\n$c\n"
207 printf "\n\n##########\n$c\n" >&2
208 sh
-c "${MAKE} ${c} all test"
214 ( "${RAWMAILX}" ${ARGS} -X'echo $features' -Xx |
215 ${grep} +${1} ) >/dev
/null
2>&1
219 ${rm} -rf "${BODY}" "${MBOX}" ${TRAP_EXIT_ADDONS}
221 [ ${#} -gt 0 ] && printf '[%s]\n' "${1}"
228 restat
=${?} tid=${1} eestat=${2} f=${3} s=${4}
229 [ "${eestat}" != - ] && [ "${restat}" != "${eestat}" ] &&
230 err
"${tid}" 'unexpected exit status: '"${restat} != ${eestat}"
231 csum
="`${cksum} < ${f}`"
232 if [ "${csum}" = "${s}" ]; then
233 printf '%s: ok\n' "${tid}"
236 printf '%s: error: checksum mismatch (got %s)\n' "${tid}" "${csum}"
238 if [ -n "${MAE_TEST}" ]; then
239 x
=`echo ${tid} | ${tr} "/:=" "__-"`
240 ${cp} -f "${f}" ./mae-test-"${x}"
246 printf '%s: error: %s\n' ${1} "${2}"
250 # $1=test name [$2=status]
252 [ ${#} -gt 1 ] && __qm__=${2}
253 if [ ${__qm__} -ne 0 ]; then
254 err $1 'unexpected non-0 exit status'
256 printf '%s: ok\n' "${1}"
261 # $1=test name [$2=status]
263 [ ${#} -gt 1 ] && __qm__=${2}
264 if [ ${__qm__} -eq 0 ]; then
265 err $1 'unexpected 0 exit status'
267 printf '%s: ok\n' "${1}"
271 if ( [ "$
((1 + 1))" = 2 ] ) >/dev/null 2>&1; then
273 echo "$
((${1} + ${2}))"
277 echo `${awk} 'BEGIN{print '${1}' + '${2}'}'`
281 if ( [ "$
((2 % 3))" = 2 ] ) >/dev/null 2>&1; then
283 echo "$
((${1} % ${2}))"
287 echo `${awk} 'BEGIN{print '${1}' % '${2}'}'`
292 # Basic (easily testable) behaviour tests
294 t_behave_X_opt_input_command_stack
298 t_behave_input_inject_semicolon_seq
299 t_behave_commandalias
303 t_behave_macro_param_shift
314 t_behave_record_a_resend
319 # FIXME t_behave_mlist
322 t_behave_message_injections
323 t_behave_compose_hooks
324 t_behave_mass_recipients
325 t_behave_mime_types_load_control
326 t_behave_lreply_futh_rth_etc
328 t_behave_xxxheads_rfc2047
330 t_behave_iconv_mbyte_base64
331 t_behave_iconv_mainbody
332 t_behave_q_t_etc_opts
337 t_behave_X_opt_input_command_stack() {
338 t_prolog t_behave_X_opt_input_command_stack
340 ${cat} <<- '__EOT' > "${BODY}"
348 echo "define mac1
{";\
349 echo " echo mac1-1 via1 \
$0";\
351 echo " echo mac1-2
";\
353 echo " echo mac1-3
";\
356 echo "define mac2
{";\
357 echo " echo mac2-1 via1 \
$0";\
359 echo " echo mac2-2
";\
365 echo echo 1-1-1 via1 \
$0;\
377 # The -X option supports multiline arguments, and those can internally use
378 # reverse solidus newline escaping. And all -X options are joined...
380 < "${BODY}" ${MAILX} ${ARGS} \
395 echo "define mac1 {";\
396 echo " echo mac1-1 via2 \$0";\
398 echo " echo mac1-2";\
400 echo " echo mac1-3";\
403 echo "define mac2 {";\
404 echo " echo mac2-1 via2 \$0";\
406 echo " echo mac2-2";\
412 echo echo 1-1-1 via2 \$0;\
426 check behave
:x_opt_input_command_stack
0 "${MBOX}" '1786542668 416'
431 t_behave_X_errexit
() {
432 t_prolog t_behave_X_errexit
434 ${cat} <<- '__EOT' > "${BODY}"
440 </dev/null ${MAILX} ${ARGS} -Snomemdebug \
441 -X'echo one' -X' echos nono ' -X'echo two' \
443 check behave:x_errexit-1 0 "${MBOX}" '916157812 53'
445 </dev/null ${MAILX} ${ARGS} -X'source '"${BODY}" -Snomemdebug \
447 check behave:x_errexit-2 0 "${MBOX}" '916157812 53'
449 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Snomemdebug \
451 check behave
:x_errexit-3
0 "${MBOX}" '916157812 53'
455 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
456 -X'echo one' -X' echos nono ' -X'echo two' \
458 check behave
:x_errexit-4
1 "${MBOX}" '2118430867 49'
460 </dev
/null
${MAILX} ${ARGS} -X'source '"${BODY}" -Serrexit -Snomemdebug \
462 check behave:x_errexit-5 1 "${MBOX}" '2118430867 49'
464 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
466 check behave
:x_errexit-6
1 "${MBOX}" '12955965 172'
468 </dev
/null MAILRC
="${BODY}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
470 check behave:x_errexit-7 1 "${MBOX}" '12955965 172'
472 ## Repeat 4-7 with ignerr set
474 ${sed} -e 's/^echos /ignerr echos /' < "${BODY}" > "${MBOX}"
476 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
477 -X'echo one' -X'ignerr echos nono ' -X'echo two' \
479 check behave
:x_errexit-8
0 "${BODY}" '916157812 53'
481 </dev
/null
${MAILX} ${ARGS} -X'source '"${MBOX}" -Serrexit -Snomemdebug \
483 check behave:x_errexit-9 0 "${BODY}" '916157812 53'
485 </dev/null MAILRC="${MBOX}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
487 check behave
:x_errexit-10
0 "${BODY}" '916157812 53'
489 </dev
/null MAILRC
="${MBOX}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
491 check behave:x_errexit-11 0 "${BODY}" '916157812 53'
496 t_behave_S_freeze() {
497 t_prolog t_behave_S_freeze
501 # Test basic assumption
502 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} \
503 -X'echo asksub<$asksub> dietcurd<$dietcurd>' \
505 check behave
:s_freeze-1
0 "${MBOX}" '270686329 21'
508 ${cat} <<- '__EOT' > "${BODY}"
513 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
514 -Snoasksub -Sasksub -Snoasksub \
515 -X'echo asksub<$asksub>' -X'set asksub' -X'echo asksub<$asksub>' \
517 check behave
:s_freeze-2
0 "${MBOX}" '3182942628 37'
519 ${cat} <<- '__EOT' > "${BODY}"
524 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
525 -Snoasksub -Sasksub \
526 -X'echo asksub<$asksub>' -X'unset asksub' -X'echo asksub<$asksub>' \
528 check behave
:s_freeze-3
0 "${MBOX}" '2006554293 39'
531 ${cat} <<- '__EOT' > "${BODY}"
532 echo dietcurd<$dietcurd>
534 echo dietcurd<$dietcurd>
536 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
537 -Sdietcurd=strawberry
-Snodietcurd -Sdietcurd=vanilla \
538 -X'echo dietcurd<$dietcurd>' -X'unset dietcurd' \
539 -X'echo dietcurd<$dietcurd>' \
541 check behave
:s_freeze-4
0 "${MBOX}" '1985768109 65'
543 ${cat} <<- '__EOT' > "${BODY}"
544 echo dietcurd<$dietcurd>
546 echo dietcurd<$dietcurd>
548 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
549 -Sdietcurd=strawberry
-Snodietcurd \
550 -X'echo dietcurd<$dietcurd>' -X'set dietcurd=vanilla' \
551 -X'echo dietcurd<$dietcurd>' \
553 check behave
:s_freeze-5
0 "${MBOX}" '151574279 51'
555 # TODO once we have a detached one with env=1..
556 if [ -n "`</dev/null ${MAILX} ${ARGS} -X'!echo \$TERM' -Xx`" ]; then
557 echo 'behave:s_freeze-{6,7}: shell sets $TERM, skipped'
559 ${cat} <<- '__EOT' > "${BODY}"
560 !echo "shell says TERM<$TERM>"
562 !echo "shell says TERM<$TERM>"
564 !echo "shell says TERM<$TERM>"
566 !echo "shell says TERM<$TERM>"
568 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
569 -STERM=strawberry
-SnoTERM -STERM=vanilla \
570 -X'echo mail<$TERM>' -X'unset TERM' \
571 -X'!echo "shell says TERM<$TERM>"' -X'echo TERM<$TERM>' \
573 check behave
:s_freeze-6
0 "${MBOX}" '1211476036 167'
575 ${cat} <<- '__EOT' > "${BODY}"
576 !echo "shell says TERM<$TERM>"
578 !echo "shell says TERM<$TERM>"
580 !echo "shell says TERM<$TERM>"
582 !echo "shell says TERM<$TERM>"
584 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
585 -STERM=strawberry
-SnoTERM \
586 -X'echo TERM<$TERM>' -X'set TERM=vanilla' \
587 -X'!echo "shell says TERM<$TERM>"' -X'echo TERM<$TERM>' \
589 check behave
:s_freeze-7
0 "${MBOX}" '3365080441 132'
597 t_prolog t_behave_wysh
599 ${cat} <<- '__EOT' > "${BODY}"
618 echo 'a${DIET}b${TIED}c\${DIET}d\${TIED}e' # COMMENT
619 echo "a${DIET}b${TIED}c\${DIET}d\${TIED}e"
620 echo $'a${DIET}b${TIED}c\${DIET}d\${TIED}e'
622 echo a$'\101\0101\x41\u0041\u41\U00000041\U41'c
623 echo a$'\u0041\u41\u0C1\U00000041\U41'c
646 echo a$'b\U0000000'dt
647 echo a$'b\U00000000'du
657 if [ -z "${UTF8_LOCALE}" ]; then
658 echo 'Skip behave:wysh_unicode, no UTF8_LOCALE'
660 < "${BODY}" DIET=CURD TIED= \
661 LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} 2>/dev/null > "${MBOX}"
662 check behave:wysh_unicode 0 "${MBOX}" '475805847 317'
665 < "${BODY}" DIET=CURD TIED= ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
666 check behave:wysh_c 0 "${MBOX}" '1473887148 321'
668 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
669 wysh set mager='\hey\'
671 wysh set mager="\hey\\"
673 wysh set mager=$'\hey\\'
676 check behave:wysh-3 0 "${MBOX}" '1289698238 69'
681 t_behave_input_inject_semicolon_seq() {
682 t_prolog t_behave_input_inject_semicolon_seq
684 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
689 echon this_is_mymac;call mydeepmac;echon ';';
691 echon one';';call mymac;echon two";";call mymac;echo three$';';
693 echon this_is_mymac;call mydeepmac;echon ,TOO'!;';
695 echon one';';call mymac;echon two";";call mymac;echo three$';';
698 check behave:input_inject_semicolon_seq 0 "${MBOX}" '512117110 140'
703 t_behave_commandalias() {
704 t_prolog t_behave_commandalias
706 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
707 commandalias echo echo hoho
711 commandalias XxX XxXx
712 commandalias XxXx XxXxX
713 commandalias XxXxX XxXxXx
714 commandalias XxXxXx echo huhu
715 commandalias XxXxXxX echo huhu
717 commandalias XxXxXx XxXxXxX
720 commandalias XxXxXx echo huhu
724 check behave:commandalias 0 "${MBOX}" '3694143612 31'
730 t_prolog t_behave_ifelse
732 # Nestable conditions test
733 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
755 if $dietcurd == 'yoho'
760 if $dietcurd @== 'Yoho'
765 if $dietcurd == 'Yoho'
770 if $dietcurd != 'yoho'
775 if $dietcurd @!= 'Yoho'
780 if $dietcurd != 'Yoho'
841 if $dietcurd == 'yohu'
843 elif $dietcurd == 'yoha'
845 elif $dietcurd == 'yohe'
847 elif $dietcurd == 'yoho'
849 if $dietcurd == 'yohu'
851 elif $dietcurd == 'yoha'
853 elif $dietcurd == 'yohe'
855 elif $dietcurd == 'yoho'
857 if $dietcurd == 'yohu'
859 elif $dietcurd == 'yoha'
861 elif $dietcurd == 'yohe'
863 elif $dietcurd == 'yoho'
1012 set diet=abc curd=abc
1018 set diet=abc curd=abcd
1024 # 1. Shitty grouping capabilities as of today
1025 unset diet curd ndefined
1026 if [ [ false ] || [ false ] || [ true ] ] && [ [ false ] || [ true ] ] && \
1032 if [ [ [ [ 0 ] || [ 1 ] ] && [ [ 1 ] || [ 0 ] ] ] && [ 1 ] ] && [ yes ]
1037 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] ]
1042 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] || [ [ 1 ] ] ]
1047 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] || [ [ 1 ] ] || [ 1 ] ] && [ no ]
1052 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] || [ [ 1 ] ] || [ 1 ] ] \
1053 && [ no ] || [ yes ]
1058 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
1063 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 0 ] ]
1068 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 0 ] ] && [ 1 ] ] ] && [ 1 ] ]
1073 if [ [ [ [ [ [ [ 0 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
1078 if [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] && [ 0 ]
1083 if [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] && [ 1 ]
1088 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 0 ]
1093 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 1 ]
1098 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 0 ] || [ 1 ] && [ 0 ]
1103 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 0 ] || [ 1 ] && [ 1 ]
1109 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
1115 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
1120 # 2. Shitty grouping capabilities as of today
1121 unset diet curd ndefined
1122 if [ false || false || true ] && [ false || true ] && yes
1127 if [ [ [ 0 || 1 ] && [ 1 || 0 ] ] && 1 ] && [ yes ]
1132 if [ 1 || 0 || 0 || 0 ]
1137 if [ 1 || 0 || 0 || 0 || [ 1 ] ]
1142 if [ 1 || 0 || 0 || 0 || [ 1 ] || 1 ] && no
1147 if [ 1 || 0 || 0 || 0 || 1 || [ 1 ] ] && no || [ yes ]
1152 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && 1 ] ] && [ 1 ] ]
1157 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && [ 1 ] ] ] && 0 ]
1162 if [ [ [ [ [ [ [ 1 ] ] && 1 ] && 0 ] && [ 1 ] ] ] && 1 ]
1167 if [ [ [ [ [ [ 0 ] && 1 ] && 1 ] && 1 ] ] && 1 ]
1172 if 1 || 0 || 0 || 0 && 0
1177 if 1 || 0 || 0 || 0 && 1
1182 if 0 || 0 || 0 || 1 && 0
1187 if 0 || 0 || 0 || 1 && 1
1192 if 0 || 0 || 0 || 1 && 0 || 1 && 0
1197 if 0 || 0 || 0 || 1 && 0 || 1 && 1
1203 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1208 if $diet == 'yo' && $curd == 'ho' && $ndefined
1214 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1219 if $diet == 'yo' && $curd == 'ho' && $ndefined
1224 if [ [ [ [ [ [ $diet == 'yo' && $curd == 'ho' && $ndefined ] ] ] ] ] ]
1229 # Some more en-braced variables
1231 if ${diet} == ${curd}
1236 if ${diet} != ${curd}
1252 if ! 0 && ! ! 1 && ! ! ! ! 2 && 3
1257 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ ! 2 ] ] ] && 3
1262 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1267 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1272 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1277 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1282 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1287 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] || 3
1292 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! ! [ 2 ] ] ] ] ]
1298 if ! 0 && ! ! 1 && ! ! ! 0 && 3
1303 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ 0 ] ] ] && 3
1308 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ [ 0 ] ] ] ] ] && 3
1313 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! ! [ ! [ ! 0 ] ] ] ] && ! 3
1318 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ ! [ ! [ ! [ ! 0 ] ] ] ] && 3
1323 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! ! [ ! [ ! [ ! [ 0 ] ] ] ] ] && 3
1328 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! ! 0 ] ] ] ] && 3
1333 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ ! 0 ] ] ] ] ] || 3
1338 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! [ 0 ] ] ] ] ]
1345 check behave:if-normal 0 "${MBOX}" '1688759742 719'
1347 if have_feat regex; then
1348 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
1350 if $dietcurd =~ '^yo.*'
1355 if $dietcurd =~ '^Yo.*'
1360 if $dietcurd @=~ '^Yo.*'
1365 if $dietcurd =~ '^yOho.+'
1370 if $dietcurd @!~ '.*Ho$'
1375 if $dietcurd !~ '.+yohO$'
1380 if [ $dietcurd @i!~ '.+yoho$' ]
1385 if ! [ $dietcurd @i=~ '.+yoho$' ]
1390 if ! ! [ $dietcurd @i!~ '.+yoho$' ]
1395 if ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ]
1400 if [ ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ] ]
1405 if ! [ ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1410 if ! ! ! $dietcurd !~ '.+yoho$'
1415 if ! ! ! $dietcurd =~ '.+yoho$'
1420 if ! [ ! ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1425 set diet=abc curd='^abc$'
1431 set diet=abc curd='^abcd$'
1439 check behave:if-regex 0 "${MBOX}" '1115671789 95'
1441 printf 'behave:if-regex: unsupported, skipped\n'
1447 t_behave_localopts() {
1448 t_prolog t_behave_localopts
1450 # Nestable conditions test
1451 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1466 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1471 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1472 echo "$gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2"
1481 echo active trouble: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1483 echo active null: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1492 wysh set y=$1; shift; eval localopts $y; localopts $1; shift
1499 wysh set y=$1; shift; eval localopts $y; localopts $1; shift
1506 echo ----- $1: $2 -> $3 -> $4
1514 call llx
'call off' on on on
1515 call llx
'call off' off on on
1516 call llx
'call off' on off on
1517 call llx
'call off' on off off
1518 localopts call-fixate on
1519 call llx
'call-fixate on' on on on
1520 call llx
'call-fixate on' off on on
1521 call llx
'call-fixate on' on off on
1522 call llx
'call-fixate on' on off off
1523 unset x
;localopts call on
1524 call llx
'call on' on on on
1525 call llx
'call on' off on on
1526 call llx
'call on' on off on
1527 call llx
'call on' on off off
1532 check behave
:localopts
0 "${MBOX}" '4016155249 1246'
1538 t_prolog t_behave_local
1540 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1568 echo ------- global-1 du=$du
1570 echo ------- global-2 du=$du
1573 echo ------- global-3 du=$du
1575 echo ------- global-4 du=$du
1577 echo ------- global-5 du=$du
1580 check behave:local-1 0 "${MBOX}" '2411598140 641'
1585 t_behave_macro_param_shift() {
1586 t_prolog t_behave_macro_param_shift
1588 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev
/null
1591 echo t2.0 has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1596 echo t2.1 has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1597 if [ $# > 1 ] ||
[ $ignerr == '' ]
1602 echo t2.2
:$? has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1604 echo t2.3
:$? has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1608 echo t2.4
:$? has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1613 call t2
1 you get four args
1614 echo t1.1
: $?
';' ignerr
($ignerr) should not exist
1615 call t2
1 you get
'three args'
1616 echo t1.2
: $?
';' ignerr
($ignerr) should not exist
1617 call t2
1 you
'get two args'
1618 echo t1.3
: $?
';' ignerr
($ignerr) should not exist
1619 call t2
1 'you get one arg'
1620 echo t1.4
: $?
';' ignerr
($ignerr) should not exist
1621 ignerr call t2
'' 'you get one arg'
1622 echo t1.5
: $?
';' ignerr
($ignerr) should not exist
1627 check behave
:macro_param_shift
0 "${MBOX}" '1402489146 1682'
1632 t_behave_addrcodec
() {
1633 t_prolog t_behave_addrcodec
1635 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1636 vput addrcodec res e 1 <doog@def>
1637 echo $?/$^ERRNAME $res
1638 eval vput addrcodec res d $res
1639 echo $?/$^ERRNAME $res
1640 vput addrcodec res e 2 . <doog@def>
1641 echo $?/$^ERRNAME $res
1642 eval vput addrcodec res d $res
1643 echo $?/$^ERRNAME $res
1644 vput addrcodec res e 3 Sauer Dr. <doog@def>
1645 echo $?/$^ERRNAME $res
1646 eval vput addrcodec res d $res
1647 echo $?/$^ERRNAME $res
1648 vput addrcodec res e 3.50 Sauer (Ma) Dr. <doog@def>
1649 echo $?/$^ERRNAME $res
1650 eval vput addrcodec res d $res
1651 echo $?/$^ERRNAME $res
1652 vput addrcodec res e 3.51 Sauer (Ma) "Dr.
" <doog@def>
1653 echo $?/$^ERRNAME $res
1654 eval vput addrcodec res d $res
1655 echo $?/$^ERRNAME $res
1657 vput addrcodec res +e 4 Sauer (Ma) Dr. <doog@def>
1658 echo $?/$^ERRNAME $res
1659 eval vput addrcodec res d $res
1660 echo $?/$^ERRNAME $res
1661 vput addrcodec res +e 5 Sauer (Ma) Braten Dr. <doog@def>
1662 echo $?/$^ERRNAME $res
1663 eval vput addrcodec res d $res
1664 echo $?/$^ERRNAME $res
1665 vput addrcodec res +e 6 Sauer (Ma) Braten Dr. (Heu) <doog@def>
1666 echo $?/$^ERRNAME $res
1667 eval vput addrcodec res d $res
1668 echo $?/$^ERRNAME $res
1669 vput addrcodec res +e 7 Sauer (Ma) Braten Dr. (Heu) <doog@def> (bu)
1670 echo $?/$^ERRNAME $res
1671 eval vput addrcodec res d $res
1672 echo $?/$^ERRNAME $res
1673 vput addrcodec res +e 8 \
1674 Dr. Sauer (Ma) Braten Dr. (Heu) <doog@def> (bu) Boom. Boom
1675 echo $?/$^ERRNAME $res
1676 eval vput addrcodec res d $res
1677 echo $?/$^ERRNAME $res
1678 vput addrcodec res +e 9 Dr.Sauer(Ma)Braten Dr. (Heu) <doog@def>
1679 echo $?/$^ERRNAME $res
1680 eval vput addrcodec res d $res
1681 echo $?/$^ERRNAME $res
1682 vput addrcodec res +e 10 (Ma)Braten Dr. (Heu) <doog@def>
1683 echo $?/$^ERRNAME $res
1684 eval vput addrcodec res d $res
1685 echo $?/$^ERRNAME $res
1686 vput addrcodec res +e 11 (Ma)Braten Dr".
" (Heu) <doog@def>
1687 echo $?/$^ERRNAME $res
1688 eval vput addrcodec res d $res
1689 echo $?/$^ERRNAME $res
1690 vput addrcodec res +e 12 Dr. Sauer (Ma) Braten Dr. (u) <doog@def>
1691 echo $?/$^ERRNAME $res
1692 eval vput addrcodec res d $res
1693 echo $?/$^ERRNAME $res
1694 vput addrcodec res +e 13(Ma)Braten Dr. (Heu) <doog@def>
1695 echo $?/$^ERRNAME $res
1696 eval vput addrcodec res d $res
1697 echo $?/$^ERRNAME $res
1698 vput addrcodec res +e 14 Hey, Du <doog@def> Wie() findet Dr. das? ()
1699 echo $?/$^ERRNAME $res
1700 eval vput addrcodec res d $res
1701 echo $?/$^ERRNAME $res
1702 vput addrcodec res +e 15 \
1703 Hey, Du <doog@def> Wie() findet "" Dr. "" das? ()
1704 echo $?/$^ERRNAME $res
1705 eval vput addrcodec res d $res
1706 echo $?/$^ERRNAME $res
1707 vput addrcodec res +e 16 \
1708 "Hey
," "Du
" <doog@def> "Wie
()" findet "" Dr. "" das? ()
1709 echo $?/$^ERRNAME $res
1710 eval vput addrcodec res d $res
1711 echo $?/$^ERRNAME $res
1712 vput addrcodec res +e 17 \
1713 "Hey
" Du <doog@def> "Wie
() findet
" " Dr.
""" das? ()
1714 echo $?/$^ERRNAME $res
1715 eval vput addrcodec res d $res
1716 echo $?/$^ERRNAME $res
1717 vput addrcodec res +e 18 \
1718 <doog@def> "Hey
" Du "Wie
() findet
" " Dr.
""" das? ()
1719 echo $?/$^ERRNAME $res
1720 eval vput addrcodec res d $res
1721 echo $?/$^ERRNAME $res
1722 vput addrcodec res +e 19 Hey\,\" <doog@def> "Wie
()" findet \" Dr. \" das?
1723 echo $?/$^ERRNAME $res
1724 eval vput addrcodec res d $res
1725 echo $?/$^ERRNAME $res
1727 vput addrcodec res ++e 20 Hey\,\" <doog@def> "Wie
()" findet \" Dr. \" das?
1728 echo $?/$^ERRNAME $res
1729 vput addrcodec res ++e 21 Hey\,\"" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1730 echo $?
/$^ERRNAME
$res
1731 eval vput addrcodec res d
$res
1732 echo $?
/$^ERRNAME
$res
1734 vput addrcodec res
+++e
22 Hey
\\,\" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1735 echo $?
/$^ERRNAME
$res
1736 eval vput addrcodec res d
$res
1737 echo $?
/$^ERRNAME
$res
1739 vput addrcodec res s \
1740 "23 Hey\\,\\\" \"Wie" () "\" findet \\\" Dr. \\\" das?" <doog@def
>
1741 echo $?
/$^ERRNAME
$res
1743 # Fix for [f3852f88]
1744 vput addrcodec res
++e
<from2@exam.ple
> 100 (comment
) "Quot(e)d"
1745 echo $?
/$^ERRNAME
$res
1746 eval vput addrcodec res d
$res
1747 echo $?
/$^ERRNAME
$res
1748 vput addrcodec res e
<from2@exam.ple
> 100 (comment
) "Quot(e)d"
1749 echo $?
/$^ERRNAME
$res
1750 eval vput addrcodec res d
$res
1751 echo $?
/$^ERRNAME
$res
1754 check behave
:addrcodec-1
0 "${MBOX}" '1047317989 2612'
1756 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1758 mlsubscribe isa2@list
1760 vput addrcodec res skin Hey\\,\" <isa0@list> "Wie
()" find \" Dr. \" das?
1761 echo $?/$^ERRNAME $res
1762 vput addrcodec res skinlist Hey\\,\" <isa0@list> "Wie
()" find \" Dr. \" das?
1763 echo $?/$^ERRNAME $res
1764 vput addrcodec res skin Hey\\,\" <isa1@list> "Wie
()" find \" Dr. \" das?
1765 echo $?/$^ERRNAME $res
1766 vput addrcodec res skinlist Hey\\,\" <isa1@list> "Wie
()" find \" Dr. \" das?
1767 echo $?/$^ERRNAME $res
1768 vput addrcodec res skin Hey\\,\" <isa2@list> "Wie
()" find \" Dr. \" das?
1769 echo $?/$^ERRNAME $res
1770 vput addrcodec res skinlist Hey\\,\" <isa2@list> "Wie
()" find \" Dr. \" das?
1771 echo $?/$^ERRNAME $res
1774 check behave:addrcodec-2 0 "${MBOX}" '1391779299 104'
1776 if have_feat idna; then
1777 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} ${ADDARG_UNI} > "${MBOX}" 2>&1
1778 vput addrcodec res e
(heu
) <du@blödiän
> "stroh" du
1779 echo $?
/$^ERRNAME
$res
1780 eval vput addrcodec res d
$res
1781 echo $?
/$^ERRNAME
$res
1782 vput addrcodec res e
<du@blödiän
> du
1783 echo $?
/$^ERRNAME
$res
1784 eval vput addrcodec res d
$res
1785 echo $?
/$^ERRNAME
$res
1786 vput addrcodec res e du
<du@blödiän
>
1787 echo $?
/$^ERRNAME
$res
1788 eval vput addrcodec res d
$res
1789 echo $?
/$^ERRNAME
$res
1790 vput addrcodec res e
<du@blödiän
>
1791 echo $?
/$^ERRNAME
$res
1792 eval vput addrcodec res d
$res
1793 echo $?
/$^ERRNAME
$res
1794 vput addrcodec res e du@blödiän
1795 echo $?
/$^ERRNAME
$res
1796 eval vput addrcodec res d
$res
1797 echo $?
/$^ERRNAME
$res
1800 check behave
:addrcodec-idna
0 "${MBOX}" '498775983 326'
1802 printf 'behave:addrcodec-idna: unsupported, skipped\n'
1809 t_prolog t_behave_vexpr
1811 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
1812 vput vexpr res = 9223372036854775807
1813 echo $?/$^ERRNAME $res
1814 vput vexpr res = 9223372036854775808
1815 echo $?/$^ERRNAME $res
1816 vput vexpr res =@ 9223372036854775808
1817 echo $?/$^ERRNAME $res
1818 vput vexpr res = -9223372036854775808
1819 echo $?/$^ERRNAME $res
1820 vput vexpr res = -9223372036854775809
1821 echo $?/$^ERRNAME $res
1822 vput vexpr res =@ -9223372036854775809
1823 echo $?/$^ERRNAME $res
1826 echo $?/$^ERRNAME $res
1828 echo $?/$^ERRNAME $res
1830 echo $?/$^ERRNAME $res
1832 vput vexpr res + 0 0
1833 echo $?/$^ERRNAME $res
1834 vput vexpr res + 0 1
1835 echo $?/$^ERRNAME $res
1836 vput vexpr res + 1 1
1837 echo $?/$^ERRNAME $res
1839 vput vexpr res + 9223372036854775807 0
1840 echo $?/$^ERRNAME $res
1841 vput vexpr res + 9223372036854775807 1
1842 echo $?/$^ERRNAME $res
1843 vput vexpr res +@ 9223372036854775807 1
1844 echo $?/$^ERRNAME $res
1845 vput vexpr res + 0 9223372036854775807
1846 echo $?/$^ERRNAME $res
1847 vput vexpr res + 1 9223372036854775807
1848 echo $?/$^ERRNAME $res
1849 vput vexpr res +@ 1 9223372036854775807
1850 echo $?/$^ERRNAME $res
1852 vput vexpr res + -9223372036854775808 0
1853 echo $?/$^ERRNAME $res
1854 vput vexpr res + -9223372036854775808 -1
1855 echo $?/$^ERRNAME $res
1856 vput vexpr res +@ -9223372036854775808 -1
1857 echo $?/$^ERRNAME $res
1858 vput vexpr res + 0 -9223372036854775808
1859 echo $?/$^ERRNAME $res
1860 vput vexpr res + -1 -9223372036854775808
1861 echo $?/$^ERRNAME $res
1862 vput vexpr res +@ -1 -9223372036854775808
1863 echo $?/$^ERRNAME $res
1865 vput vexpr res - 0 0
1866 echo $?/$^ERRNAME $res
1867 vput vexpr res - 0 1
1868 echo $?/$^ERRNAME $res
1869 vput vexpr res - 1 1
1870 echo $?/$^ERRNAME $res
1872 vput vexpr res - 9223372036854775807 0
1873 echo $?/$^ERRNAME $res
1874 vput vexpr res - 9223372036854775807 -1
1875 echo $?/$^ERRNAME $res
1876 vput vexpr res -@ 9223372036854775807 -1
1877 echo $?/$^ERRNAME $res
1878 vput vexpr res - 0 9223372036854775807
1879 echo $?/$^ERRNAME $res
1880 vput vexpr res - -1 9223372036854775807
1881 echo $?/$^ERRNAME $res
1882 vput vexpr res - -2 9223372036854775807
1883 echo $?/$^ERRNAME $res
1884 vput vexpr res -@ -2 9223372036854775807
1885 echo $?/$^ERRNAME $res
1887 vput vexpr res - -9223372036854775808 +0
1888 echo $?/$^ERRNAME $res
1889 vput vexpr res - -9223372036854775808 +1
1890 echo $?/$^ERRNAME $res
1891 vput vexpr res -@ -9223372036854775808 +1
1892 echo $?/$^ERRNAME $res
1893 vput vexpr res - 0 -9223372036854775808
1894 echo $?/$^ERRNAME $res
1895 vput vexpr res - +1 -9223372036854775808
1896 echo $?/$^ERRNAME $res
1897 vput vexpr res -@ +1 -9223372036854775808
1898 echo $?/$^ERRNAME $res
1900 vput vexpr res + -13 -2
1901 echo $?/$^ERRNAME $res
1902 vput vexpr res - 0 0
1903 echo $?/$^ERRNAME $res
1904 vput vexpr res - 0 1
1905 echo $?/$^ERRNAME $res
1906 vput vexpr res - 1 1
1907 echo $?/$^ERRNAME $res
1908 vput vexpr res - -13 -2
1909 echo $?/$^ERRNAME $res
1911 vput vexpr res * 0 0
1912 echo $?/$^ERRNAME $res
1913 vput vexpr res * 0 1
1914 echo $?/$^ERRNAME $res
1915 vput vexpr res * 1 1
1916 echo $?/$^ERRNAME $res
1917 vput vexpr res * -13 -2
1918 echo $?/$^ERRNAME $res
1920 vput vexpr res / 0 0
1921 echo $?/$^ERRNAME $res
1922 vput vexpr res / 0 1
1923 echo $?/$^ERRNAME $res
1924 vput vexpr res / 1 1
1925 echo $?/$^ERRNAME $res
1926 vput vexpr res / -13 -2
1927 echo $?/$^ERRNAME $res
1929 vput vexpr res % 0 0
1930 echo $?/$^ERRNAME $res
1931 vput vexpr res % 0 1
1932 echo $?/$^ERRNAME $res
1933 vput vexpr res % 1 1
1934 echo $?/$^ERRNAME $res
1935 vput vexpr res % -13 -2
1936 echo $?/$^ERRNAME $res
1939 check behave:vexpr-numeric 0 "${MBOX}" '1723609217 1048'
1941 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1942 vput vexpr res
find 'bananarama' 'nana'
1943 echo $?
/$^ERRNAME
:$res:
1944 vput vexpr res
find 'bananarama' 'bana'
1945 echo $?
/$^ERRNAME
:$res:
1946 vput vexpr res
find 'bananarama' 'Bana'
1947 echo $?
/$^ERRNAME
:$res:
1948 vput vexpr res
find 'bananarama' 'rama'
1949 echo $?
/$^ERRNAME
:$res:
1951 vput vexpr res ifind
'bananarama' 'nana'
1952 echo $?
/$^ERRNAME
:$res:
1953 vput vexpr res ifind
'bananarama' 'bana'
1954 echo $?
/$^ERRNAME
:$res:
1955 vput vexpr res ifind
'bananarama' 'Bana'
1956 echo $?
/$^ERRNAME
:$res:
1957 vput vexpr res ifind
'bananarama' 'rama'
1958 echo $?
/$^ERRNAME
:$res:
1960 vput vexpr res substring
'bananarama' 1
1961 echo $?
/$^ERRNAME
:$res:
1962 vput vexpr res substring
'bananarama' 3
1963 echo $?
/$^ERRNAME
:$res:
1964 vput vexpr res substring
'bananarama' 5
1965 echo $?
/$^ERRNAME
:$res:
1966 vput vexpr res substring
'bananarama' 7
1967 echo $?
/$^ERRNAME
:$res:
1968 vput vexpr res substring
'bananarama' 9
1969 echo $?
/$^ERRNAME
:$res:
1970 vput vexpr res substring
'bananarama' 10
1971 echo $?
/$^ERRNAME
:$res:
1972 vput vexpr res substring
'bananarama' 1 3
1973 echo $?
/$^ERRNAME
:$res:
1974 vput vexpr res substring
'bananarama' 3 3
1975 echo $?
/$^ERRNAME
:$res:
1976 vput vexpr res substring
'bananarama' 5 3
1977 echo $?
/$^ERRNAME
:$res:
1978 vput vexpr res substring
'bananarama' 7 3
1979 echo $?
/$^ERRNAME
:$res:
1980 vput vexpr res substring
'bananarama' 9 3
1981 echo $?
/$^ERRNAME
:$res:
1982 vput vexpr res substring
'bananarama' 10 3
1983 echo $?
/$^ERRNAME
:$res:
1985 vput vexpr res substring
'bananarama' -1
1986 echo $?
/$^ERRNAME
:$res:
1987 vput vexpr res substring
'bananarama' -3
1988 echo $?
/$^ERRNAME
:$res:
1989 vput vexpr res substring
'bananarama' -5
1990 echo $?
/$^ERRNAME
:$res:
1991 vput vexpr res substring
'bananarama' -7
1992 echo $?
/$^ERRNAME
:$res:
1993 vput vexpr res substring
'bananarama' -9
1994 echo $?
/$^ERRNAME
:$res:
1995 vput vexpr res substring
'bananarama' -10
1996 echo $?
/$^ERRNAME
:$res:
1997 vput vexpr res substring
'bananarama' 1 -3
1998 echo $?
/$^ERRNAME
:$res:
1999 vput vexpr res substring
'bananarama' 3 -3
2000 echo $?
/$^ERRNAME
:$res:
2001 vput vexpr res substring
'bananarama' 5 -3
2002 echo $?
/$^ERRNAME
:$res:
2003 vput vexpr res substring
'bananarama' 7 -3
2004 echo $?
/$^ERRNAME
:$res:
2005 vput vexpr res substring
'bananarama' 9 -3
2006 echo $?
/$^ERRNAME
:$res:
2007 vput vexpr res substring
'bananarama' 10 -3
2008 echo $?
/$^ERRNAME
:$res:
2010 vput vexpr res trim
'Cocoon Cocoon'
2011 echo $?
/$^ERRNAME
:$res:
2012 vput vexpr res trim
' Cocoon Cocoon '
2013 echo $?
/$^ERRNAME
:$res:
2014 vput vexpr res trim-front
'Cocoon Cocoon'
2015 echo $?
/$^ERRNAME
:$res:
2016 vput vexpr res trim-front
' Cocoon Cocoon '
2017 echo $?
/$^ERRNAME
:$res:
2018 vput vexpr res trim-end
'Cocoon Cocoon'
2019 echo $?
/$^ERRNAME
:$res:
2020 vput vexpr res trim-end
' Cocoon Cocoon '
2021 echo $?
/$^ERRNAME
:$res:
2024 check behave
:vexpr-string
0 "${MBOX}" '3182004322 601'
2026 if have_feat regex
; then
2027 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2028 vput vexpr res regex 'bananarama' 'nana'
2029 echo $?/$^ERRNAME :$res:
2030 vput vexpr res regex 'bananarama' 'bana'
2031 echo $?/$^ERRNAME :$res:
2032 vput vexpr res regex 'bananarama' 'Bana'
2033 echo $?/$^ERRNAME :$res:
2034 vput vexpr res regex 'bananarama' 'rama'
2035 echo $?/$^ERRNAME :$res:
2037 vput vexpr res iregex 'bananarama' 'nana'
2038 echo $?/$^ERRNAME :$res:
2039 vput vexpr res iregex 'bananarama' 'bana'
2040 echo $?/$^ERRNAME :$res:
2041 vput vexpr res iregex 'bananarama' 'Bana'
2042 echo $?/$^ERRNAME :$res:
2043 vput vexpr res iregex 'bananarama' 'rama'
2044 echo $?/$^ERRNAME :$res:
2046 vput vexpr res regex 'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
2047 echo $?/$^ERRNAME :$res:
2048 vput vexpr res regex 'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
2049 echo $?/$^ERRNAME :$res:
2050 vput vexpr res regex 'bananarama' 'Bana(.+)' '\$1\$0'
2051 echo $?/$^ERRNAME :$res:
2052 vput vexpr res regex 'bananarama' '(.+)rama' '\$1\$0'
2053 echo $?/$^ERRNAME :$res:
2055 vput vexpr res iregex 'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
2056 echo $?/$^ERRNAME :$res:
2057 vput vexpr res iregex 'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
2058 echo $?/$^ERRNAME :$res:
2059 vput vexpr res iregex 'bananarama' 'Bana(.+)' '\$1\$0'
2060 echo $?/$^ERRNAME :$res:
2061 vput vexpr res iregex 'bananarama' '(.+)rama' '\$1\$0'
2062 echo $?/$^ERRNAME :$res:
2066 check behave:vexpr-regex 0 "${MBOX}" '3270360157 311'
2068 printf 'behave:vexpr-regex: unsupported, skipped\n'
2074 t_behave_call_ret() {
2075 t_prolog t_behave_call_ret
2077 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
2082 vput vexpr j
'&' $i 7
2088 vput vexpr j
'&' $i 7
2094 echo ! The end
for $1
2098 # Transport $?/$! up the call chain
2104 wysh
set i
=$? j
=$
! k
=$^ERRNAME
2108 echo ! The end
for $1
2109 return $i $^ERR-BUSY
2113 # Up and down it goes
2120 vput vexpr k
- $1 $2
2124 echo "# <$i/$j> .. "
2128 eval echon
"<\$1=\$i/\$^ERRNAME-$j "
2131 echo ! The end
for $1=$i/$2
2135 return $i $^ERR-BUSY
2141 call w1
0; echo ?
=$?
!=$
!; echo -----;
2142 call w2
0; echo ?
=$?
!=$^ERRNAME
; echo -----;
2143 call w3
0 1; echo ?
=$?
!=$^ERRNAME
; echo -----;
2146 check behave
:call_ret
0 "${MBOX}" '1572045517 5922'
2152 t_prolog t_behave_xcall
2154 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
2159 vput vexpr j '&' $i 7
2165 echo ! The end for $1/$2
2167 return $i $^ERR-BUSY
2178 echo ?=$? !=$^ERRNAME
2181 echo ?=$? !=$^ERRNAME
2183 echo ?=$? !=$^ERRNAME
2186 check behave:xcall-1 0 "${MBOX}" '2401702082 23801'
2190 ${cat} <<- '__EOT' > "${BODY}"
2195 vput vexpr j '&' $i 7
2201 echo ! The end for $1
2204 echo would be err with errexit
2213 echo zwei, ?=$? !=$!
2214 localopts yes; set errexit
2216 echo drei, ?=$? !=$^ERRNAME
2218 echo vier, ?=$? !=$^ERRNAME, this is an error
2221 echo outer 1, ?=$? !=$^ERRNAME
2223 echo outer 2, ?=$? !=$^ERRNAME, could be error if xxxign non-empty
2225 echo outer 3, ?=$? !=$^ERRNAME
2226 echo this is definitely an error
2229 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign ignerr' -Snomemdebug \
2231 check behave
:xcall-2
0 "${MBOX}" '3900716531 4200'
2233 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign " "' -Snomemdebug \
2235 check behave:xcall-3 1 "${MBOX}" '1006776201 2799'
2240 t_behave_vpospar() {
2241 t_prolog t_behave_vpospar
2243 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2244 vpospar
set hey
, "'you ", world
!
2245 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2246 vput vpospar x quote
; echo x
<$x>
2247 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2248 vput vpospar y quote
;echo y
<$y>
2249 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2250 eval vpospar
set ${y};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2251 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2254 echo infun2
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2255 vput vpospar z quote
;echo infun2
:z
<$z>
2259 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2260 vput vpospar y quote
;echo infun
:y
<$y>
2261 eval vpospar
set ${x};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2262 vpospar
clear;echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2264 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2265 eval vpospar
set ${y};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2268 call infun This
"in a" fun
2269 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2270 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2272 check behave
:vpospar-1
0 "${MBOX}" '155175639 866'
2275 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2277 echo ifs<$ifs> ifs-ws<$ifs-ws>
2278 vpospar set hey, "'you ", world!
2279 echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2280 vput vpospar x quote; echo x<$x>
2281 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2282 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2285 echo ifs<$ifs> ifs-ws<$ifs-ws>
2286 vpospar set hey, "'you
", world!
2287 unset ifs;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2289 vput vpospar x quote; echo x<$x>
2290 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2291 eval vpospar set ${x};\
2292 unset ifs;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2295 echo ifs<$ifs> ifs-ws<$ifs-ws>
2296 vpospar set hey, "'you ", world!
2297 unset ifs; echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2299 vput vpospar x quote; echo x<$x>
2300 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2301 eval vpospar set ${x};\
2302 unset ifs;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2304 check behave:vpospar-ifs 0 "${MBOX}" '2015927702 706'
2309 t_behave_atxplode() {
2310 t_prolog t_behave_atxplode
2311 TRAP_EXIT_ADDONS="./.t*"
2313 ${cat} > ./.t.sh <<- '___
'; ${cat} > ./.t.rc <<- '___
'
2316 printf " (1/$#: <$1>)"
2318 if [ $# -gt 0 ]; then
2332 printf yyy;yyy 'xxx' "b\$
'\t'u
' "
2333 printf xxx;xxx arg ,b u.
2334 printf xxx;xxx arg , .
2335 printf xxx;xxx arg ,ball.
2341 echon " (1/$#: <$1>)"
2356 echon yyy;call yyy '\call xxx' "b\$
'\t'u
' "
2357 echon xxx;call xxx arg ,b u.
2358 echon xxx;call xxx arg , .
2359 echon xxx;call xxx arg ,ball.
2362 ${MAILX} ${ARGS} -X'source ./.t.rc' -Xx > "${MBOX}" 2>&1
2363 check behave:atxplode-1 0 "${MBOX}" '41566293 164'
2365 #${SHELL} ./.t.sh > ./.tshout 2>&1
2366 #check behave:atxplode:disproof-1 0 ./.tshout '41566293 164'
2372 t_prolog t_behave_read
2373 TRAP_EXIT_ADDONS="./.t*"
2375 ${cat} <<- '__EOT
' > .tin
2376 hey1, "'you
", world!
2377 hey2, "'you ", bugs bunny!
2382 ${cat} <<- '__EOT
' |\
2383 ${MAILX} ${ARGS} -X'readctl create ./.tin' > "${MBOX}" 2>&1
2385 echo $?/$^ERRNAME / <$a><$b><$c>
2387 echo $?/$^ERRNAME / <$a><$b><$c>
2389 echo $?/$^ERRNAME / <$a><$b><$c>
2391 echo $?/$^ERRNAME / <$a><$b><$c>
2392 unset a b c;read a b c
2393 echo $?/$^ERRNAME / <$a><$b><$c>
2394 readctl remove ./.tin;echo readctl remove:$?/$^ERRNAME
2396 check behave:read-1 0 "${MBOX}" '1527910147 173'
2398 ${cat} <<- '__EOT
' > .tin2
2399 hey2.0,:"'you
",:world!:mars.:
2400 hey2.1,:"'you ",:world!
2401 hey2.2,:"'you
",:bugs bunny!
2407 ${cat} <<- '__EOT' |\
2408 6< .tin2 ${MAILX} ${ARGS} -X 'readctl create 6' > "${MBOX}" 2>&1
2411 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2413 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2415 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2417 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2419 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2421 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2422 unset a b c
;read a b c
2423 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2425 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2426 readctl remove
6;echo readctl remove
:$?
/$^ERRNAME
2428 check behave
:read-ifs
0 "${MBOX}" '890153490 298'
2430 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2432 readall d; echo $?/$^ERRNAME / <$d>
2433 wysh set d;readall d;echo $?/$^ERRNAME / <$d>
2434 readctl create .tin2
2435 readall d; echo $?/$^ERRNAME / <$d>
2436 wysh set d;readall d;echo $?/$^ERRNAME / <$d>
2437 readctl remove .tin;echo $?/$^ERRNAME;\
2438 readctl remove .tin2;echo $?/$^ERRNAME
2440 check behave:readall 0 "${MBOX}" '860434889 333'
2446 t_prolog t_behave_mbox
2447 TRAP_EXIT_ADDONS=".
/.t
*"
2451 while [ ${i} -lt 112 ]; do
2452 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
2453 "${MBOX}" "${i}" "${i}"
2456 ) | ${MAILX} ${ARGS}
2457 check behave:mbox-1 0 "${MBOX}" '1140119864 13780'
2459 printf 'File "%s
"\ncopy * "%s
"\nFile "%s
"\nfrom*' "${MBOX}" .tmbox1 .tmbox1 |
2460 ${MAILX} ${ARGS} > .tlst
2461 check behave:mbox-2 0 .tlst '2739893312 9103'
2463 printf 'File "%s
"\ncopy * "file://%s
"\nFile "file://%s
"\nfrom*' \
2464 "${MBOX}" .tmbox2 .tmbox2 | ${MAILX} ${ARGS} > .tlst
2465 check behave
:mbox-3
0 .tlst
'1702194178 9110'
2467 # only the odd (even)
2469 printf 'File "file://%s"\ncopy ' .tmbox2
2471 while [ ${i} -lt 112 ]; do
2473 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2476 printf 'file://%s\nFile "file://%s"\nfrom*' .tmbox3 .tmbox3
2477 ) |
${MAILX} ${ARGS} > .tlst
2478 check behave
:mbox-4
0 .tmbox3
'631132924 6890'
2479 check behave
:mbox-5
- .tlst
'2960975049 4573'
2482 printf 'file "file://%s"\nmove ' .tmbox2
2484 while [ ${i} -lt 112 ]; do
2486 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2489 printf 'file://%s\nFile "file://%s
"\nfrom*\nFile "file://%s
"\nfrom*' \
2490 .tmbox3 .tmbox3 .tmbox2
2491 ) | ${MAILX} ${ARGS} > .tlst
2492 check behave:mbox-6 0 .tmbox3 '1387070539 13655'
2493 ${sed} 2d < .tlst > .tlstx
2494 check behave:mbox-7 - .tlstx '2729940494 13645'
2499 t_behave_maildir() {
2500 t_prolog t_behave_maildir
2501 TRAP_EXIT_ADDONS=".
/.t
*"
2505 while [ ${i} -lt 112 ]; do
2506 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
2507 "${MBOX}" "${i}" "${i}"
2510 ) | ${MAILX} ${ARGS}
2511 check behave:maildir-1 0 "${MBOX}" '1140119864 13780'
2517 ' "${MBOX}" .tmdir1 .tmdir1 |
2518 ${MAILX} ${ARGS} -Snewfolders=maildir > .tlst
2519 check behave:maildir-2 0 .tlst '1797938753 9103'
2522 copy * "maildir
://%s
"
2525 ' "${MBOX}" .tmdir2 .tmdir2 |
2526 ${MAILX} ${ARGS} > .tlst
2527 check behave:maildir-3 0 .tlst '1155631089 9113'
2529 printf 'File "maildir
://%s
"
2533 ' .tmdir2 .tmbox1 .tmbox1 |
2534 ${MAILX} ${ARGS} > .tlst
2535 check behave:maildir-4 0 .tmbox1 '2646131190 13220'
2536 check behave:maildir-5 - .tlst '3701297796 9110'
2538 # only the odd (even)
2540 printf 'File "maildir
://%s
"
2543 while [ ${i} -lt 112 ]; do
2545 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2552 ) | ${MAILX} ${ARGS} > .tlst
2553 check behave:maildir-6 0 .tmbox2 '142890131 6610'
2554 check behave:maildir-7 - .tlst '960096773 4573'
2557 printf 'file "maildir
://%s
"
2560 while [ ${i} -lt 112 ]; do
2562 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2570 ' .tmbox2 .tmbox2 .tmdir2
2571 ) |
${MAILX} ${ARGS} > .tlst
2572 check behave
:maildir-8
0 .tmbox2
'3806905791 13100'
2573 ${sed} 2d
< .tlst
> .tlstx
2574 check behave
:maildir-9
- .tlstx
'4216815295 13645'
2579 t_behave_record_a_resend
() {
2580 t_prolog t_behave_record_a_resend
2581 TRAP_EXIT_ADDONS
="./.t.record ./.t.resent"
2585 m %s\n~s Subject 1.\nHello.\n~.
2586 set record-files add-file-recipients
2587 m %s\n~s Subject 2.\nHello.\n~.
2589 resend 2 ./.t.resent
2590 Resend 1 ./.t.resent
2592 resend 2 ./.t.resent
2593 Resend 1 ./.t.resent
2594 ' .
/.t.record
"${MBOX}" "${MBOX}" "${MBOX}" |
2597 check behave
:record_a_resend-1
0 "${MBOX}" '3057873538 256'
2598 check behave
:record_a_resend-2
- .t.record
'391356429 460'
2599 check behave
:record_a_resend-3
- .t.resent
'2685231691 648'
2604 t_behave_e_H_L_opts
() {
2605 t_prolog t_behave_e_H_L_opts
2606 TRAP_EXIT_ADDONS
="./.tsendmail.sh ./.t.mbox"
2609 ${MAILX} ${ARGS} -ef .
/.t.mbox
2610 echo ${?} > "${MBOX}"
2612 ${cat} <<-_EOT > ./.tsendmail.sh
2614 (echo 'From Alchemilla Wed Apr 07 17:03:33 2017' && ${cat} && echo
2617 chmod 0755 .
/.tsendmail.sh
2618 printf 'm me@exam.ple\nLine 1.\nHello.\n~.\n' |
2619 ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
2620 printf 'm you@exam.ple\nLine 1.\nBye.\n~.\n' |
2621 ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
2623 ${MAILX} ${ARGS} -ef .
/.t.mbox
2624 echo ${?} >> "${MBOX}"
2625 ${MAILX} ${ARGS} -efL @t@me .
/.t.mbox
2626 echo ${?} >> "${MBOX}"
2627 ${MAILX} ${ARGS} -efL @t@you .
/.t.mbox
2628 echo ${?} >> "${MBOX}"
2629 ${MAILX} ${ARGS} -efL '@>@Line 1' .
/.t.mbox
2630 echo ${?} >> "${MBOX}"
2631 ${MAILX} ${ARGS} -efL '@>@Hello.' .
/.t.mbox
2632 echo ${?} >> "${MBOX}"
2633 ${MAILX} ${ARGS} -efL '@>@Bye.' .
/.t.mbox
2634 echo ${?} >> "${MBOX}"
2635 ${MAILX} ${ARGS} -efL '@>@Good bye.' .
/.t.mbox
2636 echo ${?} >> "${MBOX}"
2638 ${MAILX} ${ARGS} -fH ./.t.mbox >> "${MBOX}"
2639 echo ${?} >> "${MBOX}"
2640 ${MAILX} ${ARGS} -fL @t@me ./.t.mbox >> "${MBOX}"
2641 echo ${?} >> "${MBOX}"
2642 ${MAILX} ${ARGS} -fL @t@you ./.t.mbox >> "${MBOX}"
2643 echo ${?} >> "${MBOX}"
2644 ${MAILX} ${ARGS} -fL '@>@Line 1' ./.t.mbox >> "${MBOX}"
2645 echo ${?} >> "${MBOX}"
2646 ${MAILX} ${ARGS} -fL '@>@Hello.' ./.t.mbox >> "${MBOX}"
2647 echo ${?} >> "${MBOX}"
2648 ${MAILX} ${ARGS} -fL '@>@Bye.' ./.t.mbox >> "${MBOX}"
2649 echo ${?} >> "${MBOX}"
2650 ${MAILX} ${ARGS} -fL '@>@Good bye.' ./.t.mbox >> "${MBOX}" 2>/dev/null
2651 echo ${?} >> "${MBOX}"
2653 check behave:e_H_L_opts - "${MBOX}" '1708955574 678'
2658 t_behave_alternates() {
2659 t_prolog t_behave_alternates
2660 TRAP_EXIT_ADDONS=".
/.t
*"
2662 ${cat} <<-_EOT > ./.tsendmail.sh
2664 (echo 'From Valeriana Sat Jul 08 15:54:03 2017' && ${cat} && echo
2667 chmod 0755 ./.tsendmail.sh
2669 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh > ./.tall 2>&1
2673 alternates a1@b1 a2@b2 a3@b3
2678 echo $?/$^ERRNAME <$rv>
2683 echo $?/$^ERRNAME <$rv>
2686 echo $?/$^ERRNAME <$rv>
2689 echo $?/$^ERRNAME <$rv>
2693 alternates a1@b1 a2@b2 a3@b3
2696 echo $?/$^ERRNAME <$rv>
2699 echo $?/$^ERRNAME <$rv>
2702 echo $?/$^ERRNAME <$rv>
2705 alternates a1@b1 a2@b2 a3@b3
2708 echo $?/$^ERRNAME <$rv>
2711 echo $?/$^ERRNAME <$rv>
2714 echo $?/$^ERRNAME <$rv>
2718 alternates a1@b1 a2@b2 a3@b3
2721 echo $?/$^ERRNAME <$rv>
2725 alternates a1@b1 a1@c1 a1@d1 a2@b2 a3@b3 a3@c3 a3@d3
2727 ~s all alternates, only a1@b1 remains
2729 ~b a3@b3 a3@c3 a3@d3
2738 alternates a1@b1 a1@c1 a2@b2 a3@b3
2740 ~s a1@b1 a1@d1, and a3@c3 a3@d3 remain
2742 ~b a3@b3 a3@c3 a3@d3
2749 alternates a1@b1 a2@b2 a3; set allnet
2751 ~s all alternates via allnet, only a1@b1 remains
2753 ~b a3@b3 a3@c3 a3@d3
2764 echo $?/$^ERRNAME <$rv>
2768 echo $?/$^ERRNAME <$rv>
2772 echo $?/$^ERRNAME <$rv>
2776 echo $?/$^ERRNAME <$rv>
2780 echo $?/$^ERRNAME <$rv>
2784 alternates a1@b1 a2@b2
2787 echo $?/$^ERRNAME <$rv>
2788 alternates a3@b3 a4@b4
2791 echo $?/$^ERRNAME <$rv>
2793 check behave:alternates-1 0 "${MBOX}" '142184864 515'
2794 check behave:alternates-2 - .tall '1878598364 505'
2800 t_prolog t_behave_alias
2801 TRAP_EXIT_ADDONS=".
/.t
*"
2803 ${cat} <<-_EOT > ./.tsendmail.sh
2805 (echo 'From Hippocastanum Mon Jun 19 15:07:07 2017' && ${cat} && echo
2808 chmod 0755 ./.tsendmail.sh
2810 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh > ./.tall 2>&1
2812 alias a1 ex2@a1.ple "EX3
<ex3@a1.ple
>"
2814 alias a2 ex1@a2.ple ex2@a2.ple ex3@a2.ple ex4@a2.ple
2816 alias a4 a5 ex1@a4.ple
2818 alias a6 a7 ex1@a6.ple
2832 check behave:alias-1 0 "${MBOX}" '2496925843 272'
2833 check behave:alias-2 - .tall '3548953204 152'
2835 # TODO t_behave_alias: n_ALIAS_MAXEXP is compile-time constant,
2836 # TODO need to somehow provide its contents to the test, then test
2841 t_behave_filetype() {
2842 t_prolog t_behave_filetype
2843 TRAP_EXIT_ADDONS=".
/.t
*"
2845 ${cat} <<-_EOT > ./.tsendmail.sh
2847 (echo 'From Alchemilla Wed Apr 25 15:12:13 2017' && ${cat} && echo
2850 chmod 0755 ./.tsendmail.sh
2852 printf 'm m1@e.t\nL1\nHy1\n~.\nm m2@e.t\nL2\nHy2\n~@ %s\n~.\n' \
2853 "${SRCDIR}snailmail.jpg" | ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
2854 check behave
:filetype-1
0 "${MBOX}" '1594682963 13520'
2856 if (echo |
gzip -c) >/dev
/null
2>&1; then
2859 printf 'File "%s"\ncopy 1 ./.t.mbox.gz\ncopy 2 ./.t.mbox.gz' \
2860 "${MBOX}" | ${MAILX} ${ARGS} \
2861 -X'filetype gz gzip\ -dc gzip\ -c'
2862 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2863 ${MAILX} ${ARGS} -X'filetype gz gzip\ -dc gzip\ -c'
2865 check behave:filetype-2 - ".
/.t.mbox
" '1594682963 13520'
2866 check behave:filetype-3 - ".
/.t.out
" '2392348396 102'
2868 echo 'behave:filetype-2: unsupported, skipped'
2869 echo 'behave:filetype-3: unsupported, skipped'
2874 printf 'File "%s
"\ncopy 1 ./.t.mbox.gz
2880 -X'filetype gz gzip\ -dc gzip\ -c' \
2881 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" \
2882 "echo eins
;echo zwei
;echo und mit
${sed} bist Du dabei
;${cat}"'
2883 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2885 -X'filetype gz gzip\ -dc gzip\ -c' \
2886 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" kill\ 0'
2888 check behave:filetype-4 - ".
/.t.mbox
" '2886541147 27060'
2889 check behave:filetype-5 - ".
/.t.out
" '852335377 172'
2894 t_behave_message_injections() {
2895 t_prolog t_behave_message_injections
2896 TRAP_EXIT_ADDONS=".
/.t
*"
2898 ${cat} <<-_EOT > ./.tsendmail.sh
2900 (echo 'From Echinacea Tue Jun 20 15:54:02 2017' && ${cat} && echo
2903 chmod 0755 ./.tsendmail.sh
2905 echo mysig > ./.tmysig
2907 echo some-body | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh \
2908 -Smessage-inject-head=head-inject \
2909 -Smessage-inject-tail=tail-inject \
2910 -Ssignature=./.tmysig \
2911 ex@am.ple > ./.tall 2>&1
2912 check behave:message_injections-1 0 "${MBOX}" '2434746382 134'
2913 check behave:message_injections-2 - .tall '4294967295 0' # empty file
2915 ${cat} <<-_EOT > ./.template
2919 Subject: This subject is
2921 Body, body, body me.
2923 < ./.template ${MAILX} ${ARGS} -t -Smta=./.tsendmail.sh \
2924 -Smessage-inject-head=head-inject \
2925 -Smessage-inject-tail=tail-inject \
2926 -Ssignature=./.tmysig \
2928 check behave:message_injections-3 0 "${MBOX}" '3114203412 198'
2929 check behave:message_injections-4 - .tall '4294967295 0' # empty file
2934 t_behave_compose_hooks() { # TODO monster
2935 t_prolog t_behave_compose_hooks
2936 TRAP_EXIT_ADDONS=".
/.t
*"
2938 (echo line one&&echo line two&&echo line three) > ./.treadctl
2939 (echo echo four&&echo echo five&&echo echo six) > ./.tattach
2941 ${cat} <<-_EOT > ./.tsendmail.sh
2943 (echo 'From PrimulaVeris Wed Apr 10 22:59:00 2017' && ${cat} && echo
2946 chmod 0755 ./.tsendmail.sh
2948 ${cat} <<'__EOT__' > ./.trc
2950 echoerr "Failed
: $1. Bailing out
"; echo "~x
"; xit
2953 vput vexpr es substr "$1" 0 1
2958 define read_mline_res {
2959 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
2960 echo $len/$es/$^ERRNAME: $hl
2961 if [ $es -ne $^ERR-NONE ]
2962 xcall bail read_mline_res
2964 \xcall read_mline_res
2969 echo "~^header list
"; read hl; echo $hl;\
2970 call xerr "$hl" "in_addr
($xh) 0-1"
2972 echo "~^header insert
$xh diet
<$xh@exam.ple
> spliced
";\
2973 read es; echo $es; call xerr "$es" "ins_addr
$xh 1-1"
2974 echo "~^header insert
$xh <${xh}2@exam.ple
>";\
2975 read es; echo $es; call xerr "$es" "ins_addr
$xh 1-2"
2976 echo "~^header insert
$xh ${xh}3@exam.ple
";\
2977 read es; echo $es; call xerr "$es" "ins_addr
$xh 1-3"
2978 echo "~^header list
$xh"; read hl; echo $hl;\
2979 call xerr "$hl" "ins_addr
$xh 1-4"
2980 echo "~^header show
$xh"; read es; call xerr $es "ins_addr
$xh 1-5"
2983 if [ "$t_remove" == "" ]
2987 echo "~^header remove
$xh"; read es; call xerr $es "ins_addr
$xh 2-1"
2988 echo "~^header remove
$xh"; read es; vput vexpr es substr $es 0 3
2990 xcall bail "ins_addr
$xh 2-2"
2992 echo "~^header list
$xh"; read es; vput vexpr es substr $es 0 3
2994 xcall bail "ins_addr
$xh 2-3"
2996 echo "~^header show
$xh"; read es; vput vexpr es substr $es 0 3
2998 xcall bail "ins_addr
$xh 2-4"
3002 echo "~^header insert
$xh diet
<$xh@exam.ple
> spliced
";\
3003 read es; echo $es; call xerr "$es" "ins_addr
$xh 3-1"
3004 echo "~^header insert
$xh <${xh}2@exam.ple
>";\
3005 read es; echo $es; call xerr "$es" "ins_addr
$xh 3-2"
3006 echo "~^header insert
$xh ${xh}3@exam.ple
";\
3007 read es; echo $es; call xerr "$es" "ins_addr
$xh 3-3"
3008 echo "~^header list
$xh"; read hl; echo $hl;\
3009 call xerr "$hl" "ins_addr
$xh 3-4"
3010 echo "~^header show
$xh"; read es; call xerr $es "ins_addr
$xh 3-5"
3013 echo "~^header remove-at
$xh 1"; read es;\
3014 call xerr $es "ins_addr
$xh 3-6"
3015 echo "~^header remove-at
$xh 1"; read es;\
3016 call xerr $es "ins_addr
$xh 3-7"
3017 echo "~^header remove-at
$xh 1"; read es;\
3018 call xerr $es "ins_addr
$xh 3-8"
3019 echo "~^header remove-at
$xh 1"; read es;\
3020 vput vexpr es substr $es 0 3
3022 xcall bail "ins_addr
$xh 3-9"
3024 echo "~^header remove-at
$xh T
"; read es;\
3025 vput vexpr es substr $es 0 3
3027 xcall bail "ins_addr
$xh 3-10"
3029 echo "~^header list
$xh"; read es;\
3030 vput vexpr es substr $es 0 3
3032 xcall bail "ins_addr
$xh 3-11"
3034 echo "~^header show
$xh"; read es;\
3035 vput vexpr es substr $es 0 3
3037 xcall bail "ins_addr
$xh 3-12"
3041 echo "~^header insert
$xh diet
<$xh@exam.ple
> spliced
";\
3042 read es; echo $es; call xerr "$es" "ins_addr
$xh 4-1"
3043 echo "~^header insert
$xh <${xh}2@exam.ple
> (comment
) \"Quot
(e
)d
\"";\
3044 read es; echo $es; call xerr "$es" "ins_addr
$xh 4-2"
3045 echo "~^header insert
$xh ${xh}3@exam.ple
";\
3046 read es; echo $es; call xerr "$es" "ins_addr
$xh 4-3"
3047 echo "~^header list
$xh"; read hl; echo $hl;\
3048 call xerr "$hl" "header list
$xh 3-4"
3049 echo "~^header show
$xh"; read es; call xerr $es "ins_addr
$xh 4-5"
3052 echo "~^header remove-at
$xh 3"; read es;\
3053 call xerr $es "ins_addr
$xh 4-6"
3054 echo "~^header remove-at
$xh 2"; read es;\
3055 call xerr $es "ins_addr
$xh 4-7"
3056 echo "~^header remove-at
$xh 1"; read es;\
3057 call xerr $es "ins_addr
$xh 4-8"
3058 echo "~^header remove-at
$xh 1"; read es;\
3059 vput vexpr es substr $es 0 3
3061 xcall bail "ins_addr
$xh 4-9"
3063 echo "~^header remove-at
$xh T
"; read es;\
3064 vput vexpr es substr $es 0 3
3066 xcall bail "ins_addr
$xh 4-10"
3068 echo "~^header list
$xh"; read es;\
3069 vput vexpr es substr $es 0 3
3071 xcall bail "ins_addr
$xh 4-11"
3073 echo "~^header show
$xh"; read es;\
3074 vput vexpr es substr $es 0 3
3076 xcall bail "ins_addr
$xh 4-12"
3080 wysh set xh=$1 mult=$2
3081 echo "~^header list
"; read hl; echo $hl;\
3082 call xerr "$hl" "ins_ref
($xh) 0-1"
3084 echo "~^header insert
$xh <$xh@exam.ple
>";\
3085 read es; echo $es; call xerr "$es" "ins_ref
$xh 1-1"
3087 echo "~^header insert
$xh <${xh}2@exam.ple
>";\
3088 read es; echo $es; call xerr "$es" "ins_ref
$xh 1-2"
3089 echo "~^header insert
$xh ${xh}3@exam.ple
";\
3090 read es; echo $es; call xerr "$es" "ins_ref
$xh 1-3"
3092 echo "~^header insert
$xh <${xh}2@exam.ple
>"; read es;\
3093 vput vexpr es substr $es 0 3
3095 xcall bail "ins_ref
$xh 1-4"
3099 echo "~^header list
$xh"; read hl; echo $hl;\
3100 call xerr "$hl" "ins_ref
$xh 1-5"
3101 echo "~^header show
$xh"; read es; call xerr $es "ins_ref
$xh 1-6"
3104 if [ "$t_remove" == "" ]
3108 echo "~^header remove
$xh"; read es;\
3109 call xerr $es "ins_ref
$xh 2-1"
3110 echo "~^header remove
$xh"; read es;\
3111 vput vexpr es substr $es 0 3
3113 xcall bail "ins_ref
$xh 2-2"
3115 echo "~^header list
$xh"; read es;\
3116 vput vexpr es substr $es 0 3
3118 xcall bail "$es ins_ref
$xh 2-3"
3120 echo "~^header show
$xh"; read es;\
3121 vput vexpr es substr $es 0 3
3123 xcall bail "ins_ref
$xh 2-4"
3127 echo "~^header insert
$xh <$xh@exam.ple
>";\
3128 read es; echo $es; call xerr "$es" "ins_ref
$xh 3-1"
3130 echo "~^header insert
$xh <${xh}2@exam.ple
>";\
3131 read es; echo $es; call xerr "$es" "ins_ref
$xh 3-2"
3132 echo "~^header insert
$xh ${xh}3@exam.ple
";\
3133 read es; echo $es; call xerr "$es" "ins_ref
$xh 3-3"
3135 echo "~^header list
$xh";\
3136 read hl; echo $hl; call xerr "$hl" "ins_ref
$xh 3-4"
3137 echo "~^header show
$xh";\
3138 read es; call xerr $es "ins_ref
$xh 3-5"
3141 echo "~^header remove-at
$xh 1"; read es;\
3142 call xerr $es "ins_ref
$xh 3-6"
3143 if [ $mult -ne 0 ] && [ $xh != subject ]
3144 echo "~^header remove-at
$xh 1"; read es;\
3145 call xerr $es "ins_ref
$xh 3-7"
3146 echo "~^header remove-at
$xh 1"; read es;\
3147 call xerr $es "ins_ref
$xh 3-8"
3149 echo "~^header remove-at
$xh 1"; read es;\
3150 vput vexpr es substr $es 0 3
3152 xcall bail "ins_ref
$xh 3-9"
3154 echo "~^header remove-at
$xh T
"; read es;\
3155 vput vexpr es substr $es 0 3
3157 xcall bail "ins_ref
$xh 3-10"
3159 echo "~^header show
$xh"; read es;\
3160 vput vexpr es substr $es 0 3
3162 xcall bail "ins_ref
$xh 3-11"
3166 echo "~^header insert
$xh <$xh@exam.ple
> ";\
3167 read es; echo $es; call xerr "$es" "ins_ref
$xh 4-1"
3169 echo "~^header insert
$xh <${xh}2@exam.ple
> ";\
3170 read es; echo $es; call xerr "$es" "ins_ref
$xh 4-2"
3171 echo "~^header insert
$xh ${xh}3@exam.ple
";\
3172 read es; echo $es; call xerr "$es" "ins_ref
$xh 4-3"
3174 echo "~^header list
$xh"; read hl; echo $hl;\
3175 call xerr "$hl" "ins_ref
$xh 4-4"
3176 echo "~^header show
$xh"; read es; call xerr $es "ins_ref
$xh 4-5"
3179 if [ $mult -ne 0 ] && [ $xh != subject ]
3180 echo "~^header remove-at
$xh 3"; read es;\
3181 call xerr $es "ins_ref
$xh 4-6"
3182 echo "~^header remove-at
$xh 2"; read es;\
3183 call xerr $es "ins_ref
$xh 4-7"
3185 echo "~^header remove-at
$xh 1"; read es;\
3186 call xerr $es "ins_ref
$xh 4-8"
3187 echo "~^header remove-at
$xh 1"; read es;\
3188 vput vexpr es substr $es 0 3
3190 xcall bail "ins_ref
$xh 4-9"
3192 echo "~^header remove-at
$xh T
"; read es;\
3193 vput vexpr es substr $es 0 3
3195 xcall bail "ins_ref
$xh 4-10"
3197 echo "~^header show
$xh"; read es;\
3198 vput vexpr es substr $es 0 3
3200 xcall bail "ins_ref
$xh 4-11"
3205 # In collect.c order
3207 call ins_ref sender 0 # Not a "ref
", but works
3211 call ins_addr reply-To
3212 call ins_addr mail-Followup-to
3213 call ins_ref messAge-id 0
3214 call ins_ref rEfErEncEs 1
3215 call ins_ref in-Reply-to 1
3216 call ins_ref subject 1 # Not a "ref
", but works (with tweaks)
3217 call ins_addr freeForm1
3218 call ins_addr freeform2
3220 echo "~^header show MAILX-Command
"; read es; call xerr $es "t_header
1000"
3222 echo "~^header show MAILX-raw-TO
"; read es; call xerr $es "t_header
1001"
3230 echo "~^attachment
";\
3231 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3233 xcall bail "attach
0-1"
3236 echo "~^attach attribute .
/.treadctl
";\
3237 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3239 xcall bail "attach
0-2"
3241 echo "~^attachment attribute-at
1";\
3242 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3244 xcall bail "attach
0-3"
3247 echo "~^attachment insert .
/.treadctl
=ascii
";\
3248 read hl; echo $hl; call xerr "$hl" "attach
1-1"
3249 echo "~^attachment list
";\
3250 read es; echo $es;call xerr "$es" "attach
1-2"
3252 echo "~^attachment attribute .
/.treadctl
";\
3253 read es; echo $es;call xerr "$es" "attach
1-3"
3255 echo "~^attachment attribute .treadctl
";\
3256 read es; echo $es;call xerr "$es" "attach
1-4"
3258 echo "~^attachment attribute-at
1";\
3259 read es; echo $es;call xerr "$es" "attach
1-5"
3262 echo "~^attachment attribute-set .
/.treadctl filename rctl
";\
3263 read es; echo $es;call xerr "$es" "attach
1-6"
3264 echo "~^attachment attribute-set .treadctl content-description Au
";\
3265 read es; echo $es;call xerr "$es" "attach
1-7"
3266 echo "~^attachment attribute-set-at
1 content-id
<10.du@ich
>";\
3267 read es; echo $es;call xerr "$es" "attach
1-8"
3269 echo "~^attachment attribute .
/.treadctl
";\
3270 read es; echo $es;call xerr "$es" "attach
1-9"
3272 echo "~^attachment attribute .treadctl
";\
3273 read es; echo $es;call xerr "$es" "attach
1-10"
3275 echo "~^attachment attribute rctl
";\
3276 read es; echo $es;call xerr "$es" "attach
1-11"
3278 echo "~^attachment attribute-at
1";\
3279 read es; echo $es;call xerr "$es" "attach
1-12"
3283 echo "~^attachment insert .
/.tattach
=latin1
";\
3284 read hl; echo $hl; call xerr "$hl" "attach
2-1"
3285 echo "~^attachment list
";\
3286 read es; echo $es;call xerr "$es" "attach
2-2"
3288 echo "~^attachment attribute .
/.tattach
";\
3289 read es; echo $es;call xerr "$es" "attach
2-3"
3291 echo "~^attachment attribute .tattach
";\
3292 read es; echo $es;call xerr "$es" "attach
2-4"
3294 echo "~^attachment attribute-at
2";\
3295 read es; echo $es;call xerr "$es" "attach
2-5"
3298 echo "~^attachment attribute-set .
/.tattach filename tat
";\
3299 read es; echo $es;call xerr "$es" "attach
2-6"
3301 "~^attachment attribute-set .tattach content-description Au2
";\
3302 read es; echo $es;call xerr "$es" "attach
2-7"
3303 echo "~^attachment attribute-set-at
2 content-id
<20.du@wir
>";\
3304 read es; echo $es;call xerr "$es" "attach
2-8"
3306 "~^attachment attribute-set-at
2 content-type application
/x-sh
";\
3307 read es; echo $es;call xerr "$es" "attach
2-9"
3309 echo "~^attachment attribute .
/.tattach
";\
3310 read es; echo $es;call xerr "$es" "attach
2-10"
3312 echo "~^attachment attribute .tattach
";\
3313 read es; echo $es;call xerr "$es" "attach
2-11"
3315 echo "~^attachment attribute tat
";\
3316 read es; echo $es;call xerr "$es" "attach
2-12"
3318 echo "~^attachment attribute-at
2";\
3319 read es; echo $es;call xerr "$es" "attach
2-13"
3323 if [ "$t_remove" == "" ]
3327 echo "~^attachment remove .
/.treadctl
"; read es;\
3328 call xerr $es "attach
3-1"
3329 echo "~^attachment remove .
/.tattach
"; read es;\
3330 call xerr $es "attach
3-2"
3331 echo "~^ attachment remove .
/.treadctl
"; read es;\
3332 vput vexpr es substr $es 0 3
3334 xcall bail "attach
3-3"
3336 echo "~^ attachment remove .
/.tattach
"; read es;\
3337 vput vexpr es substr $es 0 3
3339 xcall bail "attach
3-4"
3341 echo "~^attachment list
"; read es;\
3342 vput vexpr es substr $es 0 3
3344 xcall bail "attach
3-5"
3348 echo "~^attachment insert .
/.tattach
=latin1
";\
3349 read hl; echo $hl; call xerr "$hl" "attach
4-1"
3350 echo "~^attachment insert .
/.tattach
=latin1
";\
3351 read hl; echo $hl; call xerr "$hl" "attach
4-2"
3352 echo "~^attachment list
";\
3353 read es; echo $es;call xerr "$es" "attach
4-3"
3355 echo "~^ attachment remove .tattach
"; read es;\
3356 vput vexpr es substr $es 0 3
3358 xcall bail "attach
4-4 $es"
3360 echo "~^attachment remove-at T
"; read es;\
3361 vput vexpr es substr $es 0 3
3363 xcall bail "attach
4-5"
3365 echo "~^attachment remove .
/.tattach
"; read es;\
3366 call xerr $es "attach
4-6"
3367 echo "~^attachment remove .
/.tattach
"; read es;\
3368 call xerr $es "attach
4-7"
3369 echo "~^ attachment remove .
/.tattach
"; read es;\
3370 vput vexpr es substr $es 0 3
3372 xcall bail "attach
4-8 $es"
3374 echo "~^attachment list
"; read es;\
3375 vput vexpr es substr $es 0 3
3377 xcall bail "attach
4-9"
3381 echo "~^attachment insert .
/.tattach
=latin1
";\
3382 read hl; echo $hl; call xerr "$hl" "attach
5-1"
3383 echo "~^attachment insert .
/.tattach
=latin1
";\
3384 read hl; echo $hl; call xerr "$hl" "attach
5-2"
3385 echo "~^attachment insert .
/.tattach
=latin1
";\
3386 read hl; echo $hl; call xerr "$hl" "attach
5-3"
3387 echo "~^attachment list
";\
3388 read es; echo $es;call xerr "$es" "attach
5-4"
3391 echo "~^attachment remove-at
3"; read es;\
3392 call xerr $es "attach
5-5"
3393 echo "~^attachment remove-at
3"; read es;\
3394 vput vexpr es substr $es 0 3
3396 xcall bail "attach
5-6"
3398 echo "~^attachment remove-at
2"; read es;\
3399 call xerr $es "attach
5-7"
3400 echo "~^attachment remove-at
2"; read es;\
3401 vput vexpr es substr $es 0 3
3403 xcall bail "attach
5-8"
3405 echo "~^attachment remove-at
1"; read es;\
3406 call xerr $es "attach
5-9"
3407 echo "~^attachment remove-at
1"; read es;\
3408 vput vexpr es substr $es 0 3
3410 xcall bail "attach
5-10"
3413 echo "~^attachment list
"; read es;\
3414 vput vexpr es substr $es 0 3
3416 xcall bail "attach
5-11"
3420 echo "~^attachment insert .
/.tattach
=latin1
";\
3421 read hl; echo $hl; call xerr "$hl" "attach
6-1"
3422 echo "~^attachment insert .
/.tattach
=latin1
";\
3423 read hl; echo $hl; call xerr "$hl" "attach
6-2"
3424 echo "~^attachment insert .
/.tattach
=latin1
";\
3425 read hl; echo $hl; call xerr "$hl" "attach
6-3"
3426 echo "~^attachment list
";\
3427 read es; echo $es;call xerr "$es" "attach
6-4"
3430 echo "~^attachment remove-at
1"; read es;\
3431 call xerr $es "attach
6-5"
3432 echo "~^attachment remove-at
1"; read es;\
3433 call xerr $es "attach
6-6"
3434 echo "~^attachment remove-at
1"; read es;\
3435 call xerr $es "attach
6-7"
3436 echo "~^attachment remove-at
1"; read es;\
3437 vput vexpr es substr $es 0 3
3439 xcall bail "attach
6-8"
3442 echo "~^attachment list
"; read es;\
3443 vput vexpr es substr $es 0 3
3445 xcall bail "attach
6-9"
3457 echo on-compose-enter, mailx-command<$mailx-command>
3458 alternates alter1@exam.ple alter2@exam.ple
3460 set autocc='alter1@exam.ple alter2@exam.ple'
3461 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3462 echo mailx-subject<$mailx-subject>
3463 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3464 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3465 mailx-raw-bcc<$mailx-raw-bcc>
3466 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3467 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3470 echo on-compose-leave, mailx-command<$mailx-command>
3472 eval alternates $al alter3@exam.ple alter4@exam.ple
3474 set autobcc='alter3@exam.ple alter4@exam.ple'
3475 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3476 echo mailx-subject<$mailx-subject>
3477 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3478 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3479 mailx-raw-bcc<$mailx-raw-bcc>
3480 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3481 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3484 echo on-compose-cleanup, mailx-command<$mailx-command>
3487 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3488 echo mailx-subject<$mailx-subject>
3489 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3490 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3491 mailx-raw-bcc<$mailx-raw-bcc>
3492 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3493 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3495 wysh set on-compose-splice=t_ocs \
3496 on-compose-enter=t_oce on-compose-leave=t_ocl \
3497 on-compose-cleanup=t_occ
3501 printf 'm this-goes@nowhere\nbody\n!.\n' |
3502 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3503 -X'source ./.trc' -Smta=./.tsendmail.sh \
3505 ${cat} ./.tall >> "${MBOX}"
3506 check behave:compose_hooks-1 0 "${MBOX}" '522535560 10101'
3509 printf 'm this-goes@nowhere\nbody\n!.\n' |
3510 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3511 -St_remove=1 -X'source ./.trc' -Smta=./.tsendmail.sh \
3513 ${cat} ./.tall >> "${MBOX}"
3514 check behave:compose_hooks-2 0 "${MBOX}" '3654000499 12535'
3518 # Some state machine stress, shell compose hook, localopts for hook, etc.
3519 # readctl in child. ~r as HERE document
3521 printf 'm ex@am.ple\nbody\n!.
3522 echon ${mailx-command}${mailx-subject}
3523 echon ${mailx-from}${mailx-sender}
3524 echon ${mailx-to}${mailx-cc}${mailx-bcc}
3525 echon ${mailx-raw-to}${mailx-raw-cc}${mailx-raw-bcc}
3526 echon ${mailx-orig-from}${mailx-orig-to}${mailx-orig-gcc}${mailx-orig-bcc}
3527 var t_oce t_ocs t_ocs_sh t_ocl t_occ autocc
3528 ' | ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3529 -Smta=./.tsendmail.sh \
3532 echoerr "Failed
: $1. Bailing out
"; echo "~x
"; xit
3535 vput vexpr es substr "$1" 0 1
3540 define read_mline_res {
3541 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3542 echo $len/$es/$^ERRNAME: $hl
3543 if [ $es -ne $^ERR-NONE ]
3544 xcall bail read_mline_res
3546 \xcall read_mline_res
3550 vput vexpr i + 1 "$2"
3552 vput vexpr j % $i 10
3559 eval \\$j _work $1 $i
3562 vput vexpr i + $i "$1"
3566 wysh set line; read line;wysh set es=$? en=$^ERRNAME ;\
3567 echo read:$es/$en: $line
3568 if [ "${es}" -ne -1 ]
3571 readctl remove $cwd/.treadctl; echo readctl remove:$?/$^ERRNAME
3576 echo "~^header list
"; read hl; echo $hl;\
3577 vput vexpr es substr "$hl" 0 1
3579 xcall bail "header list
"
3582 call _work 1; echo $?
3583 echo "~^header insert cc splicy diet
<splice@exam.ple
> spliced
";\
3584 read es; echo $es; vput vexpr es substr "$es" 0 1
3586 xcall bail "be diet
"
3588 echo "~^header insert cc
<splice2@exam.ple
>";\
3589 read es; echo $es; vput vexpr es substr "$es" 0 1
3591 xcall bail "be diet2
"
3594 call _work 2; echo $?
3595 echo "~^header insert bcc juicy juice
<juice@exam.ple
> spliced
";\
3596 read es; echo $es;vput vexpr es substr "$es" 0 1
3598 xcall bail "be juicy
"
3600 echo "~^header insert bcc juice2@exam.ple
";\
3601 read es; echo $es;vput vexpr es substr "$es" 0 1
3603 xcall bail "be juicy2
"
3605 echo "~^header insert bcc juice3
<juice3@exam.ple
>";\
3606 read es; echo $es;vput vexpr es substr "$es" 0 1
3608 xcall bail "be juicy3
"
3610 echo "~^header insert bcc juice4@exam.ple
";\
3611 read es; echo $es;vput vexpr es substr "$es" 0 1
3613 xcall bail "be juicy4
"
3616 echo "~^header remove-at bcc
3";\
3617 read es; echo $es;vput vexpr es substr "$es" 0 1
3619 xcall bail "remove juicy5
"
3621 echo "~^header remove-at bcc
2";\
3622 read es; echo $es;vput vexpr es substr "$es" 0 1
3624 xcall bail "remove juicy6
"
3626 echo "~^header remove-at bcc
3";\
3627 read es; echo $es;vput vexpr es substr "$es" 0 3
3629 xcall bail "failed to remove-at
"
3631 # Add duplicates which ought to be removed!
3632 echo "~^header insert bcc juice4@exam.ple
";\
3633 read es; echo $es;vput vexpr es substr "$es" 0 1
3635 xcall bail "be juicy4-1
"
3637 echo "~^header insert bcc juice4@exam.ple
";\
3638 read es; echo $es;vput vexpr es substr "$es" 0 1
3640 xcall bail "be juicy4-2
"
3642 echo "~^header insert bcc juice4@exam.ple
";\
3643 read es; echo $es;vput vexpr es substr "$es" 0 1
3645 xcall bail "be juicy4-3
"
3650 call _work 3; echo $?
3652 vput ! i echo just knock if you can hear me;\
3654 while [ $i -lt 24 ]; do printf "%s
" $i; i=`expr $i + 1`; done;\
3656 echon shell-cmd says $?/$^ERRNAME: $i
3657 echo "~x will not become interpreted
, we are reading
until __EOT
"
3659 read r_status; echo "~~r status output
: $r_status"
3660 echo "~
:echo $? $
! $^ERRNAME
"
3662 echo "~~r status from parent
: $r_status"
3665 call _work 4; echo $?
3666 vput cwd cwd;echo cwd:$?
3667 readctl create $cwd/.treadctl ;echo readctl:$?/$^ERRNAME;\
3671 call _work 5; echo $?
3672 echo "~^header show MAILX-Command
"; read es;\
3673 call xerr $es "t_header
1000"; call read_mline_res
3674 echo "~^header show MAILX-raw-TO
"; read es;\
3675 call xerr $es "t_header
1001"; xcall read_mline_res
3677 echoerr IT IS WRONG IF YOU SEE THIS
3680 echo on-compose-enter, mailx-command<$mailx-command>
3681 set t_oce autobcc=oce@exam.ple
3682 alternates alter1@exam.ple alter2@exam.ple
3684 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3685 echo mailx-subject<$mailx-subject>
3686 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3687 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3688 mailx-raw-bcc<$mailx-raw-bcc>
3689 echo mailx-orig-from<$mailx-orig-from> \
3690 mailx-orig-to<$mailx-orig-to> \
3691 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3694 echo on-compose-leave, mailx-command<$mailx-command>
3695 set t_ocl autocc=ocl@exam.ple
3697 alternates alter3@exam.ple alter4@exam.ple
3699 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3700 echo mailx-subject<$mailx-subject>
3701 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3702 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3703 mailx-raw-bcc<$mailx-raw-bcc>
3704 echo mailx-orig-from<$mailx-orig-from> \
3705 mailx-orig-to<$mailx-orig-to> \
3706 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3709 echo on-compose-cleanup, mailx-command<$mailx-command>
3710 set t_occ autocc=occ@exam.ple
3713 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3714 echo mailx-subject<$mailx-subject>
3715 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3716 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3717 mailx-raw-bcc<$mailx-raw-bcc>
3718 echo mailx-orig-from<$mailx-orig-from> \
3719 mailx-orig-to<$mailx-orig-to> \
3720 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3722 wysh set on-compose-splice=t_ocs \
3723 on-compose-splice-shell="read ver
;printf \"t_ocs-shell
\\n\
3724 ~t shell@exam.ple
\\n~
:set t_ocs_sh
\\n
\"" \
3725 on-compose-enter=t_oce on-compose-leave=t_ocl \
3726 on-compose-cleanup=t_occ
3728 ex0_test behave:compose_hooks-3-estat
3729 ${cat} ./.tnotes >> "${MBOX}"
3731 check behave:compose_hooks-3 - "${MBOX}" '679526364 2431'
3733 # Reply, forward, resend, Resend
3736 printf 'set from=f1@z\nm t1@z\nb1\n!.\nset from=f2@z\nm t2@z\nb2\n!.\n' |
3737 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3738 -Smta=./.tsendmail.sh
3741 echo start: $? $! $^ERRNAME
3743 echo File: $? $! $^ERRNAME;echo;echo
3745 this is content of reply 1
3747 echo reply 1: $? $! $^ERRNAME;echo;echo
3749 this is content of Reply 1 2
3751 echo Reply 1 2: $? $! $^ERRNAME;echo;echo
3752 forward 1 fwdex@am.ple
3753 this is content of forward 1
3755 echo forward 1: $? $! $^ERRNAME;echo;echo
3756 resend 1 2 resendex@am.ple
3757 echo resend 1 2: $? $! $^ERRNAME;echo;echo
3758 Resend 1 2 Resendex@am.ple
3759 echo Resend 1 2: $? $! $^ERRNAME;echo;echo
3761 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3762 -Smta=./.tsendmail.sh \
3765 echoerr "Failed
: $1. Bailing out
"; echo "~x
"; xit
3768 vput vexpr es substr "$1" 0 1
3773 define read_mline_res {
3774 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3775 echo mline_res:$len/$es/$^ERRNAME: $hl
3776 if [ $es -ne $^ERR-NONE ]
3777 xcall bail read_mline_res
3779 \xcall read_mline_res
3783 echo "~^header show
$1"; read es;\
3784 call xerr $es "work_hl
$1"; echo $1; call read_mline_res
3792 echo t_ocs version $ver
3793 echo "~^header list
"; read hl; echo $hl;\
3794 echoerr the header list is $hl;\
3795 call xerr "$hl" "header list
"
3796 eval vpospar set $hl
3799 echoerr IT IS WRONG IF YOU SEE THIS
3802 echo on-XY-enter, mailx-command<$mailx-command>
3803 set t_oce autobcc=oce@exam.ple
3804 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3805 echo mailx-subject<$mailx-subject>
3806 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3807 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3808 mailx-raw-bcc<$mailx-raw-bcc>
3809 echo mailx-orig-from<$mailx-orig-from> \
3810 mailx-orig-to<$mailx-orig-to> \
3811 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3814 echo on-XY-leave, mailx-command<$mailx-command>
3815 set t_ocl autocc=ocl@exam.ple
3816 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3817 echo mailx-subject<$mailx-subject>
3818 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3819 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3820 mailx-raw-bcc<$mailx-raw-bcc>
3821 echo mailx-orig-from<$mailx-orig-from> \
3822 mailx-orig-to<$mailx-orig-to> \
3823 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3826 echo on-XY-cleanup, mailx-command<$mailx-command>
3827 set t_occ autocc=occ@exam.ple
3828 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3829 echo mailx-subject<$mailx-subject>
3830 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3831 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3832 mailx-raw-bcc<$mailx-raw-bcc>
3833 echo mailx-orig-from<$mailx-orig-from> \
3834 mailx-orig-to<$mailx-orig-to> \
3835 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3837 wysh set on-compose-splice=t_ocs \
3838 on-compose-enter=t_oce on-compose-leave=t_ocl \
3839 on-compose-cleanup=t_occ \
3840 on-resend-enter=t_oce on-resend-cleanup=t_occ
3842 ex0_test behave:compose_hooks-4-estat
3843 ${cat} ./.tnotes >> "${MBOX}"
3845 check behave:compose_hooks-4 - "${MBOX}" '3038884027 7516'
3850 t_behave_mass_recipients() {
3851 t_prolog t_behave_mass_recipients
3852 TRAP_EXIT_ADDONS=".
/.t
*"
3854 ${cat} <<-_EOT > ./.tsendmail.sh
3856 (echo 'From Eucalyptus Sat Jul 08 21:14:57 2017' && ${cat} && echo
3859 chmod 0755 ./.tsendmail.sh
3861 ${cat} <<'__EOT__' > ./.trc
3863 echoerr "Failed
: $1. Bailing out
"; echo "~x
"; xit
3866 wysh set nr=$1 hn=$2
3867 echo "~
$hn $hn$nr@
$hn"; echo '~:echo $?'; read es
3869 xcall bail "ins_addr
$hn 1-$nr"
3871 vput vexpr nr + $nr 1
3872 if [ "$nr" -le "$maximum" ]
3873 xcall ins_addr $nr $hn
3877 wysh set nr=$1 hn=$2
3878 alternates $hn$nr@$hn
3879 vput vexpr nr + $nr 2
3880 if [ "$nr" -le "$maximum" ]
3881 xcall bld_alter $nr $hn
3891 if [ "$t_remove" != '' ]
3896 set on-compose-splice=t_ocs on-compose-leave=t_ocl
3900 printf 'm this-goes@nowhere\nbody\n!.\n' |
3901 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3902 -X'source ./.trc' -Smta=./.tsendmail.sh -Smaximum=2001 \
3904 ${cat} ./.tall >> "${MBOX}"
3905 check behave:mass_recipients-1 0 "${MBOX}" '2912243346 51526'
3908 printf 'm this-goes@nowhere\nbody\n!.\n' |
3909 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3910 -St_remove=1 -X'source ./.trc' -Smta=./.tsendmail.sh -Smaximum=2001 \
3912 ${cat} ./.tall >> "${MBOX}"
3913 check behave:mass_recipients-2 0 "${MBOX}" '4097804632 34394'
3918 t_behave_mime_types_load_control() {
3919 t_prolog t_behave_mime_types_load_control
3920 TRAP_EXIT_ADDONS=".
/.t
*"
3922 ${cat} <<-_EOT > ./.tmts1
3923 @ application/mathml+xml mathml
3925 ${cat} <<-_EOT > ./.tmts2
3926 @ x-conference/x-cooltalk ice
3928 @ application/aga-aga aga
3931 ${cat} <<-_EOT > ./.tmts1.mathml
3932 <head>nonsense ML</head>
3934 ${cat} <<-_EOT > ./.tmts2.ice
3937 printf 'of which the c\x01rack is coming soon' > ./.tmtsx.doom
3938 printf 'of which the c\x01rack is coming soon' > ./.tmtsx.aga
3952 ' "${MBOX}" "${MBOX}" |
3954 -Smimetypes-load-control=f=./.tmts1,f=./.tmts2 \
3956 ex0_test behave:mime_types_load_control
3958 ${cat} "${MBOX}" >> ./.tout
3959 check behave:mime_types_load_control-1 - ./.tout '1441260727 2449'
3961 echo type | ${MAILX} ${ARGS} -R \
3962 -Smimetypes-load-control=f=./.tmts1,f=./.tmts3 \
3963 -f "${MBOX}" >> ./.tout 2>&1
3964 check behave:mime_types_load_control-2 0 ./.tout '1441391438 3646'
3969 t_behave_lreply_futh_rth_etc() {
3970 t_prolog t_behave_lreply_futh_rth_etc
3971 TRAP_EXIT_ADDONS=".
/.t
*"
3973 ${cat} <<-_EOT > ./.tsendmail.sh
3975 (echo 'From HumulusLupulus Thu Jul 27 14:41:20 2017' && ${cat} && echo
3978 chmod 0755 ./.tsendmail.sh
3980 ${cat} <<-_EOT > ./.tmbox
3981 From neverneverland Sun Jul 23 13:46:25 2017
3982 Subject: Bugstop: five miles out 1
3983 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
3984 From: mister originator <mr@originator>
3985 To: bugstop-commit@five.miles.out, laber@backe.eu
3987 Mail-Followup-To: bugstop@five.miles.out, laber@backe.eu, is@a.list
3988 In-reply-to: <20170719111113.bkcMz%laber@backe.eu>
3989 Date: Wed, 19 Jul 2017 09:22:57 -0400
3990 Message-Id: <20170719132257.766AF781267@originator>
3993 > |Sorry, I think I misunderstand something. I would think that
3997 From neverneverland Fri Jul 7 22:39:11 2017
3998 Subject: Bugstop: five miles out 2
3999 Reply-To: mister originator2<mr2@originator>,bugstop@five.miles.out,is@a.list
4000 Content-Transfer-Encoding: 7bit
4001 From: mister originator <mr@originator>
4002 To: bugstop-commit@five.miles.out
4004 Message-ID: <149945963975.28888.6950788126957753723.reportbug@five.miles.out>
4005 Date: Fri, 07 Jul 2017 16:33:59 -0400
4008 capable of changing back.
4010 From neverneverland Fri Jul 7 22:42:00 2017
4011 Subject: Bugstop: five miles out 3
4012 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
4013 Content-Transfer-Encoding: 7bit
4014 From: mister originator <mr@originator>
4015 To: bugstop-commit@five.miles.out
4017 Message-ID: <149945963975.28888.6950788126957753746.reportbug@five.miles.out>
4018 Date: Fri, 07 Jul 2017 16:33:59 -0400
4019 List-Post: <mailto:bugstop@five.miles.out>
4022 are you ready, boots?
4024 From neverneverland Sat Aug 19 23:15:00 2017
4025 Subject: Bugstop: five miles out 4
4026 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
4027 Content-Transfer-Encoding: 7bit
4028 From: mister originator <mr@originator>
4029 To: bugstop@five.miles.out
4031 Message-ID: <149945963975.28888.6950788126qtewrqwer.reportbug@five.miles.out>
4032 Date: Fri, 07 Jul 2017 16:33:59 -0400
4033 List-Post: <mailto:bugstop@five.miles.out>
4036 are you ready, boots?
4041 ${cat} <<-'_EOT' | ${MAILX} ${ARGS} -Sescape=! -Smta=./.tsendmail.sh \
4042 -Rf ./.tmbox >> "${MBOX}" 2>&1
4044 wysh set m="This is text of
\"reply
${1}.
"
4055 echo -----After reply
$1.1
- $1.3
: $?
/$^ERRNAME
4058 wysh
set m
="This is text of \"Reply ${1}."
4064 echo -----After Reply $1.$2: $?/$^ERRNAME
4073 wysh set m="This is text of \"Lreply ${1}." on-compose-splice=_Lh n=$2
4077 # We need two indirections for this test: one for the case that Lreply
4078 # fails because of missing recipients: we need to read EOF next, thus
4079 # place this in _Ls last; and second for the succeeding cases EOF is
4080 # not what these should read, so go over the backside and splice it in!
4082 echo -----After Lreply $1.$2: $?/$^ERRNAME
4085 localopts call-fixate yes
4087 call R $1 1; call R $1 2; call R $1 3; call R $1 4
4088 call L $1 1; call L $1 2; call L $1 3
4091 echo;echo '===== CHANGING
=== '"$*"' =====';echo
4095 set from=laber@backe.eu
4098 call tweak set reply-to-honour
4100 call tweak set followup-to
4102 call tweak set followup-to-honour
4104 call tweak mlist bugstop@five.miles.out
4106 call tweak mlsubscribe bugstop@five.miles.out
4108 call tweak set recipients-in-cc
4112 check behave:lreply_futh_rth_etc-1 0 "${MBOX}" '940818845 29373'
4116 ${cat} <<-_EOT > ./.tmbox
4117 From tom@i-i.example Thu Oct 26 03:15:55 2017
4118 Date: Wed, 25 Oct 2017 21:15:46 -0400
4119 From: tom <tom@i-i.example>
4120 To: Steffen Nurpmeso <steffen@sdaoden.eu>
4121 Cc: tom <tom@i-i.example>
4122 Subject: Re: xxxx yyyyyyyy configure does not really like a missing zzzzz
4123 Message-ID: <20171026011546.GA11643@i-i.example>
4124 Reply-To: tom@i-i.example
4125 References: <20171025214601.T2pNd%steffen@sdaoden.eu>
4126 In-Reply-To: <20171025214601.T2pNd%steffen@sdaoden.eu>
4129 The report's useful
:-)
4132 printf 'reply 1\nthank you\n!.\n' |
4133 ${MAILX} ${ARGS} -Sescape=! -Smta=.
/.tsendmail.sh
-Sreply-to-honour \
4134 -Rf .
/.tmbox
> "${MBOX}" 2>&1
4135 check behave
:lreply_futh_rth_etc-2
0 "${MBOX}" '1045866991 331'
4140 t_behave_xxxheads_rfc2047
() {
4141 t_prolog t_behave_xxxheads_rfc2047
4142 TRAP_EXIT_ADDONS
="./.t*"
4144 ${cat} <<-_EOT > ./.tsendmail.sh
4146 (echo 'From GentianaLutea Mon Dec 04 17:15:29 2017' && ${cat} &&
4149 chmod 0755 .
/.tsendmail.sh
4153 echo |
${MAILX} ${ARGS} ${ADDARG_UNI} \
4154 -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̲' \
4156 check behave
:xxxheads_rfc2047-1
0 "${MBOX}" '3370931614 375'
4158 # Single word (overlong line split -- bad standard! Requires injection of
4159 # artificial data!! But can be prevented by using RFC 2047 encoding)
4161 i
=`${awk} 'BEGIN{for(i=0; i<92; ++i) printf "0123456789_"}'`
4162 echo |
${MAILX} ${ARGS} -s "${i}" "${MBOX}"
4163 check behave:xxxheads_rfc2047-2 0 "${MBOX}" '489922370 1718'
4165 # Combination of encoded words, space and tabs of varying sort
4167 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4168 -s "1Abrä Kaspas1
2Abra Katä b_kaspas2 \
4169 3Abrä Kaspas3
4Abrä Kaspas4
5Abrä Kaspas5 \
4170 6Abra Kaspas6
7Abrä Kaspas7
8Abra Kaspas8 \
4171 9Abra Kaspastäb4-3
10Abra Kaspas1 _
11Abra Katäb1 \
4172 12Abra Kadabrä
1 After Tab after Täb this is NUTS
" \
4174 check behave:xxxheads_rfc2047-3 0 "${MBOX}" '1676887734 591'
4176 # Overlong multibyte sequence that must be forcefully split
4177 # todo This works even before v15.0, but only by accident
4179 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4180 -s "✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4181 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4182 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄
" \
4184 check behave:xxxheads_rfc2047-4 0 "${MBOX}" '3029301775 659'
4188 echo | ${MAILX} ${ARGS} \
4189 -s "1-1 B2 B3 B4 B5 B6 B\
4190 1-2 B2 B3 B4 B5 B6 B\
4191 1-3 B2 B3 B4 B5 B6 B\
4192 1-4 B2 B3 B4 B5 B6 B\
4193 1-5 B2 B3 B4 B5 B6 B\
4194 1-6 B2 B3 B4 B5 B6
" \
4196 check behave:xxxheads_rfc2047-5 0 "${MBOX}" '4126167195 297'
4198 # Leading and trailing WS
4200 echo | ${MAILX} ${ARGS} \
4201 -s " 2-1 B2 B3 B4 B5 B6 B\
4202 1-2 B2 B3 B4 B5 B6 B\
4203 1-3 B2 B3 B4 B5 B6 B\
4204 1-4 B2 B3 B4 B5 B6
" \
4206 check behave:xxxheads_rfc2047-6 0 "${MBOX}" '3600624479 236'
4208 # RFC 2047 in an address field! (Missing test caused v14.9.6!)
4210 echo "Dat Früchtchen riecht häußlich
" |
4211 ${MAILX} ${ARGS} ${ADDARG_UNI} -Sfullnames -Smta=./.tsendmail.sh \
4213 'Schnödes "Früchtchen
" <do@du> (Hä!)'
4214 check behave:xxxheads_rfc2047-7 0 "${MBOX}" '800505986 368'
4219 t_behave_rfc2231() {
4220 t_prolog t_behave_rfc2231
4221 TRAP_EXIT_ADDONS=".
/.t
*"
4224 mkdir ./.ttt || exit 1
4228 : > 'diet\ is \curd.txt'
4229 : > 'diet "is
" curd.txt'
4231 : > 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
4232 : > höde__tröge__müde__dätte__hätte__vuelle__guelle__aese__aesse__sauerliche__kräuter__österliche__grüße__mäh.txt
4233 : > hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt
4234 : > ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
4236 echo bla | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4237 -a ".
/.ttt
/ma
'ger.txt" -a "./.ttt/mä'ger.txt
" \
4238 -a './.ttt/diet\ is \curd.txt' -a './.ttt/diet "is
" curd.txt' \
4239 -a ./.ttt/höde-tröge.txt \
4240 -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 \
4241 -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 \
4242 -a ./.ttt/hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt \
4243 -a ./.ttt/✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt \
4245 check behave:rfc2231-1 0 "${MBOX}" '684985954 3092'
4247 # `resend' test, reusing $MBOX
4248 printf "Resend .
/.t2
\nx
\n" | ${MAILX} ${ARGS} -Rf "${MBOX}"
4249 check behave
:rfc2231-2
0 .
/.t2
'684985954 3092'
4251 printf "resend ./.t3\nx\n" |
${MAILX} ${ARGS} -Rf "${MBOX}"
4252 check behave:rfc2231-3 0 ./.t3 '3130352658 3148'
4257 t_behave_iconv_mbyte_base64() {
4258 t_prolog t_behave_iconv_mbyte_base64
4259 TRAP_EXIT_ADDONS=".
/.t
*"
4261 if [ -n "${UTF8_LOCALE}" ] && have_feat iconv &&
4262 (</dev/null iconv -f ascii -t iso-2022-jp) >/dev/null 2>&1 ||
4263 (</dev/null iconv -f ascii -t euc-jp) >/dev/null 2>&1; then
4266 echo 'behave:iconv_mbyte_base64: unsupported, skipped'
4270 ${cat} <<-_EOT > ./.tsendmail.sh
4272 (echo 'From DroseriaRotundifolia Thu Aug 03 17:26:25 2017' && ${cat} &&
4275 chmod 0755 ./.tsendmail.sh
4277 if (</dev/null iconv -f ascii -t iso-2022-jp) >/dev/null 2>&1; then
4278 cat <<-'_EOT' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4279 -Smta=./.tsendmail.sh \
4280 -Sescape=! -Smime-encoding=base64 2>./.terr
4281 set ttycharset=utf-8 sendcharsets=iso-2022-jp
4283 !s Japanese from UTF-8 to ISO-2022-JP
4284 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4286 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4289 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4291 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4294 set ttycharset=iso-2022-jp charset-7bit=iso-2022-jp sendcharsets=utf-8
4296 !s Japanese from ISO-2022-JP to UTF-8, eh, no, also ISO-2022-JP
4297 \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
4299 \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
4302 \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
4304 \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
4307 check behave
:iconv_mbyte_base64-1
0 "${MBOX}" '3428985079 1976'
4308 check behave
:iconv_mbyte_base64-2
- .
/.terr
'4294967295 0'
4310 printf 'eval f 1; write ./.twrite\n' |
4311 ${MAILX} ${ARGS} ${ADDARG_UNI} -Rf "${MBOX}" >./.tlog 2>&1
4312 check behave:iconv_mbyte_base64-3 0 ./.twrite '1259742080 686'
4313 check behave:iconv_mbyte_base64-4 - ./.tlog '3956097665 119'
4315 echo 'behave:iconv_mbyte_base64: ISO-2022-JP unsupported, skipping 1-4'
4318 if (</dev/null iconv -f ascii -t euc-jp) >/dev/null 2>&1; then
4319 rm -f "${MBOX}" ./.twrite
4320 cat <<-'_EOT' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4321 -Smta=./.tsendmail.sh \
4322 -Sescape=! -Smime-encoding=base64 2>./.terr
4323 set ttycharset=utf-8 sendcharsets=euc-jp
4325 !s Japanese from UTF-8 to EUC-JP
4326 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4328 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4331 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4333 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4336 set ttycharset=EUC-JP sendcharsets=utf-8
4338 !s Japanese from EUC-JP to UTF-8
4339 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4341 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4344 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4346 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4349 check behave:iconv_mbyte_base64-5 0 "${MBOX}" '1686827547 2051'
4350 check behave:iconv_mbyte_base64-6 - ./.terr '4294967295 0'
4352 printf 'eval f 1; write ./.twrite\n' |
4353 ${MAILX} ${ARGS} ${ADDARG_UNI} -Rf "${MBOX}" >.
/.tlog
2>&1
4354 check behave
:iconv_mbyte_base64-7
0 .
/.twrite
'1259742080 686'
4355 check behave
:iconv_mbyte_base64-8
- .
/.tlog
'500059195 119'
4357 echo 'behave:iconv_mbyte_base64: EUC-JP unsupported, skipping 5-8'
4363 t_behave_iconv_mainbody
() {
4364 t_prolog t_behave_iconv_mainbody
4365 TRAP_EXIT_ADDONS
="./.t*"
4368 if have_feat
iconv &&
4369 (</dev
/null
iconv -f utf-8
-t ascii
) >/dev
/null
2>&1; then
4370 j
="`printf '–' | iconv -f utf-8 -t ascii 2>/dev/null`"
4371 # This assumes iconv(1) behaves like iconv(3), but well.
4372 # This is flaky because the behaviour is so non-uniform
4373 if [ ${?} -ne 0 ]; then
4374 if [ x
"${j}" = 'x?' ]; then
4379 elif [ x
"${j}" = 'x?' ]; then
4381 elif [ x
"${j}" = 'x*' ]; then
4385 if [ -z "${i}" ]; then
4386 echo 'behave:iconv_mainbody: unsupported, skipped'
4390 ${cat} <<-_EOT > ./.tsendmail.sh
4392 (echo 'From HamamelisVirginiana Fri Oct 20 16:23:21 2017' && ${cat} &&
4395 chmod 0755 .
/.tsendmail.sh
4397 printf '–' |
${MAILX} ${ARGS} ${ADDARG_UNI} -Smta=.
/.tsendmail.sh \
4398 -S charset-7bit
=us-ascii
-S charset-8bit
=utf-8 \
4399 -s '–' over-the@rain.bow
2>.
/.terr
4400 check behave
:iconv_mainbody-1
0 "${MBOX}" '3634015017 251'
4401 check behave
:iconv_mainbody-2
- .
/.terr
'4294967295 0'
4403 printf '–' |
${MAILX} ${ARGS} ${ADDARG_UNI} -Smta=.
/.tsendmail.sh \
4404 -S charset-7bit
=us-ascii
-S charset-8bit
=us-ascii \
4405 -s '–' over-the@rain.bow
2>.
/.terr
4406 exn0_test behave
:iconv_mainbody-3
4407 check behave
:iconv_mainbody-3
- "${MBOX}" '3634015017 251'
4408 check behave
:iconv_mainbody-4
- .
/.terr
'2579894983 148'
4410 printf 'p\nx\n' |
${MAILX} ${ARGS} -Rf "${MBOX}" >./.tout 2>./.terr
4412 ex0_test behave:iconv_mainbody-5-0 ${j}
4413 if [ x${i} = x1 ]; then
4414 # yuck, just assume ???, we need a test program for that one!
4415 check behave:iconv_mainbody-5-1-1 - ./.tout '1959197095 283'
4416 check behave:iconv_mainbody-5-1-1 - ./.terr '4294967295 0'
4417 elif [ x${i} = x2 ]; then
4418 check behave:iconv_mainbody-5-2-1 - ./.tout '1959197095 283'
4419 check behave:iconv_mainbody-5-2-2 - ./.terr '4294967295 0'
4420 elif [ x${i} = x3 ]; then
4421 check behave:iconv_mainbody-5-3-1 - ./.tout '3196380198 279'
4422 check behave:iconv_mainbody-5-3-2 - ./.terr '4294967295 0'
4424 check behave:iconv_mainbody-5-4-1 - ./.tout '3760313827 279'
4425 check behave:iconv_mainbody-5-4-2 - ./.terr '4294967295 0'
4431 t_behave_q_t_etc_opts() {
4432 t_prolog t_behave_q_t_etc_opts
4433 TRAP_EXIT_ADDONS=".
/.t
*"
4435 # Three tests for MIME encoding and (a bit) content classification.
4436 # At the same time testing -q FILE, < FILE and -t FILE
4437 t__put_body > ./.tin
4440 < ./.tin ${MAILX} ${ARGS} ${ADDARG_UNI} \
4441 -a ./.tin -s "`t__put_subject`" "${MBOX}"
4442 check behave:q_t_etc_opts-1 0 "${MBOX}" '3570973309 6646'
4445 < /dev/null ${MAILX} ${ARGS} ${ADDARG_UNI} \
4446 -a ./.tin -s "`t__put_subject`" -q ./.tin "${MBOX}"
4447 check behave:q_t_etc_opts-2 0 "${MBOX}" '3570973309 6646'
4450 ( echo "To
: ${MBOX}" && echo "Subject
: `t__put_subject`" && echo &&
4452 ) | ${MAILX} ${ARGS} ${ADDARG_UNI} -Snodot -a ./.tin -t
4453 check behave:q_t_etc_opts-3 0 "${MBOX}" '3570973309 6646'
4459 have_feat smime || {
4460 echo 'behave:s/mime: unsupported, skipped'
4464 t_prolog t_behave_s_mime
4465 TRAP_EXIT_ADDONS=".
/.t.conf .
/.tkey.pem .
/.tcert.pem .
/.tpair.pem
"
4466 TRAP_EXIT_ADDONS="${TRAP_EXIT_ADDONS} .
/.VERIFY .
/.DECRYPT .
/.ENCRYPT
"
4467 TRAP_EXIT_ADDONS="${TRAP_EXIT_ADDONS} .
/.tsendmail.sh
"
4469 printf 'behave:s/mime: .. generating test key and certificate ..\n'
4470 ${cat} <<-_EOT > ./.t.conf
4473 default_keyfile = keyfile.pem
4474 distinguished_name = req_distinguished_name
4475 attributes = req_attributes
4479 [ req_distinguished_name ]
4486 emailAddress = test@localhost
4491 openssl req -x509 -nodes -days 3650 -config ./.t.conf \
4492 -newkey rsa:1024 -keyout ./.tkey.pem -out ./.tcert.pem >/dev/null 2>&1
4493 ${cat} ./.tkey.pem ./.tcert.pem > ./.tpair.pem
4496 printf 'behave:s/mime:sign/verify: '
4497 echo bla | ${MAILX} ${ARGS} \
4498 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4499 -Ssmime-sign -Sfrom=test@localhost \
4500 -s 'S/MIME test' ./.VERIFY
4501 if [ $? -eq 0 ]; then
4512 /^Content-Description: /{ skip = 2; print; next }
4513 /^$/{ if(skip) --skip }
4516 < ./.VERIFY > "${MBOX}"
4517 check behave:s/mime:sign/verify:checksum - "${MBOX}" '2900817158 648'
4519 printf 'behave:s/mime:sign/verify:verify '
4520 printf 'verify\nx\n' |
4522 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4523 -Ssmime-sign -Sfrom=test@localhost \
4525 -f ./.VERIFY >/dev/null 2>&1
4526 if [ $? -eq 0 ]; then
4535 printf 'behave:s/mime:sign/verify:disproof-1 '
4536 if openssl smime -verify -CAfile ./.tcert.pem \
4537 -in ./.VERIFY >/dev/null 2>&1; then
4546 # (signing +) encryption / decryption
4547 ${cat} <<-_EOT > ./.tsendmail.sh
4549 (echo 'From Euphrasia Thu Apr 27 17:56:23 2017' && ${cat}) > ./.ENCRYPT
4551 chmod 0755 ./.tsendmail.sh
4553 printf 'behave:s/mime:encrypt+sign: '
4556 -Ssmime-force-encryption \
4557 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4558 -Smta=./.tsendmail.sh \
4559 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4560 -Ssmime-sign -Sfrom=test@localhost \
4561 -s 'S/MIME test' recei@ver.com
4562 if [ $? -eq 0 ]; then
4566 printf 'error: encrypt+sign failed\n'
4569 ${sed} -e '/^$/,$d' < ./.ENCRYPT > "${MBOX}"
4570 check behave:s/mime:encrypt+sign:checksum - "${MBOX}" '1937410597 327'
4572 printf 'behave:s/mime:decrypt+verify: '
4573 printf 'decrypt ./.DECRYPT\nfi ./.DECRYPT\nverify\nx\n' |
4575 -Ssmime-force-encryption \
4576 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4577 -Smta=./.tsendmail.sh \
4578 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4579 -Ssmime-sign -Sfrom=test@localhost \
4581 -f ./.ENCRYPT >/dev/null 2>&1
4582 if [ $? -eq 0 ]; then
4591 /^Content-Description: /{ skip = 2; print; next }
4592 /^$/{ if(skip) --skip }
4595 < ./.DECRYPT > "${MBOX}"
4596 check behave:s/mime:decrypt+verify:checksum - "${MBOX}" '1720739247 931'
4598 printf 'behave:s/mime:decrypt+verify:disproof-1: '
4599 if (openssl smime -decrypt -inkey ./.tkey.pem -in ./.ENCRYPT |
4600 openssl smime -verify -CAfile ./.tcert.pem) >/dev/null 2>&1; then
4607 printf "behave
:s
/mime
:encrypt
: "
4608 echo bla | ${MAILX} ${ARGS} \
4609 -Ssmime-force-encryption \
4610 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4611 -Smta=./.tsendmail.sh \
4612 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4613 -Sfrom=test@localhost \
4614 -s 'S/MIME test' recei@ver.com
4615 if [ $? -eq 0 ]; then
4622 # Same as behave:s/mime:encrypt+sign:checksum above
4623 ${sed} -e '/^$/,$d' < ./.ENCRYPT > "${MBOX}"
4624 check behave:s/mime:encrypt:checksum - "${MBOX}" '1937410597 327'
4627 printf 'decrypt ./.DECRYPT\nx\n' | ${MAILX} ${ARGS} \
4628 -Ssmime-force-encryption \
4629 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4630 -Smta=./.tsendmail.sh \
4631 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4632 -Sfrom=test@localhost \
4634 -f ./.ENCRYPT >/dev/null 2>&1
4635 check behave:s/mime:decrypt 0 ".
/.DECRYPT
" '2624716890 422'
4637 printf 'behave:s/mime:decrypt:disproof-1: '
4638 if openssl smime -decrypt -inkey ./.tkey.pem \
4639 -in ./.ENCRYPT >/dev/null 2>&1; then
4650 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
4651 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
4652 # Note we unfortunately need to place some statements without proper
4653 # indentation because of continuation problems
4654 # xxx Note: t_content() was the first test (series) written. Today many
4655 # xxx aspects are (better) covered by other tests above, some are not.
4656 # xxx At some future date and time, convert the last remains not covered
4657 # xxx elsewhere to a real t_behave_* test and drop t_content()
4661 # Test for [260e19d] (Juergen Daubert)
4663 echo body | ${MAILX} ${ARGS} "${MBOX}"
4664 check content
:004 0 "${MBOX}" '2917662811 98'
4666 # "Test for" [d6f316a] (Gavin Troy)
4668 printf "m ${MBOX}\n~s subject1\nEmail body\n~.\nfi ${MBOX}\np\nx\n" |
4669 ${MAILX} ${ARGS} ${ADDARG_UNI} -Spipe-text/plain="@* ${cat}" > "${BODY}"
4670 check content:006 0 "${MBOX}" '2099098650 122'
4671 check content:006-1 - "${BODY}" '794542938 174'
4673 # "Test
for" [c299c45] (Peter Hofmann) TODO shouldn't end up QP-encoded?
4676 for(i = 0; i < 10000; ++i)
4678 #printf "\xF0\x90\x87\x90"
4679 }' | ${MAILX} ${ARGS} ${ADDARG_UNI} -s TestSubject "${MBOX}"
4680 check content
:007 0 "${MBOX}" '534262374 61816'
4686 # MIME encoding (QP) stress message subject
4687 printf 'Äbrä Kä?dä=brö Fü?di=bus? '\
4688 'adadaddsssssssddddddddddddddddddddd'\
4689 'ddddddddddddddddddddddddddddddddddd'\
4690 'ddddddddddddddddddddddddddddddddddd'\
4691 'dddddddddddddddddddd Hallelulja? Od'\
4692 'er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
4693 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
4694 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f'\
4695 'fffffffffffffffffffffffffffffffffff'\
4696 'fffffffffffffffffffff ggggggggggggg'\
4697 'ggggggggggggggggggggggggggggggggggg'\
4698 'ggggggggggggggggggggggggggggggggggg'\
4699 'ggggggggggggggggggggggggggggggggggg'\
4704 # MIME encoding (QP) stress message body
4706 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
4707 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
4708 "wasde willst, gelle, gelle, gelle, gelle, gelle.\r\n"\
4709 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst \r\n"\
4710 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1\r\n"\
4711 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12\r\n"\
4712 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123\r\n"\
4713 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234\r\n"\
4714 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345\r\n"\
4715 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456\r\n"\
4716 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234567\r\n"\
4717 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345678\r\n"\
4718 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456789\r\n"\
4719 "Unn ausserdem habe ich trailing SP/HT/SP/HT whitespace \r\n"\
4720 "Unn ausserdem habe ich trailing HT/SP/HT/SP whitespace \r\n"\
4721 "auf den zeilen vorher.\r\n"\
4722 "From am Zeilenbeginn und From der Mitte gibt es auch.\r\n"\
4724 "Die letzte Zeile war nur ein Punkt.\r\n"\
4726 "Das waren deren zwei.\r\n"\
4728 "Die letzte Zeile war ein Leerschritt.\n"\
4729 "=VIER = EQUAL SIGNS=ON A LINE=\r\n"\
4732 "Die letzte Zeile war nur ein Punkt, mit Unix Zeilenende.\n"\
4734 "Das waren deren zwei. ditto.\n"\
4736 "Unn ausseerdem habe ich trailing SP/HT/SP/HT whitespace \n"\
4737 "Unn ausseerdem habe ich trailing HT/SP/HT/SP whitespace \n"\
4738 "auf den zeilen vorher.\n"\
4740 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.\n"\
4741 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.1"\
4743 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4745 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4747 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4749 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4751 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4753 "QP am Zeilenende über soft-nl hinweg\n"\
4754 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4756 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4758 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4760 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4762 "=VIER = EQUAL SIGNS=ON A LINE=\n"\
4764 "Die letzte Zeile war ein Leerschritt.\n"\
4769 # if have_feat devel; then
4770 # ARGS="${ARGS} -Smemdebug"
4774 if [ -n "${UTF8_LOCALE}" ]; then
4775 printf 'Using Unicode locale %s\n' "${UTF8_LOCALE}"
4777 printf 'No Unicode locale found, disabling Unicode tests\n'
4784 if [ -z "${CHECK_ONLY}${MAE_TEST}" ]; then
4786 elif [ -z "${MAE_TEST}" ] ||
[ ${#} -eq 0 ]; then
4789 while [ ${#} -gt 0 ]; do
4795 [ ${ESTAT} -eq 0 ] && echo Ok ||
echo >&2 'Errors occurred'