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} > .tall 2>&1
2546 check behave:mbox-1 0 "${MBOX}" '1140119864 13780'
2547 check behave:mbox-1-outerr - ./.tall '4294967295 0' # empty file
2549 printf 'File "%s
"\ncopy * "%s
"\nFile "%s
"\nfrom*' "${MBOX}" .tmbox1 .tmbox1 |
2550 ${MAILX} ${ARGS} -Sshowlast > .tall 2>&1
2551 check behave:mbox-2 0 .tall '2739893312 9103'
2553 printf 'File "%s
"\ncopy * "file://%s
"\nFile "file://%s
"\nfrom*' \
2554 "${MBOX}" .tmbox2 .tmbox2 | ${MAILX} ${ARGS} -Sshowlast > .tall
2>&1
2555 check behave
:mbox-3
0 .tall
'1702194178 9110'
2557 # only the odd (even)
2559 printf 'File "file://%s"\ncopy ' .tmbox2
2561 while [ ${i} -lt 112 ]; do
2563 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2566 printf 'file://%s\nFile "file://%s"\nfrom*' .tmbox3 .tmbox3
2567 ) |
${MAILX} ${ARGS} -Sshowlast > .tall
2>&1
2568 check behave
:mbox-4
0 .tmbox3
'631132924 6890'
2569 check behave
:mbox-5
- .tall
'2960975049 4573'
2572 printf 'file "file://%s"\nmove ' .tmbox2
2574 while [ ${i} -lt 112 ]; do
2576 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2579 printf 'file://%s\nFile "file://%s
"\nfrom*\nFile "file://%s
"\nfrom*' \
2580 .tmbox3 .tmbox3 .tmbox2
2581 ) | ${MAILX} ${ARGS} -Sshowlast > .tall #2>&1
2582 check behave:mbox-6 0 .tmbox3 '1387070539 13655'
2583 ${sed} 2d < .tall > .tallx
2584 check behave:mbox-7 - .tallx '2729940494 13645'
2586 # Invalid MBOXes (after [f4db93b3])
2588 printf 'copy 1 ./.tinvmbox' | ${MAILX} ${ARGS} -Rf "${MBOX}" > .tall
2>&1
2589 check behave
:mbox-8
0 .tinvmbox
'999592329 122'
2590 check behave
:mbox-9
- .
/.tall
'3146754194 33'
2592 echo ' ' > .tinvmbox
2593 printf 'copy 1 ./.tinvmbox' |
${MAILX} ${ARGS} -Rf "${MBOX}" > .tall 2>&1
2594 check behave:mbox-10 0 .tinvmbox '3790411604 124'
2595 check behave:mbox-11 - ./.tall '3146754194 33'
2597 { echo; echo; } > .tinvmbox # (not invalid)
2598 printf 'copy 1 ./.tinvmbox' | ${MAILX} ${ARGS} -Rf "${MBOX}" > .tall
2>&1
2599 check behave
:mbox-12
0 .tinvmbox
'534457575 123'
2600 check behave
:mbox-13
- .
/.tall
'3146754194 33'
2602 # *mbox-rfc4155*, plus
2603 ${cat} <<-_EOT > ./.tinv1
2606 From MAILER-DAEMON-1 Wed Oct 2 01:50:07 1996
2607 Date: Wed, 02 Oct 1996 01:50:07 +0000
2609 Subject: Bad bad message 1
2611 From me to you, blinde Kuh!
2613 From MAILER-DAEMON-2 Wed Oct 2 01:50:07 1996
2614 Date: Wed, 02 Oct 1996 01:50:07 +0000
2616 Subject: Bad bad message 2
2618 From me to you, blindes Kalb!
2620 ${cp} .
/.tinv1 .
/.tinv2
2624 \\localopts yes; \\wysh set mbox-rfc4155;\\wysh File "${1}";\\
2625 \\eval copy * "${2}"
2627 call mboxfix ./.tinv1 ./.tok' |
${MAILX} ${ARGS} > .tall
2>&1
2628 ex0_test behave
:mbox-14-estat
2629 ${cat} .
/.tinv1 .
/.tok
>> .tall
2630 check behave
:mbox-14
- .
/.tall
'739301109 616'
2633 'wysh file ./.tinv1 # ^From not repaired, but missing trailing NL is
2634 wysh File ./.tok # Just move away to nowhere
2636 wysh file ./.tinv2 # Fully repaired
2637 File ./.tok' |
${MAILX} ${ARGS} > /dev
/null
2>&1 # xxx errors, paths..
2638 ex0_test behave
:mbox-15-estat
2639 check behave
:mbox-15-1
- .
/.tinv1
'3178048820 332'
2640 check behave
:mbox-15-2
- .
/.tinv2
'4151504442 314'
2645 t_behave_maildir
() {
2646 t_prolog t_behave_maildir
2647 TRAP_EXIT_ADDONS
="./.t*"
2651 while [ ${i} -lt 112 ]; do
2652 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
2653 "${MBOX}" "${i}" "${i}"
2656 ) |
${MAILX} ${ARGS}
2657 check behave
:maildir-1
0 "${MBOX}" '1140119864 13780'
2663 ' "${MBOX}" .tmdir1 .tmdir1 |
2664 ${MAILX} ${ARGS} -Snewfolders=maildir
-Sshowlast > .tlst
2665 check behave
:maildir-2
0 .tlst
'1797938753 9103'
2668 copy * "maildir://%s"
2671 ' "${MBOX}" .tmdir2 .tmdir2 |
2672 ${MAILX} ${ARGS} -Sshowlast > .tlst
2673 check behave
:maildir-3
0 .tlst
'1155631089 9113'
2675 printf 'File "maildir://%s"
2679 ' .tmdir2 .tmbox1 .tmbox1 |
2680 ${MAILX} ${ARGS} -Sshowlast > .tlst
2681 check behave
:maildir-4
0 .tmbox1
'2646131190 13220'
2682 check behave
:maildir-5
- .tlst
'3701297796 9110'
2684 # only the odd (even)
2686 printf 'File "maildir://%s"
2689 while [ ${i} -lt 112 ]; do
2691 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2698 ) |
${MAILX} ${ARGS} -Sshowlast > .tlst
2699 check behave
:maildir-6
0 .tmbox2
'142890131 6610'
2700 check behave
:maildir-7
- .tlst
'960096773 4573'
2703 printf 'file "maildir://%s"
2706 while [ ${i} -lt 112 ]; do
2708 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2716 ' .tmbox2 .tmbox2 .tmdir2
2717 ) | ${MAILX} ${ARGS} -Sshowlast > .tlst
2718 check behave:maildir-8 0 .tmbox2 '3806905791 13100'
2719 ${sed} 2d < .tlst > .tlstx
2720 check behave:maildir-9 - .tlstx '4216815295 13645'
2725 t_behave_record_a_resend() {
2726 t_prolog t_behave_record_a_resend
2727 TRAP_EXIT_ADDONS=".
/.t.record .
/.t.resent
"
2731 m %s\n~s Subject 1.\nHello.\n~.
2732 set record-files add-file-recipients
2733 m %s\n~s Subject 2.\nHello.\n~.
2735 resend 2 ./.t.resent
2736 Resend 1 ./.t.resent
2738 resend 2 ./.t.resent
2739 Resend 1 ./.t.resent
2740 ' ./.t.record "${MBOX}" "${MBOX}" "${MBOX}" |
2743 check behave:record_a_resend-1 0 "${MBOX}" '3057873538 256'
2744 check behave:record_a_resend-2 - .t.record '391356429 460'
2745 check behave:record_a_resend-3 - .t.resent '2685231691 648'
2750 t_behave_e_H_L_opts() {
2751 t_prolog t_behave_e_H_L_opts
2752 TRAP_EXIT_ADDONS=".
/.tsendmail.sh .
/.t.mbox
"
2755 ${MAILX} ${ARGS} -ef ./.t.mbox
2756 echo ${?} > "${MBOX}"
2758 ${cat} <<-_EOT > ./.tsendmail.sh
2760 (echo 'From Alchemilla Wed Apr 07 17:03:33 2017' && ${cat} && echo
2763 chmod 0755 ./.tsendmail.sh
2764 printf 'm me@exam.ple\nLine 1.\nHello.\n~.\n' |
2765 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2766 printf 'm you@exam.ple\nLine 1.\nBye.\n~.\n' |
2767 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2769 ${MAILX} ${ARGS} -ef ./.t.mbox
2770 echo ${?} >> "${MBOX}"
2771 ${MAILX} ${ARGS} -efL @t@me ./.t.mbox
2772 echo ${?} >> "${MBOX}"
2773 ${MAILX} ${ARGS} -efL @t@you ./.t.mbox
2774 echo ${?} >> "${MBOX}"
2775 ${MAILX} ${ARGS} -efL '@>@Line 1' ./.t.mbox
2776 echo ${?} >> "${MBOX}"
2777 ${MAILX} ${ARGS} -efL '@>@Hello.' ./.t.mbox
2778 echo ${?} >> "${MBOX}"
2779 ${MAILX} ${ARGS} -efL '@>@Bye.' ./.t.mbox
2780 echo ${?} >> "${MBOX}"
2781 ${MAILX} ${ARGS} -efL '@>@Good bye.' ./.t.mbox
2782 echo ${?} >> "${MBOX}"
2784 ${MAILX} ${ARGS} -fH ./.t.mbox >> "${MBOX}"
2785 echo ${?} >> "${MBOX}"
2786 ${MAILX} ${ARGS} -fL @t@me ./.t.mbox >> "${MBOX}"
2787 echo ${?} >> "${MBOX}"
2788 ${MAILX} ${ARGS} -fL @t@you ./.t.mbox >> "${MBOX}"
2789 echo ${?} >> "${MBOX}"
2790 ${MAILX} ${ARGS} -fL '@>@Line 1' ./.t.mbox >> "${MBOX}"
2791 echo ${?} >> "${MBOX}"
2792 ${MAILX} ${ARGS} -fL '@>@Hello.' ./.t.mbox >> "${MBOX}"
2793 echo ${?} >> "${MBOX}"
2794 ${MAILX} ${ARGS} -fL '@>@Bye.' ./.t.mbox >> "${MBOX}"
2795 echo ${?} >> "${MBOX}"
2796 ${MAILX} ${ARGS} -fL '@>@Good bye.' ./.t.mbox >> "${MBOX}" 2>/dev
/null
2797 echo ${?} >> "${MBOX}"
2799 check behave
:e_H_L_opts
- "${MBOX}" '1708955574 678'
2804 t_behave_alternates
() {
2805 t_prolog t_behave_alternates
2806 TRAP_EXIT_ADDONS
="./.t*"
2808 ${cat} <<-_EOT > ./.tsendmail.sh
2810 (echo 'From Valeriana Sat Jul 08 15:54:03 2017' && ${cat} && echo
2813 chmod 0755 .
/.tsendmail.sh
2815 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
> .
/.tall
2>&1
2819 alternates a1@b1 a2@b2 a3@b3
2824 echo $?
/$^ERRNAME
<$rv>
2829 echo $?
/$^ERRNAME
<$rv>
2832 echo $?
/$^ERRNAME
<$rv>
2835 echo $?
/$^ERRNAME
<$rv>
2839 alternates a1@b1 a2@b2 a3@b3
2842 echo $?
/$^ERRNAME
<$rv>
2845 echo $?
/$^ERRNAME
<$rv>
2848 echo $?
/$^ERRNAME
<$rv>
2851 alternates a1@b1 a2@b2 a3@b3
2854 echo $?
/$^ERRNAME
<$rv>
2857 echo $?
/$^ERRNAME
<$rv>
2860 echo $?
/$^ERRNAME
<$rv>
2864 alternates a1@b1 a2@b2 a3@b3
2867 echo $?
/$^ERRNAME
<$rv>
2871 alternates a1@b1 a1@c1 a1@d1 a2@b2 a3@b3 a3@c3 a3@d3
2873 ~s all alternates
, only a1@b1 remains
2875 ~b a3@b3 a3@c3 a3@d3
2884 alternates a1@b1 a1@c1 a2@b2 a3@b3
2886 ~s a1@b1 a1@d1
, and a3@c3 a3@d3 remain
2888 ~b a3@b3 a3@c3 a3@d3
2895 alternates a1@b1 a2@b2 a3
; set allnet
2897 ~s all alternates via allnet
, only a1@b1 remains
2899 ~b a3@b3 a3@c3 a3@d3
2910 echo $?
/$^ERRNAME
<$rv>
2914 echo $?
/$^ERRNAME
<$rv>
2918 echo $?
/$^ERRNAME
<$rv>
2922 echo $?
/$^ERRNAME
<$rv>
2926 echo $?
/$^ERRNAME
<$rv>
2930 alternates a1@b1 a2@b2
2933 echo $?
/$^ERRNAME
<$rv>
2934 alternates a3@b3 a4@b4
2937 echo $?
/$^ERRNAME
<$rv>
2939 check behave
:alternates-1
0 "${MBOX}" '142184864 515'
2940 check behave
:alternates-2
- .tall
'1878598364 505'
2946 t_prolog t_behave_alias
2947 TRAP_EXIT_ADDONS
="./.t*"
2949 ${cat} <<-_EOT > ./.tsendmail.sh
2951 (echo 'From Hippocastanum Mon Jun 19 15:07:07 2017' && ${cat} && echo
2954 chmod 0755 .
/.tsendmail.sh
2956 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
> .
/.tall
2>&1
2958 alias a1 ex2@a1.ple
"EX3 <ex3@a1.ple>"
2960 alias a2 ex1@a2.ple ex2@a2.ple ex3@a2.ple ex4@a2.ple
2962 alias a4 a5 ex1@a4.ple
2964 alias a6 a7 ex1@a6.ple
2978 check behave
:alias-1
0 "${MBOX}" '2496925843 272'
2979 check behave
:alias-2
- .tall
'3548953204 152'
2981 # TODO t_behave_alias: n_ALIAS_MAXEXP is compile-time constant,
2982 # TODO need to somehow provide its contents to the test, then test
2987 t_behave_filetype
() {
2988 t_prolog t_behave_filetype
2989 TRAP_EXIT_ADDONS
="./.t*"
2991 ${cat} <<-_EOT > ./.tsendmail.sh
2993 (echo 'From Alchemilla Wed Apr 25 15:12:13 2017' && ${cat} && echo
2996 chmod 0755 .
/.tsendmail.sh
2998 printf 'm m1@e.t\nL1\nHy1\n~.\nm m2@e.t\nL2\nHy2\n~@ %s\n~.\n' \
2999 "${SRCDIR}snailmail.jpg" | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
3000 check behave:filetype-1 0 "${MBOX}" '1594682963 13520'
3002 if (echo | gzip -c) >/dev/null 2>&1; then
3005 printf 'File "%s
"\ncopy 1 ./.t.mbox.gz\ncopy 2 ./.t.mbox.gz' \
3006 "${MBOX}" | ${MAILX} ${ARGS} \
3007 -X'filetype gz gzip\ -dc gzip\ -c'
3008 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
3009 ${MAILX} ${ARGS} -X'filetype gz gzip\ -dc gzip\ -c'
3011 check behave
:filetype-2
- "./.t.mbox" '1594682963 13520'
3012 check behave
:filetype-3
- "./.t.out" '2392348396 102'
3014 echo 'behave:filetype-2: unsupported, skipped'
3015 echo 'behave:filetype-3: unsupported, skipped'
3020 printf 'File "%s"\ncopy 1 ./.t.mbox.gz
3026 -X'filetype gz gzip\ -dc gzip\ -c' \
3027 -X'filetype mbox.gz "${sed} 1,3d|${cat}" \
3028 "echo eins;echo zwei;echo und mit ${sed} bist Du dabei;${cat}"'
3029 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
3031 -X'filetype gz gzip\ -dc gzip\ -c' \
3032 -X'filetype mbox.gz "${sed} 1,3d|${cat}" kill\ 0'
3034 check behave
:filetype-4
- "./.t.mbox" '2886541147 27060'
3035 check behave
:filetype-5
- "./.t.out" '852335377 172'
3040 t_behave_message_injections
() {
3041 t_prolog t_behave_message_injections
3042 TRAP_EXIT_ADDONS
="./.t*"
3044 ${cat} <<-_EOT > ./.tsendmail.sh
3046 (echo 'From Echinacea Tue Jun 20 15:54:02 2017' && ${cat} && echo
3049 chmod 0755 .
/.tsendmail.sh
3051 echo mysig
> .
/.tmysig
3053 echo some-body |
${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh \
3054 -Smessage-inject-head=head-inject \
3055 -Smessage-inject-tail=tail-inject \
3056 -Ssignature=.
/.tmysig \
3057 ex@am.ple
> .
/.tall
2>&1
3058 check behave
:message_injections-1
0 "${MBOX}" '2434746382 134'
3059 check behave
:message_injections-2
- .tall
'4294967295 0' # empty file
3061 ${cat} <<-_EOT > ./.template
3065 Subject: This subject is
3067 Body, body, body me.
3069 < .
/.template
${MAILX} ${ARGS} -t -Smta=.
/.tsendmail.sh \
3070 -Smessage-inject-head=head-inject \
3071 -Smessage-inject-tail=tail-inject \
3072 -Ssignature=.
/.tmysig \
3074 check behave
:message_injections-3
0 "${MBOX}" '3114203412 198'
3075 check behave
:message_injections-4
- .tall
'4294967295 0' # empty file
3080 t_behave_attachments
() {
3081 t_prolog t_behave_attachments
3082 TRAP_EXIT_ADDONS
="./.t*"
3084 ${cat} <<-_EOT > ./.tsendmail.sh
3086 (echo 'From Cannabis Sun Feb 18 02:02:46 2018' && ${cat} && echo
3089 chmod 0755 .
/.tsendmail.sh
3091 ${cat} <<-_EOT > ./.tx
3092 From steffen Sun Feb 18 02:48:40 2018
3093 Date: Sun, 18 Feb 2018 02:48:40 +0100
3096 User-Agent: s-nail v14.9.7
3099 From steffen Sun Feb 18 02:48:42 2018
3100 Date: Sun, 18 Feb 2018 02:48:42 +0100
3103 User-Agent: s-nail v14.9.7
3108 printf 'att2-1\natt2-2\natt2-4\n' > .
/'.t 2'
3109 printf 'att3-1\natt3-2\natt3-4\n' > .
/.t3
3110 printf 'att4-1\natt4-2\natt4-4\n' > './.t 4'
3113 '!@ ./.t3 "./.t 4" ""
3121 |
${MAILX} ${ARGS} -Sescape=! -Smta=.
/.tsendmail.sh \
3122 -a .
/.t1
-a './.t 2' \
3123 -s attachment-test \
3124 ex@am.ple
> .
/.tall
2>&1
3125 check behave
:attachments-1
0 "${MBOX}" '4107062253 634'
3126 check behave
:attachments-2
- .tall
'1928331872 720'
3131 !s This the subject is
3132 !@ ./.t3 "#2" "./.t 4" "#1" ""
3142 !@ ./.t3 "#2" "./.t 4" "#1" ""
3150 !@ ./.t3 "" "#2" "" "./.t 4" "" "#1" ""
3159 !@ ./.t3 "" "#2" "" "./.t 4" "" "#1" ""
3173 |
${MAILX} ${ARGS} -Sescape=! -Smta=.
/.tsendmail.sh
-Rf .
/.tx \
3175 check behave
:attachments-3
0 "${MBOX}" '798122412 2285'
3176 check behave
:attachments-4
- .tall
'2526106274 1910'
3181 t_behave_compose_hooks
() { # TODO monster
3182 t_prolog t_behave_compose_hooks
3183 TRAP_EXIT_ADDONS
="./.t*"
3185 (echo line one
&&echo line two
&&echo line three
) > .
/.treadctl
3186 (echo echo four
&&echo echo five
&&echo echo six
) > .
/.tattach
3188 ${cat} <<-_EOT > ./.tsendmail.sh
3190 (echo 'From PrimulaVeris Wed Apr 10 22:59:00 2017' && ${cat} && echo
3193 chmod 0755 .
/.tsendmail.sh
3195 ${cat} <<'__EOT__' > ./.trc
3197 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
3200 vput vexpr es substr "$1" 0 1
3205 define read_mline_res {
3206 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3207 echo $len/$es/$^ERRNAME: $hl
3208 if [ $es -ne $^ERR-NONE ]
3209 xcall bail read_mline_res
3211 \xcall read_mline_res
3216 echo "~^header list"; read hl; echo $hl;\
3217 call xerr "$hl" "in_addr ($xh) 0-1"
3219 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
3220 read es; echo $es; call xerr "$es" "ins_addr $xh 1-1"
3221 echo "~^header insert $xh <${xh}2@exam.ple>";\
3222 read es; echo $es; call xerr "$es" "ins_addr $xh 1-2"
3223 echo "~^header insert $xh ${xh}3@exam.ple";\
3224 read es; echo $es; call xerr "$es" "ins_addr $xh 1-3"
3225 echo "~^header list $xh"; read hl; echo $hl;\
3226 call xerr "$hl" "ins_addr $xh 1-4"
3227 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 1-5"
3230 if [ "$t_remove" == "" ]
3234 echo "~^header remove $xh"; read es; call xerr $es "ins_addr $xh 2-1"
3235 echo "~^header remove $xh"; read es; vput vexpr es substr $es 0 3
3237 xcall bail "ins_addr $xh 2-2"
3239 echo "~^header list $xh"; read es; vput vexpr es substr $es 0 3
3241 xcall bail "ins_addr $xh 2-3"
3243 echo "~^header show $xh"; read es; vput vexpr es substr $es 0 3
3245 xcall bail "ins_addr $xh 2-4"
3249 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
3250 read es; echo $es; call xerr "$es" "ins_addr $xh 3-1"
3251 echo "~^header insert $xh <${xh}2@exam.ple>";\
3252 read es; echo $es; call xerr "$es" "ins_addr $xh 3-2"
3253 echo "~^header insert $xh ${xh}3@exam.ple";\
3254 read es; echo $es; call xerr "$es" "ins_addr $xh 3-3"
3255 echo "~^header list $xh"; read hl; echo $hl;\
3256 call xerr "$hl" "ins_addr $xh 3-4"
3257 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 3-5"
3260 echo "~^header remove-at $xh 1"; read es;\
3261 call xerr $es "ins_addr $xh 3-6"
3262 echo "~^header remove-at $xh 1"; read es;\
3263 call xerr $es "ins_addr $xh 3-7"
3264 echo "~^header remove-at $xh 1"; read es;\
3265 call xerr $es "ins_addr $xh 3-8"
3266 echo "~^header remove-at $xh 1"; read es;\
3267 vput vexpr es substr $es 0 3
3269 xcall bail "ins_addr $xh 3-9"
3271 echo "~^header remove-at $xh T"; read es;\
3272 vput vexpr es substr $es 0 3
3274 xcall bail "ins_addr $xh 3-10"
3276 echo "~^header list $xh"; read es;\
3277 vput vexpr es substr $es 0 3
3279 xcall bail "ins_addr $xh 3-11"
3281 echo "~^header show $xh"; read es;\
3282 vput vexpr es substr $es 0 3
3284 xcall bail "ins_addr $xh 3-12"
3288 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
3289 read es; echo $es; call xerr "$es" "ins_addr $xh 4-1"
3290 echo "~^header insert $xh <${xh}2@exam.ple> (comment) \"Quot(e)d\"";\
3291 read es; echo $es; call xerr "$es" "ins_addr $xh 4-2"
3292 echo "~^header insert $xh ${xh}3@exam.ple";\
3293 read es; echo $es; call xerr "$es" "ins_addr $xh 4-3"
3294 echo "~^header list $xh"; read hl; echo $hl;\
3295 call xerr "$hl" "header list $xh 3-4"
3296 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 4-5"
3299 echo "~^header remove-at $xh 3"; read es;\
3300 call xerr $es "ins_addr $xh 4-6"
3301 echo "~^header remove-at $xh 2"; read es;\
3302 call xerr $es "ins_addr $xh 4-7"
3303 echo "~^header remove-at $xh 1"; read es;\
3304 call xerr $es "ins_addr $xh 4-8"
3305 echo "~^header remove-at $xh 1"; read es;\
3306 vput vexpr es substr $es 0 3
3308 xcall bail "ins_addr $xh 4-9"
3310 echo "~^header remove-at $xh T"; read es;\
3311 vput vexpr es substr $es 0 3
3313 xcall bail "ins_addr $xh 4-10"
3315 echo "~^header list $xh"; read es;\
3316 vput vexpr es substr $es 0 3
3318 xcall bail "ins_addr $xh 4-11"
3320 echo "~^header show $xh"; read es;\
3321 vput vexpr es substr $es 0 3
3323 xcall bail "ins_addr $xh 4-12"
3327 wysh set xh=$1 mult=$2
3328 echo "~^header list"; read hl; echo $hl;\
3329 call xerr "$hl" "ins_ref ($xh) 0-1"
3331 echo "~^header insert $xh <$xh@exam.ple>";\
3332 read es; echo $es; call xerr "$es" "ins_ref $xh 1-1"
3334 echo "~^header insert $xh <${xh}2@exam.ple>";\
3335 read es; echo $es; call xerr "$es" "ins_ref $xh 1-2"
3336 echo "~^header insert $xh ${xh}3@exam.ple";\
3337 read es; echo $es; call xerr "$es" "ins_ref $xh 1-3"
3339 echo "~^header insert $xh <${xh}2@exam.ple>"; read es;\
3340 vput vexpr es substr $es 0 3
3342 xcall bail "ins_ref $xh 1-4"
3346 echo "~^header list $xh"; read hl; echo $hl;\
3347 call xerr "$hl" "ins_ref $xh 1-5"
3348 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 1-6"
3351 if [ "$t_remove" == "" ]
3355 echo "~^header remove $xh"; read es;\
3356 call xerr $es "ins_ref $xh 2-1"
3357 echo "~^header remove $xh"; read es;\
3358 vput vexpr es substr $es 0 3
3360 xcall bail "ins_ref $xh 2-2"
3362 echo "~^header list $xh"; read es;\
3363 vput vexpr es substr $es 0 3
3365 xcall bail "$es ins_ref $xh 2-3"
3367 echo "~^header show $xh"; read es;\
3368 vput vexpr es substr $es 0 3
3370 xcall bail "ins_ref $xh 2-4"
3374 echo "~^header insert $xh <$xh@exam.ple>";\
3375 read es; echo $es; call xerr "$es" "ins_ref $xh 3-1"
3377 echo "~^header insert $xh <${xh}2@exam.ple>";\
3378 read es; echo $es; call xerr "$es" "ins_ref $xh 3-2"
3379 echo "~^header insert $xh ${xh}3@exam.ple";\
3380 read es; echo $es; call xerr "$es" "ins_ref $xh 3-3"
3382 echo "~^header list $xh";\
3383 read hl; echo $hl; call xerr "$hl" "ins_ref $xh 3-4"
3384 echo "~^header show $xh";\
3385 read es; call xerr $es "ins_ref $xh 3-5"
3388 echo "~^header remove-at $xh 1"; read es;\
3389 call xerr $es "ins_ref $xh 3-6"
3390 if [ $mult -ne 0 ] && [ $xh != subject ]
3391 echo "~^header remove-at $xh 1"; read es;\
3392 call xerr $es "ins_ref $xh 3-7"
3393 echo "~^header remove-at $xh 1"; read es;\
3394 call xerr $es "ins_ref $xh 3-8"
3396 echo "~^header remove-at $xh 1"; read es;\
3397 vput vexpr es substr $es 0 3
3399 xcall bail "ins_ref $xh 3-9"
3401 echo "~^header remove-at $xh T"; read es;\
3402 vput vexpr es substr $es 0 3
3404 xcall bail "ins_ref $xh 3-10"
3406 echo "~^header show $xh"; read es;\
3407 vput vexpr es substr $es 0 3
3409 xcall bail "ins_ref $xh 3-11"
3413 echo "~^header insert $xh <$xh@exam.ple> ";\
3414 read es; echo $es; call xerr "$es" "ins_ref $xh 4-1"
3416 echo "~^header insert $xh <${xh}2@exam.ple> ";\
3417 read es; echo $es; call xerr "$es" "ins_ref $xh 4-2"
3418 echo "~^header insert $xh ${xh}3@exam.ple";\
3419 read es; echo $es; call xerr "$es" "ins_ref $xh 4-3"
3421 echo "~^header list $xh"; read hl; echo $hl;\
3422 call xerr "$hl" "ins_ref $xh 4-4"
3423 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 4-5"
3426 if [ $mult -ne 0 ] && [ $xh != subject ]
3427 echo "~^header remove-at $xh 3"; read es;\
3428 call xerr $es "ins_ref $xh 4-6"
3429 echo "~^header remove-at $xh 2"; read es;\
3430 call xerr $es "ins_ref $xh 4-7"
3432 echo "~^header remove-at $xh 1"; read es;\
3433 call xerr $es "ins_ref $xh 4-8"
3434 echo "~^header remove-at $xh 1"; read es;\
3435 vput vexpr es substr $es 0 3
3437 xcall bail "ins_ref $xh 4-9"
3439 echo "~^header remove-at $xh T"; read es;\
3440 vput vexpr es substr $es 0 3
3442 xcall bail "ins_ref $xh 4-10"
3444 echo "~^header show $xh"; read es;\
3445 vput vexpr es substr $es 0 3
3447 xcall bail "ins_ref $xh 4-11"
3452 # In collect.c order
3454 call ins_ref sender 0 # Not a "ref", but works
3458 call ins_addr reply-To
3459 call ins_addr mail-Followup-to
3460 call ins_ref messAge-id 0
3461 call ins_ref rEfErEncEs 1
3462 call ins_ref in-Reply-to 1
3463 call ins_ref subject 1 # Not a "ref", but works (with tweaks)
3464 call ins_addr freeForm1
3465 call ins_addr freeform2
3467 echo "~^header show MAILX-Command"; read es; call xerr $es "t_header 1000"
3469 echo "~^header show MAILX-raw-TO"; read es; call xerr $es "t_header 1001"
3477 echo "~^attachment";\
3478 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3480 xcall bail "attach 0-1"
3483 echo "~^attach attribute ./.treadctl";\
3484 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3486 xcall bail "attach 0-2"
3488 echo "~^attachment attribute-at 1";\
3489 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
3491 xcall bail "attach 0-3"
3494 echo "~^attachment insert ./.treadctl=ascii";\
3495 read hl; echo $hl; call xerr "$hl" "attach 1-1"
3496 echo "~^attachment list";\
3497 read es; echo $es;call xerr "$es" "attach 1-2"
3499 echo "~^attachment attribute ./.treadctl";\
3500 read es; echo $es;call xerr "$es" "attach 1-3"
3502 echo "~^attachment attribute .treadctl";\
3503 read es; echo $es;call xerr "$es" "attach 1-4"
3505 echo "~^attachment attribute-at 1";\
3506 read es; echo $es;call xerr "$es" "attach 1-5"
3509 echo "~^attachment attribute-set ./.treadctl filename rctl";\
3510 read es; echo $es;call xerr "$es" "attach 1-6"
3511 echo "~^attachment attribute-set .treadctl content-description Au";\
3512 read es; echo $es;call xerr "$es" "attach 1-7"
3513 echo "~^attachment attribute-set-at 1 content-id <10.du@ich>";\
3514 read es; echo $es;call xerr "$es" "attach 1-8"
3516 echo "~^attachment attribute ./.treadctl";\
3517 read es; echo $es;call xerr "$es" "attach 1-9"
3519 echo "~^attachment attribute .treadctl";\
3520 read es; echo $es;call xerr "$es" "attach 1-10"
3522 echo "~^attachment attribute rctl";\
3523 read es; echo $es;call xerr "$es" "attach 1-11"
3525 echo "~^attachment attribute-at 1";\
3526 read es; echo $es;call xerr "$es" "attach 1-12"
3530 echo "~^attachment insert ./.tattach=latin1";\
3531 read hl; echo $hl; call xerr "$hl" "attach 2-1"
3532 echo "~^attachment list";\
3533 read es; echo $es;call xerr "$es" "attach 2-2"
3535 echo "~^attachment attribute ./.tattach";\
3536 read es; echo $es;call xerr "$es" "attach 2-3"
3538 echo "~^attachment attribute .tattach";\
3539 read es; echo $es;call xerr "$es" "attach 2-4"
3541 echo "~^attachment attribute-at 2";\
3542 read es; echo $es;call xerr "$es" "attach 2-5"
3545 echo "~^attachment attribute-set ./.tattach filename tat";\
3546 read es; echo $es;call xerr "$es" "attach 2-6"
3548 "~^attachment attribute-set .tattach content-description Au2";\
3549 read es; echo $es;call xerr "$es" "attach 2-7"
3550 echo "~^attachment attribute-set-at 2 content-id <20.du@wir>";\
3551 read es; echo $es;call xerr "$es" "attach 2-8"
3553 "~^attachment attribute-set-at 2 content-type application/x-sh";\
3554 read es; echo $es;call xerr "$es" "attach 2-9"
3556 echo "~^attachment attribute ./.tattach";\
3557 read es; echo $es;call xerr "$es" "attach 2-10"
3559 echo "~^attachment attribute .tattach";\
3560 read es; echo $es;call xerr "$es" "attach 2-11"
3562 echo "~^attachment attribute tat";\
3563 read es; echo $es;call xerr "$es" "attach 2-12"
3565 echo "~^attachment attribute-at 2";\
3566 read es; echo $es;call xerr "$es" "attach 2-13"
3570 if [ "$t_remove" == "" ]
3574 echo "~^attachment remove ./.treadctl"; read es;\
3575 call xerr $es "attach 3-1"
3576 echo "~^attachment remove ./.tattach"; read es;\
3577 call xerr $es "attach 3-2"
3578 echo "~^ attachment remove ./.treadctl"; read es;\
3579 vput vexpr es substr $es 0 3
3581 xcall bail "attach 3-3"
3583 echo "~^ attachment remove ./.tattach"; read es;\
3584 vput vexpr es substr $es 0 3
3586 xcall bail "attach 3-4"
3588 echo "~^attachment list"; read es;\
3589 vput vexpr es substr $es 0 3
3591 xcall bail "attach 3-5"
3595 echo "~^attachment insert ./.tattach=latin1";\
3596 read hl; echo $hl; call xerr "$hl" "attach 4-1"
3597 echo "~^attachment insert ./.tattach=latin1";\
3598 read hl; echo $hl; call xerr "$hl" "attach 4-2"
3599 echo "~^attachment list";\
3600 read es; echo $es;call xerr "$es" "attach 4-3"
3602 echo "~^ attachment remove .tattach"; read es;\
3603 vput vexpr es substr $es 0 3
3605 xcall bail "attach 4-4 $es"
3607 echo "~^attachment remove-at T"; read es;\
3608 vput vexpr es substr $es 0 3
3610 xcall bail "attach 4-5"
3612 echo "~^attachment remove ./.tattach"; read es;\
3613 call xerr $es "attach 4-6"
3614 echo "~^attachment remove ./.tattach"; read es;\
3615 call xerr $es "attach 4-7"
3616 echo "~^ attachment remove ./.tattach"; read es;\
3617 vput vexpr es substr $es 0 3
3619 xcall bail "attach 4-8 $es"
3621 echo "~^attachment list"; read es;\
3622 vput vexpr es substr $es 0 3
3624 xcall bail "attach 4-9"
3628 echo "~^attachment insert ./.tattach=latin1";\
3629 read hl; echo $hl; call xerr "$hl" "attach 5-1"
3630 echo "~^attachment insert ./.tattach=latin1";\
3631 read hl; echo $hl; call xerr "$hl" "attach 5-2"
3632 echo "~^attachment insert ./.tattach=latin1";\
3633 read hl; echo $hl; call xerr "$hl" "attach 5-3"
3634 echo "~^attachment list";\
3635 read es; echo $es;call xerr "$es" "attach 5-4"
3638 echo "~^attachment remove-at 3"; read es;\
3639 call xerr $es "attach 5-5"
3640 echo "~^attachment remove-at 3"; read es;\
3641 vput vexpr es substr $es 0 3
3643 xcall bail "attach 5-6"
3645 echo "~^attachment remove-at 2"; read es;\
3646 call xerr $es "attach 5-7"
3647 echo "~^attachment remove-at 2"; read es;\
3648 vput vexpr es substr $es 0 3
3650 xcall bail "attach 5-8"
3652 echo "~^attachment remove-at 1"; read es;\
3653 call xerr $es "attach 5-9"
3654 echo "~^attachment remove-at 1"; read es;\
3655 vput vexpr es substr $es 0 3
3657 xcall bail "attach 5-10"
3660 echo "~^attachment list"; read es;\
3661 vput vexpr es substr $es 0 3
3663 xcall bail "attach 5-11"
3667 echo "~^attachment insert ./.tattach=latin1";\
3668 read hl; echo $hl; call xerr "$hl" "attach 6-1"
3669 echo "~^attachment insert ./.tattach=latin1";\
3670 read hl; echo $hl; call xerr "$hl" "attach 6-2"
3671 echo "~^attachment insert ./.tattach=latin1";\
3672 read hl; echo $hl; call xerr "$hl" "attach 6-3"
3673 echo "~^attachment list";\
3674 read es; echo $es;call xerr "$es" "attach 6-4"
3677 echo "~^attachment remove-at 1"; read es;\
3678 call xerr $es "attach 6-5"
3679 echo "~^attachment remove-at 1"; read es;\
3680 call xerr $es "attach 6-6"
3681 echo "~^attachment remove-at 1"; read es;\
3682 call xerr $es "attach 6-7"
3683 echo "~^attachment remove-at 1"; read es;\
3684 vput vexpr es substr $es 0 3
3686 xcall bail "attach 6-8"
3689 echo "~^attachment list"; read es;\
3690 vput vexpr es substr $es 0 3
3692 xcall bail "attach 6-9"
3704 echo on-compose-enter, mailx-command<$mailx-command>
3705 alternates alter1@exam.ple alter2@exam.ple
3707 set autocc='alter1@exam.ple alter2@exam.ple'
3708 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3709 echo mailx-subject<$mailx-subject>
3710 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3711 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3712 mailx-raw-bcc<$mailx-raw-bcc>
3713 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3714 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3717 echo on-compose-leave, mailx-command<$mailx-command>
3719 eval alternates $al alter3@exam.ple alter4@exam.ple
3721 set autobcc='alter3@exam.ple alter4@exam.ple'
3722 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3723 echo mailx-subject<$mailx-subject>
3724 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3725 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3726 mailx-raw-bcc<$mailx-raw-bcc>
3727 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3728 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3731 echo on-compose-cleanup, mailx-command<$mailx-command>
3734 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3735 echo mailx-subject<$mailx-subject>
3736 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3737 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3738 mailx-raw-bcc<$mailx-raw-bcc>
3739 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3740 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3742 wysh set on-compose-splice=t_ocs \
3743 on-compose-enter=t_oce on-compose-leave=t_ocl \
3744 on-compose-cleanup=t_occ
3748 printf 'm this-goes@nowhere\nbody\n!.\n' |
3749 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3750 -X'source ./.trc' -Smta=.
/.tsendmail.sh \
3752 ${cat} .
/.tall
>> "${MBOX}"
3753 check behave
:compose_hooks-1
0 "${MBOX}" '522535560 10101'
3756 printf 'm this-goes@nowhere\nbody\n!.\n' |
3757 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3758 -St_remove=1 -X'source ./.trc' -Smta=.
/.tsendmail.sh \
3760 ${cat} .
/.tall
>> "${MBOX}"
3761 check behave
:compose_hooks-2
0 "${MBOX}" '3654000499 12535'
3765 # Some state machine stress, shell compose hook, localopts for hook, etc.
3766 # readctl in child. ~r as HERE document
3768 printf 'm ex@am.ple\nbody\n!.
3769 echon ${mailx-command}${mailx-subject}
3770 echon ${mailx-from}${mailx-sender}
3771 echon ${mailx-to}${mailx-cc}${mailx-bcc}
3772 echon ${mailx-raw-to}${mailx-raw-cc}${mailx-raw-bcc}
3773 echon ${mailx-orig-from}${mailx-orig-to}${mailx-orig-gcc}${mailx-orig-bcc}
3774 var t_oce t_ocs t_ocs_sh t_ocl t_occ autocc
3775 ' |
${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3776 -Smta=.
/.tsendmail.sh \
3779 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
3782 vput vexpr es substr "$1" 0 1
3787 define read_mline_res {
3788 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3789 echo $len/$es/$^ERRNAME: $hl
3790 if [ $es -ne $^ERR-NONE ]
3791 xcall bail read_mline_res
3793 \xcall read_mline_res
3797 vput vexpr i + 1 "$2"
3799 vput vexpr j % $i 10
3806 eval \\$j _work $1 $i
3809 vput vexpr i + $i "$1"
3813 wysh set line; read line;wysh set es=$? en=$^ERRNAME ;\
3814 echo read:$es/$en: $line
3815 if [ "${es}" -ne -1 ]
3818 readctl remove $cwd/.treadctl; echo readctl remove:$?/$^ERRNAME
3823 echo "~^header list"; read hl; echo $hl;\
3824 vput vexpr es substr "$hl" 0 1
3826 xcall bail "header list"
3829 call _work 1; echo $?
3830 echo "~^header insert cc splicy diet <splice@exam.ple> spliced";\
3831 read es; echo $es; vput vexpr es substr "$es" 0 1
3833 xcall bail "be diet"
3835 echo "~^header insert cc <splice2@exam.ple>";\
3836 read es; echo $es; vput vexpr es substr "$es" 0 1
3838 xcall bail "be diet2"
3841 call _work 2; echo $?
3842 echo "~^header insert bcc juicy juice <juice@exam.ple> spliced";\
3843 read es; echo $es;vput vexpr es substr "$es" 0 1
3845 xcall bail "be juicy"
3847 echo "~^header insert bcc juice2@exam.ple";\
3848 read es; echo $es;vput vexpr es substr "$es" 0 1
3850 xcall bail "be juicy2"
3852 echo "~^header insert bcc juice3 <juice3@exam.ple>";\
3853 read es; echo $es;vput vexpr es substr "$es" 0 1
3855 xcall bail "be juicy3"
3857 echo "~^header insert bcc juice4@exam.ple";\
3858 read es; echo $es;vput vexpr es substr "$es" 0 1
3860 xcall bail "be juicy4"
3863 echo "~^header remove-at bcc 3";\
3864 read es; echo $es;vput vexpr es substr "$es" 0 1
3866 xcall bail "remove juicy5"
3868 echo "~^header remove-at bcc 2";\
3869 read es; echo $es;vput vexpr es substr "$es" 0 1
3871 xcall bail "remove juicy6"
3873 echo "~^header remove-at bcc 3";\
3874 read es; echo $es;vput vexpr es substr "$es" 0 3
3876 xcall bail "failed to remove-at"
3878 # Add duplicates which ought to be removed!
3879 echo "~^header insert bcc juice4@exam.ple";\
3880 read es; echo $es;vput vexpr es substr "$es" 0 1
3882 xcall bail "be juicy4-1"
3884 echo "~^header insert bcc juice4@exam.ple";\
3885 read es; echo $es;vput vexpr es substr "$es" 0 1
3887 xcall bail "be juicy4-2"
3889 echo "~^header insert bcc juice4@exam.ple";\
3890 read es; echo $es;vput vexpr es substr "$es" 0 1
3892 xcall bail "be juicy4-3"
3897 call _work 3; echo $?
3899 vput ! i echo just knock if you can hear me;\
3901 while [ $i -lt 24 ]; do printf "%s " $i; i=`expr $i + 1`; done;\
3903 echon shell-cmd says $?/$^ERRNAME: $i
3904 echo "~x will not become interpreted, we are reading until __EOT"
3906 read r_status; echo "~~r status output: $r_status"
3907 echo "~:echo $? $! $^ERRNAME"
3909 echo "~~r status from parent: $r_status"
3912 call _work 4; echo $?
3913 vput cwd cwd;echo cwd:$?
3914 readctl create $cwd/.treadctl ;echo readctl:$?/$^ERRNAME;\
3918 call _work 5; echo $?
3919 echo "~^header show MAILX-Command"; read es;\
3920 call xerr $es "t_header 1000"; call read_mline_res
3921 echo "~^header show MAILX-raw-TO"; read es;\
3922 call xerr $es "t_header 1001"; xcall read_mline_res
3924 echoerr IT IS WRONG IF YOU SEE THIS
3927 echo on-compose-enter, mailx-command<$mailx-command>
3928 set t_oce autobcc=oce@exam.ple
3929 alternates alter1@exam.ple alter2@exam.ple
3931 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3932 echo mailx-subject<$mailx-subject>
3933 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3934 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3935 mailx-raw-bcc<$mailx-raw-bcc>
3936 echo mailx-orig-from<$mailx-orig-from> \
3937 mailx-orig-to<$mailx-orig-to> \
3938 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3941 echo on-compose-leave, mailx-command<$mailx-command>
3942 set t_ocl autocc=ocl@exam.ple
3944 alternates alter3@exam.ple alter4@exam.ple
3946 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3947 echo mailx-subject<$mailx-subject>
3948 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3949 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3950 mailx-raw-bcc<$mailx-raw-bcc>
3951 echo mailx-orig-from<$mailx-orig-from> \
3952 mailx-orig-to<$mailx-orig-to> \
3953 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3956 echo on-compose-cleanup, mailx-command<$mailx-command>
3957 set t_occ autocc=occ@exam.ple
3960 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3961 echo mailx-subject<$mailx-subject>
3962 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3963 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3964 mailx-raw-bcc<$mailx-raw-bcc>
3965 echo mailx-orig-from<$mailx-orig-from> \
3966 mailx-orig-to<$mailx-orig-to> \
3967 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3969 wysh set on-compose-splice=t_ocs \
3970 on-compose-splice-shell="read ver;printf \"t_ocs-shell\\n\
3971 ~t shell@exam.ple\\n~:set t_ocs_sh\\n\"" \
3972 on-compose-enter=t_oce on-compose-leave=t_ocl \
3973 on-compose-cleanup=t_occ
3975 ex0_test behave
:compose_hooks-3-estat
3976 ${cat} .
/.tnotes
>> "${MBOX}"
3978 check behave
:compose_hooks-3
- "${MBOX}" '679526364 2431'
3980 # Reply, forward, resend, Resend
3983 printf 'set from=f1@z\nm t1@z\nb1\n!.\nset from=f2@z\nm t2@z\nb2\n!.\n' |
3984 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3985 -Smta=.
/.tsendmail.sh
3988 echo start: $? $! $^ERRNAME
3990 echo File: $? $! $^ERRNAME;echo;echo
3992 this is content of reply 1
3994 echo reply 1: $? $! $^ERRNAME;echo;echo
3996 this is content of Reply 1 2
3998 echo Reply 1 2: $? $! $^ERRNAME;echo;echo
3999 forward 1 fwdex@am.ple
4000 this is content of forward 1
4002 echo forward 1: $? $! $^ERRNAME;echo;echo
4003 resend 1 2 resendex@am.ple
4004 echo resend 1 2: $? $! $^ERRNAME;echo;echo
4005 Resend 1 2 Resendex@am.ple
4006 echo Resend 1 2: $? $! $^ERRNAME;echo;echo
4008 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
4009 -Smta=.
/.tsendmail.sh \
4012 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
4015 vput vexpr es substr "$1" 0 1
4020 define read_mline_res {
4021 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
4022 echo mline_res:$len/$es/$^ERRNAME: $hl
4023 if [ $es -ne $^ERR-NONE ]
4024 xcall bail read_mline_res
4026 \xcall read_mline_res
4030 echo "~^header show $1"; read es;\
4031 call xerr $es "work_hl $1"; echo $1; call read_mline_res
4039 echo t_ocs version $ver
4040 echo "~^header list"; read hl; echo $hl;\
4041 echoerr the header list is $hl;\
4042 call xerr "$hl" "header list"
4043 eval vpospar set $hl
4046 echoerr IT IS WRONG IF YOU SEE THIS
4049 echo on-XY-enter, mailx-command<$mailx-command>
4050 set t_oce autobcc=oce@exam.ple
4051 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
4052 echo mailx-subject<$mailx-subject>
4053 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
4054 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
4055 mailx-raw-bcc<$mailx-raw-bcc>
4056 echo mailx-orig-from<$mailx-orig-from> \
4057 mailx-orig-to<$mailx-orig-to> \
4058 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
4061 echo on-XY-leave, mailx-command<$mailx-command>
4062 set t_ocl autocc=ocl@exam.ple
4063 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
4064 echo mailx-subject<$mailx-subject>
4065 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
4066 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
4067 mailx-raw-bcc<$mailx-raw-bcc>
4068 echo mailx-orig-from<$mailx-orig-from> \
4069 mailx-orig-to<$mailx-orig-to> \
4070 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
4073 echo on-XY-cleanup, mailx-command<$mailx-command>
4074 set t_occ autocc=occ@exam.ple
4075 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
4076 echo mailx-subject<$mailx-subject>
4077 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
4078 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
4079 mailx-raw-bcc<$mailx-raw-bcc>
4080 echo mailx-orig-from<$mailx-orig-from> \
4081 mailx-orig-to<$mailx-orig-to> \
4082 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
4084 wysh set on-compose-splice=t_ocs \
4085 on-compose-enter=t_oce on-compose-leave=t_ocl \
4086 on-compose-cleanup=t_occ \
4087 on-resend-enter=t_oce on-resend-cleanup=t_occ
4089 ex0_test behave
:compose_hooks-4-estat
4090 ${cat} .
/.tnotes
>> "${MBOX}"
4092 check behave
:compose_hooks-4
- "${MBOX}" '3038884027 7516'
4097 t_behave_C_opt_customhdr
() {
4098 t_prolog t_behave_C_opt_customhdr
4099 TRAP_EXIT_ADDONS
="./.t*"
4101 ${cat} <<-_EOT > ./.tsendmail.sh
4103 (echo 'From CimicifugaRacemosa Mon Dec 25 21:33:40 2017' &&
4107 chmod 0755 .
/.tsendmail.sh
4110 ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh \
4111 -C 'C-One : Custom One Body' \
4112 -C 'C-Two:CustomTwoBody' \
4113 -S customhdr
='chdr1: chdr1 body, chdr2:chdr2 body' \
4114 this-goes@nowhere
>.
/.tall
2>&1
4115 ex0_test behave
:C_opt_customhdr-1-estat
4116 ${cat} .
/.tall
>> "${MBOX}"
4117 check behave
:C_opt_customhdr-1
0 "${MBOX}" '2400078426 195'
4120 printf 'm this-goes@nowhere\nbody\n!.
4122 m this-goes2@nowhere\nbody2\n!.
4123 set customhdr=%ccustom1 : custom1 body%c
4124 m this-goes2@nowhere\nbody2\n!.
4125 set customhdr=%ccustom1 : custom1\\, body , custom2: custom2 body%c
4126 m this-goes3@nowhere\nbody3\n!.
4128 ${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh
-Sescape=! \
4129 -C 'C-One : Custom One Body' \
4130 -C 'C-Two:CustomTwoBody' \
4131 -S customhdr
='chdr1: chdr1 body, chdr2:chdr2 body' \
4133 ex0_test behave
:C_opt_customhdr-2-estat
4134 ${cat} .
/.tall
>> "${MBOX}"
4135 check behave
:C_opt_customhdr-2
0 "${MBOX}" '3546878678 752'
4140 t_behave_mass_recipients
() {
4141 t_prolog t_behave_mass_recipients
4142 TRAP_EXIT_ADDONS
="./.t*"
4144 ${cat} <<-_EOT > ./.tsendmail.sh
4146 (echo 'From Eucalyptus Sat Jul 08 21:14:57 2017' && ${cat} && echo
4149 chmod 0755 .
/.tsendmail.sh
4151 ${cat} <<'__EOT__' > ./.trc
4153 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
4156 wysh set nr=$1 hn=$2
4157 echo "~$hn $hn$nr@$hn"; echo '~:echo $?'; read es
4159 xcall bail "ins_addr $hn 1-$nr"
4161 vput vexpr nr + $nr 1
4162 if [ "$nr" -le "$maximum" ]
4163 xcall ins_addr $nr $hn
4167 wysh set nr=$1 hn=$2
4168 alternates $hn$nr@$hn
4169 vput vexpr nr + $nr 2
4170 if [ "$nr" -le "$maximum" ]
4171 xcall bld_alter $nr $hn
4181 if [ "$t_remove" != '' ]
4186 set on-compose-splice=t_ocs on-compose-leave=t_ocl
4189 printf 'm this-goes@nowhere\nbody\n!.\n' |
4190 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
4191 -X'source ./.trc' -Smta=.
/.tsendmail.sh
-Smaximum=2001 \
4193 ex0_test behave
:mass_recipients-1-estat
4194 ${cat} .
/.tall
>> "${MBOX}"
4195 check behave
:mass_recipients-1
- "${MBOX}" '2912243346 51526'
4198 printf 'm this-goes@nowhere\nbody\n!.\n' |
4199 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
4200 -St_remove=1 -X'source ./.trc' -Smta=.
/.tsendmail.sh
-Smaximum=2001 \
4202 ex0_test behave
:mass_recipients-2-estat
4203 ${cat} .
/.tall
>> "${MBOX}"
4204 check behave
:mass_recipients-2
- "${MBOX}" '4097804632 34394'
4209 t_behave_mime_types_load_control
() {
4210 t_prolog t_behave_mime_types_load_control
4211 TRAP_EXIT_ADDONS
="./.t*"
4213 ${cat} <<-_EOT > ./.tmts1
4214 @ application/mathml+xml mathml
4216 ${cat} <<-_EOT > ./.tmts2
4217 @ x-conference/x-cooltalk ice
4219 @ application/aga-aga aga
4222 ${cat} <<-_EOT > ./.tmts1.mathml
4223 <head>nonsense ML</head>
4225 ${cat} <<-_EOT > ./.tmts2.ice
4228 printf 'of which the c\x01rack is coming soon' > .
/.tmtsx.doom
4229 printf 'of which the c\x01rack is coming soon' > .
/.tmtsx.aga
4243 ' "${MBOX}" "${MBOX}" |
4245 -Smimetypes-load-control=f
=.
/.tmts1
,f
=.
/.tmts2 \
4247 ex0_test behave
:mime_types_load_control-1-estat
4248 ${cat} "${MBOX}" >> .
/.tout
4249 check behave
:mime_types_load_control-1
- .
/.tout
'1441260727 2449'
4251 echo type |
${MAILX} ${ARGS} -R \
4252 -Smimetypes-load-control=f
=.
/.tmts1
,f
=.
/.tmts3 \
4253 -f "${MBOX}" >> .
/.tout
2>&1
4254 check behave
:mime_types_load_control-2
0 .
/.tout
'1441391438 3646'
4259 t_behave_lreply_futh_rth_etc
() {
4260 t_prolog t_behave_lreply_futh_rth_etc
4261 TRAP_EXIT_ADDONS
="./.t*"
4263 ${cat} <<-_EOT > ./.tsendmail.sh
4265 (echo 'From HumulusLupulus Thu Jul 27 14:41:20 2017' && ${cat} && echo
4268 chmod 0755 .
/.tsendmail.sh
4270 ${cat} <<-_EOT > ./.tmbox
4271 From neverneverland Sun Jul 23 13:46:25 2017
4272 Subject: Bugstop: five miles out 1
4273 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
4274 From: mister originator <mr@originator>
4275 To: bugstop-commit@five.miles.out, laber@backe.eu
4277 Mail-Followup-To: bugstop@five.miles.out, laber@backe.eu, is@a.list
4278 In-reply-to: <20170719111113.bkcMz%laber@backe.eu>
4279 Date: Wed, 19 Jul 2017 09:22:57 -0400
4280 Message-Id: <20170719132257.766AF781267@originator>
4283 > |Sorry, I think I misunderstand something. I would think that
4287 From neverneverland Fri Jul 7 22:39:11 2017
4288 Subject: Bugstop: five miles out 2
4289 Reply-To: mister originator2<mr2@originator>,bugstop@five.miles.out,is@a.list
4290 Content-Transfer-Encoding: 7bit
4291 From: mister originator <mr@originator>
4292 To: bugstop-commit@five.miles.out
4294 Message-ID: <149945963975.28888.6950788126957753723.reportbug@five.miles.out>
4295 Date: Fri, 07 Jul 2017 16:33:59 -0400
4298 capable of changing back.
4300 From neverneverland Fri Jul 7 22:42:00 2017
4301 Subject: Bugstop: five miles out 3
4302 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
4303 Content-Transfer-Encoding: 7bit
4304 From: mister originator <mr@originator>
4305 To: bugstop-commit@five.miles.out
4307 Message-ID: <149945963975.28888.6950788126957753746.reportbug@five.miles.out>
4308 Date: Fri, 07 Jul 2017 16:33:59 -0400
4309 List-Post: <mailto:bugstop@five.miles.out>
4312 are you ready, boots?
4314 From neverneverland Sat Aug 19 23:15:00 2017
4315 Subject: Bugstop: five miles out 4
4316 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
4317 Content-Transfer-Encoding: 7bit
4318 From: mister originator <mr@originator>
4319 To: bugstop@five.miles.out
4321 Message-ID: <149945963975.28888.6950788126qtewrqwer.reportbug@five.miles.out>
4322 Date: Fri, 07 Jul 2017 16:33:59 -0400
4323 List-Post: <mailto:bugstop@five.miles.out>
4326 are you ready, boots?
4331 ${cat} <<-'_EOT' | ${MAILX} ${ARGS} -Sescape=! -Smta=.
/.tsendmail.sh \
4332 -Rf .
/.tmbox
>> "${MBOX}" 2>&1
4334 wysh
set m
="This is text of \"reply ${1}."
4345 echo -----After reply $1.1 - $1.3: $?/$^ERRNAME
4348 wysh set m="This is text of
\"Reply
${1}.
"
4354 echo -----After Reply
$1.
$2: $?
/$^ERRNAME
4363 wysh
set m
="This is text of \"Lreply ${1}." on-compose-splice
=_Lh n
=$2
4367 # We need two indirections for this test: one for the case that Lreply
4368 # fails because of missing recipients: we need to read EOF next, thus
4369 # place this in _Ls last; and second for the succeeding cases EOF is
4370 # not what these should read, so go over the backside and splice it in!
4372 echo -----After Lreply
$1.
$2: $?
/$^ERRNAME
4375 localopts call-fixate
yes
4377 call R
$1 1; call R
$1 2; call R
$1 3; call R
$1 4
4378 call L
$1 1; call L
$1 2; call L
$1 3
4381 echo;echo '===== CHANGING === '"$*"' =====';echo
4385 set from
=laber@backe.eu
4388 call tweak
set reply-to-honour
4390 call tweak
set followup-to
4392 call tweak
set followup-to-honour
4394 call tweak mlist bugstop@five.miles.out
4396 call tweak mlsubscribe bugstop@five.miles.out
4398 call tweak
set recipients-in-cc
4402 check behave
:lreply_futh_rth_etc-1
0 "${MBOX}" '940818845 29373'
4406 ${cat} <<-_EOT > ./.tmbox
4407 From tom@i-i.example Thu Oct 26 03:15:55 2017
4408 Date: Wed, 25 Oct 2017 21:15:46 -0400
4409 From: tom <tom@i-i.example>
4410 To: Steffen Nurpmeso <steffen@sdaoden.eu>
4411 Cc: tom <tom@i-i.example>
4412 Subject: Re: xxxx yyyyyyyy configure does not really like a missing zzzzz
4413 Message-ID: <20171026011546.GA11643@i-i.example>
4414 Reply-To: tom@i-i.example
4415 References: <20171025214601.T2pNd%steffen@sdaoden.eu>
4416 In-Reply-To: <20171025214601.T2pNd%steffen@sdaoden.eu>
4419 The report's useful :-)
4422 printf 'reply 1\nthank you\n!.\n' |
4423 ${MAILX} ${ARGS} -Sescape=! -Smta=.
/.tsendmail.sh
-Sreply-to-honour \
4424 -Rf .
/.tmbox
> "${MBOX}" 2>&1
4425 check behave
:lreply_futh_rth_etc-2
0 "${MBOX}" '1045866991 331'
4430 t_behave_xxxheads_rfc2047
() {
4431 t_prolog t_behave_xxxheads_rfc2047
4432 TRAP_EXIT_ADDONS
="./.t*"
4434 ${cat} <<-_EOT > ./.tsendmail.sh
4436 (echo 'From GentianaLutea Mon Dec 04 17:15:29 2017' && ${cat} &&
4439 chmod 0755 .
/.tsendmail.sh
4443 echo |
${MAILX} ${ARGS} ${ADDARG_UNI} \
4444 -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̲' \
4446 check behave
:xxxheads_rfc2047-1
0 "${MBOX}" '3370931614 375'
4448 # Single word (overlong line split -- bad standard! Requires injection of
4449 # artificial data!! But can be prevented by using RFC 2047 encoding)
4451 i
=`${awk} 'BEGIN{for(i=0; i<92; ++i) printf "0123456789_"}'`
4452 echo |
${MAILX} ${ARGS} -s "${i}" "${MBOX}"
4453 check behave:xxxheads_rfc2047-2 0 "${MBOX}" '489922370 1718'
4455 # Combination of encoded words, space and tabs of varying sort
4457 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4458 -s "1Abrä Kaspas1
2Abra Katä b_kaspas2 \
4459 3Abrä Kaspas3
4Abrä Kaspas4
5Abrä Kaspas5 \
4460 6Abra Kaspas6
7Abrä Kaspas7
8Abra Kaspas8 \
4461 9Abra Kaspastäb4-3
10Abra Kaspas1 _
11Abra Katäb1 \
4462 12Abra Kadabrä
1 After Tab after Täb this is NUTS
" \
4464 check behave:xxxheads_rfc2047-3 0 "${MBOX}" '1676887734 591'
4466 # Overlong multibyte sequence that must be forcefully split
4467 # todo This works even before v15.0, but only by accident
4469 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4470 -s "✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4471 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4472 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄
" \
4474 check behave:xxxheads_rfc2047-4 0 "${MBOX}" '3029301775 659'
4478 echo | ${MAILX} ${ARGS} \
4479 -s "1-1 B2 B3 B4 B5 B6 B\
4480 1-2 B2 B3 B4 B5 B6 B\
4481 1-3 B2 B3 B4 B5 B6 B\
4482 1-4 B2 B3 B4 B5 B6 B\
4483 1-5 B2 B3 B4 B5 B6 B\
4484 1-6 B2 B3 B4 B5 B6
" \
4486 check behave:xxxheads_rfc2047-5 0 "${MBOX}" '4126167195 297'
4488 # Leading and trailing WS
4490 echo | ${MAILX} ${ARGS} \
4491 -s " 2-1 B2 B3 B4 B5 B6 B\
4492 1-2 B2 B3 B4 B5 B6 B\
4493 1-3 B2 B3 B4 B5 B6 B\
4494 1-4 B2 B3 B4 B5 B6
" \
4496 check behave:xxxheads_rfc2047-6 0 "${MBOX}" '3600624479 236'
4498 # RFC 2047 in an address field! (Missing test caused v14.9.6!)
4500 echo "Dat Früchtchen riecht häußlich
" |
4501 ${MAILX} ${ARGS} ${ADDARG_UNI} -Sfullnames -Smta=./.tsendmail.sh \
4503 'Schnödes "Früchtchen
" <do@du> (Hä!)'
4504 check behave:xxxheads_rfc2047-7 0 "${MBOX}" '800505986 368'
4506 # RFC 2047 in an address field, and iconv involved
4507 if have_feat iconv; then
4509 ${cat} > ./.trebox <<_EOT
4510 From zaza@exam.ple Fri Mar 2 21:31:56 2018
4511 Date: Fri, 2 Mar 2018 20:31:45 +0000
4512 From: z=?iso-8859-1?Q?=E1?=za <zaza@exam.ple>
4513 To: dude <dude@exam.ple>
4514 Subject: houston(...)
4515 Message-ID: <abra@1>
4517 Content-Type: text/plain; charset=iso-8859-1
4518 Content-Disposition: inline
4519 Content-Transfer-Encoding: 8bit
4522 echo reply | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4523 -Sfullnames -Sreply-in-same-charset \
4524 -Smta=./.tsendmail.sh -Rf ./.trebox
4525 check behave:xxxheads_rfc2047-8 0 "${MBOX}" '2821484185 280'
4527 echo 'behave:xxxheads_rfc2047-8: iconv unsupported, skipped'
4533 t_behave_rfc2231() {
4534 t_prolog t_behave_rfc2231
4535 TRAP_EXIT_ADDONS=".
/.t
*"
4538 mkdir ./.ttt || exit 1
4542 : > 'diet\ is \curd.txt'
4543 : > 'diet "is
" curd.txt'
4545 : > 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
4546 : > höde__tröge__müde__dätte__hätte__vuelle__guelle__aese__aesse__sauerliche__kräuter__österliche__grüße__mäh.txt
4547 : > hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt
4548 : > ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
4550 echo bla | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4551 -a ".
/.ttt
/ma
'ger.txt" -a "./.ttt/mä'ger.txt
" \
4552 -a './.ttt/diet\ is \curd.txt' -a './.ttt/diet "is
" curd.txt' \
4553 -a ./.ttt/höde-tröge.txt \
4554 -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 \
4555 -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 \
4556 -a ./.ttt/hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt \
4557 -a ./.ttt/✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt \
4559 check behave:rfc2231-1 0 "${MBOX}" '684985954 3092'
4561 # `resend' test, reusing $MBOX
4562 printf "Resend .
/.t2
\nx
\n" | ${MAILX} ${ARGS} -Rf "${MBOX}"
4563 check behave
:rfc2231-2
0 .
/.t2
'684985954 3092'
4565 printf "resend ./.t3\nx\n" |
${MAILX} ${ARGS} -Rf "${MBOX}"
4566 check behave:rfc2231-3 0 ./.t3 '3130352658 3148'
4571 t_behave_iconv_mbyte_base64() { # TODO uses sed(1) and special *headline*!!
4572 t_prolog t_behave_iconv_mbyte_base64
4573 TRAP_EXIT_ADDONS=".
/.t
*"
4575 if [ -n "${UTF8_LOCALE}" ] && have_feat iconv; then
4576 if (</dev/null iconv -f ascii -t iso-2022-jp) >/dev/null 2>&1 ||
4577 (</dev/null iconv -f ascii -t euc-jp) >/dev/null 2>&1; then
4580 echo 'behave:iconv_mbyte_base64: unsupported, skipped'
4584 echo 'behave:iconv_mbyte_base64: unsupported, skipped'
4588 ${cat} <<-_EOT > ./.tsendmail.sh
4590 (echo 'From DroseriaRotundifolia Thu Aug 03 17:26:25 2017' && ${cat} &&
4593 chmod 0755 ./.tsendmail.sh
4595 if (</dev/null iconv -f ascii -t iso-2022-jp) >/dev/null 2>&1; then
4596 ${cat} <<-'_EOT' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4597 -Smta=./.tsendmail.sh \
4598 -Sescape=! -Smime-encoding=base64 2>./.terr
4599 set ttycharset=utf-8 sendcharsets=iso-2022-jp
4601 !s Japanese from UTF-8 to ISO-2022-JP
4602 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4604 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4607 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4609 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4612 set ttycharset=iso-2022-jp charset-7bit=iso-2022-jp sendcharsets=utf-8
4614 !s Japanese from ISO-2022-JP to UTF-8, eh, no, also ISO-2022-JP
4615 \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
4617 \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
4620 \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
4622 \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
4625 # May not presume iconv output as long as roundtrip possible [489a7122]
4626 ex0_test behave
:iconv_mbyte_base64-1-estat
4627 ${awk} 'BEGIN{h=1}/^$/{++h;next}{if(h % 2 == 1)print}' \
4628 < "${MBOX}" > .
/.tcksum
4629 check behave
:iconv_mbyte_base64-1
- .
/.tcksum
'2694609714 520'
4630 check behave
:iconv_mbyte_base64-2
- .
/.terr
'4294967295 0'
4632 printf 'eval f 1; eval write ./.twrite; eval type 1; eval type 2\n' |
4633 LC_ALL
=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4634 -S headline
="%>%a%m %-18f %-16d %i%-s" \
4635 -Rf "${MBOX}" >.
/.tlog
2>&1
4636 check behave
:iconv_mbyte_base64-3
0 .
/.twrite
'1259742080 686'
4637 #check behave:iconv_mbyte_base64-4 - ./.tlog '3214068822 2123'
4638 ${sed} -e '/^\[-- M/d' < .
/.tlog
> .
/.txlog
4639 check behave
:iconv_mbyte_base64-4
- .
/.txlog
'3659773472 2035'
4641 echo 'behave:iconv_mbyte_base64: ISO-2022-JP unsupported, skipping 1-4'
4644 if (</dev
/null
iconv -f ascii
-t euc-jp
) >/dev
/null
2>&1; then
4645 rm -f "${MBOX}" .
/.twrite
4646 ${cat} <<-'_EOT' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4647 -Smta=.
/.tsendmail.sh \
4648 -Sescape=! -Smime-encoding=base64
2>.
/.terr
4649 set ttycharset
=utf-8 sendcharsets
=euc-jp
4651 !s Japanese from UTF-8 to EUC-JP
4652 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの
1種をシジュウカラと呼ぶ。
4654 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4657 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4659 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの
1種をシジュウカラと呼ぶ。
4662 set ttycharset
=EUC-JP sendcharsets
=utf-8
4664 !s Japanese from EUC-JP to UTF-8
4665 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î
1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4667 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4670 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4672 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î
1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4675 ex0_test behave
:iconv_mbyte_base64-5-estat
4676 ${awk} 'BEGIN{h=1}/^$/{++h;next}{if(h % 2 == 1)print}' \
4677 < "${MBOX}" > .
/.tcksum
4678 check behave
:iconv_mbyte_base64-5
- .
/.tcksum
'2870183985 473'
4679 check behave
:iconv_mbyte_base64-6
- .
/.terr
'4294967295 0'
4681 printf 'eval f 1; eval write ./.twrite; eval type 1; eval type 2\n' |
4682 LC_ALL
=${UTF8_LOCALE} ${MAILX} ${ARGS} \
4683 -S headline
="%>%a%m %-18f %-16d %i%-s" \
4684 -Rf "${MBOX}" >.
/.tlog
2>&1
4685 check behave
:iconv_mbyte_base64-7
0 .
/.twrite
'1259742080 686'
4686 #check behave:iconv_mbyte_base64-8 - ./.tlog '2506063395 2075'
4687 ${sed} -e '/^\[-- M/d' < .
/.tlog
> .
/.txlog
4688 check behave
:iconv_mbyte_base64-8
- .
/.txlog
'2528199891 1988'
4690 echo 'behave:iconv_mbyte_base64: EUC-JP unsupported, skipping 5-8'
4696 t_behave_iconv_mainbody
() {
4697 t_prolog t_behave_iconv_mainbody
4698 TRAP_EXIT_ADDONS
="./.t*"
4700 if [ -n "${UTF8_LOCALE}" ] && have_feat
iconv; then
4703 echo 'behave:iconv_mainbody: unsupported, skipped'
4707 ${cat} <<-_EOT > ./.tsendmail.sh
4709 (echo 'From HamamelisVirginiana Fri Oct 20 16:23:21 2017' && ${cat} &&
4712 chmod 0755 .
/.tsendmail.sh
4714 printf '–' |
${MAILX} ${ARGS} ${ADDARG_UNI} -Smta=.
/.tsendmail.sh \
4715 -S charset-7bit
=us-ascii
-S charset-8bit
=utf-8 \
4716 -s '–' over-the@rain.bow
2>.
/.terr
4717 check behave
:iconv_mainbody-1
0 "${MBOX}" '3634015017 251'
4718 check behave
:iconv_mainbody-2
- .
/.terr
'4294967295 0'
4720 printf '–' |
${MAILX} ${ARGS} ${ADDARG_UNI} -Smta=.
/.tsendmail.sh \
4721 -S charset-7bit
=us-ascii
-S charset-8bit
=us-ascii \
4722 -s '–' over-the@rain.bow
2>.
/.terr
4723 exn0_test behave
:iconv_mainbody-3
4724 check behave
:iconv_mainbody-3
- "${MBOX}" '3634015017 251'
4725 check behave
:iconv_mainbody-4
- .
/.terr
'2579894983 148'
4727 # The different iconv(3) implementations use different replacement sequence
4728 # types (character-wise, byte-wise, and the character(s) used differ)
4729 i
="${MAILX_ICONV_MODE}"
4730 if [ -n "${i}" ]; then
4731 printf 'p\nx\n' |
${MAILX} ${ARGS} -Rf "${MBOX}" >./.tout 2>./.terr
4733 ex0_test behave:iconv_mainbody-5-0 ${j}
4734 check behave:iconv_mainbody-5-1 - ./.terr '4294967295 0'
4735 if [ ${i} -eq 13 ]; then
4736 check behave:iconv_mainbody-5-2 - ./.tout '189327996 283'
4737 elif [ ${i} -eq 12 ]; then
4738 check behave:iconv_mainbody-5-3 - ./.tout '1959197095 283'
4739 elif [ ${i} -eq 3 ]; then
4740 check behave:iconv_mainbody-5-4 - ./.tout '3196380198 279'
4742 check behave:iconv_mainbody-5-5 - ./.tout '3760313827 279'
4745 echo 'behave:iconv_mainbody-5: unsupported, skipped'
4751 t_behave_binary_mainbody() {
4752 t_prolog t_behave_binary_mainbody
4753 TRAP_EXIT_ADDONS=".
/.t
*"
4755 printf 'abra\0\nka\r\ndabra' |
4756 ${MAILX} ${ARGS} ${ADDARG_UNI} -s 'binary with carriage-return!' \
4758 check behave:binary_mainbody-1 0 "${MBOX}" '2430168141 243'
4759 check behave:binary_mainbody-2 - ./.terr '4294967295 0'
4761 printf 'p\necho\necho writing now\nwrite ./.twrite\n' |
4762 ${MAILX} ${ARGS} -Rf \
4763 -Spipe-application/octet-stream="@
* ${cat} > .
/.tcat
" \
4764 "${MBOX}" >./.tall 2>&1
4765 check behave:binary_mainbody-3 0 ./.tall '1151843761 324'
4766 check behave:binary_mainbody-4 - ./.tcat '3817108933 15'
4767 check behave:binary_mainbody-5 - ./.twrite '3817108933 15'
4772 t_behave_q_t_etc_opts() {
4773 t_prolog t_behave_q_t_etc_opts
4774 TRAP_EXIT_ADDONS=".
/.t
*"
4776 # Three tests for MIME encoding and (a bit) content classification.
4777 # At the same time testing -q FILE, < FILE and -t FILE
4778 t__put_body > ./.tin
4781 < ./.tin ${MAILX} ${ARGS} ${ADDARG_UNI} \
4782 -a ./.tin -s "`t__put_subject`" "${MBOX}"
4783 check behave:q_t_etc_opts-1 0 "${MBOX}" '3570973309 6646'
4786 < /dev/null ${MAILX} ${ARGS} ${ADDARG_UNI} \
4787 -a ./.tin -s "`t__put_subject`" -q ./.tin "${MBOX}"
4788 check behave:q_t_etc_opts-2 0 "${MBOX}" '3570973309 6646'
4791 ( echo "To
: ${MBOX}" && echo "Subject
: `t__put_subject`" && echo &&
4793 ) | ${MAILX} ${ARGS} ${ADDARG_UNI} -Snodot -a ./.tin -t
4794 check behave:q_t_etc_opts-3 0 "${MBOX}" '3570973309 6646'
4800 have_feat smime || {
4801 echo 'behave:s/mime: unsupported, skipped'
4805 t_prolog t_behave_s_mime
4806 TRAP_EXIT_ADDONS=".
/.t.conf .
/.tkey.pem .
/.tcert.pem .
/.tpair.pem
"
4807 TRAP_EXIT_ADDONS="${TRAP_EXIT_ADDONS} .
/.VERIFY .
/.DECRYPT .
/.ENCRYPT
"
4808 TRAP_EXIT_ADDONS="${TRAP_EXIT_ADDONS} .
/.tsendmail.sh
"
4810 printf 'behave:s/mime: .. generating test key and certificate ..\n'
4811 ${cat} <<-_EOT > ./.t.conf
4814 default_keyfile = keyfile.pem
4815 distinguished_name = req_distinguished_name
4816 attributes = req_attributes
4820 [ req_distinguished_name ]
4827 emailAddress = test@localhost
4832 openssl req -x509 -nodes -days 3650 -config ./.t.conf \
4833 -newkey rsa:1024 -keyout ./.tkey.pem -out ./.tcert.pem >/dev/null 2>&1
4834 ${cat} ./.tkey.pem ./.tcert.pem > ./.tpair.pem
4837 printf 'behave:s/mime:sign/verify: '
4838 echo bla | ${MAILX} ${ARGS} \
4839 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4840 -Ssmime-sign -Sfrom=test@localhost \
4841 -s 'S/MIME test' ./.VERIFY
4842 if [ $? -eq 0 ]; then
4853 /^Content-Description: /{ skip = 2; print; next }
4854 /^$/{ if(skip) --skip }
4857 < ./.VERIFY > "${MBOX}"
4858 check behave:s/mime:sign/verify:checksum - "${MBOX}" '2900817158 648'
4860 printf 'behave:s/mime:sign/verify:verify '
4861 printf 'verify\nx\n' |
4863 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4864 -Ssmime-sign -Sfrom=test@localhost \
4866 -f ./.VERIFY >/dev/null 2>&1
4867 if [ $? -eq 0 ]; then
4876 printf 'behave:s/mime:sign/verify:disproof-1 '
4877 if openssl smime -verify -CAfile ./.tcert.pem \
4878 -in ./.VERIFY >/dev/null 2>&1; then
4887 # (signing +) encryption / decryption
4888 ${cat} <<-_EOT > ./.tsendmail.sh
4890 (echo 'From Euphrasia Thu Apr 27 17:56:23 2017' && ${cat}) > ./.ENCRYPT
4892 chmod 0755 ./.tsendmail.sh
4894 printf 'behave:s/mime:encrypt+sign: '
4897 -Ssmime-force-encryption \
4898 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4899 -Smta=./.tsendmail.sh \
4900 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4901 -Ssmime-sign -Sfrom=test@localhost \
4902 -s 'S/MIME test' recei@ver.com
4903 if [ $? -eq 0 ]; then
4907 printf 'error: encrypt+sign failed\n'
4910 ${sed} -e '/^$/,$d' < ./.ENCRYPT > "${MBOX}"
4911 check behave:s/mime:encrypt+sign:checksum - "${MBOX}" '1937410597 327'
4913 printf 'behave:s/mime:decrypt+verify: '
4914 printf 'decrypt ./.DECRYPT\nfi ./.DECRYPT\nverify\nx\n' |
4916 -Ssmime-force-encryption \
4917 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4918 -Smta=./.tsendmail.sh \
4919 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4920 -Ssmime-sign -Sfrom=test@localhost \
4922 -f ./.ENCRYPT >/dev/null 2>&1
4923 if [ $? -eq 0 ]; then
4932 /^Content-Description: /{ skip = 2; print; next }
4933 /^$/{ if(skip) --skip }
4936 < ./.DECRYPT > "${MBOX}"
4937 check behave:s/mime:decrypt+verify:checksum - "${MBOX}" '1720739247 931'
4939 printf 'behave:s/mime:decrypt+verify:disproof-1: '
4940 if (openssl smime -decrypt -inkey ./.tkey.pem -in ./.ENCRYPT |
4941 openssl smime -verify -CAfile ./.tcert.pem) >/dev/null 2>&1; then
4948 printf "behave
:s
/mime
:encrypt
: "
4949 echo bla | ${MAILX} ${ARGS} \
4950 -Ssmime-force-encryption \
4951 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4952 -Smta=./.tsendmail.sh \
4953 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4954 -Sfrom=test@localhost \
4955 -s 'S/MIME test' recei@ver.com
4956 if [ $? -eq 0 ]; then
4963 # Same as behave:s/mime:encrypt+sign:checksum above
4964 ${sed} -e '/^$/,$d' < ./.ENCRYPT > "${MBOX}"
4965 check behave:s/mime:encrypt:checksum - "${MBOX}" '1937410597 327'
4968 printf 'decrypt ./.DECRYPT\nx\n' | ${MAILX} ${ARGS} \
4969 -Ssmime-force-encryption \
4970 -Ssmime-encrypt-recei@ver.com=./.tpair.pem \
4971 -Smta=./.tsendmail.sh \
4972 -Ssmime-ca-file=./.tcert.pem -Ssmime-sign-cert=./.tpair.pem \
4973 -Sfrom=test@localhost \
4975 -f ./.ENCRYPT >/dev/null 2>&1
4976 check behave:s/mime:decrypt 0 ".
/.DECRYPT
" '2624716890 422'
4978 printf 'behave:s/mime:decrypt:disproof-1: '
4979 if openssl smime -decrypt -inkey ./.tkey.pem \
4980 -in ./.ENCRYPT >/dev/null 2>&1; then
4991 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
4992 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
4993 # Note we unfortunately need to place some statements without proper
4994 # indentation because of continuation problems
4995 # xxx Note: t_content() was the first test (series) written. Today many
4996 # xxx aspects are (better) covered by other tests above, some are not.
4997 # xxx At some future date and time, convert the last remains not covered
4998 # xxx elsewhere to a real t_behave_* test and drop t_content()
5002 # Test for [260e19d] (Juergen Daubert)
5004 echo body | ${MAILX} ${ARGS} "${MBOX}"
5005 check content
:004 0 "${MBOX}" '2917662811 98'
5007 # "Test for" [d6f316a] (Gavin Troy)
5009 printf "m ${MBOX}\n~s subject1\nEmail body\n~.\nfi ${MBOX}\np\nx\n" |
5010 ${MAILX} ${ARGS} ${ADDARG_UNI} -Spipe-text/plain="@* ${cat}" > "${BODY}"
5011 check content:006 0 "${MBOX}" '2099098650 122'
5012 check content:006-1 - "${BODY}" '794542938 174'
5014 # "Test
for" [c299c45] (Peter Hofmann) TODO shouldn't end up QP-encoded?
5017 for(i = 0; i < 10000; ++i)
5019 #printf "\xF0\x90\x87\x90"
5020 }' | ${MAILX} ${ARGS} ${ADDARG_UNI} -s TestSubject "${MBOX}"
5021 check content
:007 0 "${MBOX}" '534262374 61816'
5027 # MIME encoding (QP) stress message subject
5028 printf 'Äbrä Kä?dä=brö Fü?di=bus? '\
5029 'adadaddsssssssddddddddddddddddddddd'\
5030 'ddddddddddddddddddddddddddddddddddd'\
5031 'ddddddddddddddddddddddddddddddddddd'\
5032 'dddddddddddddddddddd Hallelulja? Od'\
5033 'er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
5034 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'\
5035 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f'\
5036 'fffffffffffffffffffffffffffffffffff'\
5037 'fffffffffffffffffffff ggggggggggggg'\
5038 'ggggggggggggggggggggggggggggggggggg'\
5039 'ggggggggggggggggggggggggggggggggggg'\
5040 'ggggggggggggggggggggggggggggggggggg'\
5045 # MIME encoding (QP) stress message body
5047 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
5048 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
5049 "wasde willst, gelle, gelle, gelle, gelle, gelle.\r\n"\
5050 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst \r\n"\
5051 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1\r\n"\
5052 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12\r\n"\
5053 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123\r\n"\
5054 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234\r\n"\
5055 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345\r\n"\
5056 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456\r\n"\
5057 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234567\r\n"\
5058 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345678\r\n"\
5059 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456789\r\n"\
5060 "Unn ausserdem habe ich trailing SP/HT/SP/HT whitespace \r\n"\
5061 "Unn ausserdem habe ich trailing HT/SP/HT/SP whitespace \r\n"\
5062 "auf den zeilen vorher.\r\n"\
5063 "From am Zeilenbeginn und From der Mitte gibt es auch.\r\n"\
5065 "Die letzte Zeile war nur ein Punkt.\r\n"\
5067 "Das waren deren zwei.\r\n"\
5069 "Die letzte Zeile war ein Leerschritt.\n"\
5070 "=VIER = EQUAL SIGNS=ON A LINE=\r\n"\
5073 "Die letzte Zeile war nur ein Punkt, mit Unix Zeilenende.\n"\
5075 "Das waren deren zwei. ditto.\n"\
5077 "Unn ausseerdem habe ich trailing SP/HT/SP/HT whitespace \n"\
5078 "Unn ausseerdem habe ich trailing HT/SP/HT/SP whitespace \n"\
5079 "auf den zeilen vorher.\n"\
5081 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.\n"\
5082 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.1"\
5084 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5086 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5088 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5090 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5092 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
5094 "QP am Zeilenende über soft-nl hinweg\n"\
5095 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5097 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5099 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5101 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
5103 "=VIER = EQUAL SIGNS=ON A LINE=\n"\
5105 "Die letzte Zeile war ein Leerschritt.\n"\
5110 # if have_feat devel; then
5111 # ARGS="${ARGS} -Smemdebug"
5115 if [ -n "${UTF8_LOCALE}" ]; then
5116 printf 'Using Unicode locale %s\n' "${UTF8_LOCALE}"
5118 printf 'No Unicode locale found, disabling Unicode tests\n'
5125 if [ -z "${CHECK_ONLY}${MAE_TEST}" ]; then
5127 elif [ -z "${MAE_TEST}" ] ||
[ ${#} -eq 0 ]; then
5130 while [ ${#} -gt 0 ]; do
5136 [ ${ESTAT} -eq 0 ] && echo Ok ||
echo >&2 'Errors occurred'