2 #@ Usage: ./cc-test.sh [--check-only s-mailx-binary]
3 #@ TODO _All_ the tests should happen in a temporary subdir.
6 # We need *stealthmua* regardless of $SOURCE_DATE_EPOCH, the program name as
7 # such is a compile-time variable
8 ARGS
='-:/ -# -Sdotlock-ignore-error -Sexpandaddr=restrict'
9 ARGS
="${ARGS}"' -Smime-encoding=quoted-printable -Snosave -Sstealthmua'
10 ADDARG_UNI
=-Sttycharset=UTF-8
15 #UTF8_LOCALE= autodetected unless set
17 # Note valgrind has problems with FDs in forked childs, which causes some tests
18 # to fail (the FD is rewound and thus will be dumped twice)
20 #MEMTESTER='valgrind --leak-check=full --log-file=.vl-%p '
22 if ( command -v command ) >/dev
/null
2>&1; then :; else
29 MAKE
="${MAKE:-`command -v make`}"
30 awk=${awk:-`command -v awk`}
31 cat=${cat:-`command -v cat`}
32 cksum=${cksum:-`command -v cksum`}
33 rm=${rm:-`command -v rm`}
34 sed=${sed:-`command -v sed`}
35 grep=${grep:-`command -v grep`}
37 # Problem: force $SHELL to be a real shell. It seems some testing environments
38 # use nologin(?), but we need a real shell for command execution
39 if { echo ${SHELL} | ${grep} nologin; } >/dev
/null
2>&1; then
40 echo >&2 '$SHELL seems to be nologin, overwriting to /bin/sh!'
45 # We sometimes "fake" sendmail(1) a.k.a. *mta* with a shell wrapper, and it
46 # happens that /bin/sh is often terribly slow
47 if command -v dash
>/dev
/null
2>&1; then
48 MYSHELL
="`command -v dash`"
49 elif command -v mksh
>/dev
/null
2>&1; then
50 MYSHELL
="`command -v mksh`"
57 export ARGS ADDARG_UNI CONF BODY MBOX MAIL MAKE
awk cat cksum rm sed grep
61 # Wed Oct 2 01:50:07 UTC 1996
62 SOURCE_DATE_EPOCH
=844221007
64 export LC_ALL LANG TZ SOURCE_DATE_EPOCH
68 echo >&2 "Usage: ./cc-test.sh [--check-only s-mailx-binary]"
73 if [ "${1}" = --check-only ]; then
76 [ -x "${MAILX}" ] || usage
79 MAILX
="${MEMTESTER}${MAILX}"
82 if [ -n "${CHECK_ONLY}" ] && [ -z "${UTF8_LOCALE}" ]; then
83 # Try ourselfs for nl_langinfo(CODESET) output first (requires a new version)
84 i
=`LC_ALL=C.utf8 "${RAWMAILX}" ${ARGS} -X '
86 \if [ "${ttycharset}" @i=% utf ]
93 \eval xcall cset_test "${@}"
97 \call cset_test C.UTF-8 POSIX.utf8 POSIX.UTF-8 en_EN.utf8 en_EN.UTF-8 \
98 en_US.utf8 en_US.UTF-8
100 [ $?
-eq 0 ] && UTF8_LOCALE
=$i
102 if [ -z "${UTF8_LOCALE}" ] && command -v locale
>/dev
/null
2>&1; then
103 UTF8_LOCALE
=`locale -a | { m=
105 if { echo ${n} | ${grep} -i 'utf-\{0,1\}8'; } >/dev/null 2>&1; then
107 if { echo ${n} | ${grep} -e POSIX -e en_EN -e en_US; }; then
121 trap "${rm} -rf \"${BODY}\" \"${MBOX}\" \${TRAP_EXIT_ADDONS}" EXIT
122 trap "exit 1" HUP INT TERM
125 # Test all configs TODO doesn't cover all *combinations*, stupid!
129 NOTME["OPT_AUTOCC"] = 1
130 NOTME["OPT_DEBUG"] = 1
131 NOTME["OPT_DEVEL"] = 1
132 NOTME["OPT_NOEXTMD5"] = 1
133 NOTME["OPT_ASAN_ADDRESS"] = 1
134 NOTME["OPT_ASAN_MEMORY"] = 1
135 NOTME["OPT_FORCED_STACKPROT"] = 1
136 NOTME["OPT_NOMEMDBG"] = 1
137 NOTME["OPT_NYD2"] = 1
140 /^[[:space:]]*OPT_/ {
141 sub(/^[[:space:]]*/, "")
142 # This bails for UnixWare 7.1.4 awk(1), but preceeding = with \
143 # does not seem to be a compliant escape for =
145 $1 = substr($1, 1, index($1, "=") - 1)
151 # Doing this completely sequentially and not doing make distclean in
152 # between runs should effectively result in lesser compilations.
153 # It is completely dumb nonetheless... TODO
154 for (j = 1; j < i; ++j) {
155 for (k = 1; k < j; ++k)
157 for (k = j; k < i; ++k)
159 printf "OPT_AUTOCC=1\n"
161 for (j = 1; j < i; ++j) {
162 for (k = 1; k < j; ++k)
164 for (k = j; k < i; ++k)
166 printf "OPT_AUTOCC=1\n"
169 for (j = 1; j < i; ++j) {
170 for (k = 1; k < j; ++k)
172 for (k = j; k < i; ++k)
174 printf "OPT_AUTOCC=1\n"
175 printf "OPT_DEBUG=1\n"
177 for (j = 1; j < i; ++j) {
178 for (k = 1; k < j; ++k)
180 for (k = j; k < i; ++k)
182 printf "OPT_AUTOCC=1\n"
183 printf "OPT_DEBUG=1\n"
186 printf "CONFIG=NULL OPT_AUTOCC=0\n"
187 printf "CONFIG=NULL OPT_AUTOCC=1\n"
188 printf "CONFIG=NULLI OPT_AUTOCC=0\n"
189 printf "CONFIG=NULLI OPT_AUTOCC=1\n"
190 printf "CONFIG=MINIMAL OPT_AUTOCC=0\n"
191 printf "CONFIG=MINIMAL OPT_AUTOCC=1\n"
192 printf "CONFIG=MEDIUM OPT_AUTOCC=0\n"
193 printf "CONFIG=MEDIUM OPT_AUTOCC=1\n"
194 printf "CONFIG=NETSEND OPT_AUTOCC=0\n"
195 printf "CONFIG=NETSEND OPT_AUTOCC=1\n"
196 printf "CONFIG=MAXIMAL OPT_AUTOCC=0\n"
197 printf "CONFIG=MAXIMAL OPT_AUTOCC=1\n"
198 printf "CONFIG=DEVEL OPT_AUTOCC=0\n"
199 printf "CONFIG=DEVEL OPT_AUTOCC=1\n"
200 printf "CONFIG=ODEVEL OPT_AUTOCC=0\n"
201 printf "CONFIG=ODEVEL OPT_AUTOCC=1\n"
204 printf "\n\n##########\n$c\n"
205 printf "\n\n##########\n$c\n" >&2
206 sh
-c "${MAKE} ${c} all test"
212 ( "${RAWMAILX}" ${ARGS} -X'echo $features' -Xx |
213 ${grep} +${1} ) >/dev
/null
2>&1
217 ${rm} -rf "${BODY}" "${MBOX}" ${TRAP_EXIT_ADDONS}
225 restat
=${?} tid=${1} eestat=${2} f=${3} s=${4}
226 #x=`echo ${tid} | tr "/:=" "__-"`
227 #cp -f "${f}" "${TMPDIR}/${x}"
228 [ "${eestat}" != - ] && [ "${restat}" != "${eestat}" ] &&
229 err
"${tid}" 'unexpected exit status: '"${restat} != ${eestat}"
230 csum
="`${cksum} < ${f}`"
231 if [ "${csum}" = "${s}" ]; then
232 printf '%s: ok\n' "${tid}"
235 printf '%s: error: checksum mismatch (got %s)\n' "${tid}" "${csum}"
241 printf '%s: error: %s\n' ${1} "${2}"
245 [ $?
-ne 0 ] && err
$1 'unexpected non-0 exit status'
249 [ $?
-eq 0 ] && err
$1 'unexpected 0 exit status'
252 if ( [ "$((1 + 1))" = 2 ] ) >/dev
/null
2>&1; then
254 echo "$((${1} + ${2}))"
256 elif command -v expr >/dev
/null
2>&1; then
258 echo `expr ${1} + ${2}`
262 echo `${awk} 'BEGIN{print '${1}' + '${2}'}'`
266 if ( [ "$((2 % 3))" = 2 ] ) >/dev
/null
2>&1; then
268 echo "$((${1} % ${2}))"
270 elif command -v expr >/dev
/null
2>&1; then
272 echo `expr ${1} % ${2}`
276 echo `${awk} 'BEGIN{print '${1}' % '${2}'}'`
281 # Basic (easily testable) behaviour tests
283 t_behave_X_opt_input_command_stack
286 t_behave_input_inject_semicolon_seq
287 t_behave_commandalias
290 t_behave_macro_param_shift
302 # FIXME t_behave_mlist
305 t_behave_record_a_resend
308 t_behave_compose_hooks
309 t_behave_message_injections
310 t_behave_mime_types_load_control
315 t_behave_mass_recipients
316 t_behave_lreply_futh_rth_etc
317 t_behave_iconv_mbyte_base64
320 t_behave_X_opt_input_command_stack
() {
323 ${cat} <<- '__EOT' > "${BODY}"
331 echo "define mac1 {";\
332 echo " echo mac1-1 via1 \$0";\
334 echo " echo mac1-2";\
336 echo " echo mac1-3";\
339 echo "define mac2 {";\
340 echo " echo mac2-1 via1 \$0";\
342 echo " echo mac2-2";\
348 echo echo 1-1-1 via1 \$0;\
360 # The -X option supports multiline arguments, and those can internally use
361 # reverse solidus newline escaping. And all -X options are joined...
363 < "${BODY}" ${MAILX} ${ARGS} \
378 echo "define mac1 {";\
379 echo " echo mac1-1 via2 \$0";\
381 echo " echo mac1-2";\
383 echo " echo mac1-3";\
386 echo "define mac2 {";\
387 echo " echo mac2-1 via2 \$0";\
389 echo " echo mac2-2";\
395 echo echo 1-1-1 via2 \$0;\
409 check behave:x_opt_input_command_stack 0 "${MBOX}" '1786542668 416'
414 t_behave_X_errexit() {
417 ${cat} <<- '__EOT' > "${BODY}"
423 </dev/null ${MAILX} ${ARGS} -Snomemdebug \
424 -X'echo one' -X' echos nono ' -X'echo two' \
426 check behave:x_errexit-1 0 "${MBOX}" '916157812 53'
428 </dev/null ${MAILX} ${ARGS} -X'source '"${BODY}" -Snomemdebug \
430 check behave:x_errexit-2 0 "${MBOX}" '916157812 53'
432 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Snomemdebug \
434 check behave
:x_errexit-3
0 "${MBOX}" '916157812 53'
438 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
439 -X'echo one' -X' echos nono ' -X'echo two' \
441 check behave
:x_errexit-4
1 "${MBOX}" '2118430867 49'
443 </dev
/null
${MAILX} ${ARGS} -X'source '"${BODY}" -Serrexit -Snomemdebug \
445 check behave:x_errexit-5 1 "${MBOX}" '2118430867 49'
447 </dev/null MAILRC="${BODY}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
449 check behave
:x_errexit-6
1 "${MBOX}" '12955965 172'
451 </dev
/null MAILRC
="${BODY}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
453 check behave:x_errexit-7 1 "${MBOX}" '12955965 172'
455 ## Repeat 4-7 with ignerr set
457 ${sed} -e 's/^echos /ignerr echos /' < "${BODY}" > "${MBOX}"
459 </dev
/null
${MAILX} ${ARGS} -Serrexit -Snomemdebug \
460 -X'echo one' -X'ignerr echos nono ' -X'echo two' \
462 check behave
:x_errexit-8
0 "${BODY}" '916157812 53'
464 </dev
/null
${MAILX} ${ARGS} -X'source '"${MBOX}" -Serrexit -Snomemdebug \
466 check behave:x_errexit-9 0 "${BODY}" '916157812 53'
468 </dev/null MAILRC="${MBOX}" ${MAILX} ${ARGS} -:u
-Serrexit -Snomemdebug \
470 check behave
:x_errexit-10
0 "${BODY}" '916157812 53'
472 </dev
/null MAILRC
="${MBOX}" ${MAILX} ${ARGS} -:u -Sposix -Snomemdebug \
474 check behave:x_errexit-11 0 "${BODY}" '916157812 53'
482 ${cat} <<- '__EOT' > "${BODY}"
501 echo 'a${DIET}b${TIED}c\${DIET}d\${TIED}e' # COMMENT
502 echo "a${DIET}b${TIED}c\${DIET}d\${TIED}e"
503 echo $
'a${DIET}b${TIED}c\${DIET}d\${TIED}e'
505 echo a$
'\101\0101\x41\u0041\u41\U00000041\U41'c
506 echo a$
'\u0041\u41\u0C1\U00000041\U41'c
529 echo a$
'b\U0000000'dt
530 echo a$
'b\U00000000'du
540 if [ -z "${UTF8_LOCALE}" ]; then
541 echo 'Skip behave:wysh_unicode, no UTF8_LOCALE'
543 < "${BODY}" DIET
=CURD TIED
= \
544 LC_ALL
=${UTF8_LOCALE} ${MAILX} ${ARGS} 2>/dev/null > "${MBOX}"
545 check behave:wysh_unicode 0 "${MBOX}" '475805847 317'
548 < "${BODY}" DIET=CURD TIED= ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
549 check behave:wysh_c 0 "${MBOX}" '1473887148 321'
554 t_behave_input_inject_semicolon_seq() {
557 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
562 echon this_is_mymac
;call mydeepmac
;echon
';';
564 echon one
';';call mymac
;echon two
";";call mymac
;echo three$
';';
566 echon this_is_mymac
;call mydeepmac
;echon
,TOO
'!;';
568 echon one
';';call mymac
;echon two
";";call mymac
;echo three$
';';
571 check behave
:input_inject_semicolon_seq
0 "${MBOX}" '512117110 140'
576 t_behave_commandalias
() {
579 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
580 commandalias echo echo hoho
584 commandalias XxX XxXx
585 commandalias XxXx XxXxX
586 commandalias XxXxX XxXxXx
587 commandalias XxXxXx echo huhu
588 commandalias XxXxXxX echo huhu
590 commandalias XxXxXx XxXxXxX
593 commandalias XxXxXx echo huhu
597 check behave:commandalias 0 "${MBOX}" '3694143612 31'
605 # Nestable conditions test
606 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
628 if $dietcurd == 'yoho'
633 if $dietcurd @
== 'Yoho'
638 if $dietcurd == 'Yoho'
643 if $dietcurd != 'yoho'
648 if $dietcurd @
!= 'Yoho'
653 if $dietcurd != 'Yoho'
714 if $dietcurd == 'yohu'
716 elif $dietcurd == 'yoha'
718 elif $dietcurd == 'yohe'
720 elif $dietcurd == 'yoho'
722 if $dietcurd == 'yohu'
724 elif $dietcurd == 'yoha'
726 elif $dietcurd == 'yohe'
728 elif $dietcurd == 'yoho'
730 if $dietcurd == 'yohu'
732 elif $dietcurd == 'yoha'
734 elif $dietcurd == 'yohe'
736 elif $dietcurd == 'yoho'
885 set diet
=abc curd
=abc
891 set diet
=abc curd
=abcd
897 # 1. Shitty grouping capabilities as of today
898 unset diet curd ndefined
899 if [ [ false
] ||
[ false
] ||
[ true
] ] && [ [ false
] ||
[ true
] ] && \
905 if [ [ [ [ 0 ] ||
[ 1 ] ] && [ [ 1 ] ||
[ 0 ] ] ] && [ 1 ] ] && [ yes ]
910 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ]
915 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ [ 1 ] ] ]
920 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ [ 1 ] ] ||
[ 1 ] ] && [ no
]
925 if [ [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ [ 1 ] ] ||
[ 1 ] ] \
931 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
936 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 0 ] ]
941 if [ [ [ [ [ [ [ 1 ] ] && [ 1 ] ] && [ 0 ] ] && [ 1 ] ] ] && [ 1 ] ]
946 if [ [ [ [ [ [ [ 0 ] ] && [ 1 ] ] && [ 1 ] ] && [ 1 ] ] ] && [ 1 ] ]
951 if [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] && [ 0 ]
956 if [ 1 ] ||
[ 0 ] ||
[ 0 ] ||
[ 0 ] && [ 1 ]
961 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 0 ]
966 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 1 ]
971 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 0 ] ||
[ 1 ] && [ 0 ]
976 if [ 0 ] ||
[ 0 ] ||
[ 0 ] ||
[ 1 ] && [ 0 ] ||
[ 1 ] && [ 1 ]
982 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
988 if [ [ $diet == 'yo' ] && [ $curd == 'ho' ] ] && [ $ndefined ]
993 # 2. Shitty grouping capabilities as of today
994 unset diet curd ndefined
995 if [ false || false || true
] && [ false || true
] && yes
1000 if [ [ [ 0 ||
1 ] && [ 1 ||
0 ] ] && 1 ] && [ yes ]
1005 if [ 1 ||
0 ||
0 ||
0 ]
1010 if [ 1 ||
0 ||
0 ||
0 ||
[ 1 ] ]
1015 if [ 1 ||
0 ||
0 ||
0 ||
[ 1 ] ||
1 ] && no
1020 if [ 1 ||
0 ||
0 ||
0 ||
1 ||
[ 1 ] ] && no ||
[ yes ]
1025 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && 1 ] ] && [ 1 ] ]
1030 if [ [ [ [ [ [ 1 ] && 1 ] && 1 ] && [ 1 ] ] ] && 0 ]
1035 if [ [ [ [ [ [ [ 1 ] ] && 1 ] && 0 ] && [ 1 ] ] ] && 1 ]
1040 if [ [ [ [ [ [ 0 ] && 1 ] && 1 ] && 1 ] ] && 1 ]
1045 if 1 ||
0 ||
0 ||
0 && 0
1050 if 1 ||
0 ||
0 ||
0 && 1
1055 if 0 ||
0 ||
0 ||
1 && 0
1060 if 0 ||
0 ||
0 ||
1 && 1
1065 if 0 ||
0 ||
0 ||
1 && 0 ||
1 && 0
1070 if 0 ||
0 ||
0 ||
1 && 0 ||
1 && 1
1076 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1081 if $diet == 'yo' && $curd == 'ho' && $ndefined
1087 if [ $diet == 'yo' && $curd == 'ho' ] && $ndefined
1092 if $diet == 'yo' && $curd == 'ho' && $ndefined
1097 if [ [ [ [ [ [ $diet == 'yo' && $curd == 'ho' && $ndefined ] ] ] ] ] ]
1102 # Some more en-braced variables
1104 if ${diet} == ${curd}
1109 if ${diet} != ${curd}
1125 if ! 0 && ! ! 1 && ! ! ! ! 2 && 3
1130 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ ! 2 ] ] ] && 3
1135 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1140 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1145 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ [ ! [ ! [ ! [ 2 ] ] ] ] ] && ! 3
1150 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1155 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] && 3
1160 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ 2 ] ] ] ] ] ||
3
1165 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! ! [ 2 ] ] ] ] ]
1171 if ! 0 && ! ! 1 && ! ! ! 0 && 3
1176 if ! 0 && ! [ ! 1 ] && ! [ ! [ ! [ 0 ] ] ] && 3
1181 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ [ 0 ] ] ] ] ] && 3
1186 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! ! [ ! [ ! 0 ] ] ] ] && ! 3
1191 if [ ! 0 ] && [ ! [ ! 1 ] ] && ! [ ! [ ! [ ! [ ! 0 ] ] ] ] && 3
1196 if [ ! 0 ] && ! [ ! [ ! 1 ] ] && [ ! ! [ ! [ ! [ ! [ 0 ] ] ] ] ] && 3
1201 if ! [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! ! 0 ] ] ] ] && 3
1206 if [ ! 0 ] && [ ! [ ! 1 ] ] && [ ! [ ! [ ! [ ! [ ! 0 ] ] ] ] ] ||
3
1211 if [ ! 0 ] && [ ! ! [ ! ! 1 ] ] && [ ! ! [ ! ! [ ! ! [ ! [ 0 ] ] ] ] ]
1218 check behave
:if-normal
0 "${MBOX}" '1688759742 719'
1220 if have_feat regex
; then
1221 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
1223 if $dietcurd =~ '^yo.*'
1228 if $dietcurd =~ '^Yo.*'
1233 if $dietcurd @=~ '^Yo.*'
1238 if $dietcurd =~ '^yOho.+'
1243 if $dietcurd @!~ '.*Ho$'
1248 if $dietcurd !~ '.+yohO$'
1253 if [ $dietcurd @i!~ '.+yoho$' ]
1258 if ! [ $dietcurd @i=~ '.+yoho$' ]
1263 if ! ! [ $dietcurd @i!~ '.+yoho$' ]
1268 if ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ]
1273 if [ ! [ ! [ $dietcurd @i!~ '.+yoho$' ] ] ]
1278 if ! [ ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1283 if ! ! ! $dietcurd !~ '.+yoho$'
1288 if ! ! ! $dietcurd =~ '.+yoho$'
1293 if ! [ ! ! [ ! [ $dietcurd !~ '.+yoho$' ] ] ]
1298 set diet=abc curd='^abc$'
1304 set diet=abc curd='^abcd$'
1312 check behave:if-regex 0 "${MBOX}" '1115671789 95'
1314 printf 'behave:if-regex: unsupported, skipped\n'
1320 t_behave_localopts() {
1323 # Nestable conditions test
1324 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1339 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1344 echo $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2
1345 echo "$gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t2"
1354 echo active trouble
: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1356 echo active null
: $gv1 $lv1 ${lv2} ${lv3} ${gv2}, $t3
1365 wysh
set y
=$1; shift; eval localopts
$y; localopts
$1; shift
1372 wysh
set y
=$1; shift; eval localopts
$y; localopts
$1; shift
1379 echo ----- $1: $2 -> $3 -> $4
1387 call llx
'call off' on on on
1388 call llx
'call off' off on on
1389 call llx
'call off' on off on
1390 call llx
'call off' on off off
1391 localopts call-fixate on
1392 call llx
'call-fixate on' on on on
1393 call llx
'call-fixate on' off on on
1394 call llx
'call-fixate on' on off on
1395 call llx
'call-fixate on' on off off
1396 unset x
;localopts call on
1397 call llx
'call on' on on on
1398 call llx
'call on' off on on
1399 call llx
'call on' on off on
1400 call llx
'call on' on off off
1405 check behave
:localopts
0 "${MBOX}" '4016155249 1246'
1410 t_behave_macro_param_shift
() {
1413 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev/null
1416 echo t2.0 has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1421 echo t2.1 has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1422 if [ $# > 1 ] || [ $ignerr == '' ]
1427 echo t2.2:$? has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1429 echo t2.3:$? has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1433 echo t2.4:$? has $#/${#} parameters: "$1,${2},$3" (${*}) [$@]
1438 call t2 1 you get four args
1439 echo t1.1: $?';' ignerr ($ignerr) should not exist
1440 call t2 1 you get 'three args'
1441 echo t1.2: $?';' ignerr ($ignerr) should not exist
1442 call t2 1 you 'get two args'
1443 echo t1.3: $?';' ignerr ($ignerr) should not exist
1444 call t2 1 'you get one arg'
1445 echo t1.4: $?';' ignerr ($ignerr) should not exist
1446 ignerr call t2 '' 'you get one arg'
1447 echo t1.5: $?';' ignerr ($ignerr) should not exist
1452 check behave:macro_param_shift 0 "${MBOX}" '1402489146 1682'
1457 t_behave_addrcodec() {
1460 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}"
1461 vput addrcodec res e
1 <doog@def
>
1462 echo $?
/$^ERRNAME
$res
1463 eval vput addrcodec res d
$res
1464 echo $?
/$^ERRNAME
$res
1465 vput addrcodec res e
2 .
<doog@def
>
1466 echo $?
/$^ERRNAME
$res
1467 eval vput addrcodec res d
$res
1468 echo $?
/$^ERRNAME
$res
1469 vput addrcodec res e
3 Sauer Dr.
<doog@def
>
1470 echo $?
/$^ERRNAME
$res
1471 eval vput addrcodec res d
$res
1472 echo $?
/$^ERRNAME
$res
1473 vput addrcodec res e
3.50 Sauer
(Ma
) Dr.
<doog@def
>
1474 echo $?
/$^ERRNAME
$res
1475 eval vput addrcodec res d
$res
1476 echo $?
/$^ERRNAME
$res
1477 vput addrcodec res e
3.51 Sauer
(Ma
) "Dr." <doog@def
>
1478 echo $?
/$^ERRNAME
$res
1479 eval vput addrcodec res d
$res
1480 echo $?
/$^ERRNAME
$res
1482 vput addrcodec res
+e
4 Sauer
(Ma
) Dr.
<doog@def
>
1483 echo $?
/$^ERRNAME
$res
1484 eval vput addrcodec res d
$res
1485 echo $?
/$^ERRNAME
$res
1486 vput addrcodec res
+e
5 Sauer
(Ma
) Braten Dr.
<doog@def
>
1487 echo $?
/$^ERRNAME
$res
1488 eval vput addrcodec res d
$res
1489 echo $?
/$^ERRNAME
$res
1490 vput addrcodec res
+e
6 Sauer
(Ma
) Braten Dr.
(Heu
) <doog@def
>
1491 echo $?
/$^ERRNAME
$res
1492 eval vput addrcodec res d
$res
1493 echo $?
/$^ERRNAME
$res
1494 vput addrcodec res
+e
7 Sauer
(Ma
) Braten Dr.
(Heu
) <doog@def
> (bu
)
1495 echo $?
/$^ERRNAME
$res
1496 eval vput addrcodec res d
$res
1497 echo $?
/$^ERRNAME
$res
1498 vput addrcodec res
+e
8 \
1499 Dr. Sauer
(Ma
) Braten Dr.
(Heu
) <doog@def
> (bu
) Boom. Boom
1500 echo $?
/$^ERRNAME
$res
1501 eval vput addrcodec res d
$res
1502 echo $?
/$^ERRNAME
$res
1503 vput addrcodec res
+e
9 Dr.Sauer
(Ma
)Braten Dr.
(Heu
) <doog@def
>
1504 echo $?
/$^ERRNAME
$res
1505 eval vput addrcodec res d
$res
1506 echo $?
/$^ERRNAME
$res
1507 vput addrcodec res
+e
10 (Ma
)Braten Dr.
(Heu
) <doog@def
>
1508 echo $?
/$^ERRNAME
$res
1509 eval vput addrcodec res d
$res
1510 echo $?
/$^ERRNAME
$res
1511 vput addrcodec res
+e
11 (Ma
)Braten Dr
"." (Heu
) <doog@def
>
1512 echo $?
/$^ERRNAME
$res
1513 eval vput addrcodec res d
$res
1514 echo $?
/$^ERRNAME
$res
1515 vput addrcodec res
+e
12 Dr. Sauer
(Ma
) Braten Dr.
(u
) <doog@def
>
1516 echo $?
/$^ERRNAME
$res
1517 eval vput addrcodec res d
$res
1518 echo $?
/$^ERRNAME
$res
1519 vput addrcodec res
+e
13(Ma
)Braten Dr.
(Heu
) <doog@def
>
1520 echo $?
/$^ERRNAME
$res
1521 eval vput addrcodec res d
$res
1522 echo $?
/$^ERRNAME
$res
1523 vput addrcodec res
+e
14 Hey
, Du
<doog@def
> Wie
() findet Dr. das?
()
1524 echo $?
/$^ERRNAME
$res
1525 eval vput addrcodec res d
$res
1526 echo $?
/$^ERRNAME
$res
1527 vput addrcodec res
+e
15 \
1528 Hey
, Du
<doog@def
> Wie
() findet
"" Dr.
"" das?
()
1529 echo $?
/$^ERRNAME
$res
1530 eval vput addrcodec res d
$res
1531 echo $?
/$^ERRNAME
$res
1532 vput addrcodec res
+e
16 \
1533 "Hey," "Du" <doog@def
> "Wie()" findet
"" Dr.
"" das?
()
1534 echo $?
/$^ERRNAME
$res
1535 eval vput addrcodec res d
$res
1536 echo $?
/$^ERRNAME
$res
1537 vput addrcodec res
+e
17 \
1538 "Hey" Du
<doog@def
> "Wie() findet " " Dr. """ das?
()
1539 echo $?
/$^ERRNAME
$res
1540 eval vput addrcodec res d
$res
1541 echo $?
/$^ERRNAME
$res
1542 vput addrcodec res
+e
18 \
1543 <doog@def
> "Hey" Du
"Wie() findet " " Dr. """ das?
()
1544 echo $?
/$^ERRNAME
$res
1545 eval vput addrcodec res d
$res
1546 echo $?
/$^ERRNAME
$res
1547 vput addrcodec res
+e
19 Hey\
,\" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1548 echo $?
/$^ERRNAME
$res
1549 eval vput addrcodec res d
$res
1550 echo $?
/$^ERRNAME
$res
1552 vput addrcodec res
++e
20 Hey\
,\" <doog@def
> "Wie()" findet
\" Dr.
\" das?
1553 echo $?
/$^ERRNAME
$res
1554 vput addrcodec res
++e
21 Hey\
,\"" <doog@def> "Wie
()" findet \" Dr. \" das?
1555 echo $?/$^ERRNAME $res
1556 eval vput addrcodec res d $res
1557 echo $?/$^ERRNAME $res
1559 vput addrcodec res +++e 22 Hey\\,\" <doog@def> "Wie
()" findet \" Dr. \" das?
1560 echo $?/$^ERRNAME $res
1561 eval vput addrcodec res d $res
1562 echo $?/$^ERRNAME $res
1564 vput addrcodec res s \
1565 "23 Hey
\\,\\\" \"Wie
" () "\" findet
\\\" Dr.
\\\" das?
" <doog@def>
1566 echo $?/$^ERRNAME $res
1569 check behave:addrcodec 0 "${MBOX}" '429099645 2414'
1577 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>/dev
/null
1578 vput vexpr res
= 9223372036854775807
1579 echo $?
/$^ERRNAME
$res
1580 vput vexpr res
= 9223372036854775808
1581 echo $?
/$^ERRNAME
$res
1582 vput vexpr res
=@
9223372036854775808
1583 echo $?
/$^ERRNAME
$res
1584 vput vexpr res
= -9223372036854775808
1585 echo $?
/$^ERRNAME
$res
1586 vput vexpr res
= -9223372036854775809
1587 echo $?
/$^ERRNAME
$res
1588 vput vexpr res
=@
-9223372036854775809
1589 echo $?
/$^ERRNAME
$res
1592 echo $?
/$^ERRNAME
$res
1594 echo $?
/$^ERRNAME
$res
1596 echo $?
/$^ERRNAME
$res
1598 vput vexpr res
+ 0 0
1599 echo $?
/$^ERRNAME
$res
1600 vput vexpr res
+ 0 1
1601 echo $?
/$^ERRNAME
$res
1602 vput vexpr res
+ 1 1
1603 echo $?
/$^ERRNAME
$res
1605 vput vexpr res
+ 9223372036854775807 0
1606 echo $?
/$^ERRNAME
$res
1607 vput vexpr res
+ 9223372036854775807 1
1608 echo $?
/$^ERRNAME
$res
1609 vput vexpr res
+@
9223372036854775807 1
1610 echo $?
/$^ERRNAME
$res
1611 vput vexpr res
+ 0 9223372036854775807
1612 echo $?
/$^ERRNAME
$res
1613 vput vexpr res
+ 1 9223372036854775807
1614 echo $?
/$^ERRNAME
$res
1615 vput vexpr res
+@
1 9223372036854775807
1616 echo $?
/$^ERRNAME
$res
1618 vput vexpr res
+ -9223372036854775808 0
1619 echo $?
/$^ERRNAME
$res
1620 vput vexpr res
+ -9223372036854775808 -1
1621 echo $?
/$^ERRNAME
$res
1622 vput vexpr res
+@
-9223372036854775808 -1
1623 echo $?
/$^ERRNAME
$res
1624 vput vexpr res
+ 0 -9223372036854775808
1625 echo $?
/$^ERRNAME
$res
1626 vput vexpr res
+ -1 -9223372036854775808
1627 echo $?
/$^ERRNAME
$res
1628 vput vexpr res
+@
-1 -9223372036854775808
1629 echo $?
/$^ERRNAME
$res
1631 vput vexpr res
- 0 0
1632 echo $?
/$^ERRNAME
$res
1633 vput vexpr res
- 0 1
1634 echo $?
/$^ERRNAME
$res
1635 vput vexpr res
- 1 1
1636 echo $?
/$^ERRNAME
$res
1638 vput vexpr res
- 9223372036854775807 0
1639 echo $?
/$^ERRNAME
$res
1640 vput vexpr res
- 9223372036854775807 -1
1641 echo $?
/$^ERRNAME
$res
1642 vput vexpr res
-@
9223372036854775807 -1
1643 echo $?
/$^ERRNAME
$res
1644 vput vexpr res
- 0 9223372036854775807
1645 echo $?
/$^ERRNAME
$res
1646 vput vexpr res
- -1 9223372036854775807
1647 echo $?
/$^ERRNAME
$res
1648 vput vexpr res
- -2 9223372036854775807
1649 echo $?
/$^ERRNAME
$res
1650 vput vexpr res
-@
-2 9223372036854775807
1651 echo $?
/$^ERRNAME
$res
1653 vput vexpr res
- -9223372036854775808 +0
1654 echo $?
/$^ERRNAME
$res
1655 vput vexpr res
- -9223372036854775808 +1
1656 echo $?
/$^ERRNAME
$res
1657 vput vexpr res
-@
-9223372036854775808 +1
1658 echo $?
/$^ERRNAME
$res
1659 vput vexpr res
- 0 -9223372036854775808
1660 echo $?
/$^ERRNAME
$res
1661 vput vexpr res
- +1 -9223372036854775808
1662 echo $?
/$^ERRNAME
$res
1663 vput vexpr res
-@
+1 -9223372036854775808
1664 echo $?
/$^ERRNAME
$res
1666 vput vexpr res
+ -13 -2
1667 echo $?
/$^ERRNAME
$res
1668 vput vexpr res
- 0 0
1669 echo $?
/$^ERRNAME
$res
1670 vput vexpr res
- 0 1
1671 echo $?
/$^ERRNAME
$res
1672 vput vexpr res
- 1 1
1673 echo $?
/$^ERRNAME
$res
1674 vput vexpr res
- -13 -2
1675 echo $?
/$^ERRNAME
$res
1677 vput vexpr res
* 0 0
1678 echo $?
/$^ERRNAME
$res
1679 vput vexpr res
* 0 1
1680 echo $?
/$^ERRNAME
$res
1681 vput vexpr res
* 1 1
1682 echo $?
/$^ERRNAME
$res
1683 vput vexpr res
* -13 -2
1684 echo $?
/$^ERRNAME
$res
1686 vput vexpr res
/ 0 0
1687 echo $?
/$^ERRNAME
$res
1688 vput vexpr res
/ 0 1
1689 echo $?
/$^ERRNAME
$res
1690 vput vexpr res
/ 1 1
1691 echo $?
/$^ERRNAME
$res
1692 vput vexpr res
/ -13 -2
1693 echo $?
/$^ERRNAME
$res
1695 vput vexpr res
% 0 0
1696 echo $?
/$^ERRNAME
$res
1697 vput vexpr res
% 0 1
1698 echo $?
/$^ERRNAME
$res
1699 vput vexpr res
% 1 1
1700 echo $?
/$^ERRNAME
$res
1701 vput vexpr res
% -13 -2
1702 echo $?
/$^ERRNAME
$res
1705 check behave
:vexpr-numeric
0 "${MBOX}" '1723609217 1048'
1707 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" #2>/dev/null
1708 vput vexpr res find 'bananarama' 'nana'
1709 echo $?/$^ERRNAME :$res:
1710 vput vexpr res find 'bananarama' 'bana'
1711 echo $?/$^ERRNAME :$res:
1712 vput vexpr res find 'bananarama' 'Bana'
1713 echo $?/$^ERRNAME :$res:
1714 vput vexpr res find 'bananarama' 'rama'
1715 echo $?/$^ERRNAME :$res:
1717 vput vexpr res ifind 'bananarama' 'nana'
1718 echo $?/$^ERRNAME :$res:
1719 vput vexpr res ifind 'bananarama' 'bana'
1720 echo $?/$^ERRNAME :$res:
1721 vput vexpr res ifind 'bananarama' 'Bana'
1722 echo $?/$^ERRNAME :$res:
1723 vput vexpr res ifind 'bananarama' 'rama'
1724 echo $?/$^ERRNAME :$res:
1726 vput vexpr res substring 'bananarama' 1
1727 echo $?/$^ERRNAME :$res:
1728 vput vexpr res substring 'bananarama' 3
1729 echo $?/$^ERRNAME :$res:
1730 vput vexpr res substring 'bananarama' 5
1731 echo $?/$^ERRNAME :$res:
1732 vput vexpr res substring 'bananarama' 7
1733 echo $?/$^ERRNAME :$res:
1734 vput vexpr res substring 'bananarama' 9
1735 echo $?/$^ERRNAME :$res:
1736 vput vexpr res substring 'bananarama' 10
1737 echo $?/$^ERRNAME :$res:
1738 vput vexpr res substring 'bananarama' 1 3
1739 echo $?/$^ERRNAME :$res:
1740 vput vexpr res substring 'bananarama' 3 3
1741 echo $?/$^ERRNAME :$res:
1742 vput vexpr res substring 'bananarama' 5 3
1743 echo $?/$^ERRNAME :$res:
1744 vput vexpr res substring 'bananarama' 7 3
1745 echo $?/$^ERRNAME :$res:
1746 vput vexpr res substring 'bananarama' 9 3
1747 echo $?/$^ERRNAME :$res:
1748 vput vexpr res substring 'bananarama' 10 3
1749 echo $?/$^ERRNAME :$res:
1753 check behave:vexpr-string 0 "${MBOX}" '265398700 267'
1755 if have_feat regex; then
1756 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" #2>/dev/null
1757 vput vexpr res regex
'bananarama' 'nana'
1758 echo $?
/$^ERRNAME
:$res:
1759 vput vexpr res regex
'bananarama' 'bana'
1760 echo $?
/$^ERRNAME
:$res:
1761 vput vexpr res regex
'bananarama' 'Bana'
1762 echo $?
/$^ERRNAME
:$res:
1763 vput vexpr res regex
'bananarama' 'rama'
1764 echo $?
/$^ERRNAME
:$res:
1766 vput vexpr res iregex
'bananarama' 'nana'
1767 echo $?
/$^ERRNAME
:$res:
1768 vput vexpr res iregex
'bananarama' 'bana'
1769 echo $?
/$^ERRNAME
:$res:
1770 vput vexpr res iregex
'bananarama' 'Bana'
1771 echo $?
/$^ERRNAME
:$res:
1772 vput vexpr res iregex
'bananarama' 'rama'
1773 echo $?
/$^ERRNAME
:$res:
1775 vput vexpr res regex
'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
1776 echo $?
/$^ERRNAME
:$res:
1777 vput vexpr res regex
'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
1778 echo $?
/$^ERRNAME
:$res:
1779 vput vexpr res regex
'bananarama' 'Bana(.+)' '\$1\$0'
1780 echo $?
/$^ERRNAME
:$res:
1781 vput vexpr res regex
'bananarama' '(.+)rama' '\$1\$0'
1782 echo $?
/$^ERRNAME
:$res:
1784 vput vexpr res iregex
'bananarama' '(.*)nana(.*)' '\${1}a\${0}u{\$2}'
1785 echo $?
/$^ERRNAME
:$res:
1786 vput vexpr res iregex
'bananarama' '(.*)bana(.*)' '\${1}a\${0}u\$2'
1787 echo $?
/$^ERRNAME
:$res:
1788 vput vexpr res iregex
'bananarama' 'Bana(.+)' '\$1\$0'
1789 echo $?
/$^ERRNAME
:$res:
1790 vput vexpr res iregex
'bananarama' '(.+)rama' '\$1\$0'
1791 echo $?
/$^ERRNAME
:$res:
1795 check behave
:vexpr-regex
0 "${MBOX}" '3270360157 311'
1797 printf 'behave:vexpr-regex: unsupported, skipped\n'
1803 t_behave_call_ret
() {
1806 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
1811 vput vexpr j '&' $i 7
1817 vput vexpr j '&' $i 7
1823 echo ! The end for $1
1827 # Transport $?/$! up the call chain
1833 wysh set i=$? j=$! k=$^ERRNAME
1837 echo ! The end for $1
1838 return $i $^ERR-BUSY
1842 # Up and down it goes
1849 vput vexpr k - $1 $2
1853 echo "# <$i/$j> .. "
1857 eval echon
"<\$1=\$i/\$^ERRNAME-$j "
1860 echo ! The end
for $1=$i/$2
1864 return $i $^ERR-BUSY
1870 call w1
0; echo ?
=$?
!=$
!; echo -----;
1871 call w2
0; echo ?
=$?
!=$^ERRNAME
; echo -----;
1872 call w3
0 1; echo ?
=$?
!=$^ERRNAME
; echo -----;
1875 check behave
:call_ret
0 "${MBOX}" '1572045517 5922'
1883 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Snomemdebug > "${MBOX}" 2>&1
1888 vput vexpr j '&' $i 7
1894 echo ! The end for $1/$2
1896 return $i $^ERR-BUSY
1907 echo ?=$? !=$^ERRNAME
1910 echo ?=$? !=$^ERRNAME
1912 echo ?=$? !=$^ERRNAME
1915 check behave:xcall-1 0 "${MBOX}" '2401702082 23801'
1919 ${cat} <<- '__EOT' > "${BODY}"
1924 vput vexpr j '&' $i 7
1930 echo ! The end for $1
1933 echo would be err with errexit
1942 echo zwei, ?=$? !=$!
1943 localopts yes; set errexit
1945 echo drei, ?=$? !=$^ERRNAME
1947 echo vier, ?=$? !=$^ERRNAME, this is an error
1950 echo outer 1, ?=$? !=$^ERRNAME
1952 echo outer 2, ?=$? !=$^ERRNAME, could be error if xxxign non-empty
1954 echo outer 3, ?=$? !=$^ERRNAME
1955 echo this is definitely an error
1958 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign ignerr' -Snomemdebug \
1960 check behave
:xcall-2
0 "${MBOX}" '3900716531 4200'
1962 < "${BODY}" ${MAILX} ${ARGS} -X'commandalias xxxign " "' -Snomemdebug \
1964 check behave:xcall-3 1 "${MBOX}" '1006776201 2799'
1969 t_behave_vpospar() {
1972 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
1973 vpospar
set hey
, "'you ", world
!
1974 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
1975 vput vpospar x quote
; echo x
<$x>
1976 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
1977 vput vpospar y quote
;echo y
<$y>
1978 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
1979 eval vpospar
set ${y};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
1980 eval vpospar
set ${x};echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
1983 echo infun2
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
1984 vput vpospar z quote
;echo infun2
:z
<$z>
1988 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
1989 vput vpospar y quote
;echo infun
:y
<$y>
1990 eval vpospar
set ${x};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
1991 vpospar
clear;echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
1993 echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
1994 eval vpospar
set ${y};echo infun
:$?
/$^ERRNAME
/$#:$
*/"$@"/<$1><$2><$3><$4>
1997 call infun This
"in a" fun
1998 echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
1999 vpospar
clear;echo $?
/$^ERRNAME
/$#: $
* / "$@" / <$1><$2><$3><$4>
2001 check behave
:vpospar-1
0 "${MBOX}" '155175639 866'
2004 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} > "${MBOX}" 2>&1
2006 echo ifs<$ifs> ifs-ws<$ifs-ws>
2007 vpospar set hey, "'you ", world!
2008 echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2009 vput vpospar x quote; echo x<$x>
2010 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2011 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2014 echo ifs<$ifs> ifs-ws<$ifs-ws>
2015 vpospar set hey, "'you
", world!
2016 echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2017 vput vpospar x quote; echo x<$x>
2018 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2019 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@
" / <$1><$2><$3><$4>
2022 echo ifs<$ifs> ifs-ws<$ifs-ws>
2023 vpospar set hey, "'you ", world!
2024 echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2025 vput vpospar x quote; echo x<$x>
2026 vpospar clear;echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2027 eval vpospar set ${x};echo $?/$^ERRNAME/$#: $* / "$@" / <$1><$2><$3><$4>
2029 check behave:vpospar-ifs 0 "${MBOX}" '2015927702 706'
2034 t_behave_atxplode() {
2036 TRAP_EXIT_ADDONS="./.t*"
2038 ${cat} > ./.t.sh <<- '___
'; ${cat} > ./.t.rc <<- '___
'
2041 printf " (1/$#: <$1>)"
2043 if [ $# -gt 0 ]; then
2057 printf yyy;yyy 'xxx' "b\$
'\t'u
' "
2058 printf xxx;xxx arg ,b u.
2059 printf xxx;xxx arg , .
2060 printf xxx;xxx arg ,ball.
2066 echon " (1/$#: <$1>)"
2081 echon yyy;call yyy '\call xxx' "b\$
'\t'u
' "
2082 echon xxx;call xxx arg ,b u.
2083 echon xxx;call xxx arg , .
2084 echon xxx;call xxx arg ,ball.
2087 ${MAILX} ${ARGS} -X'source ./.t.rc' -Xx > "${MBOX}" 2>&1
2088 check behave:atxplode-1 0 "${MBOX}" '41566293 164'
2090 #${SHELL} ./.t.sh > ./.tshout 2>&1
2091 #check behave:atxplode:disproof-1 0 ./.tshout '41566293 164'
2098 TRAP_EXIT_ADDONS="./.t*"
2100 ${cat} <<- '__EOT
' > .tin
2101 hey1, "'you
", world!
2102 hey2, "'you ", bugs bunny!
2107 ${cat} <<- '__EOT
' |\
2108 ${MAILX} ${ARGS} -X'readctl create ./.tin' > "${MBOX}" 2>&1
2110 echo $?/$^ERRNAME / <$a><$b><$c>
2112 echo $?/$^ERRNAME / <$a><$b><$c>
2114 echo $?/$^ERRNAME / <$a><$b><$c>
2116 echo $?/$^ERRNAME / <$a><$b><$c>
2118 echo $?/$^ERRNAME / <$a><$b><$c>
2119 readctl remove ./.tin;echo readctl remove:$?/$^ERRNAME
2121 check behave:read-1 0 "${MBOX}" '1527910147 173'
2123 ${cat} <<- '__EOT
' > .tin2
2124 hey2.0,:"'you
",:world!:mars.:
2125 hey2.1,:"'you ",:world!
2126 hey2.2,:"'you
",:bugs bunny!
2132 ${cat} <<- '__EOT' |\
2133 6< .tin2 ${MAILX} ${ARGS} -X 'readctl create 6' > "${MBOX}" 2>&1
2136 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2138 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2140 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2142 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2144 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2146 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2148 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2150 echo $?
/$^ERRNAME
/ <$a><$b><$c>
2151 readctl remove
6;echo readctl remove
:$?
/$^ERRNAME
2153 check behave
:read-ifs
0 "${MBOX}" '890153490 298'
2160 TRAP_EXIT_ADDONS
="./.t*"
2164 while [ ${i} -lt 112 ]; do
2165 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
2166 "${MBOX}" "${i}" "${i}"
2169 ) |
${MAILX} ${ARGS}
2170 check behave
:mbox-1
0 "${MBOX}" '1140119864 13780'
2176 ' "${MBOX}" .tmbox1 .tmbox1 |
2177 ${MAILX} ${ARGS} > .tlst
2178 check behave
:mbox-2
0 .tlst
'2739893312 9103'
2184 ' "${MBOX}" .tmbox2 .tmbox2 |
2185 ${MAILX} ${ARGS} > .tlst
2186 check behave
:mbox-3
0 .tlst
'1702194178 9110'
2188 # only the odd (even)
2190 printf 'File "file://%s"
2193 while [ ${i} -lt 112 ]; do
2195 [ ${j} -eq 1 ] && printf '%s ' "${i}"
2202 ) |
${MAILX} ${ARGS} > .tlst
2203 check behave
:mbox-4
0 .tmbox3
'631132924 6890'
2204 check behave
:mbox-5
- .tlst
'2960975049 4573'
2207 printf 'file "file://%s"
2210 while [ ${i} -lt 112 ]; do
2212 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
2220 ' .tmbox3 .tmbox3 .tmbox2
2221 ) | ${MAILX} ${ARGS} > .tlst
2222 check behave:mbox-6 0 .tmbox3 '1387070539 13655'
2223 ${sed} 2d < .tlst > .tlstx
2224 check behave:mbox-7 - .tlstx '2729940494 13645'
2229 t_behave_alternates() {
2231 TRAP_EXIT_ADDONS=".
/.t
*"
2233 ${cat} <<-_EOT > ./.tsendmail.sh
2235 (echo 'From Valeriana Sat Jul 08 15:54:03 2017' && ${cat} && echo
2238 chmod 0755 ./.tsendmail.sh
2240 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh > ./.tall 2>&1
2244 alternates a1@b1 a2@b2 a3@b3
2249 echo $?/$^ERRNAME <$rv>
2254 echo $?/$^ERRNAME <$rv>
2257 echo $?/$^ERRNAME <$rv>
2260 echo $?/$^ERRNAME <$rv>
2264 alternates a1@b1 a2@b2 a3@b3
2267 echo $?/$^ERRNAME <$rv>
2270 echo $?/$^ERRNAME <$rv>
2273 echo $?/$^ERRNAME <$rv>
2276 alternates a1@b1 a2@b2 a3@b3
2279 echo $?/$^ERRNAME <$rv>
2282 echo $?/$^ERRNAME <$rv>
2285 echo $?/$^ERRNAME <$rv>
2289 alternates a1@b1 a2@b2 a3@b3
2292 echo $?/$^ERRNAME <$rv>
2296 alternates a1@b1 a1@c1 a1@d1 a2@b2 a3@b3 a3@c3 a3@d3
2298 ~s all alternates, only a1@b1 remains
2300 ~b a3@b3 a3@c3 a3@d3
2309 alternates a1@b1 a1@c1 a2@b2 a3@b3
2311 ~s a1@b1 a1@d1, and a3@c3 a3@d3 remain
2313 ~b a3@b3 a3@c3 a3@d3
2320 alternates a1@b1 a2@b2 a3; set allnet
2322 ~s all alternates via allnet, only a1@b1 remains
2324 ~b a3@b3 a3@c3 a3@d3
2335 echo $?/$^ERRNAME <$rv>
2339 echo $?/$^ERRNAME <$rv>
2343 echo $?/$^ERRNAME <$rv>
2347 echo $?/$^ERRNAME <$rv>
2351 echo $?/$^ERRNAME <$rv>
2355 alternates a1@b1 a2@b2
2358 echo $?/$^ERRNAME <$rv>
2359 alternates a3@b3 a4@b4
2362 echo $?/$^ERRNAME <$rv>
2364 check behave:alternates-1 0 "${MBOX}" '142184864 515'
2365 check behave:alternates-2 - .tall '1878598364 505'
2372 TRAP_EXIT_ADDONS=".
/.t
*"
2374 ${cat} <<-_EOT > ./.tsendmail.sh
2376 (echo 'From Hippocastanum Mon Jun 19 15:07:07 2017' && ${cat} && echo
2379 chmod 0755 ./.tsendmail.sh
2381 ${cat} <<- '__EOT' | ${MAILX} ${ARGS} -Smta=./.tsendmail.sh > ./.tall 2>&1
2383 alias a1 ex2@a1.ple "EX3
<ex3@a1.ple
>"
2385 alias a2 ex1@a2.ple ex2@a2.ple ex3@a2.ple ex4@a2.ple
2387 alias a4 a5 ex1@a4.ple
2389 alias a6 a7 ex1@a6.ple
2403 check behave:alias-1 0 "${MBOX}" '2496925843 272'
2404 check behave:alias-2 - .tall '3548953204 152'
2406 # TODO t_behave_alias: n_ALIAS_MAXEXP is compile-time constant,
2407 # TODO need to somehow provide its contents to the test, then test
2412 t_behave_filetype() {
2414 TRAP_EXIT_ADDONS=".
/.t
*"
2416 ${cat} <<-_EOT > ./.tsendmail.sh
2418 (echo 'From Alchemilla Wed Apr 25 15:12:13 2017' && ${cat} && echo
2421 chmod 0755 ./.tsendmail.sh
2423 printf 'm m1@e.t\nL1\nHy1\n~.\nm m2@e.t\nL2\nHy2\n~@ ./snailmail.jpg\n~.\n' |
2424 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2425 check behave:filetype-1 0 "${MBOX}" '1645747150 13536'
2427 if command -v gzip >/dev/null 2>&1; then
2430 printf 'File "%s
"\ncopy 1 ./.t.mbox.gz
2431 copy 2 ./.t.mbox.gz' "${MBOX}" |
2433 -X'filetype gz gzip\ -dc gzip\ -c'
2434 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2436 -X'filetype gz gzip\ -dc gzip\ -c'
2438 check behave:filetype-2 0 ".
/.t.mbox
" '1645747150 13536'
2440 echo 'behave:filetype-2: unsupported, skipped'
2445 printf 'File "%s
"\ncopy 1 ./.t.mbox.gz
2451 -X'filetype gz gzip\ -dc gzip\ -c' \
2452 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" \
2453 "echo eins
;echo zwei
;echo und mit
${sed} bist Du dabei
;${cat}"'
2454 printf 'File ./.t.mbox.gz\ncopy * ./.t.mbox\n' |
2456 -X'filetype gz gzip\ -dc gzip\ -c' \
2457 -X'filetype mbox.gz "${sed} 1,3d|
${cat}" kill\ 0'
2460 check behave:filetype-3 - ".
/.t.mbox
" '238021003 27092'
2465 t_behave_record_a_resend() {
2467 TRAP_EXIT_ADDONS=".
/.t.record .
/.t.resent
"
2471 m %s\n~s Subject 1.\nHello.\n~.
2472 set record-files add-file-recipients
2473 m %s\n~s Subject 2.\nHello.\n~.
2475 resend 2 ./.t.resent
2476 Resend 1 ./.t.resent
2478 resend 2 ./.t.resent
2479 Resend 1 ./.t.resent
2480 ' ./.t.record "${MBOX}" "${MBOX}" "${MBOX}" |
2483 check behave:record_a_resend-1 0 "${MBOX}" '3057873538 256'
2484 check behave:record_a_resend-2 - .t.record '391356429 460'
2485 check behave:record_a_resend-3 - .t.resent '2685231691 648'
2490 t_behave_e_H_L_opts() {
2492 TRAP_EXIT_ADDONS=".
/.tsendmail.sh .
/.t.mbox
"
2495 ${MAILX} ${ARGS} -ef ./.t.mbox
2496 echo ${?} > "${MBOX}"
2498 ${cat} <<-_EOT > ./.tsendmail.sh
2500 (echo 'From Alchemilla Wed Apr 07 17:03:33 2017' && ${cat} && echo
2503 chmod 0755 ./.tsendmail.sh
2504 printf 'm me@exam.ple\nLine 1.\nHello.\n~.\n' |
2505 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2506 printf 'm you@exam.ple\nLine 1.\nBye.\n~.\n' |
2507 ${MAILX} ${ARGS} -Smta=./.tsendmail.sh
2509 ${MAILX} ${ARGS} -ef ./.t.mbox
2510 echo ${?} >> "${MBOX}"
2511 ${MAILX} ${ARGS} -efL @t@me ./.t.mbox
2512 echo ${?} >> "${MBOX}"
2513 ${MAILX} ${ARGS} -efL @t@you ./.t.mbox
2514 echo ${?} >> "${MBOX}"
2515 ${MAILX} ${ARGS} -efL '@>@Line 1' ./.t.mbox
2516 echo ${?} >> "${MBOX}"
2517 ${MAILX} ${ARGS} -efL '@>@Hello.' ./.t.mbox
2518 echo ${?} >> "${MBOX}"
2519 ${MAILX} ${ARGS} -efL '@>@Bye.' ./.t.mbox
2520 echo ${?} >> "${MBOX}"
2521 ${MAILX} ${ARGS} -efL '@>@Good bye.' ./.t.mbox
2522 echo ${?} >> "${MBOX}"
2524 ${MAILX} ${ARGS} -fH ./.t.mbox >> "${MBOX}"
2525 echo ${?} >> "${MBOX}"
2526 ${MAILX} ${ARGS} -fL @t@me ./.t.mbox >> "${MBOX}"
2527 echo ${?} >> "${MBOX}"
2528 ${MAILX} ${ARGS} -fL @t@you ./.t.mbox >> "${MBOX}"
2529 echo ${?} >> "${MBOX}"
2530 ${MAILX} ${ARGS} -fL '@>@Line 1' ./.t.mbox >> "${MBOX}"
2531 echo ${?} >> "${MBOX}"
2532 ${MAILX} ${ARGS} -fL '@>@Hello.' ./.t.mbox >> "${MBOX}"
2533 echo ${?} >> "${MBOX}"
2534 ${MAILX} ${ARGS} -fL '@>@Bye.' ./.t.mbox >> "${MBOX}"
2535 echo ${?} >> "${MBOX}"
2536 ${MAILX} ${ARGS} -fL '@>@Good bye.' ./.t.mbox >> "${MBOX}" 2>/dev
/null
2537 echo ${?} >> "${MBOX}"
2539 check behave
:e_H_L_opts
- "${MBOX}" '1708955574 678'
2544 t_behave_compose_hooks
() { # TODO monster
2546 TRAP_EXIT_ADDONS
="./.t*"
2548 (echo line one
&&echo line two
&&echo line three
) > .
/.treadctl
2549 (echo echo four
&&echo echo five
&&echo echo six
) > .
/.tattach
2551 ${cat} <<-_EOT > ./.tsendmail.sh
2553 (echo 'From PrimulaVeris Wed Apr 10 22:59:00 2017' && ${cat} && echo
2556 chmod 0755 .
/.tsendmail.sh
2558 ${cat} <<'__EOT__' > ./.trc
2560 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
2563 vput vexpr es substr "$1" 0 1
2568 define read_mline_res {
2569 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
2570 echo $len/$es/$^ERRNAME: $hl
2571 if [ $es -ne $^ERR-NONE ]
2572 xcall bail read_mline_res
2574 \xcall read_mline_res
2579 echo "~^header list"; read hl; echo $hl;\
2580 call xerr "$hl" "in_addr ($xh) 0-1"
2582 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
2583 read es; echo $es; call xerr "$es" "ins_addr $xh 1-1"
2584 echo "~^header insert $xh <${xh}2@exam.ple>";\
2585 read es; echo $es; call xerr "$es" "ins_addr $xh 1-2"
2586 echo "~^header insert $xh ${xh}3@exam.ple";\
2587 read es; echo $es; call xerr "$es" "ins_addr $xh 1-3"
2588 echo "~^header list $xh"; read hl; echo $hl;\
2589 call xerr "$hl" "ins_addr $xh 1-4"
2590 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 1-5"
2593 if [ "$t_remove" == "" ]
2597 echo "~^header remove $xh"; read es; call xerr $es "ins_addr $xh 2-1"
2598 echo "~^header remove $xh"; read es; vput vexpr es substr $es 0 3
2600 xcall bail "ins_addr $xh 2-2"
2602 echo "~^header list $xh"; read es; vput vexpr es substr $es 0 3
2604 xcall bail "ins_addr $xh 2-3"
2606 echo "~^header show $xh"; read es; vput vexpr es substr $es 0 3
2608 xcall bail "ins_addr $xh 2-4"
2612 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
2613 read es; echo $es; call xerr "$es" "ins_addr $xh 3-1"
2614 echo "~^header insert $xh <${xh}2@exam.ple>";\
2615 read es; echo $es; call xerr "$es" "ins_addr $xh 3-2"
2616 echo "~^header insert $xh ${xh}3@exam.ple";\
2617 read es; echo $es; call xerr "$es" "ins_addr $xh 3-3"
2618 echo "~^header list $xh"; read hl; echo $hl;\
2619 call xerr "$hl" "ins_addr $xh 3-4"
2620 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 3-5"
2623 echo "~^header remove-at $xh 1"; read es;\
2624 call xerr $es "ins_addr $xh 3-6"
2625 echo "~^header remove-at $xh 1"; read es;\
2626 call xerr $es "ins_addr $xh 3-7"
2627 echo "~^header remove-at $xh 1"; read es;\
2628 call xerr $es "ins_addr $xh 3-8"
2629 echo "~^header remove-at $xh 1"; read es;\
2630 vput vexpr es substr $es 0 3
2632 xcall bail "ins_addr $xh 3-9"
2634 echo "~^header remove-at $xh T"; read es;\
2635 vput vexpr es substr $es 0 3
2637 xcall bail "ins_addr $xh 3-10"
2639 echo "~^header list $xh"; read es;\
2640 vput vexpr es substr $es 0 3
2642 xcall bail "ins_addr $xh 3-11"
2644 echo "~^header show $xh"; read es;\
2645 vput vexpr es substr $es 0 3
2647 xcall bail "ins_addr $xh 3-12"
2651 echo "~^header insert $xh diet <$xh@exam.ple> spliced";\
2652 read es; echo $es; call xerr "$es" "ins_addr $xh 4-1"
2653 echo "~^header insert $xh <${xh}2@exam.ple> (comment) \"Quot(e)d\"";\
2654 read es; echo $es; call xerr "$es" "ins_addr $xh 4-2"
2655 echo "~^header insert $xh ${xh}3@exam.ple";\
2656 read es; echo $es; call xerr "$es" "ins_addr $xh 4-3"
2657 echo "~^header list $xh"; read hl; echo $hl;\
2658 call xerr "$hl" "header list $xh 3-4"
2659 echo "~^header show $xh"; read es; call xerr $es "ins_addr $xh 4-5"
2662 echo "~^header remove-at $xh 3"; read es;\
2663 call xerr $es "ins_addr $xh 4-6"
2664 echo "~^header remove-at $xh 2"; read es;\
2665 call xerr $es "ins_addr $xh 4-7"
2666 echo "~^header remove-at $xh 1"; read es;\
2667 call xerr $es "ins_addr $xh 4-8"
2668 echo "~^header remove-at $xh 1"; read es;\
2669 vput vexpr es substr $es 0 3
2671 xcall bail "ins_addr $xh 4-9"
2673 echo "~^header remove-at $xh T"; read es;\
2674 vput vexpr es substr $es 0 3
2676 xcall bail "ins_addr $xh 4-10"
2678 echo "~^header list $xh"; read es;\
2679 vput vexpr es substr $es 0 3
2681 xcall bail "ins_addr $xh 4-11"
2683 echo "~^header show $xh"; read es;\
2684 vput vexpr es substr $es 0 3
2686 xcall bail "ins_addr $xh 4-12"
2690 wysh set xh=$1 mult=$2
2691 echo "~^header list"; read hl; echo $hl;\
2692 call xerr "$hl" "ins_ref ($xh) 0-1"
2694 echo "~^header insert $xh <$xh@exam.ple>";\
2695 read es; echo $es; call xerr "$es" "ins_ref $xh 1-1"
2697 echo "~^header insert $xh <${xh}2@exam.ple>";\
2698 read es; echo $es; call xerr "$es" "ins_ref $xh 1-2"
2699 echo "~^header insert $xh ${xh}3@exam.ple";\
2700 read es; echo $es; call xerr "$es" "ins_ref $xh 1-3"
2702 echo "~^header insert $xh <${xh}2@exam.ple>"; read es;\
2703 vput vexpr es substr $es 0 3
2705 xcall bail "ins_ref $xh 1-4"
2709 echo "~^header list $xh"; read hl; echo $hl;\
2710 call xerr "$hl" "ins_ref $xh 1-5"
2711 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 1-6"
2714 if [ "$t_remove" == "" ]
2718 echo "~^header remove $xh"; read es;\
2719 call xerr $es "ins_ref $xh 2-1"
2720 echo "~^header remove $xh"; read es;\
2721 vput vexpr es substr $es 0 3
2723 xcall bail "ins_ref $xh 2-2"
2725 echo "~^header list $xh"; read es;\
2726 vput vexpr es substr $es 0 3
2728 xcall bail "$es ins_ref $xh 2-3"
2730 echo "~^header show $xh"; read es;\
2731 vput vexpr es substr $es 0 3
2733 xcall bail "ins_ref $xh 2-4"
2737 echo "~^header insert $xh <$xh@exam.ple>";\
2738 read es; echo $es; call xerr "$es" "ins_ref $xh 3-1"
2740 echo "~^header insert $xh <${xh}2@exam.ple>";\
2741 read es; echo $es; call xerr "$es" "ins_ref $xh 3-2"
2742 echo "~^header insert $xh ${xh}3@exam.ple";\
2743 read es; echo $es; call xerr "$es" "ins_ref $xh 3-3"
2745 echo "~^header list $xh";\
2746 read hl; echo $hl; call xerr "$hl" "ins_ref $xh 3-4"
2747 echo "~^header show $xh";\
2748 read es; call xerr $es "ins_ref $xh 3-5"
2751 echo "~^header remove-at $xh 1"; read es;\
2752 call xerr $es "ins_ref $xh 3-6"
2753 if [ $mult -ne 0 ] && [ $xh != subject ]
2754 echo "~^header remove-at $xh 1"; read es;\
2755 call xerr $es "ins_ref $xh 3-7"
2756 echo "~^header remove-at $xh 1"; read es;\
2757 call xerr $es "ins_ref $xh 3-8"
2759 echo "~^header remove-at $xh 1"; read es;\
2760 vput vexpr es substr $es 0 3
2762 xcall bail "ins_ref $xh 3-9"
2764 echo "~^header remove-at $xh T"; read es;\
2765 vput vexpr es substr $es 0 3
2767 xcall bail "ins_ref $xh 3-10"
2769 echo "~^header show $xh"; read es;\
2770 vput vexpr es substr $es 0 3
2772 xcall bail "ins_ref $xh 3-11"
2776 echo "~^header insert $xh <$xh@exam.ple> ";\
2777 read es; echo $es; call xerr "$es" "ins_ref $xh 4-1"
2779 echo "~^header insert $xh <${xh}2@exam.ple> ";\
2780 read es; echo $es; call xerr "$es" "ins_ref $xh 4-2"
2781 echo "~^header insert $xh ${xh}3@exam.ple";\
2782 read es; echo $es; call xerr "$es" "ins_ref $xh 4-3"
2784 echo "~^header list $xh"; read hl; echo $hl;\
2785 call xerr "$hl" "ins_ref $xh 4-4"
2786 echo "~^header show $xh"; read es; call xerr $es "ins_ref $xh 4-5"
2789 if [ $mult -ne 0 ] && [ $xh != subject ]
2790 echo "~^header remove-at $xh 3"; read es;\
2791 call xerr $es "ins_ref $xh 4-6"
2792 echo "~^header remove-at $xh 2"; read es;\
2793 call xerr $es "ins_ref $xh 4-7"
2795 echo "~^header remove-at $xh 1"; read es;\
2796 call xerr $es "ins_ref $xh 4-8"
2797 echo "~^header remove-at $xh 1"; read es;\
2798 vput vexpr es substr $es 0 3
2800 xcall bail "ins_ref $xh 4-9"
2802 echo "~^header remove-at $xh T"; read es;\
2803 vput vexpr es substr $es 0 3
2805 xcall bail "ins_ref $xh 4-10"
2807 echo "~^header show $xh"; read es;\
2808 vput vexpr es substr $es 0 3
2810 xcall bail "ins_ref $xh 4-11"
2815 # In collect.c order
2817 call ins_ref sender 0 # Not a "ref", but works
2821 call ins_addr reply-To
2822 call ins_addr mail-Followup-to
2823 call ins_ref messAge-id 0
2824 call ins_ref rEfErEncEs 1
2825 call ins_ref in-Reply-to 1
2826 call ins_ref subject 1 # Not a "ref", but works (with tweaks)
2827 call ins_addr freeForm1
2828 call ins_addr freeform2
2830 echo "~^header show MAILX-Command"; read es; call xerr $es "t_header 1000"
2832 echo "~^header show MAILX-raw-TO"; read es; call xerr $es "t_header 1001"
2840 echo "~^attachment";\
2841 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
2843 xcall bail "attach 0-1"
2846 echo "~^attach attribute ./.treadctl";\
2847 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
2849 xcall bail "attach 0-2"
2851 echo "~^attachment attribute-at 1";\
2852 read hl; echo $hl; vput vexpr es substr "$hl" 0 3
2854 xcall bail "attach 0-3"
2857 echo "~^attachment insert ./.treadctl=ascii";\
2858 read hl; echo $hl; call xerr "$hl" "attach 1-1"
2859 echo "~^attachment list";\
2860 read es; echo $es;call xerr "$es" "attach 1-2"
2862 echo "~^attachment attribute ./.treadctl";\
2863 read es; echo $es;call xerr "$es" "attach 1-3"
2865 echo "~^attachment attribute .treadctl";\
2866 read es; echo $es;call xerr "$es" "attach 1-4"
2868 echo "~^attachment attribute-at 1";\
2869 read es; echo $es;call xerr "$es" "attach 1-5"
2872 echo "~^attachment attribute-set ./.treadctl filename rctl";\
2873 read es; echo $es;call xerr "$es" "attach 1-6"
2874 echo "~^attachment attribute-set .treadctl content-description Au";\
2875 read es; echo $es;call xerr "$es" "attach 1-7"
2876 echo "~^attachment attribute-set-at 1 content-id <10.du@ich>";\
2877 read es; echo $es;call xerr "$es" "attach 1-8"
2879 echo "~^attachment attribute ./.treadctl";\
2880 read es; echo $es;call xerr "$es" "attach 1-9"
2882 echo "~^attachment attribute .treadctl";\
2883 read es; echo $es;call xerr "$es" "attach 1-10"
2885 echo "~^attachment attribute rctl";\
2886 read es; echo $es;call xerr "$es" "attach 1-11"
2888 echo "~^attachment attribute-at 1";\
2889 read es; echo $es;call xerr "$es" "attach 1-12"
2893 echo "~^attachment insert ./.tattach=latin1";\
2894 read hl; echo $hl; call xerr "$hl" "attach 2-1"
2895 echo "~^attachment list";\
2896 read es; echo $es;call xerr "$es" "attach 2-2"
2898 echo "~^attachment attribute ./.tattach";\
2899 read es; echo $es;call xerr "$es" "attach 2-3"
2901 echo "~^attachment attribute .tattach";\
2902 read es; echo $es;call xerr "$es" "attach 2-4"
2904 echo "~^attachment attribute-at 2";\
2905 read es; echo $es;call xerr "$es" "attach 2-5"
2908 echo "~^attachment attribute-set ./.tattach filename tat";\
2909 read es; echo $es;call xerr "$es" "attach 2-6"
2911 "~^attachment attribute-set .tattach content-description Au2";\
2912 read es; echo $es;call xerr "$es" "attach 2-7"
2913 echo "~^attachment attribute-set-at 2 content-id <20.du@wir>";\
2914 read es; echo $es;call xerr "$es" "attach 2-8"
2916 "~^attachment attribute-set-at 2 content-type application/x-sh";\
2917 read es; echo $es;call xerr "$es" "attach 2-9"
2919 echo "~^attachment attribute ./.tattach";\
2920 read es; echo $es;call xerr "$es" "attach 2-10"
2922 echo "~^attachment attribute .tattach";\
2923 read es; echo $es;call xerr "$es" "attach 2-11"
2925 echo "~^attachment attribute tat";\
2926 read es; echo $es;call xerr "$es" "attach 2-12"
2928 echo "~^attachment attribute-at 2";\
2929 read es; echo $es;call xerr "$es" "attach 2-13"
2933 if [ "$t_remove" == "" ]
2937 echo "~^attachment remove ./.treadctl"; read es;\
2938 call xerr $es "attach 3-1"
2939 echo "~^attachment remove ./.tattach"; read es;\
2940 call xerr $es "attach 3-2"
2941 echo "~^ attachment remove ./.treadctl"; read es;\
2942 vput vexpr es substr $es 0 3
2944 xcall bail "attach 3-3"
2946 echo "~^ attachment remove ./.tattach"; read es;\
2947 vput vexpr es substr $es 0 3
2949 xcall bail "attach 3-4"
2951 echo "~^attachment list"; read es;\
2952 vput vexpr es substr $es 0 3
2954 xcall bail "attach 3-5"
2958 echo "~^attachment insert ./.tattach=latin1";\
2959 read hl; echo $hl; call xerr "$hl" "attach 4-1"
2960 echo "~^attachment insert ./.tattach=latin1";\
2961 read hl; echo $hl; call xerr "$hl" "attach 4-2"
2962 echo "~^attachment list";\
2963 read es; echo $es;call xerr "$es" "attach 4-3"
2965 echo "~^ attachment remove .tattach"; read es;\
2966 vput vexpr es substr $es 0 3
2968 xcall bail "attach 4-4 $es"
2970 echo "~^attachment remove-at T"; read es;\
2971 vput vexpr es substr $es 0 3
2973 xcall bail "attach 4-5"
2975 echo "~^attachment remove ./.tattach"; read es;\
2976 call xerr $es "attach 4-6"
2977 echo "~^attachment remove ./.tattach"; read es;\
2978 call xerr $es "attach 4-7"
2979 echo "~^ attachment remove ./.tattach"; read es;\
2980 vput vexpr es substr $es 0 3
2982 xcall bail "attach 4-8 $es"
2984 echo "~^attachment list"; read es;\
2985 vput vexpr es substr $es 0 3
2987 xcall bail "attach 4-9"
2991 echo "~^attachment insert ./.tattach=latin1";\
2992 read hl; echo $hl; call xerr "$hl" "attach 5-1"
2993 echo "~^attachment insert ./.tattach=latin1";\
2994 read hl; echo $hl; call xerr "$hl" "attach 5-2"
2995 echo "~^attachment insert ./.tattach=latin1";\
2996 read hl; echo $hl; call xerr "$hl" "attach 5-3"
2997 echo "~^attachment list";\
2998 read es; echo $es;call xerr "$es" "attach 5-4"
3001 echo "~^attachment remove-at 3"; read es;\
3002 call xerr $es "attach 5-5"
3003 echo "~^attachment remove-at 3"; read es;\
3004 vput vexpr es substr $es 0 3
3006 xcall bail "attach 5-6"
3008 echo "~^attachment remove-at 2"; read es;\
3009 call xerr $es "attach 5-7"
3010 echo "~^attachment remove-at 2"; read es;\
3011 vput vexpr es substr $es 0 3
3013 xcall bail "attach 5-8"
3015 echo "~^attachment remove-at 1"; read es;\
3016 call xerr $es "attach 5-9"
3017 echo "~^attachment remove-at 1"; read es;\
3018 vput vexpr es substr $es 0 3
3020 xcall bail "attach 5-10"
3023 echo "~^attachment list"; read es;\
3024 vput vexpr es substr $es 0 3
3026 xcall bail "attach 5-11"
3030 echo "~^attachment insert ./.tattach=latin1";\
3031 read hl; echo $hl; call xerr "$hl" "attach 6-1"
3032 echo "~^attachment insert ./.tattach=latin1";\
3033 read hl; echo $hl; call xerr "$hl" "attach 6-2"
3034 echo "~^attachment insert ./.tattach=latin1";\
3035 read hl; echo $hl; call xerr "$hl" "attach 6-3"
3036 echo "~^attachment list";\
3037 read es; echo $es;call xerr "$es" "attach 6-4"
3040 echo "~^attachment remove-at 1"; read es;\
3041 call xerr $es "attach 6-5"
3042 echo "~^attachment remove-at 1"; read es;\
3043 call xerr $es "attach 6-6"
3044 echo "~^attachment remove-at 1"; read es;\
3045 call xerr $es "attach 6-7"
3046 echo "~^attachment remove-at 1"; read es;\
3047 vput vexpr es substr $es 0 3
3049 xcall bail "attach 6-8"
3052 echo "~^attachment list"; read es;\
3053 vput vexpr es substr $es 0 3
3055 xcall bail "attach 6-9"
3067 echo on-compose-enter, mailx-command<$mailx-command>
3068 alternates alter1@exam.ple alter2@exam.ple
3070 set autocc='alter1@exam.ple alter2@exam.ple'
3071 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3072 echo mailx-subject<$mailx-subject>
3073 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3074 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3075 mailx-raw-bcc<$mailx-raw-bcc>
3076 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3077 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3080 echo on-compose-leave, mailx-command<$mailx-command>
3082 eval alternates $al alter3@exam.ple alter4@exam.ple
3084 set autobcc='alter3@exam.ple alter4@exam.ple'
3085 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3086 echo mailx-subject<$mailx-subject>
3087 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3088 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3089 mailx-raw-bcc<$mailx-raw-bcc>
3090 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3091 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3094 echo on-compose-cleanup, mailx-command<$mailx-command>
3097 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3098 echo mailx-subject<$mailx-subject>
3099 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3100 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3101 mailx-raw-bcc<$mailx-raw-bcc>
3102 echo mailx-orig-from<$mailx-orig-from> mailx-orig-to<$mailx-orig-to> \
3103 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3105 wysh set on-compose-splice=t_ocs \
3106 on-compose-enter=t_oce on-compose-leave=t_ocl \
3107 on-compose-cleanup=t_occ
3113 printf 'm this-goes@nowhere\nbody\n!.\n' |
3114 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3115 -X'source ./.trc' -Smta=.
/.tsendmail.sh \
3117 ${cat} .
/.tall
>> "${MBOX}"
3118 check behave
:compose_hooks-1
0 "${MBOX}" '3667291468 10101'
3121 printf 'm this-goes@nowhere\nbody\n!.\n' |
3122 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3123 -St_remove=1 -X'source ./.trc' -Smta=.
/.tsendmail.sh \
3125 ${cat} .
/.tall
>> "${MBOX}"
3126 check behave
:compose_hooks-2
0 "${MBOX}" '1746765053 12535'
3128 # Some state machine stress, shell compose hook, localopts for hook, etc.
3129 # readctl in child. ~r as HERE document
3131 printf 'm ex@am.ple\nbody\n!.\nvar t_oce t_ocs t_ocs_sh t_ocl t_occ autocc' |
3132 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3133 -Smta=.
/.tsendmail.sh \
3136 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
3139 vput vexpr es substr "$1" 0 1
3144 define read_mline_res {
3145 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3146 echo $len/$es/$^ERRNAME: $hl
3147 if [ $es -ne $^ERR-NONE ]
3148 xcall bail read_mline_res
3150 \xcall read_mline_res
3154 vput vexpr i + 1 "$2"
3156 vput vexpr j % $i 10
3163 eval \\$j _work $1 $i
3166 vput vexpr i + $i "$1"
3170 read line;wysh set es=$? en=$^ERRNAME ; echo read:$es/$en: $line
3171 if [ "${es}" -ne -1 ]
3174 readctl remove $cwd/.treadctl; echo readctl remove:$?/$^ERRNAME
3179 echo "~^header list"; read hl; echo $hl;\
3180 vput vexpr es substr "$hl" 0 1
3182 xcall bail "header list"
3185 call _work 1; echo $?
3186 echo "~^header insert cc splicy diet <splice@exam.ple> spliced";\
3187 read es; echo $es; vput vexpr es substr "$es" 0 1
3189 xcall bail "be diet"
3191 echo "~^header insert cc <splice2@exam.ple>";\
3192 read es; echo $es; vput vexpr es substr "$es" 0 1
3194 xcall bail "be diet2"
3197 call _work 2; echo $?
3198 echo "~^header insert bcc juicy juice <juice@exam.ple> spliced";\
3199 read es; echo $es;vput vexpr es substr "$es" 0 1
3201 xcall bail "be juicy"
3203 echo "~^header insert bcc juice2@exam.ple";\
3204 read es; echo $es;vput vexpr es substr "$es" 0 1
3206 xcall bail "be juicy2"
3208 echo "~^header insert bcc juice3 <juice3@exam.ple>";\
3209 read es; echo $es;vput vexpr es substr "$es" 0 1
3211 xcall bail "be juicy3"
3213 echo "~^header insert bcc juice4@exam.ple";\
3214 read es; echo $es;vput vexpr es substr "$es" 0 1
3216 xcall bail "be juicy4"
3219 echo "~^header remove-at bcc 3";\
3220 read es; echo $es;vput vexpr es substr "$es" 0 1
3222 xcall bail "remove juicy5"
3224 echo "~^header remove-at bcc 2";\
3225 read es; echo $es;vput vexpr es substr "$es" 0 1
3227 xcall bail "remove juicy6"
3229 echo "~^header remove-at bcc 3";\
3230 read es; echo $es;vput vexpr es substr "$es" 0 3
3232 xcall bail "failed to remove-at"
3234 # Add duplicates which ought to be removed!
3235 echo "~^header insert bcc juice4@exam.ple";\
3236 read es; echo $es;vput vexpr es substr "$es" 0 1
3238 xcall bail "be juicy4-1"
3240 echo "~^header insert bcc juice4@exam.ple";\
3241 read es; echo $es;vput vexpr es substr "$es" 0 1
3243 xcall bail "be juicy4-2"
3245 echo "~^header insert bcc juice4@exam.ple";\
3246 read es; echo $es;vput vexpr es substr "$es" 0 1
3248 xcall bail "be juicy4-3"
3253 call _work 3; echo $?
3255 vput ! i echo just knock if you can hear me;\
3257 while [ $i -lt 24 ]; do printf "%s " $i; i=`expr $i + 1`; done;\
3259 echon shell-cmd says $?/$^ERRNAME: $i
3260 echo "~x will not become interpreted, we are reading until __EOT"
3262 read r_status; echo "~~r status output: $r_status"
3263 echo "~:echo $? $! $^ERRNAME"
3265 echo "~~r status from parent: $r_status"
3268 call _work 4; echo $?
3269 vput cwd cwd;echo cwd:$?
3270 readctl create $cwd/.treadctl ;echo readctl:$?/$^ERRNAME;\
3274 call _work 5; echo $?
3275 echo "~^header show MAILX-Command"; read es;\
3276 call xerr $es "t_header 1000"; call read_mline_res
3277 echo "~^header show MAILX-raw-TO"; read es;\
3278 call xerr $es "t_header 1001"; xcall read_mline_res
3280 echoerr IT IS WRONG IF YOU SEE THIS
3283 echo on-compose-enter, mailx-command<$mailx-command>
3284 set t_oce autobcc=oce@exam.ple
3285 alternates alter1@exam.ple alter2@exam.ple
3287 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3288 echo mailx-subject<$mailx-subject>
3289 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3290 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3291 mailx-raw-bcc<$mailx-raw-bcc>
3292 echo mailx-orig-from<$mailx-orig-from> \
3293 mailx-orig-to<$mailx-orig-to> \
3294 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3297 echo on-compose-leave, mailx-command<$mailx-command>
3298 set t_ocl autocc=ocl@exam.ple
3300 alternates alter3@exam.ple alter4@exam.ple
3302 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3303 echo mailx-subject<$mailx-subject>
3304 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3305 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3306 mailx-raw-bcc<$mailx-raw-bcc>
3307 echo mailx-orig-from<$mailx-orig-from> \
3308 mailx-orig-to<$mailx-orig-to> \
3309 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3312 echo on-compose-cleanup, mailx-command<$mailx-command>
3313 set t_occ autocc=occ@exam.ple
3316 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3317 echo mailx-subject<$mailx-subject>
3318 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3319 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3320 mailx-raw-bcc<$mailx-raw-bcc>
3321 echo mailx-orig-from<$mailx-orig-from> \
3322 mailx-orig-to<$mailx-orig-to> \
3323 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3325 wysh set on-compose-splice=t_ocs \
3326 on-compose-splice-shell="read ver;printf \"t_ocs-shell\\n\
3327 ~t shell@exam.ple\\n~:set t_ocs_sh\\n\"" \
3328 on-compose-enter=t_oce on-compose-leave=t_ocl \
3329 on-compose-cleanup=t_occ
3331 ex0_test behave
:compose_hooks-3
3332 ${cat} .
/.tnotes
>> "${MBOX}"
3334 check behave
:compose_hooks-3
- "${MBOX}" '679526364 2431'
3336 # Reply, forward, resend, Resend
3339 printf 'set from=f1@z\nm t1@z\nb1\n!.\nset from=f2@z\nm t2@z\nb2\n!.\n' |
3340 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3341 -Smta=.
/.tsendmail.sh
3344 echo start: $? $! $^ERRNAME
3346 echo File: $? $! $^ERRNAME;echo;echo
3348 this is content of reply 1
3350 echo reply 1: $? $! $^ERRNAME;echo;echo
3352 this is content of Reply 1 2
3354 echo Reply 1 2: $? $! $^ERRNAME;echo;echo
3355 forward 1 fwdex@am.ple
3356 this is content of forward 1
3358 echo forward 1: $? $! $^ERRNAME;echo;echo
3359 resend 1 2 resendex@am.ple
3360 echo resend 1 2: $? $! $^ERRNAME;echo;echo
3361 Resend 1 2 Resendex@am.ple
3362 echo Resend 1 2: $? $! $^ERRNAME;echo;echo
3364 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! \
3365 -Smta=.
/.tsendmail.sh \
3368 echoerr "Failed: $1. Bailing out"; echo "~x"; xit
3371 vput vexpr es substr "$1" 0 1
3376 define read_mline_res {
3377 read hl; wysh set len=$? es=$! en=$^ERRNAME;\
3378 echo mline_res:$len/$es/$^ERRNAME: $hl
3379 if [ $es -ne $^ERR-NONE ]
3380 xcall bail read_mline_res
3382 \xcall read_mline_res
3386 echo "~^header show $1"; read es;\
3387 call xerr $es "work_hl $1"; echo $1; call read_mline_res
3395 echo t_ocs version $ver
3396 echo "~^header list"; read hl; echo $hl;\
3397 echoerr the header list is $hl;\
3398 call xerr "$hl" "header list"
3399 eval vpospar set $hl
3402 echoerr IT IS WRONG IF YOU SEE THIS
3405 echo on-XY-enter, mailx-command<$mailx-command>
3406 set t_oce autobcc=oce@exam.ple
3407 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3408 echo mailx-subject<$mailx-subject>
3409 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3410 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3411 mailx-raw-bcc<$mailx-raw-bcc>
3412 echo mailx-orig-from<$mailx-orig-from> \
3413 mailx-orig-to<$mailx-orig-to> \
3414 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3417 echo on-XY-leave, mailx-command<$mailx-command>
3418 set t_ocl autocc=ocl@exam.ple
3419 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3420 echo mailx-subject<$mailx-subject>
3421 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3422 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3423 mailx-raw-bcc<$mailx-raw-bcc>
3424 echo mailx-orig-from<$mailx-orig-from> \
3425 mailx-orig-to<$mailx-orig-to> \
3426 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3429 echo on-XY-cleanup, mailx-command<$mailx-command>
3430 set t_occ autocc=occ@exam.ple
3431 echo mailx-from<$mailx-from> mailx-sender<$mailx-sender>
3432 echo mailx-subject<$mailx-subject>
3433 echo mailx-to<$mailx-to> mailx-cc<$mailx-cc> mailx-bcc<$mailx-bcc>
3434 echo mailx-raw-to<$mailx-raw-to> mailx-raw-cc<$mailx-raw-cc> \
3435 mailx-raw-bcc<$mailx-raw-bcc>
3436 echo mailx-orig-from<$mailx-orig-from> \
3437 mailx-orig-to<$mailx-orig-to> \
3438 mailx-orig-cc<$mailx-orig-cc> mailx-orig-bcc<$mailx-orig-bcc>
3440 wysh set on-compose-splice=t_ocs \
3441 on-compose-enter=t_oce on-compose-leave=t_ocl \
3442 on-compose-cleanup=t_occ \
3443 on-resend-enter=t_oce on-resend-cleanup=t_occ
3445 ex0_test behave
:compose_hooks-4
3446 ${cat} .
/.tnotes
>> "${MBOX}"
3448 check behave
:compose_hooks-4
- "${MBOX}" '3038884027 7516'
3453 t_behave_message_injections
() {
3455 TRAP_EXIT_ADDONS
="./.t*"
3457 ${cat} <<-_EOT > ./.tsendmail.sh
3459 (echo 'From Echinacea Tue Jun 20 15:54:02 2017' && ${cat} && echo
3462 chmod 0755 .
/.tsendmail.sh
3464 echo mysig
> .
/.tmysig
3466 echo some-body |
${MAILX} ${ARGS} -Smta=.
/.tsendmail.sh \
3467 -Smessage-inject-head=head-inject \
3468 -Smessage-inject-tail=tail-inject \
3469 -Ssignature=.
/.tmysig \
3470 ex@am.ple
> .
/.tall
2>&1
3471 check behave
:message_injections-1
0 "${MBOX}" '2434746382 134'
3472 check behave
:message_injections-2
- .tall
'4294967295 0' # empty file
3474 ${cat} <<-_EOT > ./.template
3478 Subject: This subject is
3480 Body, body, body me.
3482 < .
/.template
${MAILX} ${ARGS} -t -Smta=.
/.tsendmail.sh \
3483 -Smessage-inject-head=head-inject \
3484 -Smessage-inject-tail=tail-inject \
3485 -Ssignature=.
/.tmysig \
3487 check behave
:message_injections-3
0 "${MBOX}" '3114203412 198'
3488 check behave
:message_injections-4
- .tall
'4294967295 0' # empty file
3493 t_behave_mime_types_load_control
() {
3495 TRAP_EXIT_ADDONS
="./.t*"
3497 ${cat} <<-_EOT > ./.tmts1
3498 @ application/mathml+xml mathml
3500 ${cat} <<-_EOT > ./.tmts2
3501 @ x-conference/x-cooltalk ice
3503 @ application/aga-aga aga
3506 ${cat} <<-_EOT > ./.tmts1.mathml
3507 <head>nonsense ML</head>
3509 ${cat} <<-_EOT > ./.tmts2.ice
3512 printf 'of which the c\x01rack is coming soon' > .
/.tmtsx.doom
3513 printf 'of which the c\x01rack is coming soon' > .
/.tmtsx.aga
3527 ' "${MBOX}" "${MBOX}" |
3529 -Smimetypes-load-control=f
=.
/.tmts1
,f
=.
/.tmts2 \
3531 ex0_test behave
:mime_types_load_control
3533 ${cat} "${MBOX}" >> .
/.tout
3534 check behave
:mime_types_load_control-1
- .
/.tout
'3270459399 2460'
3536 echo type |
${MAILX} ${ARGS} -R \
3537 -Smimetypes-load-control=f
=.
/.tmts1
,f
=.
/.tmts3 \
3538 -f "${MBOX}" >> .
/.tout
2>&1
3539 check behave
:mime_types_load_control-2
0 .
/.tout
'2258163974 3530'
3545 have_feat smime ||
{
3546 echo 'behave:s/mime: unsupported, skipped'
3551 TRAP_EXIT_ADDONS
="./.t.conf ./.tkey.pem ./.tcert.pem ./.tpair.pem"
3552 TRAP_EXIT_ADDONS
="${TRAP_EXIT_ADDONS} ./.VERIFY ./.DECRYPT ./.ENCRYPT"
3553 TRAP_EXIT_ADDONS
="${TRAP_EXIT_ADDONS} ./.tsendmail.sh"
3555 printf 'behave:s/mime: .. generating test key and certificate ..\n'
3556 ${cat} <<-_EOT > ./.t.conf
3559 default_keyfile = keyfile.pem
3560 distinguished_name = req_distinguished_name
3561 attributes = req_attributes
3565 [ req_distinguished_name ]
3572 emailAddress = test@localhost
3577 openssl req
-x509 -nodes -days 3650 -config .
/.t.conf \
3578 -newkey rsa
:1024 -keyout .
/.tkey.pem
-out .
/.tcert.pem
>/dev
/null
2>&1
3579 ${cat} .
/.tkey.pem .
/.tcert.pem
> .
/.tpair.pem
3582 printf 'behave:s/mime:sign/verify: '
3583 echo bla |
${MAILX} ${ARGS} \
3584 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3585 -Ssmime-sign -Sfrom=test@localhost \
3586 -s 'S/MIME test' .
/.VERIFY
3587 if [ $?
-eq 0 ]; then
3598 /^Content-Description: /{ skip = 2; print; next }
3599 /^$/{ if(skip) --skip }
3602 < .
/.VERIFY
> "${MBOX}"
3603 check behave
:s
/mime
:sign
/verify
:checksum
- "${MBOX}" '2900817158 648'
3605 printf 'behave:s/mime:sign/verify:verify '
3606 printf 'verify\nx\n' |
3608 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3609 -Ssmime-sign -Sfrom=test@localhost \
3611 -f .
/.VERIFY
>/dev
/null
2>&1
3612 if [ $?
-eq 0 ]; then
3621 printf 'behave:s/mime:sign/verify:disproof-1 '
3622 if openssl smime
-verify -CAfile .
/.tcert.pem \
3623 -in .
/.VERIFY
>/dev
/null
2>&1; then
3632 # (signing +) encryption / decryption
3633 ${cat} <<-_EOT > ./.tsendmail.sh
3635 (echo 'From Euphrasia Thu Apr 27 17:56:23 2017' && ${cat}) > ./.ENCRYPT
3637 chmod 0755 .
/.tsendmail.sh
3639 printf 'behave:s/mime:encrypt+sign: '
3642 -Ssmime-force-encryption \
3643 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3644 -Smta=.
/.tsendmail.sh \
3645 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3646 -Ssmime-sign -Sfrom=test@localhost \
3647 -s 'S/MIME test' recei@ver.com
3648 if [ $?
-eq 0 ]; then
3652 printf 'error: encrypt+sign failed\n'
3655 ${sed} -e '/^$/,$d' < .
/.ENCRYPT
> "${MBOX}"
3656 check behave
:s
/mime
:encrypt
+sign
:checksum
- "${MBOX}" '1937410597 327'
3658 printf 'behave:s/mime:decrypt+verify: '
3659 printf 'decrypt ./.DECRYPT\nfi ./.DECRYPT\nverify\nx\n' |
3661 -Ssmime-force-encryption \
3662 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3663 -Smta=.
/.tsendmail.sh \
3664 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3665 -Ssmime-sign -Sfrom=test@localhost \
3667 -f .
/.ENCRYPT
>/dev
/null
2>&1
3668 if [ $?
-eq 0 ]; then
3677 /^Content-Description: /{ skip = 2; print; next }
3678 /^$/{ if(skip) --skip }
3681 < .
/.DECRYPT
> "${MBOX}"
3682 check behave
:s
/mime
:decrypt
+verify
:checksum
- "${MBOX}" '1720739247 931'
3684 printf 'behave:s/mime:decrypt+verify:disproof-1: '
3685 if (openssl smime
-decrypt -inkey .
/.tkey.pem
-in .
/.ENCRYPT |
3686 openssl smime
-verify -CAfile .
/.tcert.pem
) >/dev
/null
2>&1; then
3693 printf "behave:s/mime:encrypt: "
3694 echo bla |
${MAILX} ${ARGS} \
3695 -Ssmime-force-encryption \
3696 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3697 -Smta=.
/.tsendmail.sh \
3698 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3699 -Sfrom=test@localhost \
3700 -s 'S/MIME test' recei@ver.com
3701 if [ $?
-eq 0 ]; then
3708 # Same as behave:s/mime:encrypt+sign:checksum above
3709 ${sed} -e '/^$/,$d' < .
/.ENCRYPT
> "${MBOX}"
3710 check behave
:s
/mime
:encrypt
:checksum
- "${MBOX}" '1937410597 327'
3713 printf 'decrypt ./.DECRYPT\nx\n' |
${MAILX} ${ARGS} \
3714 -Ssmime-force-encryption \
3715 -Ssmime-encrypt-recei@ver.com
=.
/.tpair.pem \
3716 -Smta=.
/.tsendmail.sh \
3717 -Ssmime-ca-file=.
/.tcert.pem
-Ssmime-sign-cert=.
/.tpair.pem \
3718 -Sfrom=test@localhost \
3720 -f .
/.ENCRYPT
>/dev
/null
2>&1
3721 check behave
:s
/mime
:decrypt
0 "./.DECRYPT" '2624716890 422'
3723 printf 'behave:s/mime:decrypt:disproof-1: '
3724 if openssl smime
-decrypt -inkey .
/.tkey.pem \
3725 -in .
/.ENCRYPT
>/dev
/null
2>&1; then
3735 t_behave_maildir
() {
3737 TRAP_EXIT_ADDONS
="./.t*"
3741 while [ ${i} -lt 112 ]; do
3742 printf 'm file://%s\n~s Subject %s\nHello %s!\n~.\n' \
3743 "${MBOX}" "${i}" "${i}"
3746 ) |
${MAILX} ${ARGS}
3747 check behave
:maildir-1
0 "${MBOX}" '1140119864 13780'
3753 ' "${MBOX}" .tmdir1 .tmdir1 |
3754 ${MAILX} ${ARGS} -Snewfolders=maildir
> .tlst
3755 check behave
:maildir-2
0 .tlst
'1797938753 9103'
3758 copy * "maildir://%s"
3761 ' "${MBOX}" .tmdir2 .tmdir2 |
3762 ${MAILX} ${ARGS} > .tlst
3763 check behave
:maildir-3
0 .tlst
'1155631089 9113'
3765 printf 'File "maildir://%s"
3769 ' .tmdir2 .tmbox1 .tmbox1 |
3770 ${MAILX} ${ARGS} > .tlst
3771 check behave
:maildir-4
0 .tmbox1
'2646131190 13220'
3772 check behave
:maildir-5
- .tlst
'3701297796 9110'
3774 # only the odd (even)
3776 printf 'File "maildir://%s"
3779 while [ ${i} -lt 112 ]; do
3781 [ ${j} -eq 1 ] && printf '%s ' "${i}"
3788 ) |
${MAILX} ${ARGS} > .tlst
3789 check behave
:maildir-6
0 .tmbox2
'142890131 6610'
3790 check behave
:maildir-7
- .tlst
'960096773 4573'
3793 printf 'file "maildir://%s"
3796 while [ ${i} -lt 112 ]; do
3798 [ ${j} -eq 0 ] && [ ${i} -ne 0 ] && printf '%s ' "${i}"
3806 ' .tmbox2 .tmbox2 .tmdir2
3807 ) | ${MAILX} ${ARGS} > .tlst
3808 check behave:maildir-8 0 .tmbox2 '3806905791 13100'
3809 ${sed} 2d < .tlst > .tlstx
3810 check behave:maildir-9 - .tlstx '4216815295 13645'
3815 t_behave_mass_recipients() {
3817 TRAP_EXIT_ADDONS=".
/.t
*"
3819 ${cat} <<-_EOT > ./.tsendmail.sh
3821 (echo 'From Eucalyptus Sat Jul 08 21:14:57 2017' && ${cat} && echo
3824 chmod 0755 ./.tsendmail.sh
3826 ${cat} <<'__EOT__' > ./.trc
3828 echoerr "Failed
: $1. Bailing out
"; echo "~x
"; xit
3831 wysh set nr=$1 hn=$2
3832 echo "~
$hn $hn$nr@
$hn"; echo '~:echo $?'; read es
3834 xcall bail "ins_addr
$hn 1-$nr"
3836 vput vexpr nr + $nr 1
3837 if [ "$nr" -le "$maximum" ]
3838 xcall ins_addr $nr $hn
3842 wysh set nr=$1 hn=$2
3843 alternates $hn$nr@$hn
3844 vput vexpr nr + $nr 2
3845 if [ "$nr" -le "$maximum" ]
3846 xcall bld_alter $nr $hn
3856 if [ "$t_remove" != '' ]
3861 set on-compose-splice=t_ocs on-compose-leave=t_ocl
3865 printf 'm this-goes@nowhere\nbody\n!.\n' |
3866 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3867 -X'source ./.trc' -Smta=./.tsendmail.sh -Smaximum=2001 \
3869 ${cat} ./.tall >> "${MBOX}"
3870 check behave:mass_recipients-1 0 "${MBOX}" '2912243346 51526'
3873 printf 'm this-goes@nowhere\nbody\n!.\n' |
3874 ${MAILX} ${ARGS} -Snomemdebug -Sescape=! -Sstealthmua=noagent \
3875 -St_remove=1 -X'source ./.trc' -Smta=./.tsendmail.sh -Smaximum=2001 \
3877 ${cat} ./.tall >> "${MBOX}"
3878 check behave:mass_recipients-2 0 "${MBOX}" '4097804632 34394'
3883 t_behave_lreply_futh_rth_etc() {
3885 TRAP_EXIT_ADDONS=".
/.t
*"
3887 ${cat} <<-_EOT > ./.tsendmail.sh
3889 (echo 'From HumulusLupulus Thu Jul 27 14:41:20 2017' && ${cat} && echo
3892 chmod 0755 ./.tsendmail.sh
3894 ${cat} <<-_EOT > ./.tmbox
3895 From neverneverland Sun Jul 23 13:46:25 2017
3896 Subject: Bugstop: five miles out 1
3897 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
3898 From: mister originator <mr@originator>
3899 To: bugstop-commit@five.miles.out, laber@backe.eu
3901 Mail-Followup-To: bugstop@five.miles.out, laber@backe.eu, is@a.list
3902 In-reply-to: <20170719111113.bkcMz%laber@backe.eu>
3903 Date: Wed, 19 Jul 2017 09:22:57 -0400
3904 Message-Id: <20170719132257.766AF781267@originator>
3907 > |Sorry, I think I misunderstand something. I would think that
3911 From neverneverland Fri Jul 7 22:39:11 2017
3912 Subject: Bugstop: five miles out 2
3913 Reply-To: mister originator2<mr2@originator>,bugstop@five.miles.out,is@a.list
3914 Content-Transfer-Encoding: 7bit
3915 From: mister originator <mr@originator>
3916 To: bugstop-commit@five.miles.out
3918 Message-ID: <149945963975.28888.6950788126957753723.reportbug@five.miles.out>
3919 Date: Fri, 07 Jul 2017 16:33:59 -0400
3922 capable of changing back.
3924 From neverneverland Fri Jul 7 22:42:00 2017
3925 Subject: Bugstop: five miles out 3
3926 Reply-To: mister originator2 <mr2@originator>, bugstop@five.miles.out
3927 Content-Transfer-Encoding: 7bit
3928 From: mister originator <mr@originator>
3929 To: bugstop-commit@five.miles.out
3931 Message-ID: <149945963975.28888.6950788126957753746.reportbug@five.miles.out>
3932 Date: Fri, 07 Jul 2017 16:33:59 -0400
3933 List-Post: <mailto:bugstop@five.miles.out>
3936 are you ready, boots?
3944 wysh set m="This is text of
\\\"reply
${1}.
"
3955 echo -----After reply
$1.1
- $1.3
: $?
/$^ERRNAME
3958 wysh
set m
="This is text of \\\"Reply ${1}."
3964 echo -----After Reply $1.$2: $?/$^ERRNAME
3973 wysh
set m
="This is text of \\\"Lreply ${1}." \\
3974 on-compose-splice
=_Lh n
=$2
3978 # We need two indirections for this test: one for the case that Lreply
3979 # fails because if missing recipients, we need to read EOF next, thus
3980 # place this in _Ls last, and second for the succeeding cases EOF is
3981 # not what these should read, so go over the backside and splice it in!
3983 echo -----After Lreply
$1.
$2: $?
/$^ERRNAME
3986 localopts call-fixate
yes
3988 call R
$1 1; call R
$1 2; call R
$1 3
3989 call L
$1 1; call L
$1 2; call L
$1 3
3992 echo;echo '"'"'===== CHANGING === '"'"'"$*"'"'"' ====='"'"';echo
3996 set from
=laber@backe.eu
3999 call tweak
set reply-to-honour
4001 call tweak
set followup-to
4003 call tweak
set followup-to-honour
4005 call tweak mlist bugstop@five.miles.out
4007 call tweak mlsubscribe bugstop@five.miles.out
4009 call tweak
set recipients-in-cc
4011 ' | ${MAILX} ${ARGS} -Sescape=! -Smta=./.tsendmail.sh \
4012 -Rf ./.tmbox >> "${MBOX}" 2>&1
4014 check behave:lreply_futh_rth_etc 0 "${MBOX}" '2491739775 22062'
4019 t_behave_iconv_mbyte_base64() {
4021 TRAP_EXIT_ADDONS="./.t*"
4023 if [ -n "${UTF8_LOCALE}" ] && have_feat iconv &&
4024 command -v iconv >/dev/null 2>&1 &&
4025 ( iconv -l | ${grep} -i -e iso-2022-jp -e euc-jp) >/dev/null 2>&1; then
4028 echo 'behave
:iconv_mbyte_base64
: unsupported
, skipped
'
4032 ${cat} <<-_EOT > ./.tsendmail.sh
4034 (echo 'From DroseriaRotundifolia Thu Aug
03 17:26:25 2017' && ${cat} &&
4037 chmod 0755 ./.tsendmail.sh
4039 if ( iconv -l | ${grep} -i iso-2022-jp ) >/dev/null 2>&1; then
4041 set ttycharset
=utf-8 sendcharsets
=iso-2022-jp
4043 !s Japanese from UTF-8 to ISO-2022-JP
4044 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの
1種をシジュウカラと呼ぶ。
4046 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4049 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4051 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの
1種をシジュウカラと呼ぶ。
4054 set ttycharset
=iso-2022-jp charset-7bit
=iso-2022-jp sendcharsets
=utf-8
4056 !s Japanese from ISO-2022-JP to UTF-8
, eh
, no
, also ISO-2022-JP
4057 \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
4059 \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
4062 \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
4064 \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
4066 ' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} -Smta=./.tsendmail.sh \
4067 -Sescape=! -Smime-encoding=base64 2>./.terr
4068 check behave:iconv_mbyte_base64-1 0 "${MBOX}" '3428985079 1976'
4069 check behave:iconv_mbyte_base64-2 - ./.terr '4294967295 0'
4071 printf 'eval f 1; write ./.twrite\n' |
4072 ${MAILX} ${ARGS} ${ADDARG_UNI} -Rf "${MBOX}" >./.tlog 2>&1
4073 check behave:iconv_mbyte_base64-3 0 ./.twrite '1259742080 686'
4074 check behave:iconv_mbyte_base64-4 - ./.tlog '3956097665 119'
4076 echo 'behave:iconv_mbyte_base64: ISO-2022-JP unsupported, skipping 1-4'
4079 if ( iconv -l | ${grep} -i euc-jp ) >/dev/null 2>&1; then
4080 rm -f "${MBOX}" ./.twrite
4082 set ttycharset=utf-8 sendcharsets=euc-jp
4084 !s Japanese from UTF-8 to EUC-JP
4085 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4087 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4090 カンムリガラ(学名Parus cristatus)は、スズメ目シジュウカラ科に分類される鳥類の一種。
4092 シジュウカラ科(シジュウカラか、学名 Paridae)は、鳥類スズメ目の科である。シジュウカラ(四十雀)と総称されるが、狭義にはこの1種をシジュウカラと呼ぶ。
4095 set ttycharset=EUC-JP sendcharsets=utf-8
4097 !s Japanese from EUC-JP to UTF-8
4098 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4100 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4103 ¥«¥ó¥à¥ê¥¬¥é¡Ê³Ø̾Parus cristatus¡Ë¤Ï¡¢¥¹¥º¥áÌÜ¥·¥¸¥å¥¦¥«¥é²Ê¤ËʬÎव¤ì¤ëÄ»Îà¤Î°ì¼ï¡£
4105 ¥·¥¸¥å¥¦¥«¥é²Ê¡Ê¥·¥¸¥å¥¦¥«¥é¤«¡¢³Ø̾ Paridae¡Ë¤Ï¡¢Ä»Îॹ¥º¥áÌܤβʤǤ¢¤ë¡£¥·¥¸¥å¥¦¥«¥é¡Ê»Í½½¿ý¡Ë¤ÈÁí¾Î¤µ¤ì¤ë¤¬¡¢¶¹µÁ¤Ë¤Ï¤³¤Î1¼ï¤ò¥·¥¸¥å¥¦¥«¥é¤È¸Æ¤Ö¡£
4107 ' | LC_ALL=${UTF8_LOCALE} ${MAILX} ${ARGS} -Smta=./.tsendmail.sh \
4108 -Sescape=! -Smime-encoding=base64 2>./.terr
4109 check behave:iconv_mbyte_base64-5 0 "${MBOX}" '1686827547 2051'
4110 check behave:iconv_mbyte_base64-6 - ./.terr '4294967295 0'
4112 printf 'eval f 1; write ./.twrite\n' |
4113 ${MAILX} ${ARGS} ${ADDARG_UNI} -Rf "${MBOX}" >./.tlog 2>&1
4114 check behave:iconv_mbyte_base64-7 0 ./.twrite '1259742080 686'
4115 check behave:iconv_mbyte_base64-8 - ./.tlog '500059195 119'
4117 echo 'behave:iconv_mbyte_base64: EUC-JP unsupported, skipping 5-8'
4124 # Some basic tests regarding correct sending of mails, via STDIN / -t / -q,
4125 # including basic MIME Content-Transfer-Encoding correctness (quoted-printable)
4126 # Note we unfortunately need to place some statements without proper
4127 # indentation because of continuation problems
4131 # MIME encoding (QP) stress message body
4133 'Ich bin eine DÖS-Datäi mit sehr langen Zeilen und auch '\
4134 'sonst bin ich ganz schön am Schleudern, da kannste denke '\
4135 "wasde willst, gelle, gelle, gelle, gelle, gelle.\r\n"\
4136 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst \r\n"\
4137 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1\r\n"\
4138 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12\r\n"\
4139 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123\r\n"\
4140 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234\r\n"\
4141 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345\r\n"\
4142 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456\r\n"\
4143 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 1234567\r\n"\
4144 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 12345678\r\n"\
4145 "Ich bin eine DÖS-Datäi mit langen Zeilen und auch sonst 123456789\r\n"\
4146 "Unn ausserdem habe ich trailing SP/HT/SP/HT whitespace \r\n"\
4147 "Unn ausserdem habe ich trailing HT/SP/HT/SP whitespace \r\n"\
4148 "auf den zeilen vorher.\r\n"\
4149 "From am Zeilenbeginn und From der Mitte gibt es auch.\r\n"\
4151 "Die letzte Zeile war nur ein Punkt.\r\n"\
4153 "Das waren deren zwei.\r\n"\
4155 "Die letzte Zeile war ein Leerschritt.\n"\
4156 "=VIER = EQUAL SIGNS=ON A LINE=\r\n"\
4159 "Die letzte Zeile war nur ein Punkt, mit Unix Zeilenende.\n"\
4161 "Das waren deren zwei. ditto.\n"\
4163 "Unn ausseerdem habe ich trailing SP/HT/SP/HT whitespace \n"\
4164 "Unn ausseerdem habe ich trailing HT/SP/HT/SP whitespace \n"\
4165 "auf den zeilen vorher.\n"\
4167 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.\n"\
4168 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.1"\
4170 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4172 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4174 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4176 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4178 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende.12"\
4180 "QP am Zeilenende über soft-nl hinweg\n"\
4181 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4183 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4185 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4187 "Ich bin eine ziemlich lange, steile, scharfe Zeile mit Unix Zeilenende."\
4189 "=VIER = EQUAL SIGNS=ON A LINE=\n"\
4191 "Die letzte Zeile war ein Leerschritt.\n"\
4195 # MIME encoding (QP) stress message subject
4196 SUB="Äbrä Kä?dä=brö Fü?di=bus? \
4197 adadaddsssssssddddddddddddddddddddd\
4198 ddddddddddddddddddddddddddddddddddd\
4199 ddddddddddddddddddddddddddddddddddd\
4200 dddddddddddddddddddd Hallelulja? Od\
4201 er?? eeeeeeeeeeeeeeeeeeeeeeeeeeeeee\
4202 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\
4203 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee f\
4204 fffffffffffffffffffffffffffffffffff\
4205 fffffffffffffffffffff ggggggggggggg\
4206 ggggggggggggggggggggggggggggggggggg\
4207 ggggggggggggggggggggggggggggggggggg\
4208 ggggggggggggggggggggggggggggggggggg\
4211 # Three tests for MIME encoding and (a bit) content classification.
4212 # At the same time testing -q FILE, < FILE and -t FILE
4215 < "${BODY}" ${MAILX} ${ARGS} ${ADDARG_UNI} \
4216 -a "${BODY}" -s "${SUB}" "${MBOX}"
4217 check content:001 0 "${MBOX}" '1145066634 6654'
4220 < /dev/null ${MAILX} ${ARGS} ${ADDARG_UNI} \
4221 -a "${BODY}" -s "${SUB}" -q "${BODY}" "${MBOX}"
4222 check content:002 0 "${MBOX}" '1145066634 6654'
4225 ( echo "To: ${MBOX}" && echo "Subject: ${SUB}" && echo &&
4227 ) | ${MAILX} ${ARGS} ${ADDARG_UNI} -Snodot -a "${BODY}" -t
4228 check content:003 0 "${MBOX}" '1145066634 6654'
4230 # Test for [260e19d] (Juergen Daubert)
4232 echo body | ${MAILX} ${ARGS} "${MBOX}"
4233 check content:004 0 "${MBOX}" '2917662811 98'
4235 # Sending of multiple mails in a single invocation
4237 ( printf "m ${MBOX}\n~s subject1\nE-Mail Körper 1\n~.\n" &&
4238 printf "m ${MBOX}\n~s subject2\nEmail body 2\n~.\n" &&
4240 ) | ${MAILX} ${ARGS} ${ADDARG_UNI}
4241 check content:005 0 "${MBOX}" '2098659767 358'
4245 # "Test for" [d6f316a] (Gavin Troy)
4247 printf "m ${MBOX}\n~s subject1\nEmail body\n~.\nfi ${MBOX}\np\nx\n" |
4248 ${MAILX} ${ARGS} ${ADDARG_UNI} -Spipe-text/plain="@* ${cat}" > "${BODY}"
4249 check content:006 0 "${MBOX}" '2099098650 122'
4250 check content:006-1 - "${BODY}" '794542938 174'
4252 # "Test for" [c299c45] (Peter Hofmann) TODO shouldn't end up QP-encoded?
4255 for(i = 0; i < 10000; ++i)
4257 #printf "\xF0\x90\x87\x90"
4258 }' | ${MAILX} ${ARGS} ${ADDARG_UNI} -s TestSubject "${MBOX}"
4259 check content:007 0 "${MBOX}" '534262374 61816'
4261 ## Test some more corner cases for header bodies (as good as we can today) ##
4265 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4266 -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̲' \
4268 check content:008 0 "${MBOX}" '3370931614 375'
4270 # Single word (overlong line split -- bad standard! Requires injection of
4271 # artificial data!! But can be prevented by using RFC 2047 encoding)
4273 i=`${awk} 'BEGIN{for(i=0; i<92; ++i) printf "0123456789_"}'`
4274 echo | ${MAILX} ${ARGS} -s "${i}" "${MBOX}"
4275 check content:009 0 "${MBOX}" '489922370 1718'
4277 # Combination of encoded words, space and tabs of varying sort
4279 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4280 -s "1Abrä Kaspas1 2Abra Katä b_kaspas2 \
4281 3Abrä Kaspas3 4Abrä Kaspas4 5Abrä Kaspas5 \
4282 6Abra Kaspas6 7Abrä Kaspas7 8Abra Kaspas8 \
4283 9Abra Kaspastäb4-3 10Abra Kaspas1 _ 11Abra Katäb1 \
4284 12Abra Kadabrä1 After Tab after Täb this is NUTS" \
4286 check content:010 0 "${MBOX}" '1676887734 591'
4288 # Overlong multibyte sequence that must be forcefully split
4289 # todo This works even before v15.0, but only by accident
4291 echo | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4292 -s "✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4293 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄\
4294 ✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄✄" \
4296 check content:011 0 "${MBOX}" '3029301775 659'
4300 echo | ${MAILX} ${ARGS} \
4301 -s "1-1 B2 B3 B4 B5 B6 B\
4302 1-2 B2 B3 B4 B5 B6 B\
4303 1-3 B2 B3 B4 B5 B6 B\
4304 1-4 B2 B3 B4 B5 B6 B\
4305 1-5 B2 B3 B4 B5 B6 B\
4306 1-6 B2 B3 B4 B5 B6 " \
4308 check content:012 0 "${MBOX}" '4126167195 297'
4310 # Leading and trailing WS
4312 echo | ${MAILX} ${ARGS} \
4313 -s " 2-1 B2 B3 B4 B5 B6 B\
4314 1-2 B2 B3 B4 B5 B6 B\
4315 1-3 B2 B3 B4 B5 B6 B\
4316 1-4 B2 B3 B4 B5 B6 " \
4318 check content:013 0 "${MBOX}" '3600624479 236'
4320 # Quick'n dirty RFC 2231 test; i had more when implementing it, but until we
4321 # have a (better) test framework materialize a quick shot
4323 TRAP_EXIT_ADDONS=./.ttt
4325 mkdir ./.ttt || exit 1
4329 : > 'diet\ is \curd.txt'
4330 : > 'diet "is" curd.txt'
4332 : > 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
4333 : > höde__tröge__müde__dätte__hätte__vuelle__guelle__aese__aesse__sauerliche__kräuter__österliche__grüße__mäh.txt
4334 : > hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt
4335 : > ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
4337 echo bla | ${MAILX} ${ARGS} ${ADDARG_UNI} \
4338 -a "./.ttt/ma'ger.txt" -a "./.ttt/mä'ger.txt" \
4339 -a './.ttt/diet\ is \curd.txt' -a './.ttt/diet "is" curd.txt' \
4340 -a ./.ttt/höde-tröge.txt \
4341 -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 \
4342 -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 \
4343 -a ./.ttt/hööööööööööööööööö_nöööööööööööööööööööööö_düüüüüüüüüüüüüüüüüüü_bäääääääääääääääääääääääh.txt \
4344 -a ./.ttt/✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt \
4346 check content:014-1 0 "${MBOX}" '684985954 3092'
4348 # `resend
' test, reusing $MBOX
4350 printf "Resend ${BODY}\nx\n" | ${MAILX} ${ARGS} -Rf "${MBOX}"
4351 check content:014-2 0 "${BODY}" '684985954 3092'
4354 printf "resend ${BODY}\nx\n" | ${MAILX} ${ARGS} -Rf "${MBOX}"
4355 check content:014-3 0 "${BODY}" '3130352658 3148'
4361 # if have_feat devel; then
4362 # ARGS="${ARGS} -Smemdebug"
4366 if [ -n "${UTF8_LOCALE}" ]; then
4367 printf 'Using Unicode locale
%s
\n' "${UTF8_LOCALE}"
4369 printf 'No Unicode locale found
, disabling Unicode tests
\n'
4376 if [ -z "${CHECK_ONLY}" ]; then
4382 [ ${ESTAT} -eq 0 ] && echo Ok || echo >&2 'Errors occurred
'