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 ex0_test should say TESTNUMBER-estat instead of having own numbers
6 #@ TODO _All_ the tests should happen in a temporary subdir.
9 # Instead of figuring out the environment in here, require a configured build
10 # system and include that! Our makefile and configure ensure that this test
11 # does not run in the configured, but the user environment nonetheless!
12 if [ -f .
/mk-config.ev
]; then
14 if [ -z "${MAILX__CC_TEST_RUNNING}" ]; then
15 MAILX__CC_TEST_RUNNING
=1
16 export MAILX__CC_TEST_RUNNING
17 exec "${SHELL}" "${0}" "${@}"
20 echo >&2 'S-nail/S-mailx is not configured.'
21 echo >&2 'This test script requires the shell environment that only the'
22 echo >&2 'configuration script can figure out, even if it will be used to'
23 echo >&2 'test a different binary than the one that would be produced!'
27 # We need *stealthmua* regardless of $SOURCE_DATE_EPOCH, the program name as
28 # such is a compile-time variable
29 ARGS
='-:/ -# -Sdotlock-ignore-error -Sexpandaddr=restrict'
30 ARGS
="${ARGS}"' -Smime-encoding=quoted-printable -Snosave -Sstealthmua'
31 ADDARG_UNI
=-Sttycharset=UTF-8
36 #UTF8_LOCALE= autodetected unless set
38 # Note valgrind has problems with FDs in forked childs, which causes some tests
39 # to fail (the FD is rewound and thus will be dumped twice)
41 #MEMTESTER='valgrind --leak-check=full --log-file=.vl-%p '
43 ## -- (>8 -- 8<) -- ##
45 ( set -o noglob
) >/dev
/null
2>&1 && noglob_shell
=1 ||
unset noglob_shell
50 printf >&2 -- "${fmt}\\n" "${@}"
55 export ARGS ADDARG_UNI CONF BODY MBOX MAIL MAKE
awk cat cksum rm sed grep
59 # Wed Oct 2 01:50:07 UTC 1996
60 SOURCE_DATE_EPOCH
=844221007
62 export LC_ALL LANG TZ SOURCE_DATE_EPOCH
63 unset POSIXLY_CORRECT LOGNAME USER
66 echo >&2 "Synopsis: ./cc-test.sh [--check-only s-mailx-binary]"
67 echo >&2 "Synopsis: ./cc-test.sh --mae-test s-mailx-binary [:TESTNAME:]"
71 CHECK_ONLY
= MAE_TEST
= MAILX
=
72 if [ "${1}" = --check-only ]; then
75 [ -x "${MAILX}" ] || usage
77 elif [ "${1}" = --mae-test ]; then
80 [ -x "${MAILX}" ] || usage
84 MAILX
="${MEMTESTER}${MAILX}"
87 if [ -n "${CHECK_ONLY}${MAE_TEST}" ] && [ -z "${UTF8_LOCALE}" ]; then
88 # Try ourselfs for nl_langinfo(CODESET) output first (requires a new version)
89 i
=`LC_ALL=C.utf8 "${RAWMAILX}" ${ARGS} -X '
91 \if [ "${ttycharset}" @i=% utf ]
98 \eval xcall cset_test "${@}"
102 \call cset_test C.UTF-8 POSIX.utf8 POSIX.UTF-8 en_EN.utf8 en_EN.UTF-8 \
103 en_US.utf8 en_US.UTF-8
105 [ $?
-eq 0 ] && UTF8_LOCALE
=$i
107 if [ -z "${UTF8_LOCALE}" ] && (locale yesexpr
) >/dev
/null
2>&1; then
108 UTF8_LOCALE
=`locale -a | { m=
110 if { echo ${n} | ${grep} -i 'utf-\{0,1\}8'; } >/dev/null 2>&1; then
112 if { echo ${n} | ${grep} -e POSIX -e en_EN -e en_US; }; then
126 trap "${rm} -rf \"${BODY}\" \"${MBOX}\" \${TRAP_EXIT_ADDONS}" EXIT
127 trap "exit 1" HUP INT TERM
130 # Test all configs TODO doesn't cover all *combinations*, stupid!
134 NOTME["OPT_AUTOCC"] = 1
135 NOTME["OPT_DEBUG"] = 1
136 NOTME["OPT_DEVEL"] = 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
324 t_behave_compose_hooks
325 t_behave_C_opt_customhdr
327 t_behave_mass_recipients
328 t_behave_mime_types_load_control
329 t_behave_lreply_futh_rth_etc
331 t_behave_xxxheads_rfc2047
333 t_behave_iconv_mbyte_base64
334 t_behave_iconv_mainbody
335 t_behave_binary_mainbody
336 t_behave_q_t_etc_opts
341 t_behave_X_opt_input_command_stack() {
342 t_prolog t_behave_X_opt_input_command_stack
344 ${cat} <<- '__EOT' > "${BODY}"
352 echo "define mac1
{";\
353 echo " echo mac1-1 via1 \
$0";\
355 echo " echo mac1-2
";\
357 echo " echo mac1-3
";\
360 echo "define mac2
{";\
361 echo " echo mac2-1 via1 \
$0";\
363 echo " echo mac2-2
";\
369 echo echo 1-1-1 via1 \
$0;\
381 # The -X option supports multiline arguments, and those can internally use
382 # reverse solidus newline escaping. And all -X options are joined...
384 < "${BODY}" ${MAILX} ${ARGS} \
399 echo "define mac1 {";\
400 echo " echo mac1-1 via2 \$0";\
402 echo " echo mac1-2";\
404 echo " echo mac1-3";\
407 echo "define mac2 {";\
408 echo " echo mac2-1 via2 \$0";\
410 echo " echo mac2-2";\
416 echo echo 1-1-1 via2 \$0;\
430 check behave
:x_opt_input_command_stack
0 "${MBOX}" '1786542668 416'
435 t_behave_X_errexit
() {
436 t_prolog t_behave_X_errexit
438 ${cat} <<- '__EOT' > "${BODY}"
444 </dev/null ${MAILX} ${ARGS} -Snomemdebug \
445 -X'echo one' -X' echos nono ' -X'echo two' \
447 check behave:x_errexit-1 0 "${MBOX}" '916157812 53'
449 </dev/null ${MAILX} ${ARGS} -X'source '"${BODY}" -Snomemdebug \
451 check behave:x_errexit-2 0 "${MBOX}" '916157812 53'
453 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Snomemdebug \
455 check behave
:x_errexit-3
0 "${MBOX}" '916157812 53'
459 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
460 -X'echo one' -X' echos nono ' -X'echo two' \
462 check behave
:x_errexit-4
1 "${MBOX}" '2118430867 49'
464 </dev
/null
${MAILX} ${ARGS} -X'source '"${BODY}" -Serrexit -Snomemdebug \
466 check behave:x_errexit-5 1 "${MBOX}" '2118430867 49'
468 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
470 check behave
:x_errexit-6
1 "${MBOX}" '12955965 172'
472 </dev
/null MAILRC
="${BODY}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
474 check behave:x_errexit-7 1 "${MBOX}" '12955965 172'
476 ## Repeat 4-7 with ignerr set
478 ${sed} -e 's/^echos /ignerr echos /' < "${BODY}" > "${MBOX}"
480 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
481 -X'echo one' -X'ignerr echos nono ' -X'echo two' \
483 check behave
:x_errexit-8
0 "${BODY}" '916157812 53'
485 </dev
/null
${MAILX} ${ARGS} -X'source '"${MBOX}" -Serrexit -Snomemdebug \
487 check behave:x_errexit-9 0 "${BODY}" '916157812 53'
489 </dev/null MAILRC="${MBOX}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
491 check behave
:x_errexit-10
0 "${BODY}" '916157812 53'
493 </dev
/null MAILRC
="${MBOX}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
495 check behave:x_errexit-11 0 "${BODY}" '916157812 53'
500 t_behave_S_freeze() {
501 t_prolog t_behave_S_freeze
505 # Test basic assumption
506 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} \
507 -X'echo asksub<$asksub> dietcurd<$dietcurd>' \
509 check behave
:s_freeze-1
0 "${MBOX}" '270686329 21'
512 ${cat} <<- '__EOT' > "${BODY}"
517 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
518 -Snoasksub -Sasksub -Snoasksub \
519 -X'echo asksub<$asksub>' -X'set asksub' -X'echo asksub<$asksub>' \
521 check behave
:s_freeze-2
0 "${MBOX}" '3182942628 37'
523 ${cat} <<- '__EOT' > "${BODY}"
528 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
529 -Snoasksub -Sasksub \
530 -X'echo asksub<$asksub>' -X'unset asksub' -X'echo asksub<$asksub>' \
532 check behave
:s_freeze-3
0 "${MBOX}" '2006554293 39'
535 ${cat} <<- '__EOT' > "${BODY}"
536 echo dietcurd<$dietcurd>
538 echo dietcurd<$dietcurd>
540 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
541 -Sdietcurd=strawberry
-Snodietcurd -Sdietcurd=vanilla \
542 -X'echo dietcurd<$dietcurd>' -X'unset dietcurd' \
543 -X'echo dietcurd<$dietcurd>' \
545 check behave
:s_freeze-4
0 "${MBOX}" '1985768109 65'
547 ${cat} <<- '__EOT' > "${BODY}"
548 echo dietcurd<$dietcurd>
550 echo dietcurd<$dietcurd>
552 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
553 -Sdietcurd=strawberry
-Snodietcurd \
554 -X'echo dietcurd<$dietcurd>' -X'set dietcurd=vanilla' \
555 -X'echo dietcurd<$dietcurd>' \
557 check behave
:s_freeze-5
0 "${MBOX}" '151574279 51'
559 # TODO once we have a detached one with env=1..
560 if [ -n "`</dev/null ${MAILX} ${ARGS} -X'!echo \$TERM' -Xx`" ]; then
561 echo 'behave:s_freeze-{6,7}: shell sets $TERM, skipped'
563 ${cat} <<- '__EOT' > "${BODY}"
564 !echo "shell says TERM<$TERM>"
566 !echo "shell says TERM<$TERM>"
568 !echo "shell says TERM<$TERM>"
570 !echo "shell says TERM<$TERM>"
572 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
573 -STERM=strawberry
-SnoTERM -STERM=vanilla \
574 -X'echo mail<$TERM>' -X'unset TERM' \
575 -X'!echo "shell says TERM<$TERM>"' -X'echo TERM<$TERM>' \
577 check behave
:s_freeze-6
0 "${MBOX}" '1211476036 167'
579 ${cat} <<- '__EOT' > "${BODY}"
580 !echo "shell says TERM<$TERM>"
582 !echo "shell says TERM<$TERM>"
584 !echo "shell says TERM<$TERM>"
586 !echo "shell says TERM<$TERM>"
588 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u \
589 -STERM=strawberry
-SnoTERM \
590 -X'echo TERM<$TERM>' -X'set TERM=vanilla' \
591 -X'!echo "shell says TERM<$TERM>"' -X'echo TERM<$TERM>' \
593 check behave
:s_freeze-7
0 "${MBOX}" '3365080441 132'
601 t_prolog t_behave_wysh
603 ${cat} <<- '__EOT' > "${BODY}"
622 echo 'a${DIET}b${TIED}c\${DIET}d\${TIED}e' # COMMENT
623 echo "a${DIET}b${TIED}c\${DIET}d\${TIED}e"
624 echo $'a${DIET}b${TIED}c\${DIET}d\${TIED}e'
626 echo a$'\101\0101\x41\u0041\u41\U00000041\U41'c
627 echo a$'\u0041\u41\u0C1\U00000041\U41'c
650 echo a$'b\U0000000'dt
651 echo a$'b\U00000000'du
661 if [ -z "${UTF8_LOCALE}" ]; then
662 echo 'Skip behave:wysh_unicode, no UTF8_LOCALE'
664 < "${BODY}" DIET=CURD TIED= \
665 LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} 2>/dev/null > "${MBOX}"
666 check behave:wysh_unicode 0 "${MBOX}" '475805847 317'
669 < "${BODY}" DIET=CURD TIED= ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
670 check behave:wysh_c 0 "${MBOX}" '1473887148 321'
672 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
673 wysh set mager='\hey\'
675 wysh set mager="\hey\\"
677 wysh set mager=$'\hey\\'
680 check behave:wysh-3 0 "${MBOX}" '1289698238 69'
685 t_behave_input_inject_semicolon_seq() {
686 t_prolog t_behave_input_inject_semicolon_seq
688 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
693 echon this_is_mymac;call mydeepmac;echon ';';
695 echon one';';call mymac;echon two";";call mymac;echo three$';';
697 echon this_is_mymac;call mydeepmac;echon ,TOO'!;';
699 echon one';';call mymac;echon two";";call mymac;echo three$';';
702 check behave:input_inject_semicolon_seq 0 "${MBOX}" '512117110 140'
707 t_behave_commandalias() {
708 t_prolog t_behave_commandalias
710 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
711 commandalias echo echo hoho
715 commandalias XxX XxXx
716 commandalias XxXx XxXxX
717 commandalias XxXxX XxXxXx
718 commandalias XxXxXx echo huhu
719 commandalias XxXxXxX echo huhu
721 commandalias XxXxXx XxXxXxX
724 commandalias XxXxXx echo huhu
728 check behave:commandalias 0 "${MBOX}" '3694143612 31'
734 t_prolog t_behave_ifelse
736 # Nestable conditions test
737 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
759 if $dietcurd == 'yoho'
764 if $dietcurd @== 'Yoho'
769 if $dietcurd == 'Yoho'
774 if $dietcurd != 'yoho'
779 if $dietcurd @!= 'Yoho'
784 if $dietcurd != 'Yoho'
845 if $dietcurd == 'yohu'
847 elif $dietcurd == 'yoha'
849 elif $dietcurd == 'yohe'
851 elif $dietcurd == 'yoho'
853 if $dietcurd == 'yohu'
855 elif $dietcurd == 'yoha'
857 elif $dietcurd == 'yohe'
859 elif $dietcurd == 'yoho'
861 if $dietcurd == 'yohu'
863 elif $dietcurd == 'yoha'
865 elif $dietcurd == 'yohe'
867 elif $dietcurd == 'yoho'
1016 set diet=abc curd=abc
1022 set diet=abc curd=abcd
1028 # 1. Shitty grouping capabilities as of today
1029 unset diet curd ndefined
1030 if [ [ false ] || [ false ] || [ true ] ] && [ [ false ] || [ true ] ] && \
1036 if [ [ [ [ 0 ] || [ 1 ] ] && [ [ 1 ] || [ 0 ] ] ] && [ 1 ] ] && [ yes ]
1041 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] ]
1046 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] || [ [ 1 ] ] ]
1051 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] || [ [ 1 ] ] || [ 1 ] ] && [ no ]
1056 if [ [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] || [ [ 1 ] ] || [ 1 ] ] \
1057 && [ no ] || [ yes ]
1062 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
1067 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 0 ] ]
1072 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 0 ] ] && [ 1 ] ] ] && [ 1 ] ]
1077 if [ [ [ [ [ [ [ 0 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
1082 if [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] && [ 0 ]
1087 if [ 1 ] || [ 0 ] || [ 0 ] || [ 0 ] && [ 1 ]
1092 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 0 ]
1097 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 1 ]
1102 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 0 ] || [ 1 ] && [ 0 ]
1107 if [ 0 ] || [ 0 ] || [ 0 ] || [ 1 ] && [ 0 ] || [ 1 ] && [ 1 ]
1113 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
1119 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
1124 # 2. Shitty grouping capabilities as of today
1125 unset diet curd ndefined
1126 if [ false || false || true ] && [ false || true ] && yes
1131 if [ [ [ 0 || 1 ] && [ 1 || 0 ] ] && 1 ] && [ yes ]
1136 if [ 1 || 0 || 0 || 0 ]
1141 if [ 1 || 0 || 0 || 0 || [ 1 ] ]
1146 if [ 1 || 0 || 0 || 0 || [ 1 ] || 1 ] && no
1151 if [ 1 || 0 || 0 || 0 || 1 || [ 1 ] ] && no || [ yes ]
1156 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && 1 ] ] && [ 1 ] ]
1161 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && [ 1 ] ] ] && 0 ]
1166 if [ [ [ [ [ [ [ 1 ] ] && 1 ] && 0 ] && [ 1 ] ] ] && 1 ]
1171 if [ [ [ [ [ [ 0 ] && 1 ] && 1 ] && 1 ] ] && 1 ]
1176 if 1 || 0 || 0 || 0 && 0
1181 if 1 || 0 || 0 || 0 && 1
1186 if 0 || 0 || 0 || 1 && 0
1191 if 0 || 0 || 0 || 1 && 1
1196 if 0 || 0 || 0 || 1 && 0 || 1 && 0
1201 if 0 || 0 || 0 || 1 && 0 || 1 && 1
1207 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1212 if $diet == 'yo' && $curd == 'ho' && $ndefined
1218 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1223 if $diet == 'yo' && $curd == 'ho' && $ndefined
1228 if [ [ [ [ [ [ $diet == 'yo' && $curd == 'ho' && $ndefined ] ] ] ] ] ]
1233 # Some more en-braced variables
1235 if ${diet} == ${curd}
1240 if ${diet} != ${curd}
1256 if ! 0 && ! ! 1 && ! ! ! ! 2 && 3
1261 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ ! 2 ] ] ] && 3
1266 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1271 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1276 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1281 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1286 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1291 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] || 3
1296 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! ! [ 2 ] ] ] ] ]
1302 if ! 0 && ! ! 1 && ! ! ! 0 && 3
1307 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ 0 ] ] ] && 3
1312 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ [ 0 ] ] ] ] ] && 3
1317 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! ! [ ! [ ! 0 ] ] ] ] && ! 3
1322 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ ! [ ! [ ! [ ! 0 ] ] ] ] && 3
1327 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! ! [ ! [ ! [ ! [ 0 ] ] ] ] ] && 3
1332 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! ! 0 ] ] ] ] && 3
1337 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ ! 0 ] ] ] ] ] || 3
1342 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! [ 0 ] ] ] ] ]
1349 check behave:if-normal 0 "${MBOX}" '1688759742 719'
1351 if have_feat regex; then
1352 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
1354 if $dietcurd =~ '^yo.*'
1359 if $dietcurd =~ '^Yo.*'
1364 if $dietcurd @=~ '^Yo.*'
1369 if $dietcurd =~ '^yOho.+'
1374 if $dietcurd @!~ '.*Ho$'
1379 if $dietcurd !~ '.+yohO$'
1384 if [ $dietcurd @i!~ '.+yoho$' ]
1389 if ! [ $dietcurd @i=~ '.+yoho$' ]
1394 if ! ! [ $dietcurd @i!~ '.+yoho$' ]
1399 if ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ]
1404 if [ ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ] ]
1409 if ! [ ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1414 if ! ! ! $dietcurd !~ '.+yoho$'
1419 if ! ! ! $dietcurd =~ '.+yoho$'
1424 if ! [ ! ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1429 set diet=abc curd='^abc$'
1435 set diet=abc curd='^abcd$'
1443 check behave:if-regex 0 "${MBOX}" '1115671789 95'
1445 printf 'behave:if-regex: unsupported, skipped\n'
1451 t_behave_localopts() {
1452 t_prolog t_behave_localopts
1454 # Nestable conditions test
1455 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1470 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1475 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1476 echo "$gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2"
1485 echo active trouble: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1487 echo active null: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1496 wysh set y=$1; shift; eval localopts $y; localopts $1; shift
1503 wysh set y=$1; shift; eval localopts $y; localopts $1; shift
1510 echo ----- $1: $2 -> $3 -> $4
1518 call llx
'call off' on on on
1519 call llx
'call off' off on on
1520 call llx
'call off' on off on
1521 call llx
'call off' on off off
1522 localopts call-fixate on
1523 call llx
'call-fixate on' on on on
1524 call llx
'call-fixate on' off on on
1525 call llx
'call-fixate on' on off on
1526 call llx
'call-fixate on' on off off
1527 unset x
;localopts call on
1528 call llx
'call on' on on on
1529 call llx
'call on' off on on
1530 call llx
'call on' on off on
1531 call llx
'call on' on off off
1536 check behave
:localopts
0 "${MBOX}" '4016155249 1246'
1542 t_prolog t_behave_local
1544 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1572 echo ------- global-1 du=$du
1574 echo ------- global-2 du=$du
1577 echo ------- global-3 du=$du
1579 echo ------- global-4 du=$du
1581 echo ------- global-5 du=$du
1584 check behave:local-1 0 "${MBOX}" '2411598140 641'
1589 t_behave_macro_param_shift() {
1590 t_prolog t_behave_macro_param_shift
1592 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev
/null
1595 echo t2.0 has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1600 echo t2.1 has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1601 if [ $# > 1 ] ||
[ $ignerr == '' ]
1606 echo t2.2
:$? has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1608 echo t2.3
:$? has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1612 echo t2.4
:$? has
$#/${#} parameters: "$1,${2},$3" (${*}) [$@
]
1617 call t2
1 you get four args
1618 echo t1.1
: $?
';' ignerr
($ignerr) should not exist
1619 call t2
1 you get
'three args'
1620 echo t1.2
: $?
';' ignerr
($ignerr) should not exist
1621 call t2
1 you
'get two args'
1622 echo t1.3
: $?
';' ignerr
($ignerr) should not exist
1623 call t2
1 'you get one arg'
1624 echo t1.4
: $?
';' ignerr
($ignerr) should not exist
1625 ignerr call t2
'' 'you get one arg'
1626 echo t1.5
: $?
';' ignerr
($ignerr) should not exist
1631 check behave
:macro_param_shift
0 "${MBOX}" '1402489146 1682'
1636 t_behave_addrcodec
() {
1637 t_prolog t_behave_addrcodec
1639 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1640 vput addrcodec res e 1 <doog@def>
1641 echo $?/$^ERRNAME $res
1642 eval vput addrcodec res d $res
1643 echo $?/$^ERRNAME $res
1644 vput addrcodec res e 2 . <doog@def>
1645 echo $?/$^ERRNAME $res
1646 eval vput addrcodec res d $res
1647 echo $?/$^ERRNAME $res
1648 vput addrcodec res e 3 Sauer Dr. <doog@def>
1649 echo $?/$^ERRNAME $res
1650 eval vput addrcodec res d $res
1651 echo $?/$^ERRNAME $res
1652 vput addrcodec res e 3.50 Sauer (Ma) Dr. <doog@def>
1653 echo $?/$^ERRNAME $res
1654 eval vput addrcodec res d $res
1655 echo $?/$^ERRNAME $res
1656 vput addrcodec res e 3.51 Sauer (Ma) "Dr.
" <doog@def>
1657 echo $?/$^ERRNAME $res
1658 eval vput addrcodec res d $res
1659 echo $?/$^ERRNAME $res
1661 vput addrcodec res +e 4 Sauer (Ma) Dr. <doog@def>
1662 echo $?/$^ERRNAME $res
1663 eval vput addrcodec res d $res
1664 echo $?/$^ERRNAME $res
1665 vput addrcodec res +e 5 Sauer (Ma) Braten Dr. <doog@def>
1666 echo $?/$^ERRNAME $res
1667 eval vput addrcodec res d $res
1668 echo $?/$^ERRNAME $res
1669 vput addrcodec res +e 6 Sauer (Ma) Braten Dr. (Heu) <doog@def>
1670 echo $?/$^ERRNAME $res
1671 eval vput addrcodec res d $res
1672 echo $?/$^ERRNAME $res
1673 vput addrcodec res +e 7 Sauer (Ma) Braten Dr. (Heu) <doog@def> (bu)
1674 echo $?/$^ERRNAME $res
1675 eval vput addrcodec res d $res
1676 echo $?/$^ERRNAME $res
1677 vput addrcodec res +e 8 \
1678 Dr. Sauer (Ma) Braten Dr. (Heu) <doog@def> (bu) Boom. Boom
1679 echo $?/$^ERRNAME $res
1680 eval vput addrcodec res d $res
1681 echo $?/$^ERRNAME $res
1682 vput addrcodec res +e 9 Dr.Sauer(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 10 (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 11 (Ma)Braten Dr".
" (Heu) <doog@def>
1691 echo $?/$^ERRNAME $res
1692 eval vput addrcodec res d $res
1693 echo $?/$^ERRNAME $res
1694 vput addrcodec res +e 12 Dr. Sauer (Ma) Braten Dr. (u) <doog@def>
1695 echo $?/$^ERRNAME $res
1696 eval vput addrcodec res d $res
1697 echo $?/$^ERRNAME $res
1698 vput addrcodec res +e 13(Ma)Braten Dr. (Heu) <doog@def>
1699 echo $?/$^ERRNAME $res
1700 eval vput addrcodec res d $res
1701 echo $?/$^ERRNAME $res
1702 vput addrcodec res +e 14 Hey, Du <doog@def> Wie() findet Dr. das? ()
1703 echo $?/$^ERRNAME $res
1704 eval vput addrcodec res d $res
1705 echo $?/$^ERRNAME $res
1706 vput addrcodec res +e 15 \
1707 Hey, Du <doog@def> Wie() findet "" Dr. "" das? ()
1708 echo $?/$^ERRNAME $res
1709 eval vput addrcodec res d $res
1710 echo $?/$^ERRNAME $res
1711 vput addrcodec res +e 16 \
1712 "Hey
," "Du
" <doog@def> "Wie
()" findet "" Dr. "" das? ()
1713 echo $?/$^ERRNAME $res
1714 eval vput addrcodec res d $res
1715 echo $?/$^ERRNAME $res
1716 vput addrcodec res +e 17 \
1717 "Hey
" Du <doog@def> "Wie
() findet
" " Dr.
""" das? ()
1718 echo $?/$^ERRNAME $res
1719 eval vput addrcodec res d $res
1720 echo $?/$^ERRNAME $res
1721 vput addrcodec res +e 18 \
1722 <doog@def> "Hey
" Du "Wie
() findet
" " Dr.
""" das? ()
1723 echo $?/$^ERRNAME $res
1724 eval vput addrcodec res d $res
1725 echo $?/$^ERRNAME $res
1726 vput addrcodec res +e 19 Hey\,\" <doog@def> "Wie
()" findet \" Dr. \" das?
1727 echo $?/$^ERRNAME $res
1728 eval vput addrcodec res d $res
1729 echo $?/$^ERRNAME $res
1731 vput addrcodec res ++e 20 Hey\,\" <doog@def> "Wie
()" findet \" Dr. \" das?
1732 echo $?/$^ERRNAME $res
1733 vput addrcodec res ++e 21 Hey\,\"" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1734 echo $?
/$^ERRNAME
$res
1735 eval vput addrcodec res d
$res
1736 echo $?
/$^ERRNAME
$res
1738 vput addrcodec res
+++e
22 Hey
\\,\" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1739 echo $?
/$^ERRNAME
$res
1740 eval vput addrcodec res d
$res
1741 echo $?
/$^ERRNAME
$res
1743 vput addrcodec res s \
1744 "23 Hey\\,\\\" \"Wie" () "\" findet \\\" Dr. \\\" das?" <doog@def
>
1745 echo $?
/$^ERRNAME
$res
1747 # Fix for [f3852f88]
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
1752 vput addrcodec res e
<from2@exam.ple
> 100 (comment
) "Quot(e)d"
1753 echo $?
/$^ERRNAME
$res
1754 eval vput addrcodec res d
$res
1755 echo $?
/$^ERRNAME
$res
1758 check behave
:addrcodec-1
0 "${MBOX}" '1047317989 2612'
1760 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1762 mlsubscribe isa2@list
1764 vput addrcodec res skin Hey\\,\" <isa0@list> "Wie
()" find \" Dr. \" das?
1765 echo $?/$^ERRNAME $res
1766 vput addrcodec res skinlist Hey\\,\" <isa0@list> "Wie
()" find \" Dr. \" das?
1767 echo $?/$^ERRNAME $res
1768 vput addrcodec res skin Hey\\,\" <isa1@list> "Wie
()" find \" Dr. \" das?
1769 echo $?/$^ERRNAME $res
1770 vput addrcodec res skinlist Hey\\,\" <isa1@list> "Wie
()" find \" Dr. \" das?
1771 echo $?/$^ERRNAME $res
1772 vput addrcodec res skin Hey\\,\" <isa2@list> "Wie
()" find \" Dr. \" das?
1773 echo $?/$^ERRNAME $res
1774 vput addrcodec res skinlist Hey\\,\" <isa2@list> "Wie
()" find \" Dr. \" das?
1775 echo $?/$^ERRNAME $res
1778 check behave:addrcodec-2 0 "${MBOX}" '1391779299 104'
1780 if have_feat idna; then
1781 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} ${ADDARG_UNI} > "${MBOX}" 2>&1
1782 vput addrcodec res e
(heu
) <du@blödiän
> "stroh" du
1783 echo $?
/$^ERRNAME
$res
1784 eval vput addrcodec res d
$res
1785 echo $?
/$^ERRNAME
$res
1786 vput addrcodec res e
<du@blödiän
> du
1787 echo $?
/$^ERRNAME
$res
1788 eval vput addrcodec res d
$res
1789 echo $?
/$^ERRNAME
$res
1790 vput addrcodec res e du
<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
1798 vput addrcodec res e du@blödiän
1799 echo $?
/$^ERRNAME
$res
1800 eval vput addrcodec res d
$res
1801 echo $?
/$^ERRNAME
$res
1804 check behave
:addrcodec-idna
0 "${MBOX}" '498775983 326'
1806 printf 'behave:addrcodec-idna: unsupported, skipped\n'
1813 t_prolog t_behave_vexpr
1815 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
1817 vput vexpr res = 9223372036854775807
1818 echo $?/$^ERRNAME $res
1819 vput vexpr res = 9223372036854775808
1820 echo $?/$^ERRNAME $res
1821 vput vexpr res = u9223372036854775808
1822 echo $?/$^ERRNAME $res
1823 vput vexpr res @= 9223372036854775808
1824 echo $?/$^ERRNAME $res
1825 vput vexpr res = -9223372036854775808
1826 echo $?/$^ERRNAME $res
1827 vput vexpr res = -9223372036854775809
1828 echo $?/$^ERRNAME $res
1829 vput vexpr res @= -9223372036854775809
1830 echo $?/$^ERRNAME $res
1831 vput vexpr res = U9223372036854775809
1832 echo $?/$^ERRNAME $res
1835 0b0111111111111111111111111111111111111111111111111111111111111111
1836 echo $?/$^ERRNAME $res
1838 S0b1000000000000000000000000000000000000000000000000000000000000000
1839 echo $?/$^ERRNAME $res
1841 S0b1000000000000000000000000000000000000000000000000000000000000000
1842 echo $?/$^ERRNAME $res
1844 U0b1000000000000000000000000000000000000000000000000000000000000000
1845 echo $?/$^ERRNAME $res
1847 0b1000000000000000000000000000000000000000000000000000000000000000
1848 echo $?/$^ERRNAME $res
1850 0b1000000000000000000000000000000000000000000000000000000000000000
1851 echo $?/$^ERRNAME $res
1853 -0b1000000000000000000000000000000000000000000000000000000000000000
1854 echo $?/$^ERRNAME $res
1856 S0b1000000000000000000000000000000000000000000000000000000000000001
1857 echo $?/$^ERRNAME $res
1859 S0b1000000000000000000000000000000000000000000000000000000000000001
1860 echo $?/$^ERRNAME $res
1862 -0b1000000000000000000000000000000000000000000000000000000000000001
1863 echo $?/$^ERRNAME $res
1865 U0b1000000000000000000000000000000000000000000000000000000000000001
1866 echo $?/$^ERRNAME $res
1868 vput vexpr res = 0777777777777777777777
1869 echo $?/$^ERRNAME $res
1870 vput vexpr res = S01000000000000000000000
1871 echo $?/$^ERRNAME $res
1872 vput vexpr res @= S01000000000000000000000
1873 echo $?/$^ERRNAME $res
1874 vput vexpr res = U01000000000000000000000
1875 echo $?/$^ERRNAME $res
1876 vput vexpr res = 01000000000000000000000
1877 echo $?/$^ERRNAME $res
1878 vput vexpr res @= 01000000000000000000000
1879 echo $?/$^ERRNAME $res
1880 vput vexpr res = -01000000000000000000000
1881 echo $?/$^ERRNAME $res
1882 vput vexpr res = S01000000000000000000001
1883 echo $?/$^ERRNAME $res
1884 vput vexpr res @= S01000000000000000000001
1885 echo $?/$^ERRNAME $res
1886 vput vexpr res @= -01000000000000000000001
1887 echo $?/$^ERRNAME $res
1888 vput vexpr res = U01000000000000000000001
1889 echo $?/$^ERRNAME $res
1891 vput vexpr res = 0x7FFFFFFFFFFFFFFF
1892 echo $?/$^ERRNAME $res
1893 vput vexpr res = S0x8000000000000000
1894 echo $?/$^ERRNAME $res
1895 vput vexpr res @= S0x8000000000000000
1896 echo $?/$^ERRNAME $res
1897 vput vexpr res = U0x8000000000000000
1898 echo $?/$^ERRNAME $res
1899 vput vexpr res = 0x8000000000000000
1900 echo $?/$^ERRNAME $res
1901 vput vexpr res @= 0x8000000000000000
1902 echo $?/$^ERRNAME $res
1903 vput vexpr res = -0x8000000000000000
1904 echo $?/$^ERRNAME $res
1905 vput vexpr res = S0x8000000000000001
1906 echo $?/$^ERRNAME $res
1907 vput vexpr res @= S0x8000000000000001
1908 echo $?/$^ERRNAME $res
1909 vput vexpr res @= -0x8000000000000001
1910 echo $?/$^ERRNAME $res
1911 vput vexpr res = u0x8000000000000001
1912 echo $?/$^ERRNAME $res
1915 echo $?/$^ERRNAME $res
1917 echo $?/$^ERRNAME $res
1919 echo $?/$^ERRNAME $res
1921 vput vexpr res + 0 0
1922 echo $?/$^ERRNAME $res
1923 vput vexpr res + 0 1
1924 echo $?/$^ERRNAME $res
1925 vput vexpr res + 1 1
1926 echo $?/$^ERRNAME $res
1928 vput vexpr res + 9223372036854775807 0
1929 echo $?/$^ERRNAME $res
1930 vput vexpr res + 9223372036854775807 1
1931 echo $?/$^ERRNAME $res
1932 vput vexpr res @+ 9223372036854775807 1
1933 echo $?/$^ERRNAME $res
1934 vput vexpr res + 0 9223372036854775807
1935 echo $?/$^ERRNAME $res
1936 vput vexpr res + 1 9223372036854775807
1937 echo $?/$^ERRNAME $res
1938 vput vexpr res @+ 1 9223372036854775807
1939 echo $?/$^ERRNAME $res
1941 vput vexpr res + -9223372036854775808 0
1942 echo $?/$^ERRNAME $res
1943 vput vexpr res + -9223372036854775808 -1
1944 echo $?/$^ERRNAME $res
1945 vput vexpr res @+ -9223372036854775808 -1
1946 echo $?/$^ERRNAME $res
1947 vput vexpr res + 0 -9223372036854775808
1948 echo $?/$^ERRNAME $res
1949 vput vexpr res + -1 -9223372036854775808
1950 echo $?/$^ERRNAME $res
1951 vput vexpr res @+ -1 -9223372036854775808
1952 echo $?/$^ERRNAME $res
1954 vput vexpr res - 0 0
1955 echo $?/$^ERRNAME $res
1956 vput vexpr res - 0 1
1957 echo $?/$^ERRNAME $res
1958 vput vexpr res - 1 1
1959 echo $?/$^ERRNAME $res
1961 vput vexpr res - 9223372036854775807 0
1962 echo $?/$^ERRNAME $res
1963 vput vexpr res - 9223372036854775807 -1
1964 echo $?/$^ERRNAME $res
1965 vput vexpr res @- 9223372036854775807 -1
1966 echo $?/$^ERRNAME $res
1967 vput vexpr res - 0 9223372036854775807
1968 echo $?/$^ERRNAME $res
1969 vput vexpr res - -1 9223372036854775807
1970 echo $?/$^ERRNAME $res
1971 vput vexpr res - -2 9223372036854775807
1972 echo $?/$^ERRNAME $res
1973 vput vexpr res @- -2 9223372036854775807
1974 echo $?/$^ERRNAME $res
1976 vput vexpr res - -9223372036854775808 +0
1977 echo $?/$^ERRNAME $res
1978 vput vexpr res - -9223372036854775808 +1
1979 echo $?/$^ERRNAME $res
1980 vput vexpr res @- -9223372036854775808 +1
1981 echo $?/$^ERRNAME $res
1982 vput vexpr res - 0 -9223372036854775808
1983 echo $?/$^ERRNAME $res
1984 vput vexpr res - +1 -9223372036854775808
1985 echo $?/$^ERRNAME $res
1986 vput vexpr res @- +1 -9223372036854775808
1987 echo $?/$^ERRNAME $res
1989 vput vexpr res + -13 -2
1990 echo $?/$^ERRNAME $res
1991 vput vexpr res - 0 0
1992 echo $?/$^ERRNAME $res
1993 vput vexpr res - 0 1
1994 echo $?/$^ERRNAME $res
1995 vput vexpr res - 1 1
1996 echo $?/$^ERRNAME $res
1997 vput vexpr res - -13 -2
1998 echo $?/$^ERRNAME $res
2000 vput vexpr res * 0 0
2001 echo $?/$^ERRNAME $res
2002 vput vexpr res * 0 1
2003 echo $?/$^ERRNAME $res
2004 vput vexpr res * 1 1
2005 echo $?/$^ERRNAME $res
2006 vput vexpr res * -13 -2
2007 echo $?/$^ERRNAME $res
2009 vput vexpr res / 0 0
2010 echo $?/$^ERRNAME $res
2011 vput vexpr res / 0 1
2012 echo $?/$^ERRNAME $res
2013 vput vexpr res / 1 1
2014 echo $?/$^ERRNAME $res
2015 vput vexpr res / -13 -2
2016 echo $?/$^ERRNAME $res
2018 vput vexpr res % 0 0
2019 echo $?/$^ERRNAME $res
2020 vput vexpr res % 0 1
2021 echo $?/$^ERRNAME $res
2022 vput vexpr res % 1 1
2023 echo $?/$^ERRNAME $res
2024 vput vexpr res % -13 -2
2025 echo $?/$^ERRNAME $res
2028 check behave:vexpr-numeric 0 "${MBOX}" '960821755 1962'
2030 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2031 vput vexpr res
find 'bananarama' 'nana'
2032 echo $?
/$^ERRNAME
:$res:
2033 vput vexpr res
find 'bananarama' 'bana'
2034 echo $?
/$^ERRNAME
:$res:
2035 vput vexpr res
find 'bananarama' 'Bana'
2036 echo $?
/$^ERRNAME
:$res:
2037 vput vexpr res
find 'bananarama' 'rama'
2038 echo $?
/$^ERRNAME
:$res:
2040 vput vexpr res ifind
'bananarama' 'nana'
2041 echo $?
/$^ERRNAME
:$res:
2042 vput vexpr res ifind
'bananarama' 'bana'
2043 echo $?
/$^ERRNAME
:$res:
2044 vput vexpr res ifind
'bananarama' 'Bana'
2045 echo $?
/$^ERRNAME
:$res:
2046 vput vexpr res ifind
'bananarama' 'rama'
2047 echo $?
/$^ERRNAME
:$res:
2049 vput vexpr res substring
'bananarama' 1
2050 echo $?
/$^ERRNAME
:$res:
2051 vput vexpr res substring
'bananarama' 3
2052 echo $?
/$^ERRNAME
:$res:
2053 vput vexpr res substring
'bananarama' 5
2054 echo $?
/$^ERRNAME
:$res:
2055 vput vexpr res substring
'bananarama' 7
2056 echo $?
/$^ERRNAME
:$res:
2057 vput vexpr res substring
'bananarama' 9
2058 echo $?
/$^ERRNAME
:$res:
2059 vput vexpr res substring
'bananarama' 10
2060 echo $?
/$^ERRNAME
:$res:
2061 vput vexpr res substring
'bananarama' 1 3
2062 echo $?
/$^ERRNAME
:$res:
2063 vput vexpr res substring
'bananarama' 3 3
2064 echo $?
/$^ERRNAME
:$res:
2065 vput vexpr res substring
'bananarama' 5 3
2066 echo $?
/$^ERRNAME
:$res:
2067 vput vexpr res substring
'bananarama' 7 3
2068 echo $?
/$^ERRNAME
:$res:
2069 vput vexpr res substring
'bananarama' 9 3
2070 echo $?
/$^ERRNAME
:$res:
2071 vput vexpr res substring
'bananarama' 10 3
2072 echo $?
/$^ERRNAME
:$res:
2074 vput vexpr res substring
'bananarama' -1
2075 echo $?
/$^ERRNAME
:$res:
2076 vput vexpr res substring
'bananarama' -3
2077 echo $?
/$^ERRNAME
:$res:
2078 vput vexpr res substring
'bananarama' -5
2079 echo $?
/$^ERRNAME
:$res:
2080 vput vexpr res substring
'bananarama' -7
2081 echo $?
/$^ERRNAME
:$res:
2082 vput vexpr res substring
'bananarama' -9
2083 echo $?
/$^ERRNAME
:$res:
2084 vput vexpr res substring
'bananarama' -10
2085 echo $?
/$^ERRNAME
:$res:
2086 vput vexpr res substring
'bananarama' 1 -3
2087 echo $?
/$^ERRNAME
:$res:
2088 vput vexpr res substring
'bananarama' 3 -3
2089 echo $?
/$^ERRNAME
:$res:
2090 vput vexpr res substring
'bananarama' 5 -3
2091 echo $?
/$^ERRNAME
:$res:
2092 vput vexpr res substring
'bananarama' 7 -3
2093 echo $?
/$^ERRNAME
:$res:
2094 vput vexpr res substring
'bananarama' 9 -3
2095 echo $?
/$^ERRNAME
:$res:
2096 vput vexpr res substring
'bananarama' 10 -3
2097 echo $?
/$^ERRNAME
:$res:
2099 vput vexpr res trim
'Cocoon Cocoon'
2100 echo $?
/$^ERRNAME
:$res:
2101 vput vexpr res trim
' Cocoon Cocoon '
2102 echo $?
/$^ERRNAME
:$res:
2103 vput vexpr res trim-front
'Cocoon Cocoon'
2104 echo $?
/$^ERRNAME
:$res:
2105 vput vexpr res trim-front
' Cocoon Cocoon '
2106 echo $?
/$^ERRNAME
:$res:
2107 vput vexpr res trim-end
'Cocoon Cocoon'
2108 echo $?
/$^ERRNAME
:$res:
2109 vput vexpr res trim-end
' Cocoon Cocoon '
2110 echo $?
/$^ERRNAME
:$res:
2113 check behave
:vexpr-string
0 "${MBOX}" '3182004322 601'
2115 if have_feat regex
; then
2116 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2117 vput vexpr res regex 'bananarama' 'nana'
2118 echo $?/$^ERRNAME :$res:
2119 vput vexpr res regex 'bananarama' 'bana'
2120 echo $?/$^ERRNAME :$res:
2121 vput vexpr res regex 'bananarama' 'Bana'
2122 echo $?/$^ERRNAME :$res:
2123 vput vexpr res regex 'bananarama' 'rama'
2124 echo $?/$^ERRNAME :$res:
2126 vput vexpr res iregex 'bananarama' 'nana'
2127 echo $?/$^ERRNAME :$res:
2128 vput vexpr res iregex 'bananarama' 'bana'
2129 echo $?/$^ERRNAME :$res:
2130 vput vexpr res iregex 'bananarama' 'Bana'
2131 echo $?/$^ERRNAME :$res:
2132 vput vexpr res iregex 'bananarama' 'rama'
2133 echo $?/$^ERRNAME :$res:
2135 vput vexpr res regex 'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
2136 echo $?/$^ERRNAME :$res:
2137 vput vexpr res regex 'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
2138 echo $?/$^ERRNAME :$res:
2139 vput vexpr res regex 'bananarama' 'Bana(.+)' '\$1\$0'
2140 echo $?/$^ERRNAME :$res:
2141 vput vexpr res regex 'bananarama' '(.+)rama' '\$1\$0'
2142 echo $?/$^ERRNAME :$res:
2144 vput vexpr res iregex 'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
2145 echo $?/$^ERRNAME :$res:
2146 vput vexpr res iregex 'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
2147 echo $?/$^ERRNAME :$res:
2148 vput vexpr res iregex 'bananarama' 'Bana(.+)' '\$1\$0'
2149 echo $?/$^ERRNAME :$res:
2150 vput vexpr res iregex 'bananarama' '(.+)rama' '\$1\$0'
2151 echo $?/$^ERRNAME :$res:
2155 check behave:vexpr-regex 0 "${MBOX}" '3270360157 311'
2157 printf 'behave:vexpr-regex: unsupported, skipped\n'
2163 t_behave_call_ret() {
2164 t_prolog t_behave_call_ret
2166 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
2171 vput vexpr j
'&' $i 7
2177 vput vexpr j
'&' $i 7
2183 echo ! The end
for $1
2187 # Transport $?/$! up the call chain
2193 wysh
set i
=$? j
=$
! k
=$^ERRNAME
2197 echo ! The end
for $1
2198 return $i $^ERR-BUSY
2202 # Up and down it goes
2209 vput vexpr k
- $1 $2
2213 echo "# <$i/$j> .. "
2217 eval echon
"<\$1=\$i/\$^ERRNAME-$j "
2220 echo ! The end
for $1=$i/$2
2224 return $i $^ERR-BUSY
2230 call w1
0; echo ?
=$?
!=$
!; echo -----;
2231 call w2
0; echo ?
=$?
!=$^ERRNAME
; echo -----;
2232 call w3
0 1; echo ?
=$?
!=$^ERRNAME
; echo -----;
2235 check behave
:call_ret
0 "${MBOX}" '1572045517 5922'
2241 t_prolog t_behave_xcall
2243 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
2248 vput vexpr j '&' $i 7
2254 echo ! The end for $1/$2
2256 return $i $^ERR-BUSY
2267 echo ?=$? !=$^ERRNAME
2270 echo ?=$? !=$^ERRNAME
2272 echo ?=$? !=$^ERRNAME
2275 check behave:xcall-1 0 "${MBOX}" '2401702082 23801'
2279 ${cat} <<- '__EOT' > "${BODY}"
2284 vput vexpr j '&' $i 7
2290 echo ! The end for $1
2293 echo would be err with errexit
2302 echo zwei, ?=$? !=$!
2303 localopts yes; set errexit
2305 echo drei, ?=$? !=$^ERRNAME
2307 echo vier, ?=$? !=$^ERRNAME, this is an error
2310 echo outer 1, ?=$? !=$^ERRNAME
2312 echo outer 2, ?=$? !=$^ERRNAME, could be error if xxxign non-empty
2314 echo outer 3, ?=$? !=$^ERRNAME
2315 echo this is definitely an error
2318 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign ignerr' -Snomemdebug \
2320 check behave
:xcall-2
0 "${MBOX}" '3900716531 4200'
2322 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign " "' -Snomemdebug \
2324 check behave:xcall-3 1 "${MBOX}" '1006776201 2799'
2329 t_behave_vpospar() {
2330 t_prolog t_behave_vpospar
2332 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2333 vpospar
set hey
, "'you ", world
!
2334 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2335 vput vpospar x quote
; echo x
<$x>
2336 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2337 vput vpospar y quote
;echo y
<$y>
2338 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2339 eval vpospar
set ${y};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2340 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2343 echo infun2
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2344 vput vpospar z quote
;echo infun2
:z
<$z>
2348 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2349 vput vpospar y quote
;echo infun
:y
<$y>
2350 eval vpospar
set ${x};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2351 vpospar
clear;echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2353 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2354 eval vpospar
set ${y};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
2357 call infun This
"in a" fun
2358 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2359 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2361 check behave
:vpospar-1
0 "${MBOX}" '155175639 866'
2364 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2366 echo ifs<$ifs> ifs-ws<$ifs-ws>
2367 vpospar set hey, "'you ", world!
2368 echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2369 vput vpospar x quote; echo x<$x>
2370 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2371 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2374 echo ifs<$ifs> ifs-ws<$ifs-ws>
2375 vpospar set hey, "'you
", world!
2376 unset ifs;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2378 vput vpospar x quote; echo x<$x>
2379 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2380 eval vpospar set ${x};\
2381 unset ifs;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2384 echo ifs<$ifs> ifs-ws<$ifs-ws>
2385 vpospar set hey, "'you ", world!
2386 unset ifs; echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2388 vput vpospar x quote; echo x<$x>
2389 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2390 eval vpospar set ${x};\
2391 unset ifs;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2393 check behave:vpospar-ifs 0 "${MBOX}" '2015927702 706'
2398 t_behave_atxplode() {
2399 t_prolog t_behave_atxplode
2400 TRAP_EXIT_ADDONS="./.t*"
2402 ${cat} > ./.t.sh <<- '___
'; ${cat} > ./.t.rc <<- '___
'
2405 printf " (1/$#: <$1>)"
2407 if [ $# -gt 0 ]; then
2421 printf yyy;yyy 'xxx' "b\$
'\t'u
' "
2422 printf xxx;xxx arg ,b u.
2423 printf xxx;xxx arg , .
2424 printf xxx;xxx arg ,ball.
2430 echon " (1/$#: <$1>)"
2445 echon yyy;call yyy '\call xxx' "b\$
'\t'u
' "
2446 echon xxx;call xxx arg ,b u.
2447 echon xxx;call xxx arg , .
2448 echon xxx;call xxx arg ,ball.
2451 ${MAILX} ${ARGS} -X'source ./.t.rc' -Xx > "${MBOX}" 2>&1
2452 check behave:atxplode-1 0 "${MBOX}" '41566293 164'
2454 #${SHELL} ./.t.sh > ./.tshout 2>&1
2455 #check behave:atxplode:disproof-1 0 ./.tshout '41566293 164'
2461 t_prolog t_behave_read
2462 TRAP_EXIT_ADDONS="./.t*"
2464 ${cat} <<- '__EOT
' > .tin
2465 hey1, "'you
", world!
2466 hey2, "'you ", bugs bunny!
2471 ${cat} <<- '__EOT
' |\
2472 ${MAILX} ${ARGS} -X'readctl create ./.tin' > "${MBOX}" 2>&1
2474 echo $?/$^ERRNAME / <$a><$b><$c>
2476 echo $?/$^ERRNAME / <$a><$b><$c>
2478 echo $?/$^ERRNAME / <$a><$b><$c>
2480 echo $?/$^ERRNAME / <$a><$b><$c>
2481 unset a b c;read a b c
2482 echo $?/$^ERRNAME / <$a><$b><$c>
2483 readctl remove ./.tin;echo readctl remove:$?/$^ERRNAME
2485 check behave:read-1 0 "${MBOX}" '1527910147 173'
2487 ${cat} <<- '__EOT
' > .tin2
2488 hey2.0,:"'you
",:world!:mars.:
2489 hey2.1,:"'you ",:world!
2490 hey2.2,:"'you
",:bugs bunny!
2496 ${cat} <<- '__EOT' |\
2497 6< .tin2 ${MAILX} ${ARGS} -X 'readctl create 6' > "${MBOX}" 2>&1
2500 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2502 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2504 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2506 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2508 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2510 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2511 unset a b c
;read a b c
2512 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2514 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2515 readctl remove
6;echo readctl remove
:$?
/$^ERRNAME
2517 check behave
:read-ifs
0 "${MBOX}" '890153490 298'
2519 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2521 readall d; echo $?/$^ERRNAME / <$d>
2522 wysh set d;readall d;echo $?/$^ERRNAME / <$d>
2523 readctl create .tin2
2524 readall d; echo $?/$^ERRNAME / <$d>
2525 wysh set d;readall d;echo $?/$^ERRNAME / <$d>
2526 readctl remove .tin;echo $?/$^ERRNAME;\
2527 readctl remove .tin2;echo $?/$^ERRNAME
2529 check behave:readall 0 "${MBOX}" '860434889 333'
2535 t_prolog t_behave_mbox
2536 TRAP_EXIT_ADDONS=".
/.t
*"
2540 while [ ${i} -lt 112 ]; do
2541 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
2542 "${MBOX}" "${i}" "${i}"
2545 ) | ${MAILX} ${ARGS}
2546 check behave:mbox-1 0 "${MBOX}" '1140119864 13780'
2548 printf 'File "%s
"\ncopy * "%s
"\nFile "%s
"\nfrom*' "${MBOX}" .tmbox1 .tmbox1 |
2549 ${MAILX} ${ARGS} -Sshowlast > .tlst
2550 check behave:mbox-2 0 .tlst '2739893312 9103'
2552 printf 'File "%s
"\ncopy * "file://%s
"\nFile "file://%s
"\nfrom*' \
2553 "${MBOX}" .tmbox2 .tmbox2 | ${MAILX} ${ARGS} -Sshowlast > .tlst
2554 check behave
:mbox-3
0 .tlst
'1702194178 9110'
2556 # only the odd (even)
2558 printf 'File "file://%s"\ncopy ' .tmbox2
2560 while [ ${i} -lt 112 ]; do
2562 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2565 printf 'file://%s\nFile "file://%s"\nfrom*' .tmbox3 .tmbox3
2566 ) |
${MAILX} ${ARGS} -Sshowlast > .tlst
2567 check behave
:mbox-4
0 .tmbox3
'631132924 6890'
2568 check behave
:mbox-5
- .tlst
'2960975049 4573'
2571 printf 'file "file://%s"\nmove ' .tmbox2
2573 while [ ${i} -lt 112 ]; do
2575 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2578 printf 'file://%s\nFile "file://%s
"\nfrom*\nFile "file://%s
"\nfrom*' \
2579 .tmbox3 .tmbox3 .tmbox2
2580 ) | ${MAILX} ${ARGS} -Sshowlast > .tlst
2581 check behave:mbox-6 0 .tmbox3 '1387070539 13655'
2582 ${sed} 2d < .tlst > .tlstx
2583 check behave:mbox-7 - .tlstx '2729940494 13645'
2588 t_behave_maildir() {
2589 t_prolog t_behave_maildir
2590 TRAP_EXIT_ADDONS=".
/.t
*"
2594 while [ ${i} -lt 112 ]; do
2595 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
2596 "${MBOX}" "${i}" "${i}"
2599 ) | ${MAILX} ${ARGS}
2600 check behave:maildir-1 0 "${MBOX}" '1140119864 13780'
2606 ' "${MBOX}" .tmdir1 .tmdir1 |
2607 ${MAILX} ${ARGS} -Snewfolders=maildir -Sshowlast > .tlst
2608 check behave:maildir-2 0 .tlst '1797938753 9103'
2611 copy * "maildir
://%s
"
2614 ' "${MBOX}" .tmdir2 .tmdir2 |
2615 ${MAILX} ${ARGS} -Sshowlast > .tlst
2616 check behave:maildir-3 0 .tlst '1155631089 9113'
2618 printf 'File "maildir
://%s
"
2622 ' .tmdir2 .tmbox1 .tmbox1 |
2623 ${MAILX} ${ARGS} -Sshowlast > .tlst
2624 check behave:maildir-4 0 .tmbox1 '2646131190 13220'
2625 check behave:maildir-5 - .tlst '3701297796 9110'
2627 # only the odd (even)
2629 printf 'File "maildir
://%s
"
2632 while [ ${i} -lt 112 ]; do
2634 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2641 ) | ${MAILX} ${ARGS} -Sshowlast > .tlst
2642 check behave:maildir-6 0 .tmbox2 '142890131 6610'
2643 check behave:maildir-7 - .tlst '960096773 4573'
2646 printf 'file "maildir
://%s
"
2649 while [ ${i} -lt 112 ]; do
2651 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2659 ' .tmbox2 .tmbox2 .tmdir2
2660 ) |
${MAILX} ${ARGS} -Sshowlast > .tlst
2661 check behave
:maildir-8
0 .tmbox2
'3806905791 13100'
2662 ${sed} 2d
< .tlst
> .tlstx
2663 check behave
:maildir-9
- .tlstx
'4216815295 13645'
2668 t_behave_record_a_resend
() {
2669 t_prolog t_behave_record_a_resend
2670 TRAP_EXIT_ADDONS
="./.t.record ./.t.resent"
2674 m %s\n~s Subject 1.\nHello.\n~.
2675 set record-files add-file-recipients
2676 m %s\n~s Subject 2.\nHello.\n~.
2678 resend 2 ./.t.resent
2679 Resend 1 ./.t.resent
2681 resend 2 ./.t.resent
2682 Resend 1 ./.t.resent
2683 ' .
/.t.record
"${MBOX}" "${MBOX}" "${MBOX}" |
2686 check behave
:record_a_resend-1
0 "${MBOX}" '3057873538 256'
2687 check behave
:record_a_resend-2
- .t.record
'391356429 460'
2688 check behave
:record_a_resend-3
- .t.resent
'2685231691 648'
2693 t_behave_e_H_L_opts
() {
2694 t_prolog t_behave_e_H_L_opts
2695 TRAP_EXIT_ADDONS
="./.tsendmail.sh ./.t.mbox"
2698 ${MAILX} ${ARGS} -ef .
/.t.mbox
2699 echo ${?} > "${MBOX}"
2701 ${cat} <<-_EOT > ./.tsendmail.sh
2703 (echo 'From Alchemilla Wed Apr 07 17:03:33 2017' && ${cat} && echo
2706 chmod 0755 .
/.tsendmail.sh
2707 printf 'm me@exam.ple\nLine 1.\nHello.\n~.\n' |
2708 ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
2709 printf 'm you@exam.ple\nLine 1.\nBye.\n~.\n' |
2710 ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
2712 ${MAILX} ${ARGS} -ef .
/.t.mbox
2713 echo ${?} >> "${MBOX}"
2714 ${MAILX} ${ARGS} -efL @t@me .
/.t.mbox
2715 echo ${?} >> "${MBOX}"
2716 ${MAILX} ${ARGS} -efL @t@you .
/.t.mbox
2717 echo ${?} >> "${MBOX}"
2718 ${MAILX} ${ARGS} -efL '@>@Line 1' .
/.t.mbox
2719 echo ${?} >> "${MBOX}"
2720 ${MAILX} ${ARGS} -efL '@>@Hello.' .
/.t.mbox
2721 echo ${?} >> "${MBOX}"
2722 ${MAILX} ${ARGS} -efL '@>@Bye.' .
/.t.mbox
2723 echo ${?} >> "${MBOX}"
2724 ${MAILX} ${ARGS} -efL '@>@Good bye.' .
/.t.mbox
2725 echo ${?} >> "${MBOX}"
2727 ${MAILX} ${ARGS} -fH ./.t.mbox >> "${MBOX}"
2728 echo ${?} >> "${MBOX}"
2729 ${MAILX} ${ARGS} -fL @t@me ./.t.mbox >> "${MBOX}"
2730 echo ${?} >> "${MBOX}"
2731 ${MAILX} ${ARGS} -fL @t@you ./.t.mbox >> "${MBOX}"
2732 echo ${?} >> "${MBOX}"
2733 ${MAILX} ${ARGS} -fL '@>@Line 1' ./.t.mbox >> "${MBOX}"
2734 echo ${?} >> "${MBOX}"
2735 ${MAILX} ${ARGS} -fL '@>@Hello.' ./.t.mbox >> "${MBOX}"
2736 echo ${?} >> "${MBOX}"
2737 ${MAILX} ${ARGS} -fL '@>@Bye.' ./.t.mbox >> "${MBOX}"
2738 echo ${?} >> "${MBOX}"
2739 ${MAILX} ${ARGS} -fL '@>@Good bye.' ./.t.mbox >> "${MBOX}" 2>/dev/null
2740 echo ${?} >> "${MBOX}"
2742 check behave:e_H_L_opts - "${MBOX}" '1708955574 678'
2747 t_behave_alternates() {
2748 t_prolog t_behave_alternates
2749 TRAP_EXIT_ADDONS=".
/.t
*"
2751 ${cat} <<-_EOT > ./.tsendmail.sh
2753 (echo 'From Valeriana Sat Jul 08 15:54:03 2017' && ${cat} && echo
2756 chmod 0755 ./.tsendmail.sh
2758 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh > ./.tall 2>&1
2762 alternates a1@b1 a2@b2 a3@b3
2767 echo $?/$^ERRNAME <$rv>
2772 echo $?/$^ERRNAME <$rv>
2775 echo $?/$^ERRNAME <$rv>
2778 echo $?/$^ERRNAME <$rv>
2782 alternates a1@b1 a2@b2 a3@b3
2785 echo $?/$^ERRNAME <$rv>
2788 echo $?/$^ERRNAME <$rv>
2791 echo $?/$^ERRNAME <$rv>
2794 alternates a1@b1 a2@b2 a3@b3
2797 echo $?/$^ERRNAME <$rv>
2800 echo $?/$^ERRNAME <$rv>
2803 echo $?/$^ERRNAME <$rv>
2807 alternates a1@b1 a2@b2 a3@b3
2810 echo $?/$^ERRNAME <$rv>
2814 alternates a1@b1 a1@c1 a1@d1 a2@b2 a3@b3 a3@c3 a3@d3
2816 ~s all alternates, only a1@b1 remains
2818 ~b a3@b3 a3@c3 a3@d3
2827 alternates a1@b1 a1@c1 a2@b2 a3@b3
2829 ~s a1@b1 a1@d1, and a3@c3 a3@d3 remain
2831 ~b a3@b3 a3@c3 a3@d3
2838 alternates a1@b1 a2@b2 a3; set allnet
2840 ~s all alternates via allnet, only a1@b1 remains
2842 ~b a3@b3 a3@c3 a3@d3
2853 echo $?/$^ERRNAME <$rv>
2857 echo $?/$^ERRNAME <$rv>
2861 echo $?/$^ERRNAME <$rv>
2865 echo $?/$^ERRNAME <$rv>
2869 echo $?/$^ERRNAME <$rv>
2873 alternates a1@b1 a2@b2
2876 echo $?/$^ERRNAME <$rv>
2877 alternates a3@b3 a4@b4
2880 echo $?/$^ERRNAME <$rv>
2882 check behave:alternates-1 0 "${MBOX}" '142184864 515'
2883 check behave:alternates-2 - .tall '1878598364 505'
2889 t_prolog t_behave_alias
2890 TRAP_EXIT_ADDONS=".
/.t
*"
2892 ${cat} <<-_EOT > ./.tsendmail.sh
2894 (echo 'From Hippocastanum Mon Jun 19 15:07:07 2017' && ${cat} && echo
2897 chmod 0755 ./.tsendmail.sh
2899 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh > ./.tall 2>&1
2901 alias a1 ex2@a1.ple "EX3
<ex3@a1.ple
>"
2903 alias a2 ex1@a2.ple ex2@a2.ple ex3@a2.ple ex4@a2.ple
2905 alias a4 a5 ex1@a4.ple
2907 alias a6 a7 ex1@a6.ple
2921 check behave:alias-1 0 "${MBOX}" '2496925843 272'
2922 check behave:alias-2 - .tall '3548953204 152'
2924 # TODO t_behave_alias: n_ALIAS_MAXEXP is compile-time constant,
2925 # TODO need to somehow provide its contents to the test, then test
2930 t_behave_filetype() {
2931 t_prolog t_behave_filetype
2932 TRAP_EXIT_ADDONS=".
/.t
*"
2934 ${cat} <<-_EOT > ./.tsendmail.sh
2936 (echo 'From Alchemilla Wed Apr 25 15:12:13 2017' && ${cat} && echo
2939 chmod 0755 ./.tsendmail.sh
2941 printf 'm m1@e.t\nL1\nHy1\n~.\nm m2@e.t\nL2\nHy2\n~@ %s\n~.\n' \
2942 "${SRCDIR}snailmail.jpg" | ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
2943 check behave
:filetype-1
0 "${MBOX}" '1594682963 13520'
2945 if (echo |
gzip -c) >/dev
/null
2>&1; then
2948 printf 'File "%s"\ncopy 1 ./.t.mbox.gz\ncopy 2 ./.t.mbox.gz' \
2949 "${MBOX}" | ${MAILX} ${ARGS} \
2950 -X'filetype gz gzip\ -dc gzip\ -c'
2951 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2952 ${MAILX} ${ARGS} -X'filetype gz gzip\ -dc gzip\ -c'
2954 check behave:filetype-2 - ".
/.t.mbox
" '1594682963 13520'
2955 check behave:filetype-3 - ".
/.t.out
" '2392348396 102'
2957 echo 'behave:filetype-2: unsupported, skipped'
2958 echo 'behave:filetype-3: unsupported, skipped'
2963 printf 'File "%s
"\ncopy 1 ./.t.mbox.gz
2969 -X'filetype gz gzip\ -dc gzip\ -c' \
2970 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" \
2971 "echo eins
;echo zwei
;echo und mit
${sed} bist Du dabei
;${cat}"'
2972 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2974 -X'filetype gz gzip\ -dc gzip\ -c' \
2975 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" kill\ 0'
2977 check behave:filetype-4 - ".
/.t.mbox
" '2886541147 27060'
2978 check behave:filetype-5 - ".
/.t.out
" '852335377 172'
2983 t_behave_message_injections() {
2984 t_prolog t_behave_message_injections
2985 TRAP_EXIT_ADDONS=".
/.t
*"
2987 ${cat} <<-_EOT > ./.tsendmail.sh
2989 (echo 'From Echinacea Tue Jun 20 15:54:02 2017' && ${cat} && echo
2992 chmod 0755 ./.tsendmail.sh
2994 echo mysig > ./.tmysig
2996 echo some-body | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh \
2997 -Smessage-inject-head=head-inject \
2998 -Smessage-inject-tail=tail-inject \
2999 -Ssignature=./.tmysig \
3000 ex@am.ple > ./.tall 2>&1
3001 check behave:message_injections-1 0 "${MBOX}" '2434746382 134'
3002 check behave:message_injections-2 - .tall '4294967295 0' # empty file
3004 ${cat} <<-_EOT > ./.template
3008 Subject: This subject is
3010 Body, body, body me.
3012 < ./.template ${MAILX} ${ARGS} -t -Smta=./.tsendmail.sh \
3013 -Smessage-inject-head=head-inject \
3014 -Smessage-inject-tail=tail-inject \
3015 -Ssignature=./.tmysig \
3017 check behave:message_injections-3 0 "${MBOX}" '3114203412 198'
3018 check behave:message_injections-4 - .tall '4294967295 0' # empty file
3023 t_behave_attachments() {
3024 t_prolog t_behave_attachments
3025 TRAP_EXIT_ADDONS=".
/.t
*"
3027 ${cat} <<-_EOT > ./.tsendmail.sh
3029 (echo 'From Cannabis Sun Feb 18 02:02:46 2018' && ${cat} && echo
3032 chmod 0755 ./.tsendmail.sh
3034 ${cat} <<-_EOT > ./.tx
3035 From steffen Sun Feb 18 02:48:40 2018
3036 Date: Sun, 18 Feb 2018 02:48:40 +0100
3039 User-Agent: s-nail v14.9.7
3042 From steffen Sun Feb 18 02:48:42 2018
3043 Date: Sun, 18 Feb 2018 02:48:42 +0100
3046 User-Agent: s-nail v14.9.7
3051 printf 'att2-1\natt2-2\natt2-4\n' > ./'.t 2'
3052 printf 'att3-1\natt3-2\natt3-4\n' > ./.t3
3053 printf 'att4-1\natt4-2\natt4-4\n' > './.t 4'
3056 !@ ./.t3 ".
/.t
4" ""
3064 ' | ${MAILX} ${ARGS} -Sescape=! -Smta=./.tsendmail.sh \
3065 -a ./.t1 -a './.t 2' \
3066 -s attachment-test \
3067 ex@am.ple > ./.tall 2>&1
3068 check behave:attachments-1 0 "${MBOX}" '4107062253 634'
3069 check behave:attachments-2 - .tall '1928331872 720'
3074 !s This the subject is
3075 !@ ./.t3 "#2" "./.t 4" "#1" ""
3085 !@ .
/.t3
"#2" "./.t 4" "#1" ""
3093 !@ .
/.t3
"" "#2" "" "./.t 4" "" "#1" ""
3102 !@ .
/.t3
"" "#2" "" "./.t 4" "" "#1" ""
3116 ' | ${MAILX} ${ARGS} -Sescape=! -Smta=./.tsendmail.sh -Rf ./.tx \
3118 check behave:attachments-3 0 "${MBOX}" '798122412 2285'
3119 check behave:attachments-4 - .tall '2526106274 1910'
3124 t_behave_compose_hooks() { # TODO monster
3125 t_prolog t_behave_compose_hooks
3126 TRAP_EXIT_ADDONS="./.t*"
3128 (echo line one&&echo line two&&echo line three) > ./.treadctl
3129 (echo echo four&&echo echo five&&echo echo six) > ./.tattach
3131 ${cat} <<-_EOT > ./.tsendmail.sh
3133 (echo 'From PrimulaVeris Wed Apr
10 22:59:00 2017' && ${cat} && echo
3136 chmod 0755 ./.tsendmail.sh
3138 ${cat} <<'__EOT__' > ./.trc
3140 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
3143 vput vexpr es substr "$1" 0 1
3148 define read_mline_res {
3149 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3150 echo $len/$es/$^ERRNAME: $hl
3151 if [ $es -ne $^ERR-NONE ]
3152 xcall bail read_mline_res
3154 \xcall read_mline_res
3159 echo "~^header list"; read hl; echo $hl;\
3160 call xerr "$hl" "in_addr ($xh) 0-1"
3162 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
3163 read es; echo $es; call xerr "$es" "ins_addr $xh 1-1"
3164 echo "~^header insert $xh <${xh}2@exam.ple>";\
3165 read es; echo $es; call xerr "$es" "ins_addr $xh 1-2"
3166 echo "~^header insert $xh ${xh}3@exam.ple";\
3167 read es; echo $es; call xerr "$es" "ins_addr $xh 1-3"
3168 echo "~^header list $xh"; read hl; echo $hl;\
3169 call xerr "$hl" "ins_addr $xh 1-4"
3170 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 1-5"
3173 if [ "$t_remove" == "" ]
3177 echo "~^header remove $xh"; read es; call xerr $es "ins_addr $xh 2-1"
3178 echo "~^header remove $xh"; read es; vput vexpr es substr $es 0 3
3180 xcall bail "ins_addr $xh 2-2"
3182 echo "~^header list $xh"; read es; vput vexpr es substr $es 0 3
3184 xcall bail "ins_addr $xh 2-3"
3186 echo "~^header show $xh"; read es; vput vexpr es substr $es 0 3
3188 xcall bail "ins_addr $xh 2-4"
3192 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
3193 read es; echo $es; call xerr "$es" "ins_addr $xh 3-1"
3194 echo "~^header insert $xh <${xh}2@exam.ple>";\
3195 read es; echo $es; call xerr "$es" "ins_addr $xh 3-2"
3196 echo "~^header insert $xh ${xh}3@exam.ple";\
3197 read es; echo $es; call xerr "$es" "ins_addr $xh 3-3"
3198 echo "~^header list $xh"; read hl; echo $hl;\
3199 call xerr "$hl" "ins_addr $xh 3-4"
3200 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 3-5"
3203 echo "~^header remove-at $xh 1"; read es;\
3204 call xerr $es "ins_addr $xh 3-6"
3205 echo "~^header remove-at $xh 1"; read es;\
3206 call xerr $es "ins_addr $xh 3-7"
3207 echo "~^header remove-at $xh 1"; read es;\
3208 call xerr $es "ins_addr $xh 3-8"
3209 echo "~^header remove-at $xh 1"; read es;\
3210 vput vexpr es substr $es 0 3
3212 xcall bail "ins_addr $xh 3-9"
3214 echo "~^header remove-at $xh T"; read es;\
3215 vput vexpr es substr $es 0 3
3217 xcall bail "ins_addr $xh 3-10"
3219 echo "~^header list $xh"; read es;\
3220 vput vexpr es substr $es 0 3
3222 xcall bail "ins_addr $xh 3-11"
3224 echo "~^header show $xh"; read es;\
3225 vput vexpr es substr $es 0 3
3227 xcall bail "ins_addr $xh 3-12"
3231 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
3232 read es; echo $es; call xerr "$es" "ins_addr $xh 4-1"
3233 echo "~^header insert $xh <${xh}2@exam.ple> (comment) \"Quot(e)d\"";\
3234 read es; echo $es; call xerr "$es" "ins_addr $xh 4-2"
3235 echo "~^header insert $xh ${xh}3@exam.ple";\
3236 read es; echo $es; call xerr "$es" "ins_addr $xh 4-3"
3237 echo "~^header list $xh"; read hl; echo $hl;\
3238 call xerr "$hl" "header list $xh 3-4"
3239 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 4-5"
3242 echo "~^header remove-at $xh 3"; read es;\
3243 call xerr $es "ins_addr $xh 4-6"
3244 echo "~^header remove-at $xh 2"; read es;\
3245 call xerr $es "ins_addr $xh 4-7"
3246 echo "~^header remove-at $xh 1"; read es;\
3247 call xerr $es "ins_addr $xh 4-8"
3248 echo "~^header remove-at $xh 1"; read es;\
3249 vput vexpr es substr $es 0 3
3251 xcall bail "ins_addr $xh 4-9"
3253 echo "~^header remove-at $xh T"; read es;\
3254 vput vexpr es substr $es 0 3
3256 xcall bail "ins_addr $xh 4-10"
3258 echo "~^header list $xh"; read es;\
3259 vput vexpr es substr $es 0 3
3261 xcall bail "ins_addr $xh 4-11"
3263 echo "~^header show $xh"; read es;\
3264 vput vexpr es substr $es 0 3
3266 xcall bail "ins_addr $xh 4-12"
3270 wysh set xh=$1 mult=$2
3271 echo "~^header list"; read hl; echo $hl;\
3272 call xerr "$hl" "ins_ref ($xh) 0-1"
3274 echo "~^header insert $xh <$xh@exam.ple>";\
3275 read es; echo $es; call xerr "$es" "ins_ref $xh 1-1"
3277 echo "~^header insert $xh <${xh}2@exam.ple>";\
3278 read es; echo $es; call xerr "$es" "ins_ref $xh 1-2"
3279 echo "~^header insert $xh ${xh}3@exam.ple";\
3280 read es; echo $es; call xerr "$es" "ins_ref $xh 1-3"
3282 echo "~^header insert $xh <${xh}2@exam.ple>"; read es;\
3283 vput vexpr es substr $es 0 3
3285 xcall bail "ins_ref $xh 1-4"
3289 echo "~^header list $xh"; read hl; echo $hl;\
3290 call xerr "$hl" "ins_ref $xh 1-5"
3291 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 1-6"
3294 if [ "$t_remove" == "" ]
3298 echo "~^header remove $xh"; read es;\
3299 call xerr $es "ins_ref $xh 2-1"
3300 echo "~^header remove $xh"; read es;\
3301 vput vexpr es substr $es 0 3
3303 xcall bail "ins_ref $xh 2-2"
3305 echo "~^header list $xh"; read es;\
3306 vput vexpr es substr $es 0 3
3308 xcall bail "$es ins_ref $xh 2-3"
3310 echo "~^header show $xh"; read es;\
3311 vput vexpr es substr $es 0 3
3313 xcall bail "ins_ref $xh 2-4"
3317 echo "~^header insert $xh <$xh@exam.ple>";\
3318 read es; echo $es; call xerr "$es" "ins_ref $xh 3-1"
3320 echo "~^header insert $xh <${xh}2@exam.ple>";\
3321 read es; echo $es; call xerr "$es" "ins_ref $xh 3-2"
3322 echo "~^header insert $xh ${xh}3@exam.ple";\
3323 read es; echo $es; call xerr "$es" "ins_ref $xh 3-3"
3325 echo "~^header list $xh";\
3326 read hl; echo $hl; call xerr "$hl" "ins_ref $xh 3-4"
3327 echo "~^header show $xh";\
3328 read es; call xerr $es "ins_ref $xh 3-5"
3331 echo "~^header remove-at $xh 1"; read es;\
3332 call xerr $es "ins_ref $xh 3-6"
3333 if [ $mult -ne 0 ] && [ $xh != subject ]
3334 echo "~^header remove-at $xh 1"; read es;\
3335 call xerr $es "ins_ref $xh 3-7"
3336 echo "~^header remove-at $xh 1"; read es;\
3337 call xerr $es "ins_ref $xh 3-8"
3339 echo "~^header remove-at $xh 1"; read es;\
3340 vput vexpr es substr $es 0 3
3342 xcall bail "ins_ref $xh 3-9"
3344 echo "~^header remove-at $xh T"; read es;\
3345 vput vexpr es substr $es 0 3
3347 xcall bail "ins_ref $xh 3-10"
3349 echo "~^header show $xh"; read es;\
3350 vput vexpr es substr $es 0 3
3352 xcall bail "ins_ref $xh 3-11"
3356 echo "~^header insert $xh <$xh@exam.ple> ";\
3357 read es; echo $es; call xerr "$es" "ins_ref $xh 4-1"
3359 echo "~^header insert $xh <${xh}2@exam.ple> ";\
3360 read es; echo $es; call xerr "$es" "ins_ref $xh 4-2"
3361 echo "~^header insert $xh ${xh}3@exam.ple";\
3362 read es; echo $es; call xerr "$es" "ins_ref $xh 4-3"
3364 echo "~^header list $xh"; read hl; echo $hl;\
3365 call xerr "$hl" "ins_ref $xh 4-4"
3366 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 4-5"
3369 if [ $mult -ne 0 ] && [ $xh != subject ]
3370 echo "~^header remove-at $xh 3"; read es;\
3371 call xerr $es "ins_ref $xh 4-6"
3372 echo "~^header remove-at $xh 2"; read es;\
3373 call xerr $es "ins_ref $xh 4-7"
3375 echo "~^header remove-at $xh 1"; read es;\
3376 call xerr $es "ins_ref $xh 4-8"
3377 echo "~^header remove-at $xh 1"; read es;\
3378 vput vexpr es substr $es 0 3
3380 xcall bail "ins_ref $xh 4-9"
3382 echo "~^header remove-at $xh T"; read es;\
3383 vput vexpr es substr $es 0 3
3385 xcall bail "ins_ref $xh 4-10"
3387 echo "~^header show $xh"; read es;\
3388 vput vexpr es substr $es 0 3
3390 xcall bail "ins_ref $xh 4-11"
3395 # In collect.c order
3397 call ins_ref sender 0 # Not a "ref", but works
3401 call ins_addr reply-To
3402 call ins_addr mail-Followup-to
3403 call ins_ref messAge-id 0
3404 call ins_ref rEfErEncEs 1
3405 call ins_ref in-Reply-to 1
3406 call ins_ref subject 1 # Not a "ref", but works (with tweaks)
3407 call ins_addr freeForm1
3408 call ins_addr freeform2
3410 echo "~^header show MAILX-Command"; read es; call xerr $es "t_header 1000"
3412 echo "~^header show MAILX-raw-TO"; read es; call xerr $es "t_header 1001"
3420 echo "~^attachment";\
3421 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3423 xcall bail "attach 0-1"
3426 echo "~^attach attribute ./.treadctl";\
3427 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3429 xcall bail "attach 0-2"
3431 echo "~^attachment attribute-at 1";\
3432 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3434 xcall bail "attach 0-3"
3437 echo "~^attachment insert ./.treadctl=ascii";\
3438 read hl; echo $hl; call xerr "$hl" "attach 1-1"
3439 echo "~^attachment list";\
3440 read es; echo $es;call xerr "$es" "attach 1-2"
3442 echo "~^attachment attribute ./.treadctl";\
3443 read es; echo $es;call xerr "$es" "attach 1-3"
3445 echo "~^attachment attribute .treadctl";\
3446 read es; echo $es;call xerr "$es" "attach 1-4"
3448 echo "~^attachment attribute-at 1";\
3449 read es; echo $es;call xerr "$es" "attach 1-5"
3452 echo "~^attachment attribute-set ./.treadctl filename rctl";\
3453 read es; echo $es;call xerr "$es" "attach 1-6"
3454 echo "~^attachment attribute-set .treadctl content-description Au";\
3455 read es; echo $es;call xerr "$es" "attach 1-7"
3456 echo "~^attachment attribute-set-at 1 content-id <10.du@ich>";\
3457 read es; echo $es;call xerr "$es" "attach 1-8"
3459 echo "~^attachment attribute ./.treadctl";\
3460 read es; echo $es;call xerr "$es" "attach 1-9"
3462 echo "~^attachment attribute .treadctl";\
3463 read es; echo $es;call xerr "$es" "attach 1-10"
3465 echo "~^attachment attribute rctl";\
3466 read es; echo $es;call xerr "$es" "attach 1-11"
3468 echo "~^attachment attribute-at 1";\
3469 read es; echo $es;call xerr "$es" "attach 1-12"
3473 echo "~^attachment insert ./.tattach=latin1";\
3474 read hl; echo $hl; call xerr "$hl" "attach 2-1"
3475 echo "~^attachment list";\
3476 read es; echo $es;call xerr "$es" "attach 2-2"
3478 echo "~^attachment attribute ./.tattach";\
3479 read es; echo $es;call xerr "$es" "attach 2-3"
3481 echo "~^attachment attribute .tattach";\
3482 read es; echo $es;call xerr "$es" "attach 2-4"
3484 echo "~^attachment attribute-at 2";\
3485 read es; echo $es;call xerr "$es" "attach 2-5"
3488 echo "~^attachment attribute-set ./.tattach filename tat";\
3489 read es; echo $es;call xerr "$es" "attach 2-6"
3491 "~^attachment attribute-set .tattach content-description Au2";\
3492 read es; echo $es;call xerr "$es" "attach 2-7"
3493 echo "~^attachment attribute-set-at 2 content-id <20.du@wir>";\
3494 read es; echo $es;call xerr "$es" "attach 2-8"
3496 "~^attachment attribute-set-at 2 content-type application/x-sh";\
3497 read es; echo $es;call xerr "$es" "attach 2-9"
3499 echo "~^attachment attribute ./.tattach";\
3500 read es; echo $es;call xerr "$es" "attach 2-10"
3502 echo "~^attachment attribute .tattach";\
3503 read es; echo $es;call xerr "$es" "attach 2-11"
3505 echo "~^attachment attribute tat";\
3506 read es; echo $es;call xerr "$es" "attach 2-12"
3508 echo "~^attachment attribute-at 2";\
3509 read es; echo $es;call xerr "$es" "attach 2-13"
3513 if [ "$t_remove" == "" ]
3517 echo "~^attachment remove ./.treadctl"; read es;\
3518 call xerr $es "attach 3-1"
3519 echo "~^attachment remove ./.tattach"; read es;\
3520 call xerr $es "attach 3-2"
3521 echo "~^ attachment remove ./.treadctl"; read es;\
3522 vput vexpr es substr $es 0 3
3524 xcall bail "attach 3-3"
3526 echo "~^ attachment remove ./.tattach"; read es;\
3527 vput vexpr es substr $es 0 3
3529 xcall bail "attach 3-4"
3531 echo "~^attachment list"; read es;\
3532 vput vexpr es substr $es 0 3
3534 xcall bail "attach 3-5"
3538 echo "~^attachment insert ./.tattach=latin1";\
3539 read hl; echo $hl; call xerr "$hl" "attach 4-1"
3540 echo "~^attachment insert ./.tattach=latin1";\
3541 read hl; echo $hl; call xerr "$hl" "attach 4-2"
3542 echo "~^attachment list";\
3543 read es; echo $es;call xerr "$es" "attach 4-3"
3545 echo "~^ attachment remove .tattach"; read es;\
3546 vput vexpr es substr $es 0 3
3548 xcall bail "attach 4-4 $es"
3550 echo "~^attachment remove-at T"; read es;\
3551 vput vexpr es substr $es 0 3
3553 xcall bail "attach 4-5"
3555 echo "~^attachment remove ./.tattach"; read es;\
3556 call xerr $es "attach 4-6"
3557 echo "~^attachment remove ./.tattach"; read es;\
3558 call xerr $es "attach 4-7"
3559 echo "~^ attachment remove ./.tattach"; read es;\
3560 vput vexpr es substr $es 0 3
3562 xcall bail "attach 4-8 $es"
3564 echo "~^attachment list"; read es;\
3565 vput vexpr es substr $es 0 3
3567 xcall bail "attach 4-9"
3571 echo "~^attachment insert ./.tattach=latin1";\
3572 read hl; echo $hl; call xerr "$hl" "attach 5-1"
3573 echo "~^attachment insert ./.tattach=latin1";\
3574 read hl; echo $hl; call xerr "$hl" "attach 5-2"
3575 echo "~^attachment insert ./.tattach=latin1";\
3576 read hl; echo $hl; call xerr "$hl" "attach 5-3"
3577 echo "~^attachment list";\
3578 read es; echo $es;call xerr "$es" "attach 5-4"
3581 echo "~^attachment remove-at 3"; read es;\
3582 call xerr $es "attach 5-5"
3583 echo "~^attachment remove-at 3"; read es;\
3584 vput vexpr es substr $es 0 3
3586 xcall bail "attach 5-6"
3588 echo "~^attachment remove-at 2"; read es;\
3589 call xerr $es "attach 5-7"
3590 echo "~^attachment remove-at 2"; read es;\
3591 vput vexpr es substr $es 0 3
3593 xcall bail "attach 5-8"
3595 echo "~^attachment remove-at 1"; read es;\
3596 call xerr $es "attach 5-9"
3597 echo "~^attachment remove-at 1"; read es;\
3598 vput vexpr es substr $es 0 3
3600 xcall bail "attach 5-10"
3603 echo "~^attachment list"; read es;\
3604 vput vexpr es substr $es 0 3
3606 xcall bail "attach 5-11"
3610 echo "~^attachment insert ./.tattach=latin1";\
3611 read hl; echo $hl; call xerr "$hl" "attach 6-1"
3612 echo "~^attachment insert ./.tattach=latin1";\
3613 read hl; echo $hl; call xerr "$hl" "attach 6-2"
3614 echo "~^attachment insert ./.tattach=latin1";\
3615 read hl; echo $hl; call xerr "$hl" "attach 6-3"
3616 echo "~^attachment list";\
3617 read es; echo $es;call xerr "$es" "attach 6-4"
3620 echo "~^attachment remove-at 1"; read es;\
3621 call xerr $es "attach 6-5"
3622 echo "~^attachment remove-at 1"; read es;\
3623 call xerr $es "attach 6-6"
3624 echo "~^attachment remove-at 1"; read es;\
3625 call xerr $es "attach 6-7"
3626 echo "~^attachment remove-at 1"; read es;\
3627 vput vexpr es substr $es 0 3
3629 xcall bail "attach 6-8"
3632 echo "~^attachment list"; read es;\
3633 vput vexpr es substr $es 0 3
3635 xcall bail "attach 6-9"
3647 echo on-compose-enter, mailx-command<$mailx-command>
3648 alternates alter1@exam.ple alter2@exam.ple
3650 set autocc='alter1@exam.ple alter2@exam.ple
'
3651 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3652 echo mailx-subject<$mailx-subject>
3653 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3654 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3655 mailx-raw-bcc<$mailx-raw-bcc>
3656 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3657 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3660 echo on-compose-leave, mailx-command<$mailx-command>
3662 eval alternates $al alter3@exam.ple alter4@exam.ple
3664 set autobcc='alter3@exam.ple alter4@exam.ple
'
3665 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3666 echo mailx-subject<$mailx-subject>
3667 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3668 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3669 mailx-raw-bcc<$mailx-raw-bcc>
3670 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3671 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3674 echo on-compose-cleanup, mailx-command<$mailx-command>
3677 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3678 echo mailx-subject<$mailx-subject>
3679 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3680 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3681 mailx-raw-bcc<$mailx-raw-bcc>
3682 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3683 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3685 wysh set on-compose-splice=t_ocs \
3686 on-compose-enter=t_oce on-compose-leave=t_ocl \
3687 on-compose-cleanup=t_occ
3691 printf 'm this-goes@nowhere
\nbody
\n!.
\n' |
3692 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3693 -X'source .
/.trc
' -Smta=./.tsendmail.sh \
3695 ${cat} ./.tall >> "${MBOX}"
3696 check behave:compose_hooks-1 0 "${MBOX}" '522535560 10101'
3699 printf 'm this-goes@nowhere
\nbody
\n!.
\n' |
3700 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3701 -St_remove=1 -X'source .
/.trc
' -Smta=./.tsendmail.sh \
3703 ${cat} ./.tall >> "${MBOX}"
3704 check behave:compose_hooks-2 0 "${MBOX}" '3654000499 12535'
3708 # Some state machine stress, shell compose hook, localopts for hook, etc.
3709 # readctl in child. ~r as HERE document
3711 printf 'm ex@am.ple
\nbody
\n!.
3712 echon
${mailx-command}${mailx-subject}
3713 echon
${mailx-from}${mailx-sender}
3714 echon
${mailx-to}${mailx-cc}${mailx-bcc}
3715 echon
${mailx-raw-to}${mailx-raw-cc}${mailx-raw-bcc}
3716 echon
${mailx-orig-from}${mailx-orig-to}${mailx-orig-gcc}${mailx-orig-bcc}
3717 var t_oce t_ocs t_ocs_sh t_ocl t_occ autocc
3718 ' | ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3719 -Smta=./.tsendmail.sh \
3722 echoerr
"Failed: $1. Bailing out"; echo "~x"; xit
3725 vput vexpr es substr
"$1" 0 1
3730 define read_mline_res
{
3731 read hl
; wysh
set len
=$? es
=$
! en
=$^ERRNAME
;\
3732 echo $len/$es/$^ERRNAME
: $hl
3733 if [ $es -ne $^ERR-NONE
]
3734 xcall bail read_mline_res
3736 \xcall read_mline_res
3740 vput vexpr i
+ 1 "$2"
3742 vput vexpr j
% $i 10
3749 eval \\$j _work
$1 $i
3752 vput vexpr i
+ $i "$1"
3756 wysh
set line
; read line
;wysh
set es
=$? en
=$^ERRNAME
;\
3757 echo read:$es/$en: $line
3758 if [ "${es}" -ne -1 ]
3761 readctl remove
$cwd/.treadctl
; echo readctl remove
:$?
/$^ERRNAME
3766 echo "~^header list"; read hl
; echo $hl;\
3767 vput vexpr es substr
"$hl" 0 1
3769 xcall bail
"header list"
3772 call _work
1; echo $?
3773 echo "~^header insert cc splicy diet <splice@exam.ple> spliced";\
3774 read es
; echo $es; vput vexpr es substr
"$es" 0 1
3776 xcall bail
"be diet"
3778 echo "~^header insert cc <splice2@exam.ple>";\
3779 read es
; echo $es; vput vexpr es substr
"$es" 0 1
3781 xcall bail
"be diet2"
3784 call _work
2; echo $?
3785 echo "~^header insert bcc juicy juice <juice@exam.ple> spliced";\
3786 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3788 xcall bail
"be juicy"
3790 echo "~^header insert bcc juice2@exam.ple";\
3791 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3793 xcall bail
"be juicy2"
3795 echo "~^header insert bcc juice3 <juice3@exam.ple>";\
3796 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3798 xcall bail
"be juicy3"
3800 echo "~^header insert bcc juice4@exam.ple";\
3801 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3803 xcall bail
"be juicy4"
3806 echo "~^header remove-at bcc 3";\
3807 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3809 xcall bail
"remove juicy5"
3811 echo "~^header remove-at bcc 2";\
3812 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3814 xcall bail
"remove juicy6"
3816 echo "~^header remove-at bcc 3";\
3817 read es
; echo $es;vput vexpr es substr
"$es" 0 3
3819 xcall bail
"failed to remove-at"
3821 # Add duplicates which ought to be removed!
3822 echo "~^header insert bcc juice4@exam.ple";\
3823 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3825 xcall bail
"be juicy4-1"
3827 echo "~^header insert bcc juice4@exam.ple";\
3828 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3830 xcall bail
"be juicy4-2"
3832 echo "~^header insert bcc juice4@exam.ple";\
3833 read es
; echo $es;vput vexpr es substr
"$es" 0 1
3835 xcall bail
"be juicy4-3"
3840 call _work
3; echo $?
3842 vput
! i
echo just knock
if you can hear me
;\
3844 while [ $i -lt 24 ]; do printf "%s " $i; i
=`expr $i + 1`; done;\
3846 echon shell-cmd says $?
/$^ERRNAME
: $i
3847 echo "~x will not become interpreted, we are reading until __EOT"
3849 read r_status
; echo "~~r status output: $r_status"
3850 echo "~:echo $? $! $^ERRNAME"
3852 echo "~~r status from parent: $r_status"
3855 call _work
4; echo $?
3856 vput cwd cwd
;echo cwd
:$?
3857 readctl create
$cwd/.treadctl
;echo readctl
:$?
/$^ERRNAME
;\
3861 call _work
5; echo $?
3862 echo "~^header show MAILX-Command"; read es
;\
3863 call xerr
$es "t_header 1000"; call read_mline_res
3864 echo "~^header show MAILX-raw-TO"; read es
;\
3865 call xerr
$es "t_header 1001"; xcall read_mline_res
3867 echoerr IT IS WRONG IF YOU SEE THIS
3870 echo on-compose-enter
, mailx-command
<$mailx-command>
3871 set t_oce autobcc
=oce@exam.ple
3872 alternates alter1@exam.ple alter2@exam.ple
3874 echo mailx-from
<$mailx-from> mailx-sender
<$mailx-sender>
3875 echo mailx-subject
<$mailx-subject>
3876 echo mailx-to
<$mailx-to> mailx-cc
<$mailx-cc> mailx-bcc
<$mailx-bcc>
3877 echo mailx-raw-to
<$mailx-raw-to> mailx-raw-cc
<$mailx-raw-cc> \
3878 mailx-raw-bcc
<$mailx-raw-bcc>
3879 echo mailx-orig-from
<$mailx-orig-from> \
3880 mailx-orig-to
<$mailx-orig-to> \
3881 mailx-orig-cc
<$mailx-orig-cc> mailx-orig-bcc
<$mailx-orig-bcc>
3884 echo on-compose-leave
, mailx-command
<$mailx-command>
3885 set t_ocl autocc
=ocl@exam.ple
3887 alternates alter3@exam.ple alter4@exam.ple
3889 echo mailx-from
<$mailx-from> mailx-sender
<$mailx-sender>
3890 echo mailx-subject
<$mailx-subject>
3891 echo mailx-to
<$mailx-to> mailx-cc
<$mailx-cc> mailx-bcc
<$mailx-bcc>
3892 echo mailx-raw-to
<$mailx-raw-to> mailx-raw-cc
<$mailx-raw-cc> \
3893 mailx-raw-bcc
<$mailx-raw-bcc>
3894 echo mailx-orig-from
<$mailx-orig-from> \
3895 mailx-orig-to
<$mailx-orig-to> \
3896 mailx-orig-cc
<$mailx-orig-cc> mailx-orig-bcc
<$mailx-orig-bcc>
3899 echo on-compose-cleanup
, mailx-command
<$mailx-command>
3900 set t_occ autocc
=occ@exam.ple
3903 echo mailx-from
<$mailx-from> mailx-sender
<$mailx-sender>
3904 echo mailx-subject
<$mailx-subject>
3905 echo mailx-to
<$mailx-to> mailx-cc
<$mailx-cc> mailx-bcc
<$mailx-bcc>
3906 echo mailx-raw-to
<$mailx-raw-to> mailx-raw-cc
<$mailx-raw-cc> \
3907 mailx-raw-bcc
<$mailx-raw-bcc>
3908 echo mailx-orig-from
<$mailx-orig-from> \
3909 mailx-orig-to
<$mailx-orig-to> \
3910 mailx-orig-cc
<$mailx-orig-cc> mailx-orig-bcc
<$mailx-orig-bcc>
3912 wysh
set on-compose-splice
=t_ocs \
3913 on-compose-splice-shell
="read ver;printf \"t_ocs-shell\\n\
3914 ~t shell@exam.ple\\n~:set t_ocs_sh\\n\"" \
3915 on-compose-enter
=t_oce on-compose-leave
=t_ocl \
3916 on-compose-cleanup
=t_occ
3918 ex0_test behave:compose_hooks-3-estat
3919 ${cat} ./.tnotes >> "${MBOX}"
3921 check behave:compose_hooks-3 - "${MBOX}" '679526364 2431'
3923 # Reply, forward, resend, Resend
3926 printf 'set from
=f1@z
\nm t1@z
\nb
1\n!.
\nset from
=f2@z
\nm t2@z
\nb
2\n!.
\n' |
3927 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3928 -Smta=./.tsendmail.sh
3931 echo start
: $? $
! $^ERRNAME
3933 echo File
: $? $
! $^ERRNAME
;echo;echo
3935 this is content of reply
1
3937 echo reply
1: $? $
! $^ERRNAME
;echo;echo
3939 this is content of Reply
1 2
3941 echo Reply
1 2: $? $
! $^ERRNAME
;echo;echo
3942 forward
1 fwdex@am.ple
3943 this is content of forward
1
3945 echo forward
1: $? $
! $^ERRNAME
;echo;echo
3946 resend
1 2 resendex@am.ple
3947 echo resend
1 2: $? $
! $^ERRNAME
;echo;echo
3948 Resend
1 2 Resendex@am.ple
3949 echo Resend
1 2: $? $
! $^ERRNAME
;echo;echo
3951 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3952 -Smta=./.tsendmail.sh \
3955 echoerr
"Failed: $1. Bailing out"; echo "~x"; xit
3958 vput vexpr es substr
"$1" 0 1
3963 define read_mline_res
{
3964 read hl
; wysh
set len
=$? es
=$
! en
=$^ERRNAME
;\
3965 echo mline_res
:$len/$es/$^ERRNAME
: $hl
3966 if [ $es -ne $^ERR-NONE
]
3967 xcall bail read_mline_res
3969 \xcall read_mline_res
3973 echo "~^header show $1"; read es
;\
3974 call xerr
$es "work_hl $1"; echo $1; call read_mline_res
3982 echo t_ocs version
$ver
3983 echo "~^header list"; read hl
; echo $hl;\
3984 echoerr the header list is
$hl;\
3985 call xerr
"$hl" "header list"
3986 eval vpospar
set $hl
3989 echoerr IT IS WRONG IF YOU SEE THIS
3992 echo on-XY-enter
, mailx-command
<$mailx-command>
3993 set t_oce autobcc
=oce@exam.ple
3994 echo mailx-from
<$mailx-from> mailx-sender
<$mailx-sender>
3995 echo mailx-subject
<$mailx-subject>
3996 echo mailx-to
<$mailx-to> mailx-cc
<$mailx-cc> mailx-bcc
<$mailx-bcc>
3997 echo mailx-raw-to
<$mailx-raw-to> mailx-raw-cc
<$mailx-raw-cc> \
3998 mailx-raw-bcc
<$mailx-raw-bcc>
3999 echo mailx-orig-from
<$mailx-orig-from> \
4000 mailx-orig-to
<$mailx-orig-to> \
4001 mailx-orig-cc
<$mailx-orig-cc> mailx-orig-bcc
<$mailx-orig-bcc>
4004 echo on-XY-leave
, mailx-command
<$mailx-command>
4005 set t_ocl autocc
=ocl@exam.ple
4006 echo mailx-from
<$mailx-from> mailx-sender
<$mailx-sender>
4007 echo mailx-subject
<$mailx-subject>
4008 echo mailx-to
<$mailx-to> mailx-cc
<$mailx-cc> mailx-bcc
<$mailx-bcc>
4009 echo mailx-raw-to
<$mailx-raw-to> mailx-raw-cc
<$mailx-raw-cc> \
4010 mailx-raw-bcc
<$mailx-raw-bcc>
4011 echo mailx-orig-from
<$mailx-orig-from> \
4012 mailx-orig-to
<$mailx-orig-to> \
4013 mailx-orig-cc
<$mailx-orig-cc> mailx-orig-bcc
<$mailx-orig-bcc>
4016 echo on-XY-cleanup
, mailx-command
<$mailx-command>
4017 set t_occ autocc
=occ@exam.ple
4018 echo mailx-from
<$mailx-from> mailx-sender
<$mailx-sender>
4019 echo mailx-subject
<$mailx-subject>
4020 echo mailx-to
<$mailx-to> mailx-cc
<$mailx-cc> mailx-bcc
<$mailx-bcc>
4021 echo mailx-raw-to
<$mailx-raw-to> mailx-raw-cc
<$mailx-raw-cc> \
4022 mailx-raw-bcc
<$mailx-raw-bcc>
4023 echo mailx-orig-from
<$mailx-orig-from> \
4024 mailx-orig-to
<$mailx-orig-to> \
4025 mailx-orig-cc
<$mailx-orig-cc> mailx-orig-bcc
<$mailx-orig-bcc>
4027 wysh
set on-compose-splice
=t_ocs \
4028 on-compose-enter
=t_oce on-compose-leave
=t_ocl \
4029 on-compose-cleanup
=t_occ \
4030 on-resend-enter
=t_oce on-resend-cleanup
=t_occ
4032 ex0_test behave:compose_hooks-4-estat
4033 ${cat} ./.tnotes >> "${MBOX}"
4035 check behave:compose_hooks-4 - "${MBOX}" '3038884027 7516'
4040 t_behave_C_opt_customhdr() {
4041 t_prolog t_behave_C_opt_customhdr
4042 TRAP_EXIT_ADDONS="./.t*"
4044 ${cat} <<-_EOT > ./.tsendmail.sh
4046 (echo 'From CimicifugaRacemosa Mon Dec
25 21:33:40 2017' &&
4050 chmod 0755 ./.tsendmail.sh
4053 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh \
4054 -C 'C-One
: Custom One Body
' \
4055 -C 'C-Two
:CustomTwoBody
' \
4056 -S customhdr='chdr1
: chdr1 body
, chdr2
:chdr2 body
' \
4057 this-goes@nowhere >./.tall 2>&1
4058 ex0_test behave:C_opt_customhdr-1-estat
4059 ${cat} ./.tall >> "${MBOX}"
4060 check behave:C_opt_customhdr-1 0 "${MBOX}" '2400078426 195'
4063 printf 'm this-goes@nowhere
\nbody
\n!.
4065 m this-goes2@nowhere
\nbody
2\n!.
4066 set customhdr
=%ccustom1
: custom1 body
%c
4067 m this-goes2@nowhere
\nbody
2\n!.
4068 set customhdr
=%ccustom1
: custom1
\\, body
, custom2
: custom2 body
%c
4069 m this-goes3@nowhere
\nbody
3\n!.
4071 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh -Sescape=! \
4072 -C 'C-One
: Custom One Body
' \
4073 -C 'C-Two
:CustomTwoBody
' \
4074 -S customhdr='chdr1
: chdr1 body
, chdr2
:chdr2 body
' \
4076 ex0_test behave:C_opt_customhdr-2-estat
4077 ${cat} ./.tall >> "${MBOX}"
4078 check behave:C_opt_customhdr-2 0 "${MBOX}" '3546878678 752'
4083 t_behave_mass_recipients() {
4084 t_prolog t_behave_mass_recipients
4085 TRAP_EXIT_ADDONS="./.t*"
4087 ${cat} <<-_EOT > ./.tsendmail.sh
4089 (echo 'From Eucalyptus Sat Jul
08 21:14:57 2017' && ${cat} && echo
4092 chmod 0755 ./.tsendmail.sh
4094 ${cat} <<'__EOT__' > ./.trc
4096 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
4099 wysh set nr=$1 hn=$2
4100 echo "~$hn $hn$nr@$hn"; echo '~
:echo $?
'; read es
4102 xcall bail "ins_addr $hn 1-$nr"
4104 vput vexpr nr + $nr 1
4105 if [ "$nr" -le "$maximum" ]
4106 xcall ins_addr $nr $hn
4110 wysh set nr=$1 hn=$2
4111 alternates $hn$nr@$hn
4112 vput vexpr nr + $nr 2
4113 if [ "$nr" -le "$maximum" ]
4114 xcall bld_alter $nr $hn
4124 if [ "$t_remove" != '' ]
4129 set on-compose-splice=t_ocs on-compose-leave=t_ocl
4132 printf 'm this-goes@nowhere
\nbody
\n!.
\n' |
4133 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
4134 -X'source .
/.trc
' -Smta=./.tsendmail.sh -Smaximum=2001 \
4136 ex0_test behave:mass_recipients-1-estat
4137 ${cat} ./.tall >> "${MBOX}"
4138 check behave:mass_recipients-1 - "${MBOX}" '2912243346 51526'
4141 printf 'm this-goes@nowhere
\nbody
\n!.
\n' |
4142 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
4143 -St_remove=1 -X'source .
/.trc
' -Smta=./.tsendmail.sh -Smaximum=2001 \
4145 ex0_test behave:mass_recipients-2-estat
4146 ${cat} ./.tall >> "${MBOX}"
4147 check behave:mass_recipients-2 - "${MBOX}" '4097804632 34394'
4152 t_behave_mime_types_load_control() {
4153 t_prolog t_behave_mime_types_load_control
4154 TRAP_EXIT_ADDONS="./.t*"
4156 ${cat} <<-_EOT > ./.tmts1
4157 @ application/mathml+xml mathml
4159 ${cat} <<-_EOT > ./.tmts2
4160 @ x-conference/x-cooltalk ice
4162 @ application/aga-aga aga
4165 ${cat} <<-_EOT > ./.tmts1.mathml
4166 <head>nonsense ML</head>
4168 ${cat} <<-_EOT > ./.tmts2.ice
4171 printf 'of
which the c
\x01rack is coming soon
' > ./.tmtsx.doom
4172 printf 'of
which the c
\x01rack is coming soon
' > ./.tmtsx.aga
4186 ' "${MBOX}" "${MBOX}" |
4188 -Smimetypes-load-control=f=./.tmts1,f=./.tmts2 \
4190 ex0_test behave:mime_types_load_control-1-estat
4191 ${cat} "${MBOX}" >> ./.tout
4192 check behave:mime_types_load_control-1 - ./.tout '1441260727 2449'
4194 echo type | ${MAILX} ${ARGS} -R \
4195 -Smimetypes-load-control=f=./.tmts1,f=./.tmts3 \
4196 -f "${MBOX}" >> ./.tout 2>&1
4197 check behave:mime_types_load_control-2 0 ./.tout '1441391438 3646'
4202 t_behave_lreply_futh_rth_etc() {
4203 t_prolog t_behave_lreply_futh_rth_etc
4204 TRAP_EXIT_ADDONS="./.t*"
4206 ${cat} <<-_EOT > ./.tsendmail.sh
4208 (echo 'From HumulusLupulus Thu Jul
27 14:41:20 2017' && ${cat} && echo
4211 chmod 0755 ./.tsendmail.sh
4213 ${cat} <<-_EOT > ./.tmbox
4214 From neverneverland Sun Jul 23 13:46:25 2017
4215 Subject: Bugstop: five miles out 1
4216 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
4217 From: mister originator <mr@originator>
4218 To: bugstop-commit@five.miles.out, laber@backe.eu
4220 Mail-Followup-To: bugstop@five.miles.out, laber@backe.eu, is@a.list
4221 In-reply-to: <20170719111113.bkcMz%laber@backe.eu>
4222 Date: Wed, 19 Jul 2017 09:22:57 -0400
4223 Message-Id: <20170719132257.766AF781267@originator>
4226 > |Sorry, I think I misunderstand something. I would think that
4230 From neverneverland Fri Jul
7 22:39:11 2017
4231 Subject
: Bugstop
: five miles out
2
4232 Reply-To
: mister originator2
<mr2@originator
>,bugstop@five.miles.out
,is@a.list
4233 Content-Transfer-Encoding
: 7bit
4234 From
: mister originator
<mr@originator
>
4235 To
: bugstop-commit@five.miles.out
4237 Message-ID
: <149945963975.28888.6950788126957753723.reportbug@five.miles.out
>
4238 Date
: Fri
, 07 Jul
2017 16:33:59 -0400
4241 capable of changing back.
4243 From neverneverland Fri Jul
7 22:42:00 2017
4244 Subject
: Bugstop
: five miles out
3
4245 Reply-To
: mister originator2
<mr2@originator
>, bugstop@five.miles.out
4246 Content-Transfer-Encoding
: 7bit
4247 From
: mister originator
<mr@originator
>
4248 To
: bugstop-commit@five.miles.out
4250 Message-ID
: <149945963975.28888.6950788126957753746.reportbug@five.miles.out
>
4251 Date
: Fri
, 07 Jul
2017 16:33:59 -0400
4252 List-Post
: <mailto
:bugstop@five.miles.out
>
4255 are you ready
, boots?
4257 From neverneverland Sat Aug
19 23:15:00 2017
4258 Subject
: Bugstop
: five miles out
4
4259 Reply-To
: mister originator2
<mr2@originator
>, bugstop@five.miles.out
4260 Content-Transfer-Encoding
: 7bit
4261 From
: mister originator
<mr@originator
>
4262 To
: bugstop@five.miles.out
4264 Message-ID
: <149945963975.28888.6950788126qtewrqwer.reportbug@five.miles.out
>
4265 Date
: Fri
, 07 Jul
2017 16:33:59 -0400
4266 List-Post
: <mailto
:bugstop@five.miles.out
>
4269 are you ready
, boots?
4274 ${cat} <<-'_EOT' | ${MAILX} ${ARGS} -Sescape=! -Smta=.
/.tsendmail.sh \
4275 -Rf .
/.tmbox
>> "${MBOX}" 2>&1
4277 wysh
set m
="This is text of \"reply ${1}."
4288 echo -----After reply $1.1 - $1.3: $?/$^ERRNAME
4291 wysh set m="This is text of
\"Reply
${1}.
"
4297 echo -----After Reply
$1.
$2: $?
/$^ERRNAME
4306 wysh
set m
="This is text of \"Lreply ${1}." on-compose-splice
=_Lh n
=$2
4310 # We need two indirections for this test: one for the case that Lreply
4311 # fails because of missing recipients: we need to read EOF next, thus
4312 # place this in _Ls last; and second for the succeeding cases EOF is
4313 # not what these should read, so go over the backside and splice it in!
4315 echo -----After Lreply
$1.
$2: $?
/$^ERRNAME
4318 localopts call-fixate
yes
4320 call R
$1 1; call R
$1 2; call R
$1 3; call R
$1 4
4321 call L
$1 1; call L
$1 2; call L
$1 3
4324 echo;echo '===== CHANGING === '"$*"' =====';echo
4328 set from
=laber@backe.eu
4331 call tweak
set reply-to-honour
4333 call tweak
set followup-to
4335 call tweak
set followup-to-honour
4337 call tweak mlist bugstop@five.miles.out
4339 call tweak mlsubscribe bugstop@five.miles.out
4341 call tweak
set recipients-in-cc
4345 check behave
:lreply_futh_rth_etc-1
0 "${MBOX}" '940818845 29373'
4349 ${cat} <<-_EOT > ./.tmbox
4350 From tom@i-i.example Thu Oct 26 03:15:55 2017
4351 Date: Wed, 25 Oct 2017 21:15:46 -0400
4352 From: tom <tom@i-i.example>
4353 To: Steffen Nurpmeso <steffen@sdaoden.eu>
4354 Cc: tom <tom@i-i.example>
4355 Subject: Re: xxxx yyyyyyyy configure does not really like a missing zzzzz
4356 Message-ID: <20171026011546.GA11643@i-i.example>
4357 Reply-To: tom@i-i.example
4358 References: <20171025214601.T2pNd%steffen@sdaoden.eu>
4359 In-Reply-To: <20171025214601.T2pNd%steffen@sdaoden.eu>
4362 The report's useful :-)
4365 printf 'reply 1\nthank you\n!.\n' |
4366 ${MAILX} ${ARGS} -Sescape=! -Smta=.
/.tsendmail.sh
-Sreply-to-honour \
4367 -Rf .
/.tmbox
> "${MBOX}" 2>&1
4368 check behave
:lreply_futh_rth_etc-2
0 "${MBOX}" '1045866991 331'
4373 t_behave_xxxheads_rfc2047
() {
4374 t_prolog t_behave_xxxheads_rfc2047
4375 TRAP_EXIT_ADDONS
="./.t*"
4377 ${cat} <<-_EOT > ./.tsendmail.sh
4379 (echo 'From GentianaLutea Mon Dec 04 17:15:29 2017' && ${cat} &&
4382 chmod 0755 .
/.tsendmail.sh
4386 echo |
${MAILX} ${ARGS} ${ADDARG_UNI} \
4387 -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̲' \
4389 check behave
:xxxheads_rfc2047-1
0 "${MBOX}" '3370931614 375'
4391 # Single word (overlong line split -- bad standard! Requires injection of
4392 # artificial data!! But can be prevented by using RFC 2047 encoding)
4394 i
=`${awk} 'BEGIN{for(i=0; i<92; ++i) printf "0123456789_"}'`
4395 echo |
${MAILX} ${ARGS} -s "${i}" "${MBOX}"
4396 check behave:xxxheads_rfc2047-2 0 "${MBOX}" '489922370 1718'
4398 # Combination of encoded words, space and tabs of varying sort
4400 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4401 -s "1Abrä Kaspas1
2Abra Katä b_kaspas2 \
4402 3Abrä Kaspas3
4Abrä Kaspas4
5Abrä Kaspas5 \
4403 6Abra Kaspas6
7Abrä Kaspas7
8Abra Kaspas8 \
4404 9Abra Kaspastäb4-3
10Abra Kaspas1 _
11Abra Katäb1 \
4405 12Abra Kadabrä
1 After Tab after Täb this is NUTS
" \
4407 check behave:xxxheads_rfc2047-3 0 "${MBOX}" '1676887734 591'
4409 # Overlong multibyte sequence that must be forcefully split
4410 # todo This works even before v15.0, but only by accident
4412 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4413 -s "✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4414 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4415 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄
" \
4417 check behave:xxxheads_rfc2047-4 0 "${MBOX}" '3029301775 659'
4421 echo | ${MAILX} ${ARGS} \
4422 -s "1-1 B2 B3 B4 B5 B6 B\
4423 1-2 B2 B3 B4 B5 B6 B\
4424 1-3 B2 B3 B4 B5 B6 B\
4425 1-4 B2 B3 B4 B5 B6 B\
4426 1-5 B2 B3 B4 B5 B6 B\
4427 1-6 B2 B3 B4 B5 B6
" \
4429 check behave:xxxheads_rfc2047-5 0 "${MBOX}" '4126167195 297'
4431 # Leading and trailing WS
4433 echo | ${MAILX} ${ARGS} \
4434 -s " 2-1 B2 B3 B4 B5 B6 B\
4435 1-2 B2 B3 B4 B5 B6 B\
4436 1-3 B2 B3 B4 B5 B6 B\
4437 1-4 B2 B3 B4 B5 B6
" \
4439 check behave:xxxheads_rfc2047-6 0 "${MBOX}" '3600624479 236'
4441 # RFC 2047 in an address field! (Missing test caused v14.9.6!)
4443 echo "Dat Früchtchen riecht häußlich
" |
4444 ${MAILX} ${ARGS} ${ADDARG_UNI} -Sfullnames -Smta=./.tsendmail.sh \
4446 'Schnödes "Früchtchen
" <do@du> (Hä!)'
4447 check behave:xxxheads_rfc2047-7 0 "${MBOX}" '800505986 368'
4449 # RFC 2047 in an address field, and iconv involved
4450 if have_feat iconv; then
4452 ${cat} > ./.trebox <<_EOT
4453 From zaza@exam.ple Fri Mar 2 21:31:56 2018
4454 Date: Fri, 2 Mar 2018 20:31:45 +0000
4455 From: z=?iso-8859-1?Q?=E1?=za <zaza@exam.ple>
4456 To: dude <dude@exam.ple>
4457 Subject: houston(...)
4458 Message-ID: <abra@1>
4460 Content-Type: text/plain; charset=iso-8859-1
4461 Content-Disposition: inline
4462 Content-Transfer-Encoding: 8bit
4465 echo reply | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4466 -Sfullnames -Sreply-in-same-charset \
4467 -Smta=./.tsendmail.sh -Rf ./.trebox
4468 check behave:xxxheads_rfc2047-8 0 "${MBOX}" '2821484185 280'
4470 echo 'behave:xxxheads_rfc2047-8: iconv unsupported, skipped'
4476 t_behave_rfc2231() {
4477 t_prolog t_behave_rfc2231
4478 TRAP_EXIT_ADDONS=".
/.t
*"
4481 mkdir ./.ttt || exit 1
4485 : > 'diet\ is \curd.txt'
4486 : > 'diet "is
" curd.txt'
4488 : > 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
4489 : > höde__tröge__müde__dätte__hätte__vuelle__guelle__aese__aesse__sauerliche__kräuter__österliche__grüße__mäh.txt
4490 : > hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt
4491 : > ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
4493 echo bla | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4494 -a ".
/.ttt
/ma
'ger.txt" -a "./.ttt/mä'ger.txt
" \
4495 -a './.ttt/diet\ is \curd.txt' -a './.ttt/diet "is
" curd.txt' \
4496 -a ./.ttt/höde-tröge.txt \
4497 -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 \
4498 -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 \
4499 -a ./.ttt/hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt \
4500 -a ./.ttt/✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt \
4502 check behave:rfc2231-1 0 "${MBOX}" '684985954 3092'
4504 # `resend' test, reusing $MBOX
4505 printf "Resend .
/.t2
\nx
\n" | ${MAILX} ${ARGS} -Rf "${MBOX}"
4506 check behave
:rfc2231-2
0 .
/.t2
'684985954 3092'
4508 printf "resend ./.t3\nx\n" |
${MAILX} ${ARGS} -Rf "${MBOX}"
4509 check behave:rfc2231-3 0 ./.t3 '3130352658 3148'
4514 t_behave_iconv_mbyte_base64() {
4515 t_prolog t_behave_iconv_mbyte_base64
4516 TRAP_EXIT_ADDONS=".
/.t
*"
4518 if [ -n "${UTF8_LOCALE}" ] && have_feat iconv &&
4519 (</dev/null iconv -f ascii -t iso-2022-jp) >/dev/null 2>&1 ||
4520 (</dev/null iconv -f ascii -t euc-jp) >/dev/null 2>&1; then
4523 echo 'behave:iconv_mbyte_base64: unsupported, skipped'
4527 ${cat} <<-_EOT > ./.tsendmail.sh
4529 (echo 'From DroseriaRotundifolia Thu Aug 03 17:26:25 2017' && ${cat} &&
4532 chmod 0755 ./.tsendmail.sh
4534 if (</dev/null iconv -f ascii -t iso-2022-jp) >/dev/null 2>&1; then
4535 ${cat} <<-'_EOT' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4536 -Smta=./.tsendmail.sh \
4537 -Sescape=! -Smime-encoding=base64 2>./.terr
4538 set ttycharset=utf-8 sendcharsets=iso-2022-jp
4540 !s Japanese from UTF-8 to ISO-2022-JP
4541 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4543 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4546 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4548 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4551 set ttycharset=iso-2022-jp charset-7bit=iso-2022-jp sendcharsets=utf-8
4553 !s Japanese from ISO-2022-JP to UTF-8, eh, no, also ISO-2022-JP
4554 \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
4556 \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
4559 \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
4561 \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
4564 # May not presume iconv output as long as roundtrip possible [489a7122]
4565 ex0_test behave
:iconv_mbyte_base64-1-estat
4566 ${awk} 'BEGIN{h=1}/^$/{++h;next}{if(h % 2 == 1)print}' \
4567 < "${MBOX}" > .
/.tcksum
4568 check behave
:iconv_mbyte_base64-1
- .
/.tcksum
'2694609714 520'
4569 check behave
:iconv_mbyte_base64-2
- .
/.terr
'4294967295 0'
4571 printf 'eval f 1; eval write ./.twrite; eval type 1; eval type 2\n' |
4572 LC_ALL
=${UTF8_LOCALE} ${MAILX} ${ARGS} -Rf "${MBOX}" >./.tlog 2>&1
4573 check behave:iconv_mbyte_base64-3 0 ./.twrite '1259742080 686'
4574 check behave:iconv_mbyte_base64-4 - ./.tlog '3214068822 2123'
4576 echo 'behave:iconv_mbyte_base64: ISO-2022-JP unsupported, skipping 1-4'
4579 if (</dev/null iconv -f ascii -t euc-jp) >/dev/null 2>&1; then
4580 rm -f "${MBOX}" ./.twrite
4581 ${cat} <<-'_EOT' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4582 -Smta=./.tsendmail.sh \
4583 -Sescape=! -Smime-encoding=base64 2>./.terr
4584 set ttycharset=utf-8 sendcharsets=euc-jp
4586 !s Japanese from UTF-8 to EUC-JP
4587 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4589 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4592 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4594 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4597 set ttycharset=EUC-JP sendcharsets=utf-8
4599 !s Japanese from EUC-JP to UTF-8
4600 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4602 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4605 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4607 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4610 ex0_test behave:iconv_mbyte_base64-5-estat
4611 ${awk} 'BEGIN{h=1}/^$/{++h;next}{if(h % 2 == 1)print}' \
4612 < "${MBOX}" > ./.tcksum
4613 check behave:iconv_mbyte_base64-5 - ./.tcksum '2870183985 473'
4614 check behave:iconv_mbyte_base64-6 - ./.terr '4294967295 0'
4616 printf 'eval f 1; eval write ./.twrite; eval type 1; eval type 2\n' |
4617 LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} -Rf "${MBOX}" >.
/.tlog
2>&1
4618 check behave
:iconv_mbyte_base64-7
0 .
/.twrite
'1259742080 686'
4619 check behave
:iconv_mbyte_base64-8
- .
/.tlog
'2506063395 2075'
4621 echo 'behave:iconv_mbyte_base64: EUC-JP unsupported, skipping 5-8'
4627 t_behave_iconv_mainbody
() {
4628 t_prolog t_behave_iconv_mainbody
4629 TRAP_EXIT_ADDONS
="./.t*"
4631 if [ -n "${UTF8_LOCALE}" ] && have_feat
iconv; then
4634 echo 'behave:iconv_mainbody: unsupported, skipped'
4638 ${cat} <<-_EOT > ./.tsendmail.sh
4640 (echo 'From HamamelisVirginiana Fri Oct 20 16:23:21 2017' && ${cat} &&
4643 chmod 0755 .
/.tsendmail.sh
4645 printf '–' |
${MAILX} ${ARGS} ${ADDARG_UNI} -Smta=.
/.tsendmail.sh \
4646 -S charset-7bit
=us-ascii
-S charset-8bit
=utf-8 \
4647 -s '–' over-the@rain.bow
2>.
/.terr
4648 check behave
:iconv_mainbody-1
0 "${MBOX}" '3634015017 251'
4649 check behave
:iconv_mainbody-2
- .
/.terr
'4294967295 0'
4651 printf '–' |
${MAILX} ${ARGS} ${ADDARG_UNI} -Smta=.
/.tsendmail.sh \
4652 -S charset-7bit
=us-ascii
-S charset-8bit
=us-ascii \
4653 -s '–' over-the@rain.bow
2>.
/.terr
4654 exn0_test behave
:iconv_mainbody-3
4655 check behave
:iconv_mainbody-3
- "${MBOX}" '3634015017 251'
4656 check behave
:iconv_mainbody-4
- .
/.terr
'2579894983 148'
4658 # The different iconv(3) implementations use different replacement sequence
4659 # types (character-wise, byte-wise, and the character(s) used differ)
4660 i
="${MAILX_ICONV_MODE}"
4661 if [ -n "${i}" ]; then
4662 printf 'p\nx\n' |
${MAILX} ${ARGS} -Rf "${MBOX}" >./.tout 2>./.terr
4664 ex0_test behave:iconv_mainbody-5-0 ${j}
4665 check behave:iconv_mainbody-5-1 - ./.terr '4294967295 0'
4666 if [ ${i} -eq 13 ]; then
4667 check behave:iconv_mainbody-5-2 - ./.tout '189327996 283'
4668 elif [ ${i} -eq 12 ]; then
4669 check behave:iconv_mainbody-5-3 - ./.tout '1959197095 283'
4670 elif [ ${i} -eq 3 ]; then
4671 check behave:iconv_mainbody-5-4 - ./.tout '3196380198 279'
4673 check behave:iconv_mainbody-5-5 - ./.tout '3760313827 279'
4676 echo 'behave:iconv_mainbody-5: unsupported, skipped'
4682 t_behave_binary_mainbody() {
4683 t_prolog t_behave_binary_mainbody
4684 TRAP_EXIT_ADDONS=".
/.t
*"
4686 printf 'abra\0\nka\r\ndabra' |
4687 ${MAILX} ${ARGS} ${ADDARG_UNI} -s 'binary with carriage-return!' \
4689 check behave:binary_mainbody-1 0 "${MBOX}" '2430168141 243'
4690 check behave:binary_mainbody-2 - ./.terr '4294967295 0'
4692 printf 'p\necho\necho writing now\nwrite ./.twrite\n' |
4693 ${MAILX} ${ARGS} -Rf \
4694 -Spipe-application/octet-stream="@
* ${cat} > .
/.tcat
" \
4695 "${MBOX}" >./.tall 2>&1
4696 check behave:binary_mainbody-3 0 ./.tall '1151843761 324'
4697 check behave:binary_mainbody-4 - ./.tcat '3817108933 15'
4698 check behave:binary_mainbody-5 - ./.twrite '3817108933 15'
4703 t_behave_q_t_etc_opts() {
4704 t_prolog t_behave_q_t_etc_opts
4705 TRAP_EXIT_ADDONS=".
/.t
*"
4707 # Three tests for MIME encoding and (a bit) content classification.
4708 # At the same time testing -q FILE, < FILE and -t FILE
4709 t__put_body > ./.tin
4712 < ./.tin ${MAILX} ${ARGS} ${ADDARG_UNI} \
4713 -a ./.tin -s "`t__put_subject`" "${MBOX}"
4714 check behave:q_t_etc_opts-1 0 "${MBOX}" '3570973309 6646'
4717 < /dev/null ${MAILX} ${ARGS} ${ADDARG_UNI} \
4718 -a ./.tin -s "`t__put_subject`" -q ./.tin "${MBOX}"
4719 check behave:q_t_etc_opts-2 0 "${MBOX}" '3570973309 6646'
4722 ( echo "To
: ${MBOX}" && echo "Subject
: `t__put_subject`" && echo &&
4724 ) | ${MAILX} ${ARGS} ${ADDARG_UNI} -Snodot -a ./.tin -t
4725 check behave:q_t_etc_opts-3 0 "${MBOX}" '3570973309 6646'
4731 have_feat smime || {
4732 echo 'behave:s/mime: unsupported, skipped'
4736 t_prolog t_behave_s_mime
4737 TRAP_EXIT_ADDONS=".
/.t.conf .
/.tkey.pem .
/.tcert.pem .
/.tpair.pem
"
4738 TRAP_EXIT_ADDONS="${TRAP_EXIT_ADDONS} .
/.VERIFY .
/.DECRYPT .
/.ENCRYPT
"
4739 TRAP_EXIT_ADDONS="${TRAP_EXIT_ADDONS} .
/.tsendmail.sh
"
4741 printf 'behave:s/mime: .. generating test key and certificate ..\n'
4742 ${cat} <<-_EOT > ./.t.conf
4745 default_keyfile = keyfile.pem
4746 distinguished_name = req_distinguished_name
4747 attributes = req_attributes
4751 [ req_distinguished_name ]
4758 emailAddress = test@localhost
4763 openssl req -x509 -nodes -days 3650 -config ./.t.conf \
4764 -newkey rsa:1024 -keyout ./.tkey.pem -out ./.tcert.pem >/dev/null 2>&1
4765 ${cat} ./.tkey.pem ./.tcert.pem > ./.tpair.pem
4768 printf 'behave:s/mime:sign/verify: '
4769 echo bla | ${MAILX} ${ARGS} \
4770 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4771 -Ssmime-sign -Sfrom=test@localhost \
4772 -s 'S/MIME test' ./.VERIFY
4773 if [ $? -eq 0 ]; then
4784 /^Content-Description: /{ skip = 2; print; next }
4785 /^$/{ if(skip) --skip }
4788 < ./.VERIFY > "${MBOX}"
4789 check behave:s/mime:sign/verify:checksum - "${MBOX}" '2900817158 648'
4791 printf 'behave:s/mime:sign/verify:verify '
4792 printf 'verify\nx\n' |
4794 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4795 -Ssmime-sign -Sfrom=test@localhost \
4797 -f ./.VERIFY >/dev/null 2>&1
4798 if [ $? -eq 0 ]; then
4807 printf 'behave:s/mime:sign/verify:disproof-1 '
4808 if openssl smime -verify -CAfile ./.tcert.pem \
4809 -in ./.VERIFY >/dev/null 2>&1; then
4818 # (signing +) encryption / decryption
4819 ${cat} <<-_EOT > ./.tsendmail.sh
4821 (echo 'From Euphrasia Thu Apr 27 17:56:23 2017' && ${cat}) > ./.ENCRYPT
4823 chmod 0755 ./.tsendmail.sh
4825 printf 'behave:s/mime:encrypt+sign: '
4828 -Ssmime-force-encryption \
4829 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4830 -Smta=./.tsendmail.sh \
4831 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4832 -Ssmime-sign -Sfrom=test@localhost \
4833 -s 'S/MIME test' recei@ver.com
4834 if [ $? -eq 0 ]; then
4838 printf 'error: encrypt+sign failed\n'
4841 ${sed} -e '/^$/,$d' < ./.ENCRYPT > "${MBOX}"
4842 check behave:s/mime:encrypt+sign:checksum - "${MBOX}" '1937410597 327'
4844 printf 'behave:s/mime:decrypt+verify: '
4845 printf 'decrypt ./.DECRYPT\nfi ./.DECRYPT\nverify\nx\n' |
4847 -Ssmime-force-encryption \
4848 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4849 -Smta=./.tsendmail.sh \
4850 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4851 -Ssmime-sign -Sfrom=test@localhost \
4853 -f ./.ENCRYPT >/dev/null 2>&1
4854 if [ $? -eq 0 ]; then
4863 /^Content-Description: /{ skip = 2; print; next }
4864 /^$/{ if(skip) --skip }
4867 < ./.DECRYPT > "${MBOX}"
4868 check behave:s/mime:decrypt+verify:checksum - "${MBOX}" '1720739247 931'
4870 printf 'behave:s/mime:decrypt+verify:disproof-1: '
4871 if (openssl smime -decrypt -inkey ./.tkey.pem -in ./.ENCRYPT |
4872 openssl smime -verify -CAfile ./.tcert.pem) >/dev/null 2>&1; then
4879 printf "behave
:s
/mime
:encrypt
: "
4880 echo bla | ${MAILX} ${ARGS} \
4881 -Ssmime-force-encryption \
4882 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4883 -Smta=./.tsendmail.sh \
4884 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4885 -Sfrom=test@localhost \
4886 -s 'S/MIME test' recei@ver.com
4887 if [ $? -eq 0 ]; then
4894 # Same as behave:s/mime:encrypt+sign:checksum above
4895 ${sed} -e '/^$/,$d' < ./.ENCRYPT > "${MBOX}"
4896 check behave:s/mime:encrypt:checksum - "${MBOX}" '1937410597 327'
4899 printf 'decrypt ./.DECRYPT\nx\n' | ${MAILX} ${ARGS} \
4900 -Ssmime-force-encryption \
4901 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4902 -Smta=./.tsendmail.sh \
4903 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4904 -Sfrom=test@localhost \
4906 -f ./.ENCRYPT >/dev/null 2>&1
4907 check behave:s/mime:decrypt 0 ".
/.DECRYPT
" '2624716890 422'
4909 printf 'behave:s/mime:decrypt:disproof-1: '
4910 if openssl smime -decrypt -inkey ./.tkey.pem \
4911 -in ./.ENCRYPT >/dev/null 2>&1; then
4922 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
4923 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
4924 # Note we unfortunately need to place some statements without proper
4925 # indentation because of continuation problems
4926 # xxx Note: t_content() was the first test (series) written. Today many
4927 # xxx aspects are (better) covered by other tests above, some are not.
4928 # xxx At some future date and time, convert the last remains not covered
4929 # xxx elsewhere to a real t_behave_* test and drop t_content()
4933 # Test for [260e19d] (Juergen Daubert)
4935 echo body | ${MAILX} ${ARGS} "${MBOX}"
4936 check content
:004 0 "${MBOX}" '2917662811 98'
4938 # "Test for" [d6f316a] (Gavin Troy)
4940 printf "m ${MBOX}\n~s subject1\nEmail body\n~.\nfi ${MBOX}\np\nx\n" |
4941 ${MAILX} ${ARGS} ${ADDARG_UNI} -Spipe-text/plain="@* ${cat}" > "${BODY}"
4942 check content:006 0 "${MBOX}" '2099098650 122'
4943 check content:006-1 - "${BODY}" '794542938 174'
4945 # "Test
for" [c299c45] (Peter Hofmann) TODO shouldn't end up QP-encoded?
4948 for(i = 0; i < 10000; ++i)
4950 #printf "\xF0\x90\x87\x90"
4951 }' | ${MAILX} ${ARGS} ${ADDARG_UNI} -s TestSubject "${MBOX}"
4952 check content
:007 0 "${MBOX}" '534262374 61816'
4958 # MIME encoding (QP) stress message subject
4959 printf 'Äbrä Kä?dä=brö Fü?di=bus? '\
4960 'adadaddsssssssddddddddddddddddddddd'\
4961 'ddddddddddddddddddddddddddddddddddd'\
4962 'ddddddddddddddddddddddddddddddddddd'\
4963 'dddddddddddddddddddd Hallelulja? Od'\
4964 'er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
4965 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
4966 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f'\
4967 'fffffffffffffffffffffffffffffffffff'\
4968 'fffffffffffffffffffff ggggggggggggg'\
4969 'ggggggggggggggggggggggggggggggggggg'\
4970 'ggggggggggggggggggggggggggggggggggg'\
4971 'ggggggggggggggggggggggggggggggggggg'\
4976 # MIME encoding (QP) stress message body
4978 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
4979 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
4980 "wasde willst, gelle, gelle, gelle, gelle, gelle.\r\n"\
4981 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst \r\n"\
4982 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1\r\n"\
4983 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12\r\n"\
4984 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123\r\n"\
4985 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234\r\n"\
4986 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345\r\n"\
4987 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456\r\n"\
4988 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234567\r\n"\
4989 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345678\r\n"\
4990 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456789\r\n"\
4991 "Unn ausserdem habe ich trailing SP/HT/SP/HT whitespace \r\n"\
4992 "Unn ausserdem habe ich trailing HT/SP/HT/SP whitespace \r\n"\
4993 "auf den zeilen vorher.\r\n"\
4994 "From am Zeilenbeginn und From der Mitte gibt es auch.\r\n"\
4996 "Die letzte Zeile war nur ein Punkt.\r\n"\
4998 "Das waren deren zwei.\r\n"\
5000 "Die letzte Zeile war ein Leerschritt.\n"\
5001 "=VIER = EQUAL SIGNS=ON A LINE=\r\n"\
5004 "Die letzte Zeile war nur ein Punkt, mit Unix Zeilenende.\n"\
5006 "Das waren deren zwei. ditto.\n"\
5008 "Unn ausseerdem habe ich trailing SP/HT/SP/HT whitespace \n"\
5009 "Unn ausseerdem habe ich trailing HT/SP/HT/SP whitespace \n"\
5010 "auf den zeilen vorher.\n"\
5012 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.\n"\
5013 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.1"\
5015 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5017 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5019 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5021 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5023 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5025 "QP am Zeilenende über soft-nl hinweg\n"\
5026 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5028 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5030 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5032 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5034 "=VIER = EQUAL SIGNS=ON A LINE=\n"\
5036 "Die letzte Zeile war ein Leerschritt.\n"\
5041 # if have_feat devel; then
5042 # ARGS="${ARGS} -Smemdebug"
5046 if [ -n "${UTF8_LOCALE}" ]; then
5047 printf 'Using Unicode locale %s\n' "${UTF8_LOCALE}"
5049 printf 'No Unicode locale found, disabling Unicode tests\n'
5056 if [ -z "${CHECK_ONLY}${MAE_TEST}" ]; then
5058 elif [ -z "${MAE_TEST}" ] ||
[ ${#} -eq 0 ]; then
5061 while [ ${#} -gt 0 ]; do
5067 [ ${ESTAT} -eq 0 ] && echo Ok ||
echo >&2 'Errors occurred'