#! /bin/sh
# Generated from testsuite.at by GNU Autoconf 2.71.
#
# Copyright (C) 2009-2017, 2020-2021 Free Software Foundation, Inc.
#
# This test suite is free software; the Free Software Foundation gives
# unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
as_nop=:
if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else $as_nop
  case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi



# Reset variables that may have inherited troublesome values from
# the environment.

# IFS needs to be set, to space, tab, and newline, in precisely that order.
# (If _AS_PATH_WALK were called with IFS unset, it would have the
# side effect of setting IFS to empty, thus disabling word splitting.)
# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
IFS=" ""	$as_nl"

PS1='$ '
PS2='> '
PS4='+ '

# Ensure predictable behavior from utilities with locale-dependent output.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# We cannot yet rely on "unset" to work, but we need these variables
# to be unset--not just set to an empty or harmless value--now, to
# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
# also avoids known problems related to "unset" and subshell syntax
# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
do eval test \${$as_var+y} \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done

# Ensure that fds 0, 1, and 2 are open.
if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi

# The user is always right.
if ${PATH_SEPARATOR+false} :; then
  PATH_SEPARATOR=:
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
      PATH_SEPARATOR=';'
  }
fi


# Find who we are.  Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
  *[\\/]* ) as_myself=$0 ;;
  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
  done
IFS=$as_save_IFS

     ;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
  as_myself=$0
fi
if test ! -f "$as_myself"; then
  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi


if test "x$CONFIG_SHELL" = x; then
  as_bourne_compatible="as_nop=:
if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '\${1+\"\$@\"}'='\"\$@\"'
  setopt NO_GLOB_SUBST
else \$as_nop
  case \`(set -o) 2>/dev/null\` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi
"
  as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }

exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" )
then :

else \$as_nop
  exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
blah=\$(echo \$(echo blah))
test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
  if (eval "$as_required") 2>/dev/null
then :
  as_have_required=yes
else $as_nop
  as_have_required=no
fi
  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
then :

else $as_nop
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
  as_found=:
  case $as_dir in #(
	 /*)
	   for as_base in sh bash ksh sh5; do
	     # Try only shells that exist, to save several forks.
	     as_shell=$as_dir$as_base
	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
		    as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$as_shell as_have_required=yes
		   if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
then :
  break 2
fi
fi
	   done;;
       esac
  as_found=false
done
IFS=$as_save_IFS
if $as_found
then :

else $as_nop
  if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
	      as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$SHELL as_have_required=yes
fi
fi


      if test "x$CONFIG_SHELL" != x
then :
  export CONFIG_SHELL
             # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi

    if test x$as_have_required = xno
then :
  printf "%s\n" "$0: This script requires a shell more modern than all"
  printf "%s\n" "$0: the shells that I found on your system."
  if test ${ZSH_VERSION+y} ; then
    printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
    printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
  else
    printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
  fi
  exit 1
fi
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS

## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset


# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
  return $1
} # as_fn_set_status

# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
  set +e
  as_fn_set_status $1
  exit $1
} # as_fn_exit
# as_fn_nop
# ---------
# Do nothing but, unlike ":", preserve the value of $?.
as_fn_nop ()
{
  return $?
}
as_nop=as_fn_nop

# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{

  case $as_dir in #(
  -*) as_dir=./$as_dir;;
  esac
  test -d "$as_dir" || eval $as_mkdir_p || {
    as_dirs=
    while :; do
      case $as_dir in #(
      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_dir" : 'X\(//\)[^/]' \| \
	 X"$as_dir" : 'X\(//\)$' \| \
	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      test -d "$as_dir" && break
    done
    test -z "$as_dirs" || eval "mkdir $as_dirs"
  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"


} # as_fn_mkdir_p

# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
  test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
then :
  eval 'as_fn_append ()
  {
    eval $1+=\$2
  }'
else $as_nop
  as_fn_append ()
  {
    eval $1=\$$1\$2
  }
fi # as_fn_append

# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
then :
  eval 'as_fn_arith ()
  {
    as_val=$(( $* ))
  }'
else $as_nop
  as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  }
fi # as_fn_arith


# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
  as_status=$1; test $as_status -eq 0 && as_status=1
  if test "$4"; then
    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  printf "%s\n" "$as_me: error: $2" >&2
  as_fn_exit $as_status
} # as_fn_error

if expr a : '\(a\)' >/dev/null 2>&1 &&
   test "X`expr 00001 : '.*\(...\)'`" = X001; then
  as_expr=expr
else
  as_expr=false
fi

if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
  as_basename=basename
else
  as_basename=false
fi

as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
	 X"$0" : 'X\(//\)$' \| \
	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X/"$0" |
    sed '/^.*\/\([^/][^/]*\)\/*$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`

if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  as_dirname=dirname
else
  as_dirname=false
fi

# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits


  as_lineno_1=$LINENO as_lineno_1a=$LINENO
  as_lineno_2=$LINENO as_lineno_2a=$LINENO
  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
  sed -n '
    p
    /[$]LINENO/=
  ' <$as_myself |
    sed '
      s/[$]LINENO.*/&-/
      t lineno
      b
      :lineno
      N
      :loop
      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
      t loop
      s/-\n.*//
    ' >$as_me.lineno &&
  chmod +x "$as_me.lineno" ||
    { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }

  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
  # already done that, so ensure we don't try to do so again and fall
  # in an infinite loop.  This has already happened in practice.
  _as_can_reexec=no; export _as_can_reexec
  # Don't try to exec as it changes $[0], causing all sort of problems
  # (the dirname of $[0] is not the place where we might find the
  # original and so on.  Autoconf is especially sensitive to this).
  . "./$as_me.lineno"
  # Exit status is that of the last command.
  exit
}


# Determine whether it's possible to make 'echo' print without a newline.
# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
  case `echo 'xy\c'` in
  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  xy)  ECHO_C='\c';;
  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
       ECHO_T='	';;
  esac;;
*)
  ECHO_N='-n';;
esac

# For backward compatibility with old third-party macros, we provide
# the shell variables $as_echo and $as_echo_n.  New code should use
# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
as_echo='printf %s\n'
as_echo_n='printf %s'


rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
  rm -f conf$$.dir/conf$$.file
else
  rm -f conf$$.dir
  mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
  if ln -s conf$$.file conf$$ 2>/dev/null; then
    as_ln_s='ln -s'
    # ... but there are two gotchas:
    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    # In both cases, we have to default to `cp -pR'.
    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
      as_ln_s='cp -pR'
  elif ln conf$$.file conf$$ 2>/dev/null; then
    as_ln_s=ln
  else
    as_ln_s='cp -pR'
  fi
else
  as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null

if mkdir -p . 2>/dev/null; then
  as_mkdir_p='mkdir -p "$as_dir"'
else
  test -d ./-p && rmdir ./-p
  as_mkdir_p=false
fi

as_test_x='test -x'
as_executable_p=as_fn_executable_p

# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"

# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"





SHELL=${CONFIG_SHELL-/bin/sh}

# How were we run?
at_cli_args="$@"


# Not all shells have the 'times' builtin; the subshell is needed to make
# sure we discard the 'times: not found' message from the shell.
at_times_p=false
(times) >/dev/null 2>&1 && at_times_p=:

# CLI Arguments to pass to the debugging scripts.
at_debug_args=
# -e sets to true
at_errexit_p=false
# Shall we be verbose?  ':' means no, empty means yes.
at_verbose=:
at_quiet=
# Running several jobs in parallel, 0 means as many as test groups.
at_jobs=1
at_traceon=:
at_trace_echo=:
at_check_filter_trace=:

# Shall we keep the debug scripts?  Must be `:' when the suite is
# run by a debug script, so that the script doesn't remove itself.
at_debug_p=false
# Display help message?
at_help_p=false
# Display the version message?
at_version_p=false
# List test groups?
at_list_p=false
# --clean
at_clean=false
# Test groups to run
at_groups=
# Whether to rerun failed tests.
at_recheck=
# Whether a write failure occurred
at_write_fail=0

# The directory we run the suite in.  Default to . if no -C option.
at_dir=`pwd`
# An absolute reference to this testsuite script.
case $as_myself in
  [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;;
  * ) at_myself=$at_dir/$as_myself ;;
esac
# Whether -C is in effect.
at_change_dir=false

# Whether to enable colored test results.
at_color=no
# As many question marks as there are digits in the last test group number.
# Used to normalize the test group numbers so that `ls' lists them in
# numerical order.
at_format='???'
# Description of all the test groups.
at_help_all="1;version.at:17;mailfromd version;;
2;vercmp.at:17;vercmp;vercmp00;
3;vercmp01.at:17;vercmp: invalid 1st argument;vercmp vercmp01;
4;vercmp02.at:17;vercmp: invalid 2nd argument;vercmp vercmp02;
5;static01.at:17;static variables visibility;module static static01 variable variables;
6;static02.at:17;implicit static functions;module static static02 variable variables;
7;public.at:17;public variables visibility;module public variable variables;
8;shadow.at:17;variable shadowing;variable variables shadow;
9;ashadow.at:17;duplicate declarations of automatic variables;variable variables shadow auto ashadow;
10;enum.at:17;enumerations;const enum;
11;ack.at:17;Ackerman function;ack;
12;arg.at:17;Function arguments;arg;
13;vararg.at:17;Variadic functions;vararg;
14;alias.at:17;Function aliases;alias;
15;bctx00.at:17;Builtin in wrong context;context builtin-context bctx bctx00;
16;bctx01.at:17;Builtin in correct context;context builtin-context bctx bctx01;
17;fctx00.at:17;Function in wrong context;context function-context fctx fctx00;
18;fctx01.at:17;Function in correct context;context function-context fctx fctx01;
19;ml.at:17;Multiline strings;ml multiline multi-line;
20;ml01.at:17;var refs in multiline;ml multiline multi-line ml01;
21;declvar.at:17;Declared variables;declvar variable variables;
22;arginit.at:16;Use of uninitialized variables;arginit variable variables;
23;vapass.at:17;passing variadic arguments;vapass;
24;stkadj.at:17;stack adjustment after function calls;funcall stkadj;
25;shiftadj.at:17;stack adjustment after function calls with variadic shifts;funcall shiftadj;
26;ignoreret.at:17;ignored function return;;
27;cond01.at:17;String equality;cond cond01;
28;cond02.at:17;Fnmatch;cond cond02 fnmatch fnmatch1;
29;cond04.at:17;Regex match;cond cond04 regex regex1;
30;cond06.at:17;Nested if;cond cond06 nested;
31;switchn1.at:17;Numeric switch: Branch 1,2 val 1;switch numswitch switchn1;
32;switchn2.at:17;Numeric switch: Branch 1,2 val 1;switch numswitch switchn2;
33;switchn3.at:17;Numeric switch: Branch 3;switch numswitch switchn3;
34;switchn4.at:17;Numeric switch: Default branch;switch numswitch switchn4;
35;switchs1.at:17;String switch: Branch 1,2 val jeden;switch strswitch switchs1;
36;switchs2.at:17;String switch: Branch 1,2 val dwa;switch strswitch switchs2;
37;switchs3.at:17;String switch: Branch 3;switch strswitch switchs3;
38;switchs4.at:17;String switch: Default branch;switch strswitch switchs4;
39;next01.at:17;next01;next01 next loop;
40;next02.at:17;next02;next02 next loop;
41;next03.at:17;Next in a do-while loop;next03 loop next;
42;macros.at:17;Built-in macros;macros builtin built-in macros00;
43;expstr.at:17;macro expansion in strings within pragma;pragma macros macros01;
44;miltermacros.at:17;pragma miltermacros;pragma miltermacros;
45;catch.at:17;Catching exceptions in handler;exceptions catch setex;
46;catch01.at:17;Catching exceptions in function;exceptions catch catch01 setex01;
47;catch02.at:17;Catching exceptions in prog begin;exceptions catch catch02 setex02;
48;catch03.at:17;Positional arguments in catch;exceptions catch;
49;trycatch01.at:17;Try-catch: returning from try;try catch return try-catch trycatch try-catch01 trycatch01;
50;trycatch02.at:17;Try-catch: returning from catch;try catch return try-catch trycatch try-catch02 trycatch02;
51;trycatch03.at:17;Try-catch: passing through try;try catch try-catch trycatch try-catch03 trycatch03;
52;trycatch04.at:17;Try-catch: passing through catch;try catch try-catch trycatch try-catch04 trycatch04;
53;trycatch05.at:17;Try-catch: break from try;try catch break try-catch trycatch try-catch05 trycatch05;
54;trycatch06.at:17;Try-catch: break from catch;try catch break try-catch trycatch try-catch06 trycatch06;
55;trycatch07.at:17;Try-catch: next from try;try catch next loop try-catch trycatch try-catch07 trycatch07;
56;trycatch08.at:17;Try-catch: next from catch;try catch next loop try-catch trycatch try-catch08 trycatch08;
57;trycatch09.at:17;Try-catch: break from nested try;try catch break try-catch trycatch try-catch09 trycatch09;
58;trycatch10.at:17;Try-catch: break from nested catch;try catch break try-catch trycatch try-catch10 trycatch10;
59;trycatch11.at:17;Try-catch: next from nested try;try catch next loop try-catch trycatch try-catch11 trycatch11;
60;trycatch12.at:17;Try-catch: next from nested catch;try catch next loop try-catch trycatch try-catch12 trycatch12;
61;trycatch13.at:17;Try-catch: break from a loop within try;try catch break try-catch trycatch try-catch13 trycatch13;
62;trycatch14.at:17;Try-catch: break from a loop within catch;try catch break try-catch trycatch try-catch14 trycatch14;
63;trycatch15.at:17;Try-catch: next in a loop within try;try catch next loop try-catch trycatch try-catch15 trycatch15;
64;trycatch16.at:17;Try-catch: next in a loop within catch;try catch break loop try-catch trycatch try-catch16 trycatch16;
65;strace.at:17;Stack traces;strace srace01;
66;startup.at:19;startup;startup handler;
67;progord.at:19;Handler order;progord prog handler;
68;progdup.at:23;Duplicated handlers;progdup prog dup handler;
69;accept.at:17;Accept action;actions accept;
70;reject.at:17;Reject action;actions reject;
71;tempfail.at:17;Tempfail action;actions tempfail;
72;hook.at:17;Action hooks;actions hooks;
73;connargs.at:17;Arguments to connect;connect arguments;
74;heloargs.at:17;Arguments to helo;helo arguments;
75;fromargs.at:17;Arguments to envfrom;fromargs envfrom arguments;
76;rcptargs.at:17;Arguments to envrcpt;envrcpt arguments;
77;hdrargs.at:17;Arguments to header;header arguments;
78;eohargs.at:17;Arguments to eoh;eoh arguments;
79;bodyargs.at:17;Arguments to body;body arguments;
80;eomargs.at:17;Arguments to eom;eom arguments;
81;connect00.at:17;Connect: stdio;handler connect connect-stdio stdio connect00;
82;connect01.at:17;Connect: unix;handler connect connect-unix stdio connect01;
83;connect02.at:17;Connect: inet;handler connect connect-inet ip4 connect02;
84;connect03.at:17;Connect: inet6;handler connect connect-inet6 ip6 stdio connect03;
85;module01.at:17;module: require;module module01 require variable variables;
86;module02.at:17;module: import literal;module module02 import import01 variable variables;
87;module03.at:17;module: import regex;module module03 import import02 variable variables;
88;module04.at:17;module: import regex (not matching);module module04 import import03 variable variables;
89;module05.at:17;module: import + xform;module module05 import import04 variable variables;
90;module06.at:17;module: clean namespace;module module06 import import05 variable variables;
91;module07.at:17;module: variable allocation;module module07 import import06 variable variables;
92;mfmod01.at:17;dynamically loaded modules;module mfmod mfmod01;
93;mfmod02.at:17;error reporting and type checking;module mfmod mfmod02;
94;mfmod03.at:17;mfmod variadic functions;module mfmod mfmod03;
95;numrcpt.at:17;rcpt_count;rcpt_count numrcpt;
96;rset.at:20;rset;rset;
97;resolv_a.at:17;A lookup;ip4 dns dns_ip4 resolv resolv_ip4 resolv_a;
98;resolv_ptr.at:17;PTR lookup;ip4 dns dns_ip4 resolv resolv_ip4 resolv_ptr resolv_ptr_ip4;
99;resolv_ptr.at:37;PTR lookup (IPv6);ip6 dns dns_ip6 resolv resolv_ip6 resolv_ptr resolv_ptr_ip6;
100;resolv_txt.at:17;TXT lookup;ip4 dns dns_ip4 resolv resolv_ip4 resolv_txt;
101;resolv_mx.at:17;MX lookup;ip4 dns dns_ip4 resolv resolv_ip4 resolv_mx;
102;resolv_spf.at:17;SPF lookup;ip4 dns dns_ip4 resolv resolv_ip4 resolv_spf;
103;resolv_ptr_val.at:17;PTR validate;ip4 dns dns_ip4 resolv resolv_ip4 resolv_ptr_val resolv_ptr_val_ip4;
104;resolv_ptr_val.at:28;PTR validate (IPv6);ip6 dns dns_ip6 resolv resolv_ip6 resolv_ptr_val resolv_ptr_val_ip6;
105;resolv_cnamechain.at:17;CNAME chains;ip4 dns dns_ip4 resolv resolv_ip4 resolv_cnamechain;
106;dns_query.at:46;dns_query: a;ip4 dns dns_ip4 dns_query dsn_query_ip4 dns_query_a;
107;dns_query.at:58;dns_query: ptr;ip4 dns dns_ip4 dns_query dns_query_ip4 dns_query_ptr;
108;dns_query.at:68;dns_query: txt;ip4 dns dns_ip4 dns_query dns_query_ip4 dns_query_txt;
109;dns_query.at:79;dns_query: ns;ip4 dns dns_ip4 dns_query dns_query_ip4 dns_query_ns;
110;dns_query.at:98;dns_query: aaaa;ip6 dns dns_ip6 dns_query dns_query_ip6 dns_query_aaaa;
111;dns_query.at:113;dns_query: mx;ip4 dns dns_ip4 dns_query dns_query_ip4 dns_query_mx dns_query_mx_ip6;
112;dns_query.at:142;dns_query: mx (IPv6);ip6 dns dns_ip6 dns_query dns_query_ip6 dns_query_mx_ip6;
113;resolve.at:17;Resolve;ip4 dns dns_ip4 resolv resolv_ip4 resolve resolve_ip4;
114;resolve.at:53;Resolve (IPv6);ip6 dns dns_ip6 resolv resolv_ip6 resolve resolve_ip6;
115;rescname.at:17;Resolve cname;ip4 dns dns_ip4 resolv resolv_ip4 rescname;
116;hostname.at:17;Resolve hostname;ip4 dns dns_ip4 resolv resolv_ip4 hostname;
117;hasmx.at:17;Hasmx call;ip4 dns dns_ip4 hasmx;
118;ismx.at:17;Ismx call;ip4 dns dns_ip4 ismx ismx_ip4;
119;ismx.at:42;Ismx call (IPv6);ip6 dns dns_ip6 ismx ismx_ip6;
120;relayed01.at:17;Relayed: Not a relayed host;relayed relayed01;
121;relayed02.at:17;Relayed: Relayed host;relayed relayed02;
122;greylist.at:17;Greylisting (traditional style);greylist greylist-gray;
123;greylist-ct.at:17;Greylisting (new style);greylist greylist-ct;
124;curmsg.at:25;Working current_message;curmsg;
125;nulmsg.at:17;message_body_is_empty;nullmsg nulmsg message_body_is_empty;
126;hdr-count.at:17;current_header_count;curhdr;
127;hdr-get.at:17;current_header;curhdr current_header_0;
128;hdr-getn.at:17;current_header(name,ind);curhdr current_header_n;
129;hdr-gete.at:17;current_header(name,ind) - exception;curhdr current_header_e;
130;hdr-itr.at:17;current_header(name,ind) - iteration;curhdr current_header_i;
131;hdr-all.at:17;current_header(name,ind) - iteration over all;curhdr current_header_a;
132;hdr-cap.at:17;current_header vs. capturing;curhdr current_header_cap;
133;hdr-mul.at:17;multiple message capturing;curhdr current_header_mul;
134;read.at:17;read function;io read;
135;write.at:17;write function;io write;
136;getline.at:17;getline function;io getline;
137;getdelim.at:17;getdelim function;io getdelim;
138;tempfile.at:17;tempfile;io tempfile;
139;spfexp.at:42;%{s};spf spfexp;
140;spfexp.at:42;%{o};spf spfexp;
141;spfexp.at:42;%{d};spf spfexp;
142;spfexp.at:42;%{d5};spf spfexp;
143;spfexp.at:42;%{d4};spf spfexp;
144;spfexp.at:42;%{d3};spf spfexp;
145;spfexp.at:42;%{d2};spf spfexp;
146;spfexp.at:42;%{d1};spf spfexp;
147;spfexp.at:42;%{d2r};spf spfexp;
148;spfexp.at:42;%{l};spf spfexp;
149;spfexp.at:42;%{l-};spf spfexp;
150;spfexp.at:42;%{lr};spf spfexp;
151;spfexp.at:42;%{lr-};spf spfexp;
152;spfexp.at:42;%{l1r-};spf spfexp;
153;spfexp.at:42;%{ir}.%{v}._spf.%{d2};spf spfexp;
154;spfexp.at:42;%{lr-}.lp._spf.%{d2};spf spfexp;
155;spfexp.at:42;%{lr-}.lp.%{ir}.%{v}._spf.%{d2};spf spfexp;
156;spfexp.at:42;%{ir}.%{v}.%{l1r-}.lp._spf.%{d2};spf spfexp;
157;spfexp.at:42;%{d3}.trusted-domains.example.net;spf spfexp;
158;spf.at:42;all;spf all;
159;spf.at:47;a;spf a;
160;spf.at:58;mx;spf mx;
161;spf.at:72;ptr;spf ptr;
162;spf.at:86;ip4;spf ip4;
163;spf.at:100;ip6;spf ip6;
164;spf.at:117;exists;spf exists;
165;strings.at:17;String functions;string strings string-functions strfunc;
166;tr.at:17;tr;string strings string-functions strfunc tr;
167;dc.at:17;dc;string strings string-functions strfunc dc;
168;sq.at:17;sq;string strings string-functions strfunc sq;
169;sed.at:17;sed builtin;sed;
170;strftime.at:17;Strftime function;strftime;
171;cidr.at:17;cidr;cidr;
172;regopt0.at:17;regex on optimization level 0;regex regopt regopt0;
173;setvar.at:17;setvar;setvar variable variables;
174;shellmagic.at:17;Initial shell comment;shellmagic;
175;commaize.at:17;Commaize;sendmail commaize;
176;poll.at:17;poll: Existing sender;poll exist poll00;
177;poll01.at:17;poll: Non-existing sender;poll non-exist poll01;
178;poll02.at:17;poll: Tempfail;poll tempfail poll02;
179;poll03.at:17;poll: Multiple from addresses;poll multiple poll03;
180;poll04.at:17;on poll without address;poll poll04;
181;cdb.at:16;cdb;module cdb;
182;dnsbl.at:17;dnsbl;dnsbl;
"
# List of the all the test groups.
at_groups_all=`printf "%s\n" "$at_help_all" | sed 's/;.*//'`

# at_fn_validate_ranges NAME...
# -----------------------------
# Validate and normalize the test group number contained in each variable
# NAME. Leading zeroes are treated as decimal.
at_fn_validate_ranges ()
{
  for at_grp
  do
    eval at_value=\$$at_grp
    if test $at_value -lt 1 || test $at_value -gt 182; then
      printf "%s\n" "invalid test group: $at_value" >&2
      exit 1
    fi
    case $at_value in
      0*) # We want to treat leading 0 as decimal, like expr and test, but
	  # AS_VAR_ARITH treats it as octal if it uses $(( )).
	  # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the
	  # expr fork, but it is not worth the effort to determine if the
	  # shell supports XSI when the user can just avoid leading 0.
	  eval $at_grp='`expr $at_value + 0`' ;;
    esac
  done
}
# List of the tested programs.
at_tested='"mailfromd"'


at_prev=
for at_option
do
  # If the previous option needs an argument, assign it.
  if test -n "$at_prev"; then
    at_option=$at_prev=$at_option
    at_prev=
  fi

  case $at_option in
  *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;;
  *)    at_optarg= ;;
  esac

  case $at_option in
    --help | -h )
	at_help_p=:
	;;

    --list | -l )
	at_list_p=:
	;;

    --version | -V )
	at_version_p=:
	;;

    --clean | -c )
	at_clean=:
	;;

    --color )
	at_color=always
	;;
    --color=* )
	case $at_optarg in
	no | never | none) at_color=never ;;
	auto | tty | if-tty) at_color=auto ;;
	always | yes | force) at_color=always ;;
	*) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'`
	   as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;;
	esac
	;;

    --debug | -d )
	at_debug_p=:
	;;

    --errexit | -e )
	at_debug_p=:
	at_errexit_p=:
	;;

    --verbose | -v )
	at_verbose=; at_quiet=:
	;;

    --trace | -x )
	at_traceon='set -x'
	at_trace_echo=echo
	at_check_filter_trace=at_fn_filter_trace
	;;

    [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9])
	at_fn_validate_ranges at_option
	as_fn_append at_groups "$at_option$as_nl"
	;;

    # Ranges
    [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-)
	at_range_start=`echo $at_option |tr -d X-`
	at_fn_validate_ranges at_range_start
	at_range=`printf "%s\n" "$at_groups_all" | \
	  sed -ne '/^'$at_range_start'$/,$p'`
	as_fn_append at_groups "$at_range$as_nl"
	;;

    -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9])
	at_range_end=`echo $at_option |tr -d X-`
	at_fn_validate_ranges at_range_end
	at_range=`printf "%s\n" "$at_groups_all" | \
	  sed -ne '1,/^'$at_range_end'$/p'`
	as_fn_append at_groups "$at_range$as_nl"
	;;

    [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \
    [0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9] | \
    [0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9] | \
    [0-9][0-9][0-9]-[0-9][0-9][0-9] | \
    [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \
    [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] )
	at_range_start=`expr $at_option : '\(.*\)-'`
	at_range_end=`expr $at_option : '.*-\(.*\)'`
	if test $at_range_start -gt $at_range_end; then
	  at_tmp=$at_range_end
	  at_range_end=$at_range_start
	  at_range_start=$at_tmp
	fi
	at_fn_validate_ranges at_range_start at_range_end
	at_range=`printf "%s\n" "$at_groups_all" | \
	  sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'`
	as_fn_append at_groups "$at_range$as_nl"
	;;

    # Directory selection.
    --directory | -C )
	at_prev=--directory
	;;
    --directory=* )
	at_change_dir=:
	at_dir=$at_optarg
	if test x- = "x$at_dir" ; then
	  at_dir=./-
	fi
	;;

    # Parallel execution.
    --jobs | -j )
	at_jobs=0
	;;
    --jobs=* | -j[0-9]* )
	if test -n "$at_optarg"; then
	  at_jobs=$at_optarg
	else
	  at_jobs=`expr X$at_option : 'X-j\(.*\)'`
	fi
	case $at_jobs in *[!0-9]*)
	  at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'`
	  as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;;
	esac
	;;

    # Keywords.
    --keywords | -k )
	at_prev=--keywords
	;;
    --keywords=* )
	at_groups_selected=$at_help_all
	at_save_IFS=$IFS
	IFS=,
	set X $at_optarg
	shift
	IFS=$at_save_IFS
	for at_keyword
	do
	  at_invert=
	  case $at_keyword in
	  '!'*)
	    at_invert="-v"
	    at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'`
	    ;;
	  esac
	  # It is on purpose that we match the test group titles too.
	  at_groups_selected=`printf "%s\n" "$at_groups_selected" |
	      grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"`
	done
	# Smash the keywords.
	at_groups_selected=`printf "%s\n" "$at_groups_selected" | sed 's/;.*//'`
	as_fn_append at_groups "$at_groups_selected$as_nl"
	;;
    --recheck)
	at_recheck=:
	;;

    *=*)
	at_envvar=`expr "x$at_option" : 'x\([^=]*\)='`
	# Reject names that are not valid shell variable names.
	case $at_envvar in
	  '' | [0-9]* | *[!_$as_cr_alnum]* )
	    as_fn_error $? "invalid variable name: \`$at_envvar'" ;;
	esac
	at_value=`printf "%s\n" "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
	# Export now, but save eval for later and for debug scripts.
	export $at_envvar
	as_fn_append at_debug_args " $at_envvar='$at_value'"
	;;

     *) printf "%s\n" "$as_me: invalid option: $at_option" >&2
	printf "%s\n" "Try \`$0 --help' for more information." >&2
	exit 1
	;;
  esac
done

# Verify our last option didn't require an argument
if test -n "$at_prev"
then :
  as_fn_error $? "\`$at_prev' requires an argument"
fi

# The file containing the suite.
at_suite_log=$at_dir/$as_me.log

# Selected test groups.
if test -z "$at_groups$at_recheck"; then
  at_groups=$at_groups_all
else
  if test -n "$at_recheck" && test -r "$at_suite_log"; then
    at_oldfails=`sed -n '
      /^Failed tests:$/,/^Skipped tests:$/{
	s/^[ ]*\([1-9][0-9]*\):.*/\1/p
      }
      /^Unexpected passes:$/,/^## Detailed failed tests/{
	s/^[ ]*\([1-9][0-9]*\):.*/\1/p
      }
      /^## Detailed failed tests/q
      ' "$at_suite_log"`
    as_fn_append at_groups "$at_oldfails$as_nl"
  fi
  # Sort the tests, removing duplicates.
  at_groups=`printf "%s\n" "$at_groups" | sort -nu | sed '/^$/d'`
fi

if test x"$at_color" = xalways \
   || { test x"$at_color" = xauto && test -t 1; }; then
  at_red=`printf '\033[0;31m'`
  at_grn=`printf '\033[0;32m'`
  at_lgn=`printf '\033[1;32m'`
  at_blu=`printf '\033[1;34m'`
  at_std=`printf '\033[m'`
else
  at_red= at_grn= at_lgn= at_blu= at_std=
fi

# Help message.
if $at_help_p; then
  cat <<_ATEOF || at_write_fail=1
Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS]

Run all the tests, or the selected TESTS, given by numeric ranges, and
save a detailed log file.  Upon failure, create debugging scripts.

Do not change environment variables directly.  Instead, set them via
command line arguments.  Set \`AUTOTEST_PATH' to select the executables
to exercise.  Each relative directory is expanded as build and source
directories relative to the top level of this distribution.
E.g., from within the build directory /tmp/foo-1.0, invoking this:

  $ $0 AUTOTEST_PATH=bin

is equivalent to the following, assuming the source directory is /src/foo-1.0:

  PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0
_ATEOF
cat <<_ATEOF || at_write_fail=1

Operation modes:
  -h, --help     print the help message, then exit
  -V, --version  print version number, then exit
  -c, --clean    remove all the files this test suite might create and exit
  -l, --list     describes all the tests, or the selected TESTS
_ATEOF
cat <<_ATEOF || at_write_fail=1

Execution tuning:
  -C, --directory=DIR
                 change to directory DIR before starting
      --color[=never|auto|always]
                 enable colored test results on terminal, or always
  -j, --jobs[=N]
                 Allow N jobs at once; infinite jobs with no arg (default 1)
  -k, --keywords=KEYWORDS
                 select the tests matching all the comma-separated KEYWORDS
                 multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD
      --recheck  select all tests that failed or passed unexpectedly last time
  -e, --errexit  abort as soon as a test fails; implies --debug
  -v, --verbose  force more detailed output
                 default for debugging scripts
  -d, --debug    inhibit clean up and top-level logging
                 default for debugging scripts
  -x, --trace    enable tests shell tracing
_ATEOF
cat <<_ATEOF || at_write_fail=1

Report bugs to <bug-mailfromd@gnu.org.ua>.
_ATEOF
  exit $at_write_fail
fi

# List of tests.
if $at_list_p; then
  cat <<_ATEOF || at_write_fail=1
mailfromd 9.0 test suite test groups:

 NUM: FILE-NAME:LINE     TEST-GROUP-NAME
      KEYWORDS

_ATEOF
  # Pass an empty line as separator between selected groups and help.
  printf "%s\n" "$at_groups$as_nl$as_nl$at_help_all" |
    awk 'NF == 1 && FS != ";" {
	   selected[$ 1] = 1
	   next
	 }
	 /^$/ { FS = ";" }
	 NF > 0 {
	   if (selected[$ 1]) {
	     printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3
	     if ($ 4) {
	       lmax = 79
	       indent = "     "
	       line = indent
	       len = length (line)
	       n = split ($ 4, a, " ")
	       for (i = 1; i <= n; i++) {
		 l = length (a[i]) + 1
		 if (i > 1 && len + l > lmax) {
		   print line
		   line = indent " " a[i]
		   len = length (line)
		 } else {
		   line = line " " a[i]
		   len += l
		 }
	       }
	       if (n)
		 print line
	     }
	   }
	 }' || at_write_fail=1
  exit $at_write_fail
fi
if $at_version_p; then
  printf "%s\n" "$as_me (mailfromd 9.0)" &&
  cat <<\_ATEOF || at_write_fail=1

Copyright (C) 2021 Free Software Foundation, Inc.
This test suite is free software; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
_ATEOF
  exit $at_write_fail
fi

# Should we print banners?  Yes if more than one test is run.
case $at_groups in #(
  *$as_nl* )
      at_print_banners=: ;; #(
  * ) at_print_banners=false ;;
esac
# Text for banner N, set to a single space once printed.
# Banner 1. testsuite.at:139
# Category starts at test group 1.
at_banner_text_1="Version"
# Banner 2. testsuite.at:145
# Category starts at test group 5.
at_banner_text_2="Scope of Visibility"
# Banner 3. testsuite.at:150
# Category starts at test group 8.
at_banner_text_3="Variable Shadowing"
# Banner 4. testsuite.at:154
# Category starts at test group 10.
at_banner_text_4="MFL"
# Banner 5. testsuite.at:179
# Category starts at test group 27.
at_banner_text_5="Conditionals"
# Banner 6. testsuite.at:185
# Category starts at test group 31.
at_banner_text_6="Switch"
# Banner 7. testsuite.at:196
# Category starts at test group 39.
at_banner_text_7="Breaking Loops"
# Banner 8. testsuite.at:201
# Category starts at test group 42.
at_banner_text_8="Macros"
# Banner 9. testsuite.at:206
# Category starts at test group 45.
at_banner_text_9="Exception handling"
# Banner 10. testsuite.at:231
# Category starts at test group 66.
at_banner_text_10="Handlers"
# Banner 11. testsuite.at:236
# Category starts at test group 69.
at_banner_text_11="Actions"
# Banner 12. testsuite.at:242
# Category starts at test group 73.
at_banner_text_12="Handler Arguments"
# Banner 13. testsuite.at:252
# Category starts at test group 81.
at_banner_text_13="Connect Handler"
# Banner 14. testsuite.at:258
# Category starts at test group 85.
at_banner_text_14="Modules"
# Banner 15. testsuite.at:267
# Category starts at test group 92.
at_banner_text_15="mfmod"
# Banner 16. testsuite.at:272
# Category starts at test group 95.
at_banner_text_16="Engine Features"
# Banner 17. testsuite.at:276
# Category starts at test group 97.
at_banner_text_17="DNS lookups"
# Banner 18. testsuite.at:285
# Category starts at test group 106.
at_banner_text_18="DNS Functions"
# Banner 19. testsuite.at:293
# Category starts at test group 120.
at_banner_text_19="Relayed"
# Banner 20. testsuite.at:297
# Category starts at test group 122.
at_banner_text_20="Greylisting"
# Banner 21. testsuite.at:301
# Category starts at test group 124.
at_banner_text_21="Current Message"
# Banner 22. testsuite.at:305
# Category starts at test group 126.
at_banner_text_22="Header Functions"
# Banner 23. testsuite.at:315
# Category starts at test group 134.
at_banner_text_23="Input/Output"
# Banner 24. testsuite.at:322
# Category starts at test group 139.
at_banner_text_24="SPF macro expansions"
# Banner 25. testsuite.at:325
# Category starts at test group 158.
at_banner_text_25="SPF"
# Banner 26. testsuite.at:328
# Category starts at test group 165.
at_banner_text_26="Individual Functions"
# Banner 27. testsuite.at:337
# Category starts at test group 172.
at_banner_text_27="Assorted Checks"
# Banner 28. testsuite.at:344
# Category starts at test group 176.
at_banner_text_28="Poll"
# Banner 29. testsuite.at:351
# Category starts at test group 181.
at_banner_text_29="Specific modules"

# Take any -C into account.
if $at_change_dir ; then
  test x != "x$at_dir" && cd "$at_dir" \
    || as_fn_error $? "unable to change directory"
  at_dir=`pwd`
fi

# Load the config files for any default variable assignments.
for at_file in atconfig atlocal
do
  test -r $at_file || continue
  . ./$at_file || as_fn_error $? "invalid content: $at_file"
done

# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
: "${at_top_build_prefix=$at_top_builddir}"

# Perform any assignments requested during argument parsing.
eval "$at_debug_args"

# atconfig delivers names relative to the directory the test suite is
# in, but the groups themselves are run in testsuite-dir/group-dir.
if test -n "$at_top_srcdir"; then
  builddir=../..
  for at_dir_var in srcdir top_srcdir top_build_prefix
  do
    eval at_val=\$at_$at_dir_var
    case $at_val in
      [\\/$]* | ?:[\\/]* ) at_prefix= ;;
      *) at_prefix=../../ ;;
    esac
    eval "$at_dir_var=\$at_prefix\$at_val"
  done
fi

## -------------------- ##
## Directory structure. ##
## -------------------- ##

# This is the set of directories and files used by this script
# (non-literals are capitalized):
#
# TESTSUITE         - the testsuite
# TESTSUITE.log     - summarizes the complete testsuite run
# TESTSUITE.dir/    - created during a run, remains after -d or failed test
# + at-groups/      - during a run: status of all groups in run
# | + NNN/          - during a run: meta-data about test group NNN
# | | + check-line  - location (source file and line) of current AT_CHECK
# | | + status      - exit status of current AT_CHECK
# | | + stdout      - stdout of current AT_CHECK
# | | + stder1      - stderr, including trace
# | | + stderr      - stderr, with trace filtered out
# | | + test-source - portion of testsuite that defines group
# | | + times       - timestamps for computing duration
# | | + pass        - created if group passed
# | | + xpass       - created if group xpassed
# | | + fail        - created if group failed
# | | + xfail       - created if group xfailed
# | | + skip        - created if group skipped
# + at-stop         - during a run: end the run if this file exists
# + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction
# + 0..NNN/         - created for each group NNN, remains after -d or failed test
# | + TESTSUITE.log - summarizes the group results
# | + ...           - files created during the group

# The directory the whole suite works in.
# Should be absolute to let the user `cd' at will.
at_suite_dir=$at_dir/$as_me.dir
# The file containing the suite ($at_dir might have changed since earlier).
at_suite_log=$at_dir/$as_me.log
# The directory containing helper files per test group.
at_helper_dir=$at_suite_dir/at-groups
# Stop file: if it exists, do not start new jobs.
at_stop_file=$at_suite_dir/at-stop
# The fifo used for the job dispatcher.
at_job_fifo=$at_suite_dir/at-job-fifo

if $at_clean; then
  test -d "$at_suite_dir" &&
    find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
  rm -f -r "$at_suite_dir" "$at_suite_log"
  exit $?
fi

# Don't take risks: use only absolute directories in PATH.
#
# For stand-alone test suites (ie. atconfig was not found),
# AUTOTEST_PATH is relative to `.'.
#
# For embedded test suites, AUTOTEST_PATH is relative to the top level
# of the package.  Then expand it into build/src parts, since users
# may create executables in both places.
AUTOTEST_PATH=`printf "%s\n" "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"`
at_path=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $AUTOTEST_PATH $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR
case $as_dir in
  [\\/]* | ?:[\\/]* )
    as_fn_append at_path "$as_dir"
    ;;
  * )
    if test -z "$at_top_build_prefix"; then
      # Stand-alone test suite.
      as_fn_append at_path "$as_dir"
    else
      # Embedded test suite.
      as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR"
      as_fn_append at_path "$at_top_srcdir/$as_dir"
    fi
    ;;
esac
  done
IFS=$as_save_IFS


# Now build and simplify PATH.
#
# There might be directories that don't exist, but don't redirect
# builtins' (eg., cd) stderr directly: Ultrix's sh hates that.
at_new_path=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $at_path
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -d "$as_dir" || continue
case $as_dir in
  [\\/]* | ?:[\\/]* ) ;;
  * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;;
esac
case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in
  *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;;
  $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;;
  *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;;
esac
  done
IFS=$as_save_IFS

PATH=$at_new_path
export PATH

# Setting up the FDs.



# 5 is the log file.  Not to be overwritten if `-d'.
if $at_debug_p; then
  at_suite_log=/dev/null
else
  : >"$at_suite_log"
fi
exec 5>>"$at_suite_log"

# Banners and logs.
printf "%s\n" "## ------------------------- ##
## mailfromd 9.0 test suite. ##
## ------------------------- ##"
{
  printf "%s\n" "## ------------------------- ##
## mailfromd 9.0 test suite. ##
## ------------------------- ##"
  echo

  printf "%s\n" "$as_me: command line was:"
  printf "%s\n" "  \$ $0 $at_cli_args"
  echo

  # If ChangeLog exists, list a few lines in case it might help determining
  # the exact version.
  if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then
    printf "%s\n" "## ---------- ##
## ChangeLog. ##
## ---------- ##"
    echo
    sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog"
    echo
  fi

  {
cat <<_ASUNAME
## --------- ##
## Platform. ##
## --------- ##

hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`

/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`

/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`

_ASUNAME

as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    printf "%s\n" "PATH: $as_dir"
  done
IFS=$as_save_IFS

}
  echo

  # Contents of the config files.
  for at_file in atconfig atlocal
  do
    test -r $at_file || continue
    printf "%s\n" "$as_me: $at_file:"
    sed 's/^/| /' $at_file
    echo
  done
} >&5


## ------------------------- ##
## Autotest shell functions. ##
## ------------------------- ##

# at_fn_banner NUMBER
# -------------------
# Output banner NUMBER, provided the testsuite is running multiple groups and
# this particular banner has not yet been printed.
at_fn_banner ()
{
  $at_print_banners || return 0
  eval at_banner_text=\$at_banner_text_$1
  test "x$at_banner_text" = "x " && return 0
  eval "at_banner_text_$1=\" \""
  if test -z "$at_banner_text"; then
    $at_first || echo
  else
    printf "%s\n" "$as_nl$at_banner_text$as_nl"
  fi
} # at_fn_banner

# at_fn_check_prepare_notrace REASON LINE
# ---------------------------------------
# Perform AT_CHECK preparations for the command at LINE for an untraceable
# command; REASON is the reason for disabling tracing.
at_fn_check_prepare_notrace ()
{
  $at_trace_echo "Not enabling shell tracing (command contains $1)"
  printf "%s\n" "$2" >"$at_check_line_file"
  at_check_trace=: at_check_filter=:
  : >"$at_stdout"; : >"$at_stderr"
}

# at_fn_check_prepare_trace LINE
# ------------------------------
# Perform AT_CHECK preparations for the command at LINE for a traceable
# command.
at_fn_check_prepare_trace ()
{
  printf "%s\n" "$1" >"$at_check_line_file"
  at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace
  : >"$at_stdout"; : >"$at_stderr"
}

# at_fn_check_prepare_dynamic COMMAND LINE
# ----------------------------------------
# Decide if COMMAND at LINE is traceable at runtime, and call the appropriate
# preparation function.
at_fn_check_prepare_dynamic ()
{
  case $1 in
    *$as_nl*)
      at_fn_check_prepare_notrace 'an embedded newline' "$2" ;;
    *)
      at_fn_check_prepare_trace "$2" ;;
  esac
}

# at_fn_filter_trace
# ------------------
# Remove the lines in the file "$at_stderr" generated by "set -x" and print
# them to stderr.
at_fn_filter_trace ()
{
  mv "$at_stderr" "$at_stder1"
  grep '^ *+' "$at_stder1" >&2
  grep -v '^ *+' "$at_stder1" >"$at_stderr"
}

# at_fn_log_failure FILE-LIST
# ---------------------------
# Copy the files in the list on stdout with a "> " prefix, and exit the shell
# with a failure exit code.
at_fn_log_failure ()
{
  for file
    do printf "%s\n" "$file:"; sed 's/^/> /' "$file"; done
  echo 1 > "$at_status_file"
  exit 1
}

# at_fn_check_skip EXIT-CODE LINE
# -------------------------------
# Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit
# the test group subshell with that same exit code. Use LINE in any report
# about test failure.
at_fn_check_skip ()
{
  case $1 in
    99) echo 99 > "$at_status_file"; at_failed=:
	printf "%s\n" "$2: hard failure"; exit 99;;
    77) echo 77 > "$at_status_file"; exit 77;;
  esac
}

# at_fn_check_status EXPECTED EXIT-CODE LINE
# ------------------------------------------
# Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing.
# Otherwise, if it is 77 or 99, exit the test group subshell with that same
# exit code; if it is anything else print an error message referring to LINE,
# and fail the test.
at_fn_check_status ()
{
  case $2 in
    $1 ) ;;
    77) echo 77 > "$at_status_file"; exit 77;;
    99) echo 99 > "$at_status_file"; at_failed=:
	printf "%s\n" "$3: hard failure"; exit 99;;
    *) printf "%s\n" "$3: exit code was $2, expected $1"
      at_failed=:;;
  esac
}

# at_fn_diff_devnull FILE
# -----------------------
# Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff
# invocations.
at_fn_diff_devnull ()
{
  test -s "$1" || return 0
  $at_diff "$at_devnull" "$1"
}

# at_fn_test NUMBER
# -----------------
# Parse out test NUMBER from the tail of this file.
at_fn_test ()
{
  eval at_sed=\$at_sed$1
  sed "$at_sed" "$at_myself" > "$at_test_source"
}

# at_fn_create_debugging_script
# -----------------------------
# Create the debugging script $at_group_dir/run which will reproduce the
# current test group.
at_fn_create_debugging_script ()
{
  {
    echo "#! /bin/sh" &&
    echo 'test ${ZSH_VERSION+y} && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' &&
    printf "%s\n" "cd '$at_dir'" &&
    printf "%s\n" "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" &&
    echo 'exit 1'
  } >"$at_group_dir/run" &&
  chmod +x "$at_group_dir/run"
}

## -------------------------------- ##
## End of autotest shell functions. ##
## -------------------------------- ##
{
  printf "%s\n" "## ---------------- ##
## Tested programs. ##
## ---------------- ##"
  echo
} >&5

# Report what programs are being tested.
for at_program in : `eval echo $at_tested`
do
  case $at_program in #(
  :) :
    continue ;; #(
  [\\/]* | ?:[\\/]*) :
    at_program_=$at_program ;; #(
  *) :
    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -f "$as_dir$at_program" && break
  done
IFS=$as_save_IFS

    at_program_=$as_dir$at_program ;;
esac

  if test -f "$at_program_"; then
    {
      printf "%s\n" "$at_srcdir/testsuite.at:135: $at_program_ --version"
      "$at_program_" --version </dev/null
      echo
    } >&5 2>&1
  else
    as_fn_error $? "cannot find $at_program" "$LINENO" 5
  fi
done

{
  printf "%s\n" "## ------------------ ##
## Running the tests. ##
## ------------------ ##"
} >&5

at_start_date=`date`
at_start_time=`date +%s 2>/dev/null`
printf "%s\n" "$as_me: starting at: $at_start_date" >&5

# Create the master directory if it doesn't already exist.
as_dir="$at_suite_dir"; as_fn_mkdir_p ||
  as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5

# Can we diff with `/dev/null'?  DU 5.0 refuses.
if diff /dev/null /dev/null >/dev/null 2>&1; then
  at_devnull=/dev/null
else
  at_devnull=$at_suite_dir/devnull
  >"$at_devnull"
fi

# Use `diff -u' when possible.
if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff"
then
  at_diff='diff -u'
else
  at_diff=diff
fi

# Get the last needed group.
for at_group in : $at_groups; do :; done

# Extract the start and end lines of each test group at the tail
# of this file
awk '
BEGIN { FS="" }
/^#AT_START_/ {
  start = NR
}
/^#AT_STOP_/ {
  test = substr ($ 0, 10)
  print "at_sed" test "=\"1," start "d;" (NR-1) "q\""
  if (test == "'"$at_group"'") exit
}' "$at_myself" > "$at_suite_dir/at-source-lines" &&
. "$at_suite_dir/at-source-lines" ||
  as_fn_error $? "cannot create test line number cache" "$LINENO" 5
rm -f "$at_suite_dir/at-source-lines"

# Set number of jobs for `-j'; avoid more jobs than test groups.
set X $at_groups; shift; at_max_jobs=$#
if test $at_max_jobs -eq 0; then
  at_jobs=1
fi
if test $at_jobs -ne 1 &&
   { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then
  at_jobs=$at_max_jobs
fi

# If parallel mode, don't output banners, don't split summary lines.
if test $at_jobs -ne 1; then
  at_print_banners=false
  at_quiet=:
fi

# Set up helper dirs.
rm -rf "$at_helper_dir" &&
mkdir "$at_helper_dir" &&
cd "$at_helper_dir" &&
{ test -z "$at_groups" || mkdir $at_groups; } ||
as_fn_error $? "testsuite directory setup failed" "$LINENO" 5

# Functions for running a test group.  We leave the actual
# test group execution outside of a shell function in order
# to avoid hitting zsh 4.x exit status bugs.

# at_fn_group_prepare
# -------------------
# Prepare for running a test group.
at_fn_group_prepare ()
{
  # The directory for additional per-group helper files.
  at_job_dir=$at_helper_dir/$at_group
  # The file containing the location of the last AT_CHECK.
  at_check_line_file=$at_job_dir/check-line
  # The file containing the exit status of the last command.
  at_status_file=$at_job_dir/status
  # The files containing the output of the tested commands.
  at_stdout=$at_job_dir/stdout
  at_stder1=$at_job_dir/stder1
  at_stderr=$at_job_dir/stderr
  # The file containing the code for a test group.
  at_test_source=$at_job_dir/test-source
  # The file containing dates.
  at_times_file=$at_job_dir/times

  # Be sure to come back to the top test directory.
  cd "$at_suite_dir"

  # Clearly separate the test groups when verbose.
  $at_first || $at_verbose echo

  at_group_normalized=$at_group

  eval 'while :; do
    case $at_group_normalized in #(
    '"$at_format"'*) break;;
    esac
    at_group_normalized=0$at_group_normalized
  done'


  # Create a fresh directory for the next test group, and enter.
  # If one already exists, the user may have invoked ./run from
  # within that directory; we remove the contents, but not the
  # directory itself, so that we aren't pulling the rug out from
  # under the shell's notion of the current directory.
  at_group_dir=$at_suite_dir/$at_group_normalized
  at_group_log=$at_group_dir/$as_me.log
  if test -d "$at_group_dir"
then
  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \;
  rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??*
fi ||
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5
printf "%s\n" "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;}
  # Be tolerant if the above `rm' was not able to remove the directory.
  as_dir="$at_group_dir"; as_fn_mkdir_p

  echo 0 > "$at_status_file"

  # In verbose mode, append to the log file *and* show on
  # the standard output; in quiet mode only write to the log.
  if test -z "$at_verbose"; then
    at_tee_pipe='tee -a "$at_group_log"'
  else
    at_tee_pipe='cat >> "$at_group_log"'
  fi
}

# at_fn_group_banner ORDINAL LINE DESC PAD [BANNER]
# -------------------------------------------------
# Declare the test group ORDINAL, located at LINE with group description DESC,
# and residing under BANNER. Use PAD to align the status column.
at_fn_group_banner ()
{
  at_setup_line="$2"
  test -n "$5" && at_fn_banner $5
  at_desc="$3"
  case $1 in
    [0-9])      at_desc_line="  $1: ";;
    [0-9][0-9]) at_desc_line=" $1: " ;;
    *)          at_desc_line="$1: "  ;;
  esac
  as_fn_append at_desc_line "$3$4"
  $at_quiet printf %s "$at_desc_line"
  echo "#                             -*- compilation -*-" >> "$at_group_log"
}

# at_fn_group_postprocess
# -----------------------
# Perform cleanup after running a test group.
at_fn_group_postprocess ()
{
  # Be sure to come back to the suite directory, in particular
  # since below we might `rm' the group directory we are in currently.
  cd "$at_suite_dir"

  if test ! -f "$at_check_line_file"; then
    sed "s/^ */$as_me: WARNING: /" <<_ATEOF
      A failure happened in a test group before any test could be
      run. This means that test suite is improperly designed.  Please
      report this failure to <bug-mailfromd@gnu.org.ua>.
_ATEOF
    printf "%s\n" "$at_setup_line" >"$at_check_line_file"
    at_status=99
  fi
  $at_verbose printf %s "$at_group. $at_setup_line: "
  printf %s "$at_group. $at_setup_line: " >> "$at_group_log"
  case $at_xfail:$at_status in
    yes:0)
	at_msg="UNEXPECTED PASS"
	at_res=xpass
	at_errexit=$at_errexit_p
	at_color=$at_red
	;;
    no:0)
	at_msg="ok"
	at_res=pass
	at_errexit=false
	at_color=$at_grn
	;;
    *:77)
	at_msg='skipped ('`cat "$at_check_line_file"`')'
	at_res=skip
	at_errexit=false
	at_color=$at_blu
	;;
    no:* | *:99)
	at_msg='FAILED ('`cat "$at_check_line_file"`')'
	at_res=fail
	at_errexit=$at_errexit_p
	at_color=$at_red
	;;
    yes:*)
	at_msg='expected failure ('`cat "$at_check_line_file"`')'
	at_res=xfail
	at_errexit=false
	at_color=$at_lgn
	;;
  esac
  echo "$at_res" > "$at_job_dir/$at_res"
  # In parallel mode, output the summary line only afterwards.
  if test $at_jobs -ne 1 && test -n "$at_verbose"; then
    printf "%s\n" "$at_desc_line $at_color$at_msg$at_std"
  else
    # Make sure there is a separator even with long titles.
    printf "%s\n" " $at_color$at_msg$at_std"
  fi
  at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
  case $at_status in
    0|77)
      # $at_times_file is only available if the group succeeded.
      # We're not including the group log, so the success message
      # is written in the global log separately.  But we also
      # write to the group log in case they're using -d.
      if test -f "$at_times_file"; then
	at_log_msg="$at_log_msg     ("`sed 1d "$at_times_file"`')'
	rm -f "$at_times_file"
      fi
      printf "%s\n" "$at_log_msg" >> "$at_group_log"
      printf "%s\n" "$at_log_msg" >&5

      # Cleanup the group directory, unless the user wants the files
      # or the success was unexpected.
      if $at_debug_p || test $at_res = xpass; then
	at_fn_create_debugging_script
	if test $at_res = xpass && $at_errexit; then
	  echo stop > "$at_stop_file"
	fi
      else
	if test -d "$at_group_dir"; then
	  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
	  rm -fr "$at_group_dir"
	fi
	rm -f "$at_test_source"
      fi
      ;;
    *)
      # Upon failure, include the log into the testsuite's global
      # log.  The failure message is written in the group log.  It
      # is later included in the global log.
      printf "%s\n" "$at_log_msg" >> "$at_group_log"

      # Upon failure, keep the group directory for autopsy, and create
      # the debugging script.  With -e, do not start any further tests.
      at_fn_create_debugging_script
      if $at_errexit; then
	echo stop > "$at_stop_file"
      fi
      ;;
  esac
}


## ------------ ##
## Driver loop. ##
## ------------ ##


if (set -m && set +m && set +b) >/dev/null 2>&1; then
  set +b
  at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=-
else
  at_job_control_on=: at_job_control_off=: at_job_group=
fi

for at_signal in 1 2 15; do
  trap 'set +x; set +e
	$at_job_control_off
	at_signal='"$at_signal"'
	echo stop > "$at_stop_file"
	trap "" $at_signal
	at_pgids=
	for at_pgid in `jobs -p 2>/dev/null`; do
	  at_pgids="$at_pgids $at_job_group$at_pgid"
	done
	test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null
	wait
	if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then
	  echo >&2
	fi
	at_signame=`kill -l $at_signal 2>&1 || echo $at_signal`
	set x $at_signame
	test 0 -gt 2 && at_signame=$at_signal
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5
printf "%s\n" "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;}
	as_fn_arith 128 + $at_signal && exit_status=$as_val
	as_fn_exit $exit_status' $at_signal
done

rm -f "$at_stop_file"
at_first=:

if test $at_jobs -ne 1 &&
     rm -f "$at_job_fifo" &&
     test -n "$at_job_group" &&
     ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null
then
  # FIFO job dispatcher.

  trap 'at_pids=
	for at_pid in `jobs -p`; do
	  at_pids="$at_pids $at_job_group$at_pid"
	done
	if test -n "$at_pids"; then
	  at_sig=TSTP
	  test ${TMOUT+y} && at_sig=STOP
	  kill -$at_sig $at_pids 2>/dev/null
	fi
	kill -STOP $$
	test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP

  echo
  # Turn jobs into a list of numbers, starting from 1.
  at_joblist=`printf "%s\n" "$at_groups" | sed -n 1,${at_jobs}p`

  set X $at_joblist
  shift
  for at_group in $at_groups; do
    $at_job_control_on 2>/dev/null
    (
      # Start one test group.
      $at_job_control_off
      if $at_first; then
	exec 7>"$at_job_fifo"
      else
	exec 6<&-
      fi
      trap 'set +x; set +e
	    trap "" PIPE
	    echo stop > "$at_stop_file"
	    echo >&7
	    as_fn_exit 141' PIPE
      at_fn_group_prepare
      if cd "$at_group_dir" &&
	 at_fn_test $at_group &&
	 . "$at_test_source"
      then :; else
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
printf "%s\n" "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
	at_failed=:
      fi
      at_fn_group_postprocess
      echo >&7
    ) &
    $at_job_control_off
    if $at_first; then
      at_first=false
      exec 6<"$at_job_fifo" 7>"$at_job_fifo"
    fi
    shift # Consume one token.
    if test $# -gt 0; then :; else
      read at_token <&6 || break
      set x $*
    fi
    test -f "$at_stop_file" && break
  done
  exec 7>&-
  # Read back the remaining ($at_jobs - 1) tokens.
  set X $at_joblist
  shift
  if test $# -gt 0; then
    shift
    for at_job
    do
      read at_token
    done <&6
  fi
  exec 6<&-
  wait
else
  # Run serially, avoid forks and other potential surprises.
  for at_group in $at_groups; do
    at_fn_group_prepare
    if cd "$at_group_dir" &&
       at_fn_test $at_group &&
       . "$at_test_source"; then :; else
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
printf "%s\n" "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
      at_failed=:
    fi
    at_fn_group_postprocess
    test -f "$at_stop_file" && break
    at_first=false
  done
fi

# Wrap up the test suite with summary statistics.
cd "$at_helper_dir"

# Use ?..???? when the list must remain sorted, the faster * otherwise.
at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'`
at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'`
at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'`
at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do
		 echo $f; done | sed '/?/d; s,/xpass,,'`
at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do
		echo $f; done | sed '/?/d; s,/fail,,'`

set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list
shift; at_group_count=$#
set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$*
set X $at_xfail_list; shift; at_xfail_count=$#
set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$*
set X $at_skip_list; shift; at_skip_count=$#

as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val
as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val
as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val

# Back to the top directory.
cd "$at_dir"
rm -rf "$at_helper_dir"

# Compute the duration of the suite.
at_stop_date=`date`
at_stop_time=`date +%s 2>/dev/null`
printf "%s\n" "$as_me: ending at: $at_stop_date" >&5
case $at_start_time,$at_stop_time in
  [0-9]*,[0-9]*)
    as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val
    as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val
    as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val
    as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val
    as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val
    at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
    printf "%s\n" "$as_me: test suite duration: $at_duration" >&5
    ;;
esac

echo
printf "%s\n" "## ------------- ##
## Test results. ##
## ------------- ##"
echo
{
  echo
  printf "%s\n" "## ------------- ##
## Test results. ##
## ------------- ##"
  echo
} >&5

if test $at_run_count = 1; then
  at_result="1 test"
  at_were=was
else
  at_result="$at_run_count tests"
  at_were=were
fi
if $at_errexit_p && test $at_unexpected_count != 0; then
  if test $at_xpass_count = 1; then
    at_result="$at_result $at_were run, one passed"
  else
    at_result="$at_result $at_were run, one failed"
  fi
  at_result="$at_result unexpectedly and inhibited subsequent tests."
  at_color=$at_red
else
  # Don't you just love exponential explosion of the number of cases?
  at_color=$at_red
  case $at_xpass_count:$at_fail_count:$at_xfail_count in
    # So far, so good.
    0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;;
    0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;;

    # Some unexpected failures
    0:*:0) at_result="$at_result $at_were run,
$at_fail_count failed unexpectedly." ;;

    # Some failures, both expected and unexpected
    0:*:1) at_result="$at_result $at_were run,
$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
    0:*:*) at_result="$at_result $at_were run,
$at_total_fail_count failed ($at_xfail_count expected failures)." ;;

    # No unexpected failures, but some xpasses
    *:0:*) at_result="$at_result $at_were run,
$at_xpass_count passed unexpectedly." ;;

    # No expected failures, but failures and xpasses
    *:1:0) at_result="$at_result $at_were run,
$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;;
    *:*:0) at_result="$at_result $at_were run,
$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;;

    # All of them.
    *:*:1) at_result="$at_result $at_were run,
$at_xpass_count passed unexpectedly,
$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
    *:*:*) at_result="$at_result $at_were run,
$at_xpass_count passed unexpectedly,
$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
  esac

  if test $at_skip_count = 0 && test $at_run_count -gt 1; then
    at_result="All $at_result"
  fi
fi

# Now put skips in the mix.
case $at_skip_count in
  0) ;;
  1) at_result="$at_result
1 test was skipped." ;;
  *) at_result="$at_result
$at_skip_count tests were skipped." ;;
esac

if test $at_unexpected_count = 0; then
  echo "$at_color$at_result$at_std"
  echo "$at_result" >&5
else
  echo "${at_color}ERROR: $at_result$at_std" >&2
  echo "ERROR: $at_result" >&5
  {
    echo
    printf "%s\n" "## ------------------------ ##
## Summary of the failures. ##
## ------------------------ ##"

    # Summary of failed and skipped tests.
    if test $at_fail_count != 0; then
      echo "Failed tests:"
      $SHELL "$at_myself" $at_fail_list --list
      echo
    fi
    if test $at_skip_count != 0; then
      echo "Skipped tests:"
      $SHELL "$at_myself" $at_skip_list --list
      echo
    fi
    if test $at_xpass_count != 0; then
      echo "Unexpected passes:"
      $SHELL "$at_myself" $at_xpass_list --list
      echo
    fi
    if test $at_fail_count != 0; then
      printf "%s\n" "## ---------------------- ##
## Detailed failed tests. ##
## ---------------------- ##"
      echo
      for at_group in $at_fail_list
      do
	at_group_normalized=$at_group

  eval 'while :; do
    case $at_group_normalized in #(
    '"$at_format"'*) break;;
    esac
    at_group_normalized=0$at_group_normalized
  done'

	cat "$at_suite_dir/$at_group_normalized/$as_me.log"
	echo
      done
      echo
    fi
    if test -n "$at_top_srcdir"; then
      sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## ${at_top_build_prefix}config.log ##
_ASBOX
      sed 's/^/| /' ${at_top_build_prefix}config.log
      echo
    fi
  } >&5

  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## $as_me.log was created. ##
_ASBOX

  echo
  if $at_debug_p; then
    at_msg='per-test log files'
  else
    at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'"
  fi
  at_msg1a=${at_xpass_list:+', '}
  at_msg1=$at_fail_list${at_fail_list:+" failed$at_msg1a"}
  at_msg2=$at_xpass_list${at_xpass_list:+" passed unexpectedly"}

  printf "%s\n" "Please send $at_msg and all information you think might help:

   To: <bug-mailfromd@gnu.org.ua>
   Subject: [mailfromd 9.0] $as_me: $at_msg1$at_msg2

You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point.  Its output may
be found below \`${at_testdir+${at_testdir}/}$as_me.dir'.
"
  exit 1
fi

exit 0

## ------------- ##
## Actual tests. ##
## ------------- ##
#AT_START_1
at_fn_group_banner 1 'version.at:17' \
  "mailfromd version" "                              " 1
at_xfail=no
(
  printf "%s\n" "1. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/version.at:19: mailfromd --version | sed '1{s/ *\\[.*\\]//;q;}' "
at_fn_check_prepare_notrace 'a shell pipeline' "version.at:19"
( $at_check_trace; mailfromd --version | sed '1{s/ *\[.*\]//;q;}'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "mailfromd (mailfromd) 9.0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/version.at:19"
if $at_failed
then :
  cat >$XFAILFILE <<'_EOT'

==============================================================
WARNING: Not using the proper version, *all* checks dubious...
==============================================================
_EOT

else $as_nop
  rm -f $XFAILFILE
fi
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_1
#AT_START_2
at_fn_group_banner 2 'vercmp.at:17' \
  "vercmp" "                                         " 1
at_xfail=no
(
  printf "%s\n" "2. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo vercmp("1", "1")
  echo vercmp("1", "2")
  echo vercmp("2", "1")
  echo vercmp("1.0", "2.0")
  echo vercmp("2.0", "1.0")
  echo vercmp("1.1", "2.0")
  echo vercmp("1.1", "1.0")
  echo vercmp("1.0", "1.1")
  echo vercmp("2.0.87", "2.0")
  echo vercmp("2.0.87", "2.0.86")
  echo vercmp("2.0.87", "2.0.87")
  echo vercmp("2.0.87", "2.0.88")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vercmp.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "vercmp.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "0
-1
1
-1
1
-1
1
-1
1
1
0
-1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vercmp.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_2
#AT_START_3
at_fn_group_banner 3 'vercmp01.at:17' \
  "vercmp: invalid 1st argument" "                   " 1
at_xfail=no
(
  printf "%s\n" "3. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  echo vercmp("", "1")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vercmp01.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "vercmp01.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:6: uncaught exception e_range: vercmp: not a valid version number:  (argument 1)
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vercmp01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  echo vercmp("1.a", "1")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vercmp01.at:34:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "vercmp01.at:34"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:6: uncaught exception e_range: vercmp: not a valid version number: 1.a (argument 1)
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vercmp01.at:34"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_3
#AT_START_4
at_fn_group_banner 4 'vercmp02.at:17' \
  "vercmp: invalid 2nd argument" "                   " 1
at_xfail=no
(
  printf "%s\n" "4. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  echo vercmp("1.0", "")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vercmp02.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "vercmp02.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:6: uncaught exception e_range: vercmp: not a valid version number:  (argument 2)
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vercmp02.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  echo vercmp("1.0", "1.a")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vercmp02.at:34:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "vercmp02.at:34"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:6: uncaught exception e_range: vercmp: not a valid version number: 1.a (argument 2)
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vercmp02.at:34"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_4
#AT_START_5
at_fn_group_banner 5 'static01.at:17' \
  "static variables visibility" "                    " 2
at_xfail=no
(
  printf "%s\n" "5. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >static.mfl <<'_ATEOF'
module "static".

static string stringval "foo"

func set_stringval(string v)
do
  set stringval v
done

func get_stringval()
  returns string
do
  return stringval
done
_ATEOF



cat >prog <<'_ATEOF'

require 'static'

string stringval "bar"

func main(...)
  returns number
do
  echo "stringval=%stringval"
  echo "static:stringval=" . get_stringval()
  set_stringval("baz")
  echo "modified static:stringval=" . get_stringval()
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/static01.at:37:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "static01.at:37"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "stringval=bar
static:stringval=foo
modified static:stringval=baz
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/static01.at:37"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_5
#AT_START_6
at_fn_group_banner 6 'static02.at:17' \
  "implicit static functions" "                      " 2
at_xfail=no
(
  printf "%s\n" "6. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >public.mfl <<'_ATEOF'
module "public" static.

string stringval "foo"
public string numval 10

func __append(string v)
do
  set stringval stringval . v
done

public func append_stringval(string v)
do
  __append(v)
done

public func get_stringval()
  returns string
do
  return stringval
done
_ATEOF



cat >prog <<'_ATEOF'
require 'public'

func main(...)
  returns number
do
  __append("test")
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/static02.at:43:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "static02.at:43"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:6.3-10: syntax error, unexpected identifier, expecting const or precious or static or public
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/static02.at:43"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_6
#AT_START_7
at_fn_group_banner 7 'public.at:17' \
  "public variables visibility" "                    " 2
at_xfail=no
(
  printf "%s\n" "7. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >public.mfl <<'_ATEOF'
module "public" static.

string stringval "foo"
public string numval 10

func __append(string v)
do
  set stringval stringval . v
done

public func append_stringval(string v)
do
  __append(v)
done

public func get_stringval()
  returns string
do
  return stringval
done
_ATEOF



cat >prog <<'_ATEOF'

require 'public'

string stringval "bar"

func main(...)
  returns number
do
  echo "stringval=%stringval"
  echo "static:stringval=" . get_stringval()
  append_stringval("baz")
  echo "modified static:stringval=" . get_stringval()
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/public.at:43:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "public.at:43"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "stringval=bar
static:stringval=foo
modified static:stringval=foobaz
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/public.at:43"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_7
#AT_START_8
at_fn_group_banner 8 'shadow.at:17' \
  "variable shadowing" "                             " 3
at_xfail=no
(
  printf "%s\n" "8. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

set x "initial"

func foo(string x) returns string
do
  return x
done

func bar(string y) returns string
do
  string x
  set x "%y text"
  return x
done

prog envfrom
do
  echo foo("param")
  echo bar("auto")
  echo x
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/shadow.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "shadow.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.17: warning: parameter \`x' is shadowing a global
mailfromd: prog:11.10: warning: automatic variable \`x' is shadowing a global
param
auto text
initial
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/shadow.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_8
#AT_START_9
at_fn_group_banner 9 'ashadow.at:17' \
  "duplicate declarations of automatic variables" "  " 3
at_xfail=no
(
  printf "%s\n" "9. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Synopsis: Duplicated auto variables caused infinite loop in forget_autos
# in version 4.1
# Reported: Jan Rafaj, 2007-08-10
# References: <Pine.LNX.4.58.0708101024210.11880@cedric.unob.cz>


cat >prog <<'_ATEOF'

func foo() returns number
do
  number i 2
  number i 2
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/ashadow.at:25:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "ashadow.at:25"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:5.10: duplicate variable: i
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/ashadow.at:25"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_9
#AT_START_10
at_fn_group_banner 10 'enum.at:17' \
  "enumerations" "                                   " 4
at_xfail=no
(
  printf "%s\n" "10. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/enum.at:20:
cat >prog <<'_ATEOF'
const
do
  A
  B
  C
  D
done

func main(...) returns number
do
  echo \"A=\".A
  echo \"B=\".B
  echo \"C=\".C
  echo \"D=\".D
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "enum.at:20"
( $at_check_trace;
cat >prog <<'_ATEOF'
const
do
  A
  B
  C
  D
done

func main(...) returns number
do
  echo "A=".A
  echo "B=".B
  echo "C=".C
  echo "D=".D
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A=0
B=1
C=2
D=3
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/enum.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/enum.at:48:
cat >prog <<'_ATEOF'
const
do
  A 25/5 + 1
  B
  C
  D
done

func main(...) returns number
do
  echo \"A=\".A
  echo \"B=\".B
  echo \"C=\".C
  echo \"D=\".D
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "enum.at:48"
( $at_check_trace;
cat >prog <<'_ATEOF'
const
do
  A 25/5 + 1
  B
  C
  D
done

func main(...) returns number
do
  echo "A=".A
  echo "B=".B
  echo "C=".C
  echo "D=".D
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A=6
B=7
C=8
D=9
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/enum.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/enum.at:76:
cat >prog <<'_ATEOF'
const
do
  A
  B
  C 15
  D
done

func main(...) returns number
do
  echo \"A=\".A
  echo \"B=\".B
  echo \"C=\".C
  echo \"D=\".D
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "enum.at:76"
( $at_check_trace;
cat >prog <<'_ATEOF'
const
do
  A
  B
  C 15
  D
done

func main(...) returns number
do
  echo "A=".A
  echo "B=".B
  echo "C=".C
  echo "D=".D
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A=0
B=1
C=15
D=16
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/enum.at:76"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/enum.at:104:
cat >prog <<'_ATEOF'
const
do
  A \"one\"
  B \"two\"
  C \"three\"
  D \"four\"
done

func main(...) returns number
do
  echo \"A=\".A
  echo \"B=\".B
  echo \"C=\".C
  echo \"D=\".D
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "enum.at:104"
( $at_check_trace;
cat >prog <<'_ATEOF'
const
do
  A "one"
  B "two"
  C "three"
  D "four"
done

func main(...) returns number
do
  echo "A=".A
  echo "B=".B
  echo "C=".C
  echo "D=".D
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A=one
B=two
C=three
D=four
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/enum.at:104"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/enum.at:132:
cat >prog <<'_ATEOF'
const
do
  A
  B
  C \"two\"
  D \"three\"
done

func main(...) returns number
do
  echo \"A=\".A
  echo \"B=\".B
  echo \"C=\".C
  echo \"D=\".D
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "enum.at:132"
( $at_check_trace;
cat >prog <<'_ATEOF'
const
do
  A
  B
  C "two"
  D "three"
done

func main(...) returns number
do
  echo "A=".A
  echo "B=".B
  echo "C=".C
  echo "D=".D
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A=0
B=1
C=two
D=three
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/enum.at:132"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/enum.at:160:
cat >prog <<'_ATEOF'
const
do
  A
  B \"one\"
  C
  D
done

func main(...) returns number
do
  echo \"A=\".A
  echo \"B=\".B
  echo \"C=\".C
  echo \"D=\".D
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "enum.at:160"
( $at_check_trace;
cat >prog <<'_ATEOF'
const
do
  A
  B "one"
  C
  D
done

func main(...) returns number
do
  echo "A=".A
  echo "B=".B
  echo "C=".C
  echo "D=".D
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:6.3: initializer element is not numeric
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/enum.at:160"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/enum.at:185:
cat >prog <<'_ATEOF'
precious const
do
  A
  B
  C
  D
done

func main(...) returns number
do
  echo \"A=\".A
  echo \"B=\".B
  echo \"C=\".C
  echo \"D=\".D
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "enum.at:185"
( $at_check_trace;
cat >prog <<'_ATEOF'
precious const
do
  A
  B
  C
  D
done

func main(...) returns number
do
  echo "A=".A
  echo "B=".B
  echo "C=".C
  echo "D=".D
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:1.1-8: \`precious' used with const
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/enum.at:185"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_10
#AT_START_11
at_fn_group_banner 11 'ack.at:17' \
  "Ackerman function" "                              " 4
at_xfail=no
(
  printf "%s\n" "11. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
/*
  * This test computes the value of Ackerman function ack(3,8), which
  * requires 2785999 calls of ack().  Maximum recursion depth is 2047,
  * which requires 8188 words on stack.  Heap allocation for echo arguments
  * requires extra 7 words. Extra 3 words are required for envfrom arguments.
  */

#pragma stacksize 8198

func ack(number a, number b)
  returns number
do
  if a = 0
    return b+1
  fi
  if b = 0
    return ack(a-1,1)
  fi
  return ack(a-1, ack(a,b-1))
done

func main(...)
  returns number
do
  echo "ack(3,8)=" . ack(3,8)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/ack.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "ack.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "ack(3,8)=2045
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ack.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_11
#AT_START_12
at_fn_group_banner 12 'arg.at:17' \
  "Function arguments" "                             " 4
at_xfail=no
(
  printf "%s\n" "12. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func f(number x)
do
  echo x
done
func main(...)
  returns number
do
  f(10)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arg.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x)
do
  echo x
done
func main(...)
  returns number
do
  f(10)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:34:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:34"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "10
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arg.at:34"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x)
do
  echo x
done
func main(...)
  returns number
do
  f("test")
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:52:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:52"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:9.11: cannot convert literal to number
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/arg.at:52"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x)
do
  echo x
done
func main(...)
  returns number
do
  f(10, 2)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:70:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:70"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:9.10: too many arguments in call to \`f'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/arg.at:70"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x; number y)
do
  echo x
  echo y
done
func main(...)
  returns number
do
  f(10)
  f(10, 2)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:88:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:88"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arg.at:88"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x; number y)
do
  echo x
  echo y
done
func main(...)
  returns number
do
  f(10)
  f(10, 2)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:104:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:104"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "10
0
10
2
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arg.at:104"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x; number y)
do
  echo x
  echo y
done
func main(...)
  returns number
do
  f(10, 2, 3)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:127:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:127"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:10.13: too many arguments in call to \`f'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/arg.at:127"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x; number y, number ...)
do
  echo x
  echo y
  echo $1
done
func main(...)
  returns number
do
  f(10, 2, 3)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:146:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:146"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arg.at:146"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func f(number x; number y, number ...)
do
  echo x
  echo y
  echo $1
done
func main(...)
  returns number
do
  f(10, 2, 3)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arg.at:162:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "arg.at:162"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "10
2
3
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arg.at:162"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_12
#AT_START_13
at_fn_group_banner 13 'vararg.at:17' \
  "Variadic functions" "                             " 4
at_xfail=no
(
  printf "%s\n" "13. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo $1
  echo $(1)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vararg.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 5"
at_fn_check_prepare_notrace 'a $(...) command substitution' "vararg.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 5
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "5
5
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vararg.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func sum(number ...)
  returns number
do
  number r 0
  loop for set i 1, while i <= $#, set i i + 1
  do
    set r r + $(i)
  done
  return r
done
func main(...)
  returns number
do
  echo sum(1, 3, 5, 7)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vararg.at:35:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "vararg.at:35"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "16
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vararg.at:35"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func sum(number ...)
  returns number
do
  number r 0
  loop for set i 1, while i <= $#, set i i + 1
  do
    set r r + $(i)
  done
  return r
done
func main(...)
  returns number
do
  echo sum(1, "x", 5, 7)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vararg.at:59:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "vararg.at:59"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:15.24: cannot convert literal to number
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/vararg.at:59"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_13
#AT_START_14
at_fn_group_banner 14 'alias.at:17' \
  "Function aliases" "                               " 4
at_xfail=no
(
  printf "%s\n" "14. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func foo(string a)
  alias bar
  alias baz
  returns string
do
  return "%a.%__function__"
done

prog envfrom
do
  echo foo("a")
  echo bar("b")
  echo baz("c")
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/alias.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "alias.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "a.foo
b.foo
c.foo
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/alias.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_14
#AT_START_15
at_fn_group_banner 15 'bctx00.at:17' \
  "Builtin in wrong context" "                       " 4
at_xfail=no
(
  printf "%s\n" "15. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog envfrom
do
  echo current_message()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/bctx00.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "bctx00.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-22: built-in function \`current_message' cannot be used in prog \`envfrom'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/bctx00.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_15
#AT_START_16
at_fn_group_banner 16 'bctx01.at:17' \
  "Builtin in correct context" "                     " 4
at_xfail=no
(
  printf "%s\n" "16. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog eom
do
  echo current_message()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/bctx01.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "bctx01.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/bctx01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_16
#AT_START_17
at_fn_group_banner 17 'fctx00.at:17' \
  "Function in wrong context" "                      " 4
at_xfail=no
(
  printf "%s\n" "17. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func current_message_wrap()
  returns number
do
  return current_message()
done

prog envfrom
do
  echo current_message_wrap()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/fctx00.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "fctx00.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:10.8-27: function \`current_message_wrap' cannot be used in prog \`envfrom'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/fctx00.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_17
#AT_START_18
at_fn_group_banner 18 'fctx01.at:17' \
  "Function in correct context" "                    " 4
at_xfail=no
(
  printf "%s\n" "18. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func current_message_wrap()
  returns number
do
  return current_message()
done

prog eom
do
  echo current_message_wrap()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/fctx01.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "fctx01.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fctx01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_18
#AT_START_19
at_fn_group_banner 19 'ml.at:17' \
  "Multiline strings" "                              " 4
at_xfail=no
(
  printf "%s\n" "19. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog envfrom
do
  reject 550 5.0.0 <<EOT
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
EOT
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/ml.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "ml.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 550 5.0.0    This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

State envfrom: reject
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ml.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_19
#AT_START_20
at_fn_group_banner 20 'ml01.at:17' \
  "var refs in multiline" "                          " 4
at_xfail=no
(
  printf "%s\n" "20. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
prog envfrom
do
  string where "Xanadu"
  string who "Kubla-Khan"
  string what "pleasure-dome"
  set s <<EOT
In
%where
did
 %who
a stately %what decree
EOT
  echo s
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/ml01.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "ml01.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "In
Xanadu
did
 Kubla-Khan
a stately pleasure-dome decree

" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ml01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_20
#AT_START_21
at_fn_group_banner 21 'declvar.at:17' \
  "Declared variables" "                             " 4
at_xfail=no
(
  printf "%s\n" "21. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

set str "String"

prog envfrom
do
  echo str
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/declvar.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "declvar.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "String
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/declvar.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_21
#AT_START_22
at_fn_group_banner 22 'arginit.at:16' \
  "Use of uninitialized variables" "                 " 4
at_xfail=no
(
  printf "%s\n" "22. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'

func x()
do
  string result
  set y result
done

func main(...) returns number
do
  x()
  x()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arginit.at:18:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 0"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arginit.at:18"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 0
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:5.9-14: warning: use of uninitialized variable 'result'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arginit.at:18"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func x()
do
  string result
  set y "result is %result"
done

func main(...) returns number
do
  x()
  x()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/arginit.at:37:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 0"
at_fn_check_prepare_notrace 'a $(...) command substitution' "arginit.at:37"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 0
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:5.20-26: warning: use of uninitialized variable 'result'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/arginit.at:37"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_22
#AT_START_23
at_fn_group_banner 23 'vapass.at:17' \
  "passing variadic arguments" "                     " 4
at_xfail=no
(
  printf "%s\n" "23. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func x(...)
do
  loop for number i 1,
       while i <= $#,
       set i i + 1
  do
    echo "arg %i=" . $(i)
  done
done

func main(...)
  returns number
do
  x('unus','duo', $@)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vapass.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog tres quattuor quinque"
at_fn_check_prepare_notrace 'a $(...) command substitution' "vapass.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog tres quattuor quinque
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "arg 1=unus
arg 2=duo
arg 3=tres
arg 4=quattuor
arg 5=quinque
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vapass.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func x(...)
do
  loop for number i 1,
       while i <= $#,
       set i i + 1
  do
    echo "arg %i=" . $(i)
  done
done

func main(...)
  returns number
do
  x($@)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vapass.at:47:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog unus duo tres quattuor quinque"
at_fn_check_prepare_notrace 'a $(...) command substitution' "vapass.at:47"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog unus duo tres quattuor quinque
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "arg 1=unus
arg 2=duo
arg 3=tres
arg 4=quattuor
arg 5=quinque
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vapass.at:47"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
func x(string a, number b, ...)
do
  loop for number i 1,
       while i < $# - @b,
       set i i + 1
  do
    echo "arg %i=" . $(i)
  done
done

func main(...)
  returns number
do
  x('unus',2,$@)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vapass.at:75:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog tres quattuor quinque"
at_fn_check_prepare_notrace 'a $(...) command substitution' "vapass.at:75"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog tres quattuor quinque
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "arg 1=tres
arg 2=quattuor
arg 3=quinque
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vapass.at:75"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
func x(string a, number b, ...)
do
  loop for number i 1,
       while i < $# - @b,
       set i i + 1
  do
    echo "arg %i=" . $(i)
  done
done

func main(...)
  returns number
do
  x('unus',2,$@(2))
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vapass.at:100:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog tres quattuor quinque"
at_fn_check_prepare_notrace 'a $(...) command substitution' "vapass.at:100"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog tres quattuor quinque
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "arg 1=quinque
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vapass.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo sprintf('arg2=%s, arg3=%s', $@(2))
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/vapass.at:123:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog unus duo tres quattuor"
at_fn_check_prepare_notrace 'a $(...) command substitution' "vapass.at:123"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog unus duo tres quattuor
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "arg2=tres, arg3=quattuor
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/vapass.at:123"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_23
#AT_START_24
at_fn_group_banner 24 'stkadj.at:17' \
  "stack adjustment after function calls" "          " 4
at_xfail=no
(
  printf "%s\n" "24. $at_setup_line: testing $at_desc ..."
  $at_traceon


cat >prog <<'_ATEOF'
require '_register'

func x0(number a)
do
  pass
done

func x1(number a; number b)
do
  pass
done

func x2(number a; number b, number c, ...)
do
  pass
done

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  x0(2)
  echo _reg(REG_TOS)
  x1(2)
  echo _reg(REG_TOS)
  x1(2,3)
  echo _reg(REG_TOS)
  x2(2)
  echo _reg(REG_TOS)
  x2(2,3)
  echo _reg(REG_TOS)
  x2(2,3,4)
  echo _reg(REG_TOS)
  x2(2,3,4,5,6,7)
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/stkadj.at:58:
# This checks whether the tos register after each function call remains
# the same as before it.  Line numbers:
#  1   Initial tos
#  2   Function with fixed number of arguments (x0)
#  3   Function with optional arguments (x1), only mandatory ones given
#  4   Function with optional arguments (x1), mandatory and optional
#      arguments given
#  5   Function with mandatory, two optional and variable arguments (x2);
#      only mandatory arguments given.
#  6   Same as above, but with one optional argument given.
#  7   Same as above, with both optional arguments supplied.
#  8   Same as above, with three variable arguments given.
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>&1 | numck -n 8
"
at_fn_check_prepare_notrace 'an embedded newline' "stkadj.at:58"
( $at_check_trace;
# This checks whether the tos register after each function call remains
# the same as before it.  Line numbers:
#  1   Initial tos
#  2   Function with fixed number of arguments (x0)
#  3   Function with optional arguments (x1), only mandatory ones given
#  4   Function with optional arguments (x1), mandatory and optional
#      arguments given
#  5   Function with mandatory, two optional and variable arguments (x2);
#      only mandatory arguments given.
#  6   Same as above, but with one optional argument given.
#  7   Same as above, with both optional arguments supplied.
#  8   Same as above, with three variable arguments given.
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>&1 | numck -n 8

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/stkadj.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_24
#AT_START_25
at_fn_group_banner 25 'shiftadj.at:17' \
  "stack adjustment after function calls with variadic shifts" "" 4
at_xfail=no
(
  printf "%s\n" "25. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/shiftadj.at:19:
cat >prog <<'_ATEOF'
require '_register'

func x(number a, ...)
do
  pass
done

func y()
  returns number
do
  return 17
done

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  x(y(), \$@(1))
  echo _reg(REG_TOS)
done
_ATEOF


mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 3 4 5 6 2>&1 | numck -n 2
"
at_fn_check_prepare_notrace 'an embedded newline' "shiftadj.at:19"
( $at_check_trace;
cat >prog <<'_ATEOF'
require '_register'

func x(number a, ...)
do
  pass
done

func y()
  returns number
do
  return 17
done

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  x(y(), $@(1))
  echo _reg(REG_TOS)
done
_ATEOF


mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 3 4 5 6 2>&1 | numck -n 2

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/shiftadj.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/shiftadj.at:46:
cat >prog <<'_ATEOF'
require '_register'
func format()
  returns string
do
  return '# %s %s'
done
func main(...)
  returns number
do
  echo _reg(REG_TOS)
  echo sprintf(format(), \$@(2))
  echo _reg(REG_TOS)
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog ignore ignore text foo 2>&1 | numck -n 3 -p
"
at_fn_check_prepare_notrace 'an embedded newline' "shiftadj.at:46"
( $at_check_trace;
cat >prog <<'_ATEOF'
require '_register'
func format()
  returns string
do
  return '# %s %s'
done
func main(...)
  returns number
do
  echo _reg(REG_TOS)
  echo sprintf(format(), $@(2))
  echo _reg(REG_TOS)
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog ignore ignore text foo 2>&1 | numck -n 3 -p

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "# text foo
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/shiftadj.at:46"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_25
#AT_START_26
at_fn_group_banner 26 'ignoreret.at:17' \
  "ignored function return" "                        " 4
at_xfail=no
(
  printf "%s\n" "26. $at_setup_line: testing $at_desc ..."
  $at_traceon

{ set +x
printf "%s\n" "$at_srcdir/ignoreret.at:18:
cat >prog <<'_ATEOF'
require '_register'
func x()
  returns number
do
  return 3
done
func main(...)
  returns number
do
  echo _reg(REG_TOS)
  x()
  echo _reg(REG_TOS)
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog ignore ignore text foo 2>&1 | numck -n 3 -c mailfromd: -p
"
at_fn_check_prepare_notrace 'an embedded newline' "ignoreret.at:18"
( $at_check_trace;
cat >prog <<'_ATEOF'
require '_register'
func x()
  returns number
do
  return 3
done
func main(...)
  returns number
do
  echo _reg(REG_TOS)
  x()
  echo _reg(REG_TOS)
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog ignore ignore text foo 2>&1 | numck -n 3 -c mailfromd: -p

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "mailfromd: prog:11.5: warning: return from x is ignored
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ignoreret.at:18"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_26
#AT_START_27
at_fn_group_banner 27 'cond01.at:17' \
  "String equality" "                                " 5
at_xfail=no
(
  printf "%s\n" "27. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  if $1 = "foo"
    echo "match 1"
  fi
  if $2 = "foo"
    echo "match 2"
  fi
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cond01.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog foo bar"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cond01.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog foo bar
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "match 1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cond01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_27
#AT_START_28
at_fn_group_banner 28 'cond02.at:17' \
  "Fnmatch" "                                        " 5
at_xfail=no
(
  printf "%s\n" "28. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  if $1 fnmatches "*.c"
    echo "match 1"
  fi
  if $2 fnmatches "*.c"
    echo "match 2"
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cond02.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog one.c one.i"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cond02.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog one.c one.i
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "match 1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cond02.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_28
#AT_START_29
at_fn_group_banner 29 'cond04.at:17' \
  "Regex match" "                                    " 5
at_xfail=no
(
  printf "%s\n" "29. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  if $1 matches 'foo.*\..*'
    echo "match 1"
  fi
  if $2 matches 'foo.*\..*'
    echo "match 2"
  fi
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cond04.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog foo.bar foobar"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cond04.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog foo.bar foobar
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "match 1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cond04.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_29
#AT_START_30
at_fn_group_banner 30 'cond06.at:17' \
  "Nested if" "                                      " 5
at_xfail=no
(
  printf "%s\n" "30. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  if $1 == "one"
    if $2 == "two"
      echo "match"
    else
      echo "no match"
    fi
    echo "outer if"
  fi
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cond06.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog one two"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cond06.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog one two
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "match
outer if
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cond06.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  if $1 == "one"
    if $2 == "two"
      echo "match"
    else
      echo "no match"
    fi
    echo "outer if"
  fi
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cond06.at:42:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog one one"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cond06.at:42"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog one one
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "no match
outer if
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cond06.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  if $1 == "one"
    if $2 == "two"
      echo "match"
    else
      echo "no match"
    fi
    echo "outer if"
  fi
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cond06.at:64:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog two one"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cond06.at:64"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog two one
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cond06.at:64"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_30
#AT_START_31
at_fn_group_banner 31 'switchn1.at:17' \
  "Numeric switch: Branch 1,2 val 1" "               " 6
at_xfail=no
(
  printf "%s\n" "31. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch 0+$1
  do
  case 1 or 2:
    echo "Branch 1,2"
  case 3:
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchn1.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 1"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchn1.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 1
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Branch 1,2
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchn1.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_31
#AT_START_32
at_fn_group_banner 32 'switchn2.at:17' \
  "Numeric switch: Branch 1,2 val 1" "               " 6
at_xfail=no
(
  printf "%s\n" "32. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch 0+$1
  do
  case 1 or 2:
    echo "Branch 1,2"
  case 3:
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchn2.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchn2.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Branch 1,2
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchn2.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_32
#AT_START_33
at_fn_group_banner 33 'switchn3.at:17' \
  "Numeric switch: Branch 3" "                       " 6
at_xfail=no
(
  printf "%s\n" "33. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch 0+$1
  do
  case 1 or 2:
    echo "Branch 1,2"
  case 3:
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchn3.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 3"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchn3.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 3
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Branch 3
--------
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchn3.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_33
#AT_START_34
at_fn_group_banner 34 'switchn4.at:17' \
  "Numeric switch: Default branch" "                 " 6
at_xfail=no
(
  printf "%s\n" "34. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch 0+$1
  do
  case 1 or 2:
    echo "Branch 1,2"
  case 3:
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchn4.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 4"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchn4.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 4
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Default branch
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchn4.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_34
#AT_START_35
at_fn_group_banner 35 'switchs1.at:17' \
  "String switch: Branch 1,2 val jeden" "            " 6
at_xfail=no
(
  printf "%s\n" "35. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch $1
  do
  case "jeden" or "dwa":
    echo "Branch 1,2"
  case "trzy":
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchs1.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog jeden"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchs1.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog jeden
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Branch 1,2
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchs1.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_35
#AT_START_36
at_fn_group_banner 36 'switchs2.at:17' \
  "String switch: Branch 1,2 val dwa" "              " 6
at_xfail=no
(
  printf "%s\n" "36. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch $1
  do
  case "jeden" or "dwa":
    echo "Branch 1,2"
  case "trzy":
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchs2.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog dwa"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchs2.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog dwa
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Branch 1,2
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchs2.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_36
#AT_START_37
at_fn_group_banner 37 'switchs3.at:17' \
  "String switch: Branch 3" "                        " 6
at_xfail=no
(
  printf "%s\n" "37. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch $1
  do
  case "jeden" or "dwa":
    echo "Branch 1,2"
  case "trzy":
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchs3.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog trzy"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchs3.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog trzy
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Branch 3
--------
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchs3.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_37
#AT_START_38
at_fn_group_banner 38 'switchs4.at:17' \
  "String switch: Default branch" "                  " 6
at_xfail=no
(
  printf "%s\n" "38. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  switch $1
  do
  case "jeden" or "dwa":
    echo "Branch 1,2"
  case "trzy":
    echo "Branch 3"
    echo "--------"
  default:
    echo "Default branch"
  done
  echo "Finished"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/switchs4.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog cztery"
at_fn_check_prepare_notrace 'a $(...) command substitution' "switchs4.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog cztery
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Default branch
Finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/switchs4.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_38
#AT_START_39
at_fn_group_banner 39 'next01.at:17' \
  "next01" "                                         " 7
at_xfail=no
(
  printf "%s\n" "39. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: The `next' keyword was implemented incorrectly in
# versions up to 5.1.


cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  loop for string names $1 . " "
	    number i index(names, " "),
       while i != -1,
       set names substr(names, i + 1)
       set i index(names, " ")
  do
    string s substr(names, 0, i)
    if s == 'next'
      next
    fi
    echo "WORD: %s"
  done
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/next01.at:23:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 'begin next cont next end next'"
at_fn_check_prepare_notrace 'a $(...) command substitution' "next01.at:23"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 'begin next cont next end next'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "WORD: begin
WORD: cont
WORD: end
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/next01.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_39
#AT_START_40
at_fn_group_banner 40 'next02.at:17' \
  "next02" "                                         " 7
at_xfail=no
(
  printf "%s\n" "40. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: The `next' keyword was implemented incorrectly in
# versions up to 5.1.


cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  loop for string names $1 . " "
	    number i index(names, " "),
       while i != -1,
       set names substr(names, i + 1)
       set i index(names, " ")
  do
    string s substr(names, 0, i)
    if s == 'next'
      next
    fi
    echo "WORD: %s"
  done while index(names, '@') != 0
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/next02.at:23:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 'begin next cont next end @ finis'"
at_fn_check_prepare_notrace 'a $(...) command substitution' "next02.at:23"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 'begin next cont next end @ finis'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "WORD: begin
WORD: cont
WORD: end
WORD: @
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/next02.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_40
#AT_START_41
at_fn_group_banner 41 'next03.at:17' \
  "Next in a do-while loop" "                        " 7
at_xfail=no
(
  printf "%s\n" "41. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: The `next' keyword bypassed conditional in do-while
# loops.  Affected versions: up to 7.99.92 [alpha-7.0.92-mu2-124-ge2ae324]


cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  loop for set i 0
  do
    set i i + 1
    echo i
    next
  done while i < 4
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/next03.at:23:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "next03.at:23"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1
2
3
4
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/next03.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_41
#AT_START_42
at_fn_group_banner 42 'macros.at:17' \
  "Built-in macros" "                                " 8
at_xfail=no
(
  printf "%s\n" "42. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func patchstring() returns string
do
  if __patch__
    return ".%__patch__"
  else
    return ""
  fi
done

prog envfrom
do
  echo "%__file__:%__line__: this is %__package__ %__major__.%__minor__" .
       patchstring()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/macros.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "macros.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "prog:13: this is mailfromd 9.0
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/macros.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_42
#AT_START_43
at_fn_group_banner 43 'expstr.at:17' \
  "macro expansion in strings within pragma" "       " 8
at_xfail=no
(
  printf "%s\n" "43. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

#pragma dbprop "%__statedir__/file.db" null 640

prog envfrom
do
  pass
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/expstr.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "expstr.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/expstr.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_43
#AT_START_44
at_fn_group_banner 44 'miltermacros.at:17' \
  "pragma miltermacros" "                            " 8
at_xfail=no
(
  printf "%s\n" "44. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Affected versions: < 7.0.92-20101120
# Description: #pragma miltermacros did not add curly brackets around
# macro names longer than 1 character, as the rest of mailfromd code
# did.

{ set +x
printf "%s\n" "$at_srcdir/miltermacros.at:25:
cat >prog <<'_ATEOF'
#pragma miltermacros envfrom auth_type
prog envfrom
do
  echo \$f
done
_ATEOF


mailfromd -P\$TESTDIR \$MFOPTS \$MFADDOPTS --dump-macros ./prog
"
at_fn_check_prepare_notrace 'an embedded newline' "miltermacros.at:25"
( $at_check_trace;
cat >prog <<'_ATEOF'
#pragma miltermacros envfrom auth_type
prog envfrom
do
  echo $f
done
_ATEOF


mailfromd -P$TESTDIR $MFOPTS $MFADDOPTS --dump-macros ./prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "envfrom {auth_type}, f
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/miltermacros.at:25"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_44
#AT_START_45
at_fn_group_banner 45 'catch.at:17' \
  "Catching exceptions in handler" "                 " 9
at_xfail=no
(
  printf "%s\n" "45. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
dclex myex

func main(...)
  returns number
do
  catch myex
  do
    echo "Caught exception $1 '$2'"
    return 1
  done
  echo "testing"
  throw myex "Ouch!"
  echo "passed"
  return 1
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/catch.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "catch.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "testing
Caught exception 0 'Ouch!'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/catch.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_45
#AT_START_46
at_fn_group_banner 46 'catch01.at:17' \
  "Catching exceptions in function" "                " 9
at_xfail=no
(
  printf "%s\n" "46. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
dclex e_one
dclex e_two

func f()
  returns number
do
  catch e_one
  do
    echo "function caught exception $1 '$2'"
    return 0
  done
  throw e_one "one"
  return 1
done

func main(...)
  returns number
do
  catch e_one or e_two
  do
    echo "handler caught exception $1 '$2'"
  done
  return f()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/catch01.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "catch01.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "function caught exception 0 'one'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/catch01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
dclex e_one
dclex e_two

func f()
  returns number
do
  catch e_one
  do
    echo "function caught exception $1 '$2'"
    return 0
  done
  throw e_two "two"
  return 1
done

func main(...)
  returns number
do
  catch e_one or e_two
  do
    echo "handler caught exception $1 '$2'"
  done
  return f()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/catch01.at:52:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "catch01.at:52"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "handler caught exception 1 'two'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/catch01.at:52"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_46
#AT_START_47
at_fn_group_banner 47 'catch02.at:17' \
  "Catching exceptions in prog begin" "              " 9
at_xfail=no
(
  printf "%s\n" "47. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
dclex e_oops
prog begin
do
  catch e_oops
  do
    tempfail 450 "Caught $1 '$2'"
  done
done

prog envfrom
do
  throw e_oops "Not now"
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/catch02.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "catch02.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 450 Caught 0 'Not now'
State envfrom: tempfail
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/catch02.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_47
#AT_START_48
at_fn_group_banner 48 'catch03.at:17' \
  "Positional arguments in catch" "                  " 9
at_xfail=no
(
  printf "%s\n" "48. $at_setup_line: testing $at_desc ..."
  $at_traceon



# That's basically the same test as catch.at, except that it uses catch
# arguments in expressions, instead of expanding them in strings.
# Mailfromd 8.17 handled two cases differently and reported compilation
# error.
# Bug spotted by Jan Rafaj.  Reported on 2023-07-19 in private
# correspondence <alpine.LNX.2.00.2307191103360.4913@cedric.unob.cz>.


cat >prog <<'_ATEOF'
dclex myex

func main(...)
  returns number
do
  catch myex
  do
    if $1 == myex
      return 0
    fi
    return 1
  done
  throw myex "Ouch!"
  return 2
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/catch03.at:27:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "catch03.at:27"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/catch03.at:27"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_48
#AT_START_49
at_fn_group_banner 49 'trycatch01.at:17' \
  "Try-catch: returning from try" "                  " 9
at_xfail=no
(
  printf "%s\n" "49. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check returning from the try branch of a `try-catch'
# construct.


cat >prog <<'_ATEOF'

func throwcheck()
  returns number
do
  try
  do
    return 0
  done
  catch *
  do
    echo "Caught exception: $1, $2"
    return 1
  done

  return 2
done

func main(...)
  returns number
do
  echo throwcheck()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/trycatch01.at:23:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "trycatch01.at:23"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "0
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch01.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_49
#AT_START_50
at_fn_group_banner 50 'trycatch02.at:17' \
  "Try-catch: returning from catch" "                " 9
at_xfail=no
(
  printf "%s\n" "50. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check returning from the catch branch of a `try-catch'
# construct.


cat >prog <<'_ATEOF'

dclex ex0
dclex ex1

func throwcheck()
  returns number
do
  try
  do
    throw ex1 "text"
    return 0
  done
  catch *
  do
    echo "Caught exception: $1, $2"
    return 1
  done

  return 2
done

func main(...)
  returns number
do
  echo throwcheck()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/trycatch02.at:23:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "trycatch02.at:23"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Caught exception: 1, text
1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/trycatch02.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_50
#AT_START_51
at_fn_group_banner 51 'trycatch03.at:17' \
  "Try-catch: passing through try" "                 " 9
at_xfail=no
(
  printf "%s\n" "51. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether passing through the try branch of a `try-catch'
# construct works correctly.


cat >prog <<'_ATEOF'

func throwcheck()
  returns number
do
  try
  do
    echo "try: pass"
  done
  catch *
  do
    echo "Caught exception: $1, $2"
    return 1
  done

  return 2
done

func main(...)
  returns number
do
  echo throwcheck()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/trycatch03.at:23:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "trycatch03.at:23"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "try: pass
2
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 2 $at_status "$at_srcdir/trycatch03.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_51
#AT_START_52
at_fn_group_banner 52 'trycatch04.at:17' \
  "Try-catch: passing through catch" "               " 9
at_xfail=no
(
  printf "%s\n" "52. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether passing through the catch branch of a `try-catch'
# construct works correctly.


cat >prog <<'_ATEOF'

dclex ex0
dclex ex1

func throwcheck()
  returns number
do
  try
  do
    echo "try: throw"
    throw ex1 "text"
    return 0
  done
  catch *
  do
    echo "Caught exception: $1, $2"
  done

  return 2
done

func main(...)
  returns number
do
  echo throwcheck()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/trycatch04.at:23:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "trycatch04.at:23"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "try: throw
Caught exception: 1, text
2
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 2 $at_status "$at_srcdir/trycatch04.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_52
#AT_START_53
at_fn_group_banner 53 'trycatch05.at:17' \
  "Try-catch: break from try" "                      " 9
at_xfail=no
(
  printf "%s\n" "53. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a try branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop
  do
    try
    do
      break
    done
    catch usr1
    do
      pass
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch05.at:45:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch05.at:45"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch05.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_53
#AT_START_54
at_fn_group_banner 54 'trycatch06.at:17' \
  "Try-catch: break from catch" "                    " 9
at_xfail=no
(
  printf "%s\n" "54. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a catch branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop
  do
    try
    do
      throw usr1 "break"
    done
    catch usr1
    do
      break
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch06.at:45:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch06.at:45"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch06.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_54
#AT_START_55
at_fn_group_banner 55 'trycatch07.at:17' \
  "Try-catch: next from try" "                       " 9
at_xfail=no
(
  printf "%s\n" "55. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether next from a try branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop for number i 0, while i < 5, set i i + 1
  do
    try
    do
      next
    done
    catch usr1
    do
      pass
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch07.at:45:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch07.at:45"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch07.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_55
#AT_START_56
at_fn_group_banner 56 'trycatch08.at:17' \
  "Try-catch: next from catch" "                     " 9
at_xfail=no
(
  printf "%s\n" "56. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether next from a catch branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop for number i 0, while i < 5, set i i + 1
  do
    try
    do
      throw usr1 "break"
    done
    catch usr1
    do
      next
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch08.at:45:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch08.at:45"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch08.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_56
#AT_START_57
at_fn_group_banner 57 'trycatch09.at:17' \
  "Try-catch: break from nested try" "               " 9
at_xfail=no
(
  printf "%s\n" "57. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a nested try branch does not
# clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1
func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop
  do
    try
    do
      try
      do
	break
      done
      catch usr1
      do
	pass
      done
    done
    catch usr1
    do
      pass
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch09.at:52:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch09.at:52"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch09.at:52"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_57
#AT_START_58
at_fn_group_banner 58 'trycatch10.at:17' \
  "Try-catch: break from nested catch" "             " 9
at_xfail=no
(
  printf "%s\n" "58. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a nested catch branch does not
# clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop
  do
    try
    do
      try
      do
        throw usr1 "break"
      done
      catch usr1
      do
	break
      done
    done
    catch *
    do
      echo "outer catch"
      pass
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch10.at:54:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch10.at:54"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch10.at:54"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_58
#AT_START_59
at_fn_group_banner 59 'trycatch11.at:17' \
  "Try-catch: next from nested try" "                " 9
at_xfail=no
(
  printf "%s\n" "59. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether next from a nested try branch does not
# clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop for number i 0, while i < 5, set i i + 1
  do
    try
    do
      try
      do
        next
      done
      catch usr1
      do
        pass
      done
    done
    catch usr1
    do
      echo "outer catch"
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch11.at:53:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch11.at:53"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch11.at:53"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_59
#AT_START_60
at_fn_group_banner 60 'trycatch12.at:17' \
  "Try-catch: next from nested catch" "              " 9
at_xfail=no
(
  printf "%s\n" "60. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether next from a nested catch branch does not
# clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  loop for number i 0, while i < 5, set i i + 1
  do
    try
    do
      try
      do
        throw usr1 "break"
      done
      catch usr1
      do
        next
      done
    done
    catch *
    do
      echo "external catch"
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch12.at:53:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch12.at:53"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch12.at:53"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_60
#AT_START_61
at_fn_group_banner 61 'trycatch13.at:17' \
  "Try-catch: break from a loop within try" "        " 9
at_xfail=no
(
  printf "%s\n" "61. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a try branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  try
  do
    loop
    do
      break
    done
  done
  catch usr1
  do
    pass
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch13.at:45:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch13.at:45"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch13.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_61
#AT_START_62
at_fn_group_banner 62 'trycatch14.at:17' \
  "Try-catch: break from a loop within catch" "      " 9
at_xfail=no
(
  printf "%s\n" "62. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a try branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  try
  do
    throw usr1 "break"
  done
  catch usr1
  do
    loop
    do
      break
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch14.at:45:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 2 err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch14.at:45"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 2 err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch14.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_62
#AT_START_63
at_fn_group_banner 63 'trycatch15.at:17' \
  "Try-catch: next in a loop within try" "           " 9
at_xfail=no
(
  printf "%s\n" "63. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a try branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  try
  do
    loop for number i 0, while i < 5, set i i + 1
    do
      if i & 1
	next
      fi
      echo "# %i"
    done
  done
  catch usr1
  do
    pass
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch15.at:48:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 5 -p err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch15.at:48"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 5 -p err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "# 0
# 2
# 4
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch15.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_63
#AT_START_64
at_fn_group_banner 64 'trycatch16.at:17' \
  "Try-catch: next in a loop within catch" "         " 9
at_xfail=no
(
  printf "%s\n" "64. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Check whether break from a try branch does not clobber stack

cat >prog <<'_ATEOF'

require '_register'
dclex usr1

func main(...)
  returns number
do
  echo _reg(REG_TOS)
  try
  do
    throw usr1 "user-defined"
  done
  catch usr1
  do
    loop for number i 0, while i < 5, set i i + 1
    do
      if i & 1
	next
      fi
      echo "# %i"
    done
  done
  echo _reg(REG_TOS)
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/trycatch16.at:48:
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 2>err || exit \$?
numck -n 5 -p err
"
at_fn_check_prepare_notrace 'an embedded newline' "trycatch16.at:48"
( $at_check_trace;
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 2>err || exit $?
numck -n 5 -p err

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "# 0
# 2
# 4
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/trycatch16.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_64
#AT_START_65
at_fn_group_banner 65 'strace.at:17' \
  "Stack traces" "                                   " 9
at_xfail=no
(
  printf "%s\n" "65. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Explicit call to stack_trace

cat >prog <<'_ATEOF'
func x(number a)
do
  echo a
  stack_trace()
done

func y(number a)
do
  x(a)
done

func z(number a)
do
  set b a + 1
  y(b)
done

func main(...)
  returns number
do
  set a 10
  z(a)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strace.at:21:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strace.at:21"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "11
mailfromd: stack trace:
mailfromd: 0014: prog:4: stack_trace
mailfromd: 0025: prog:9: x
mailfromd: 0054: prog:15: y
mailfromd: 0078: prog:22: z
mailfromd: stack trace finishes
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strace.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }



# Explicit call to stack_trace in a call from try branch

cat >prog <<'_ATEOF'
func x(number a)
do
  echo a
  stack_trace()
done

func y(number a)
do
  try
  do
    x(a)
  done
  catch *
  do
    echo "$1: $2"
  done
done

func z(number a)
do
  set b a + 1
  y(b)
done

func main(...)
  returns number
do
  z(1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strace.at:60:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strace.at:60"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2
mailfromd: stack trace:
mailfromd: 0014: prog:4: stack_trace
mailfromd: 0059: prog:11: x
mailfromd: 0095: prog:22: y
mailfromd: 0106: prog:28: z
mailfromd: stack trace finishes
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strace.at:60"
$at_failed && at_fn_log_failure
$at_traceon; }





# Implicit stack trace

cat >prog <<'_ATEOF'
func x(string s, number a)
do
  echo substr(s, a)
done

func y(string s, number a)
do
  x(s,a)
done

func z(string s, number a)
do
  set b a - 2
  y(s,b)
done

func main(...)
  returns number
do
  z("foo", 1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strace.at:104:
TESTDIR=\$(pwd)
mailfromd --stderr \$MFOPTS \$MFADDOPTS --stack-trace --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strace.at:104"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr $MFOPTS $MFADDOPTS --stack-trace --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:3: uncaught exception #11: substr: argument out of range: start=-1
mailfromd: stack trace:
mailfromd: 0015: prog:3: substr
mailfromd: 0031: prog:8: x
mailfromd: 0064: prog:14: y
mailfromd: 0077: prog:20: z
mailfromd: stack trace finishes
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strace.at:104"
$at_failed && at_fn_log_failure
$at_traceon; }



# Explicit call to stack_trace in catch branch

cat >prog <<'_ATEOF'
dclex badnum

func x(string s, number a)
do
  echo substr(s, a)
done

func y(string s, number a)
do
  try
  do
    x(s,a)
  done
  catch *
  do
    echo "$2"
    stack_trace()
  done
done

func z(string s, number a)
do
  set b a - 2
  y(s,b)
done

func main(...)
  returns number
do
  z("foo", 1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strace.at:104:
TESTDIR=\$(pwd)
mailfromd --stderr \$MFOPTS \$MFADDOPTS --stack-trace --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strace.at:104"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr $MFOPTS $MFADDOPTS --stack-trace --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "substr: argument out of range: start=-1
mailfromd: stack trace:
mailfromd: 0039: prog:17: stack_trace
mailfromd: 0025: prog:14: (in catch)
mailfromd: 0015: prog:5: substr
mailfromd: 0102: prog:24: y
mailfromd: 0115: prog:30: z
mailfromd: stack trace finishes
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strace.at:104"
$at_failed && at_fn_log_failure
$at_traceon; }



# Uncaught exception generated by an explicit throw

cat >prog <<'_ATEOF'
dclex badnum

func x(number a)
do
  if a < 0
    throw badnum "bad number"
  fi
  echo a
done

func y(number a)
do
  x(a)
done

func z(number a)
do
  set b a - 2
  y(b)
done

func main(...)
  returns number
do
  z(1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strace.at:104:
TESTDIR=\$(pwd)
mailfromd --stderr \$MFOPTS \$MFADDOPTS --stack-trace --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strace.at:104"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr $MFOPTS $MFADDOPTS --stack-trace --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:6: uncaught exception badnum: bad number
mailfromd: stack trace:
mailfromd: 0019: prog:6: (unknown)
mailfromd: 0038: prog:13: x
mailfromd: 0067: prog:19: y
mailfromd: 0078: prog:25: z
mailfromd: stack trace finishes
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strace.at:104"
$at_failed && at_fn_log_failure
$at_traceon; }






# Caught exception generated by an explicit throw (legacy catch)

cat >prog <<'_ATEOF'
dclex badnum

func x(number a)
do
  if a < 0
    throw badnum "bad number"
  fi
  echo a
done

func y(number a)
do
  catch *
  do
    echo "$2"
    stack_trace()
  done
  x(a)
done

func z(number a)
do
  set b a - 2
  y(b)
done

func main(...)
  returns number
do
  z(1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strace.at:235:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strace.at:235"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "bad number
mailfromd: stack trace:
mailfromd: 0050: prog:16: stack_trace
mailfromd: 0036: prog:13: (in catch)
mailfromd: 0019: prog:6: (unknown)
mailfromd: 0093: prog:24: y
mailfromd: 0104: prog:30: z
mailfromd: stack trace finishes
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strace.at:235"
$at_failed && at_fn_log_failure
$at_traceon; }



# Caught exception generated by an explicit throw

cat >prog <<'_ATEOF'
dclex badnum

func x(number a)
do
  if a < 0
    throw badnum "bad number"
  fi
  echo a
done

func y(number a)
do
  try
  do
    x(a)
  done
  catch *
  do
    echo "$2"
    stack_trace()
  done
done

func z(number a)
do
  set b a - 2
  y(b)
done

func main(...)
  returns number
do
  z(1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strace.at:283:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strace.at:283"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "bad number
mailfromd: stack trace:
mailfromd: 0050: prog:20: stack_trace
mailfromd: 0036: prog:17: (in catch)
mailfromd: 0019: prog:6: (unknown)
mailfromd: 0105: prog:27: y
mailfromd: 0116: prog:33: z
mailfromd: stack trace finishes
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strace.at:283"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_65
#AT_START_66
at_fn_group_banner 66 'startup.at:19' \
  "startup" "                                        " 10
at_xfail=no
(
  printf "%s\n" "66. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'
number n0
number n1 10
string s0
string s1 "text"

prog startup
do
  set s0 "s0 initialized"
  set s1 "s1 initialized"
  set n0 5
  set n1 10
done

prog begin
do
  echo "BEGIN %s0, %s1, %n0, %n1"
done

prog envfrom
do
  echo "ENVFROM %s0, %s1, %n0, %n1"
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
ehlo example.org
\E250
mail from:<test@example.org>
\E250
rcpt to:<recipient@example.org>
\E354
data
From: test

content
\E250
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/startup.at:22:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "startup.at:22"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
BEGIN s0 initialized, s1 initialized, 5, 10
ENVFROM s0 initialized, s1 initialized, 5, 10
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/startup.at:22"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_66
#AT_START_67
at_fn_group_banner 67 'progord.at:19' \
  "Handler order" "                                  " 10
at_xfail=no
(
  printf "%s\n" "67. $at_setup_line: testing $at_desc ..."
  $at_traceon










 cat >filter <<'_ATEOF'
prog shutdown
do
  echo "SHUTDOWN"
done
prog envfrom
do
  echo "ENVFROM $1"
done
prog envrcpt
do
  echo "ENVRCPT $1"
done
prog startup
do
  echo "STARTUP"
done
prog begin
do
  echo "SESSION BEGIN"
done
prog end
do
  echo "SESSION END"
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
ehlo example.org
\E250
mail from:<test@example.org>
\E250
rcpt to:<first@example.org>
\E354
data
From: test

content
\E250
.
\E250
mail from:<test@example.org>
\E250
rcpt to:<second@example.org>
\E354
data
From: test

content
\E250
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/progord.at:28:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "progord.at:28"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
STARTUP
mailfromd: mailfromd started
SESSION BEGIN
ENVFROM <test@example.org>
ENVRCPT <first@example.org>
ENVFROM <test@example.org>
ENVRCPT <second@example.org>
SESSION END
SHUTDOWN
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/progord.at:28"
$at_failed && at_fn_log_failure
$at_traceon; }








  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_67
#AT_START_68
at_fn_group_banner 68 'progdup.at:23' \
  "Duplicated handlers" "                            " 10
at_xfail=no
(
  printf "%s\n" "68. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
prog shutdown
do
  echo "SHUTDOWN ONE"
done
prog begin
do
  echo "BEGIN ONE"
done
prog startup
do
  echo "STARTUP ONE"
done
prog envfrom
do
  echo "ENVFROM ONE"
done
prog begin
do
  echo "BEGIN TWO"
done
prog shutdown
do
  echo "SHUTDOWN TWO"
done
prog envfrom
do
  echo "ENVFROM TWO"
done
prog startup
do
  echo "STARTUP TWO"
done
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/progdup.at:61: mailfromd --lint prog"
at_fn_check_prepare_trace "progdup.at:61"
( $at_check_trace; mailfromd --lint prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/progdup.at:61"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/progdup.at:63: mailfromd --test prog"
at_fn_check_prepare_trace "progdup.at:63"
( $at_check_trace; mailfromd --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "STARTUP ONE
STARTUP TWO
BEGIN ONE
BEGIN TWO
ENVFROM ONE
ENVFROM TWO
SHUTDOWN ONE
SHUTDOWN TWO
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/progdup.at:63"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_68
#AT_START_69
at_fn_group_banner 69 'accept.at:17' \
  "Accept action" "                                  " 11
at_xfail=no
(
  printf "%s\n" "69. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'

prog envfrom
do
  accept
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E250
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/accept.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "accept.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/accept.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_69
#AT_START_70
at_fn_group_banner 70 'reject.at:17' \
  "Reject action" "                                  " 11
at_xfail=no
(
  printf "%s\n" "70. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'

prog envfrom
do
  reject 553 5.1.3 "Bad destination mailbox address syntax"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E553 "5.1.3 Bad destination mailbox address syntax"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/reject.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "reject.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/reject.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  reject 553 "Bad destination mailbox address syntax"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E553 "Bad destination mailbox address syntax"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/reject.at:35:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "reject.at:35"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/reject.at:35"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  reject 553
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E553
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/reject.at:50:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "reject.at:50"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/reject.at:50"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  reject
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E550
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/reject.at:65:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "reject.at:65"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/reject.at:65"
$at_failed && at_fn_log_failure
$at_traceon; }



# ##################################
# Functional syntax
# ##################################


 cat >filter <<'_ATEOF'

prog envfrom
do
  reject(553, 5.1.3, "Bad destination mailbox address syntax")
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E553 "5.1.3 Bad destination mailbox address syntax"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/reject.at:84:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "reject.at:84"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/reject.at:84"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  reject(553, , "Bad destination mailbox address syntax")
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E553 "Bad destination mailbox address syntax"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/reject.at:99:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "reject.at:99"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/reject.at:99"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  reject(553,,)
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E553
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/reject.at:114:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "reject.at:114"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/reject.at:114"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_70
#AT_START_71
at_fn_group_banner 71 'tempfail.at:17' \
  "Tempfail action" "                                " 11
at_xfail=no
(
  printf "%s\n" "71. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'

prog envfrom
do
  tempfail 450 4.1.1 "Try again later"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E450 "4.1.1 Try again later"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/tempfail.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "tempfail.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/tempfail.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  tempfail 450 "Try again later"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E450 "Try again later"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/tempfail.at:35:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "tempfail.at:35"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/tempfail.at:35"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  tempfail
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E451
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/tempfail.at:50:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "tempfail.at:50"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/tempfail.at:50"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  tempfail(450, 4.1.1, "Try again later")
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E450 "4.1.1 Try again later"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/tempfail.at:65:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "tempfail.at:65"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/tempfail.at:65"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  tempfail(450, , "Try again later")
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E450 "Try again later"
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/tempfail.at:80:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "tempfail.at:80"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/tempfail.at:80"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_71
#AT_START_72
at_fn_group_banner 72 'hook.at:17' \
  "Action hooks" "                                   " 11
at_xfail=no
(
  printf "%s\n" "72. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
prog envfrom
do
  tempfail 450 4.1.1 "Try again later"
done
prog action
do
  echo milter_action_name($1)
  echo $2
  echo $3
  echo $4
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/hook.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "hook.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "tempfail
450
4.1.1
Try again later
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 450 4.1.1 Try again later
State envfrom: tempfail
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hook.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
dclex e_abort
prog envfrom
do
  accept
done
prog action
do
  throw e_abort "explicit throw"
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/hook.at:44:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "hook.at:44"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:8: uncaught exception e_abort: explicit throw
mailfromd: execution of the filter program was not finished
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: tempfail
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hook.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
dclex e_abort
prog envfrom
do
  try
  do
    accept
  done
  catch *
  do
    echo "Caught $1: $2"
  done
done
prog action
do
  throw e_abort "explicit throw"
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/hook.at:63:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "hook.at:63"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Caught 0: explicit throw
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hook.at:63"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_72
#AT_START_73
at_fn_group_banner 73 'connargs.at:17' \
  "Arguments to connect" "                           " 12
at_xfail=no
(
  printf "%s\n" "73. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog connect
do
  echo $1
  echo $2
  echo $3
  echo $4
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/connargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "connargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/connargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

prog connect
do
  echo $5
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/connargs.at:30:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "connargs.at:30"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/connargs.at:30"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog connect
do
  echo "1='$1'"
  echo "2='$2'"
  echo "3='$3'"
  echo "4='$4'"
done
_ATEOF

 cat >script <<'_ATEOF'
\S2 marvin.example.org 192.0.2.10 25
\E250
HELO localhost
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/connargs.at:42:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "connargs.at:42"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
1='marvin.example.org'
2='2'
3='25'
4='192.0.2.10'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/connargs.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_73
#AT_START_74
at_fn_group_banner 74 'heloargs.at:17' \
  "Arguments to helo" "                              " 12
at_xfail=no
(
  printf "%s\n" "74. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog helo
do
  echo $1
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/heloargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "heloargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/heloargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

prog helo
do
  echo $2
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/heloargs.at:27:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "heloargs.at:27"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/heloargs.at:27"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog helo
do
  echo "1='$1'"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost.localdomain
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/heloargs.at:39:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "heloargs.at:39"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
1='localhost.localdomain'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/heloargs.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_74
#AT_START_75
at_fn_group_banner 75 'fromargs.at:17' \
  "Arguments to envfrom" "                           " 12
at_xfail=no
(
  printf "%s\n" "75. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog envfrom
do
  echo $1
  echo $2
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/fromargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "fromargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fromargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

prog envfrom
do
  echo $3
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/fromargs.at:28:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "fromargs.at:28"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/fromargs.at:28"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envfrom
do
  echo "1='$1'"
  echo "2='$2'"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E250
MAIL FROM: <gray@localhost> AUTH=<> SIZE=1025 BODY=7BIT
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/fromargs.at:40:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "fromargs.at:40"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
1='<gray@localhost>'
2='AUTH=<> SIZE=1025 BODY=7BIT'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fromargs.at:40"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_75
#AT_START_76
at_fn_group_banner 76 'rcptargs.at:17' \
  "Arguments to envrcpt" "                           " 12
at_xfail=no
(
  printf "%s\n" "76. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog envrcpt
do
  echo $1
  echo $2
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/rcptargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "rcptargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/rcptargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

prog envrcpt
do
  echo $3
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/rcptargs.at:28:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "rcptargs.at:28"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/rcptargs.at:28"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog envrcpt
do
  echo "1='$1'"
  echo "2='$2'"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E250
MAIL FROM: <gray@localhost>
\E250
RCPT TO: <root@example.org>
\E250
RCPT TO: <smith@example.com> X=A
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/rcptargs.at:40:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "rcptargs.at:40"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
1='<root@example.org>'
2=''
1='<smith@example.com>'
2='X=A'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/rcptargs.at:40"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_76
#AT_START_77
at_fn_group_banner 77 'hdrargs.at:17' \
  "Arguments to header" "                            " 12
at_xfail=no
(
  printf "%s\n" "77. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog header
do
  echo $1
  echo $2
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/hdrargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdrargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdrargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

prog header
do
  echo $3
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/hdrargs.at:28:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdrargs.at:28"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/hdrargs.at:28"
$at_failed && at_fn_log_failure
$at_traceon; }




 cat >filter <<'_ATEOF'

prog header
do
  echo "1='$1'"
  echo "2='$2'"
done

prog eoh
do
  echo "--END OF HEADERS--"
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E250
MAIL FROM: <gray@localhost>
\E250
RCPT TO: <root@example.org>
\E354
DATA
From: gray
To: root
Subject: test subject

test message
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdrargs.at:40:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdrargs.at:40"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
1='From'
2='gray'
1='To'
2='root'
1='Subject'
2='test subject'
--END OF HEADERS--
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdrargs.at:40"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_77
#AT_START_78
at_fn_group_banner 78 'eohargs.at:17' \
  "Arguments to eoh" "                               " 12
at_xfail=no
(
  printf "%s\n" "78. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog eoh
do
  echo $1
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/eohargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "eohargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/eohargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_78
#AT_START_79
at_fn_group_banner 79 'bodyargs.at:17' \
  "Arguments to body" "                              " 12
at_xfail=no
(
  printf "%s\n" "79. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog body
do
  echo $1
  echo $2
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/bodyargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "bodyargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/bodyargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

prog body
do
  echo $3
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/bodyargs.at:28:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "bodyargs.at:28"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/bodyargs.at:28"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >filter <<'_ATEOF'
number fd

prog begin
do
  set fd open(">".getenv("TESTDIR")."/body.txt")
done

prog body
do
  write_body(fd, $1, $2)
done
_ATEOF


cat >script.pre <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM: <foo@localhost>
\E250
RCPT TO: <bar@example.org>
\E354
DATA
From: foo
To: bar
Subject: test subject

_ATEOF


cat >script.post <<'_ATEOF'
.
\E221
QUIT
_ATEOF


{ set +x
printf "%s\n" "$at_srcdir/bodyargs.at:75:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

cat script.pre \$top_srcdir/COPYING script.post > script
TESTDIR=\$(pwd)
export TESTDIR
mtasim -DTESTDIR=\"\$TESTDIR\" --body-chunk=128 --stdio -Xauto --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>&1 > /dev/null | sed 's/^mailfromd: info: *//' >&2
"
at_fn_check_prepare_notrace 'a $(...) command substitution' "bodyargs.at:75"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

cat script.pre $top_srcdir/COPYING script.post > script
TESTDIR=$(pwd)
export TESTDIR
mtasim -DTESTDIR="$TESTDIR" --body-chunk=128 --stdio -Xauto --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>&1 > /dev/null | sed 's/^mailfromd: info: *//' >&2

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/bodyargs.at:75"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/bodyargs.at:85: cat body.txt | tr -d '\\r' | cmp \$top_srcdir/COPYING -"
at_fn_check_prepare_notrace 'a shell pipeline' "bodyargs.at:85"
( $at_check_trace; cat body.txt | tr -d '\r' | cmp $top_srcdir/COPYING -
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/bodyargs.at:85"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_79
#AT_START_80
at_fn_group_banner 80 'eomargs.at:17' \
  "Arguments to eom" "                               " 12
at_xfail=no
(
  printf "%s\n" "80. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

prog eom
do
  echo $1
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/eomargs.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --lint"
at_fn_check_prepare_notrace 'a $(...) command substitution' "eomargs.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --lint
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:4.8-9: argument number too high
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/eomargs.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_80
#AT_START_81
at_fn_group_banner 81 'connect00.at:17' \
  "Connect: stdio" "                                 " 13
at_xfail=no
(
  printf "%s\n" "81. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'

prog connect
do
  echo "hostname=$1"
  echo "family=$2"
  echo "port=$3"
  echo "addr=$4"
done
_ATEOF

 cat >script <<'_ATEOF'

\Sstdio
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/connect00.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "connect00.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
hostname=localhost
family=0
port=0
addr=
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/connect00.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_81
#AT_START_82
at_fn_group_banner 82 'connect01.at:17' \
  "Connect: unix" "                                  " 13
at_xfail=no
(
  printf "%s\n" "82. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'

prog connect
do
  echo "hostname=$1"
  echo "family=$2"
  echo "port=$3"
  echo "addr=$4"
done
_ATEOF

 cat >script <<'_ATEOF'

\Sunix localhost /foo/bar
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/connect01.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "connect01.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
hostname=localhost
family=1
port=0
addr=/foo/bar
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/connect01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_82
#AT_START_83
at_fn_group_banner 83 'connect02.at:17' \
  "Connect: inet" "                                  " 13
at_xfail=no
(
  printf "%s\n" "83. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'

prog connect
do
  echo "hostname=$1"
  echo "family=$2"
  echo "port=$3"
  echo "addr=$4"
done
_ATEOF

 cat >script <<'_ATEOF'

\Sinet pirx.gnu.org.ua 213.130.31.41 34567
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/connect02.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "connect02.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
hostname=pirx.gnu.org.ua
family=2
port=34567
addr=213.130.31.41
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/connect02.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_83
#AT_START_84
at_fn_group_banner 84 'connect03.at:17' \
  "Connect: inet6" "                                 " 13
at_xfail=no
(
  printf "%s\n" "84. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog connect
do
  echo "hostname=$1"
  echo "family=$2"
  echo "port=$3"
  echo "addr=$4"
done
_ATEOF

 cat >script <<'_ATEOF'

\Sinet6 pirx.gnu.org.ua 2001:470:1f0a:1be1::2 34567
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/connect03.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)
   ipv6on || exit 77

   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "connect03.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)
   ipv6on || exit 77

   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
hostname=pirx.gnu.org.ua
family=3
port=34567
addr=2001:470:1f0a:1be1::2
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/connect03.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_84
#AT_START_85
at_fn_group_banner 85 'module01.at:17' \
  "module: require" "                                " 14
at_xfail=no
(
  printf "%s\n" "85. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >mod1.mfl <<'_ATEOF'
module "mod1".
require mod2

func mod1_print()
do
  echo "%__module__:%__line__: %__function__ called"
done

func mod2_print()
do
  mod_print2()
done
_ATEOF


cat >mod2.mfl <<'_ATEOF'
module "mod2".

func mod_print2()
do
  echo "%__module__:%__line__: %__function__ called"
done
_ATEOF



cat >prog <<'_ATEOF'
require 'mod2'
func main(...)
  returns number
do
  mod_print2()
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/module01.at:44:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "module01.at:44"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mod2:5: mod_print2 called
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/module01.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_85
#AT_START_86
at_fn_group_banner 86 'module02.at:17' \
  "module: import literal" "                         " 14
at_xfail=no
(
  printf "%s\n" "86. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >mod1.mfl <<'_ATEOF'
module "mod1".
require mod2

func mod1_print()
do
  echo "%__module__:%__line__: %__function__ called"
done

func mod2_print()
do
  mod_print2()
done
_ATEOF


cat >mod2.mfl <<'_ATEOF'
module "mod2".

func mod_print2()
do
  echo "%__module__:%__line__: %__function__ called"
done
_ATEOF



cat >prog <<'_ATEOF'

from 'mod2' import mod_print2.

func main(...)
  returns number
do
  mod_print2()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/module02.at:44:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "module02.at:44"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mod2:5: mod_print2 called
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/module02.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_86
#AT_START_87
at_fn_group_banner 87 'module03.at:17' \
  "module: import regex" "                           " 14
at_xfail=no
(
  printf "%s\n" "87. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >mod1.mfl <<'_ATEOF'
module "mod1".
require mod2

func mod1_print()
do
  echo "%__module__:%__line__: %__function__ called"
done

func mod2_print()
do
  mod_print2()
done
_ATEOF


cat >mod2.mfl <<'_ATEOF'
module "mod2".

func mod_print2()
do
  echo "%__module__:%__line__: %__function__ called"
done
_ATEOF



cat >prog <<'_ATEOF'

from 'mod2' import '/.*/'.

func main(...)
  returns number
do
  mod_print2()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/module03.at:44:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "module03.at:44"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mod2:5: mod_print2 called
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/module03.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_87
#AT_START_88
at_fn_group_banner 88 'module04.at:17' \
  "module: import regex (not matching)" "            " 14
at_xfail=no
(
  printf "%s\n" "88. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >mod1.mfl <<'_ATEOF'
module "mod1".
require mod2

func mod1_print()
do
  echo "%__module__:%__line__: %__function__ called"
done

func mod2_print()
do
  mod_print2()
done
_ATEOF


cat >mod2.mfl <<'_ATEOF'
module "mod2".

func mod_print2()
do
  echo "%__module__:%__line__: %__function__ called"
done
_ATEOF



cat >prog <<'_ATEOF'
from 'mod2' import '/^foo.*/'.

func main(...)
  returns number
do
  mod_print2()
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/module04.at:44:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "module04.at:44"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:6.3-12: syntax error, unexpected identifier, expecting const or precious or static or public
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/module04.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_88
#AT_START_89
at_fn_group_banner 89 'module05.at:17' \
  "module: import + xform" "                         " 14
at_xfail=no
(
  printf "%s\n" "89. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >mod1.mfl <<'_ATEOF'
module "mod1".
require mod2

func mod1_print()
do
  echo "%__module__:%__line__: %__function__ called"
done

func mod2_print()
do
  mod_print2()
done
_ATEOF


cat >mod2.mfl <<'_ATEOF'
module "mod2".

func mod_print2()
do
  echo "%__module__:%__line__: %__function__ called"
done
_ATEOF



cat >prog <<'_ATEOF'

#pragma regex +extended
from 'mod1' import '/^mod[12]_.*/s/^mod([12])_(.+)/\2\1/'.

func main(...)
  returns number
do
  print1()
  print2()
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/module05.at:44:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "module05.at:44"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mod1:6: mod1_print called
mod2:5: mod_print2 called
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/module05.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_89
#AT_START_90
at_fn_group_banner 90 'module06.at:17' \
  "module: clean namespace" "                        " 14
at_xfail=no
(
  printf "%s\n" "90. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >mod1.mfl <<'_ATEOF'
module "mod1".
require mod2

func mod1_print()
do
  echo "%__module__:%20: %__function__ called"
done

func mod2_print()
do
  mod_print2()
done
_ATEOF


cat >mod2.mfl <<'_ATEOF'
module "mod2".

func mod_print2()
do
  echo "%__module__:%35: %__function__ called"
done
_ATEOF



cat >prog <<'_ATEOF'
#pragma regex +extended
from 'mod1' import '/.*/'.

func main(...)
  returns number
do
  mod1_print()
  mod2_print()
  mod_print2()
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/module06.at:44:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "module06.at:44"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:9.3-12: syntax error, unexpected identifier, expecting const or precious or static or public
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/module06.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_90
#AT_START_91
at_fn_group_banner 91 'module07.at:17' \
  "module: variable allocation" "                    " 14
at_xfail=no
(
  printf "%s\n" "91. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Description: Mailfromd 7.0 would fail to allocate static variables
# from required modules as well as public variables not accessed directly
# from the uplevel module.  For example, given the included prog, v7.0
# would produce:
#   foo
#   foo
#   foo
#   qux
# Affected-versions: < 7.0
# Additional-info:

cat >mod1.mfl <<'_ATEOF'
module 'mod1'.

string s1 "foo"
string s2 "bar"
static string s3 "baz"
static const c1 "qux"

func print_text()
do
  echo s1
  echo s2
  echo s3
  echo c1
done
_ATEOF


cat >mod2.mfl <<'_ATEOF'
module 'mod2'.
require 'mod1'

func mod2_init()
do
  print_text()
done
_ATEOF



cat >prog <<'_ATEOF'

#pragma regex +extended
require 'mod2'

func main(...)
  returns number
do
  mod2_init()
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/module07.at:58:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "module07.at:58"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "foo
bar
baz
qux
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/module07.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_91
#AT_START_92
at_fn_group_banner 92 'mfmod01.at:17' \
  "dynamically loaded modules" "                     " 15
at_xfail=no
(
  printf "%s\n" "92. $at_setup_line: testing $at_desc ..."
  $at_traceon








cat >prog <<'_ATEOF'
require 'status'
number libh -1

func echo_s(string attr)
  returns string
do
  return dlcall(libh, "echo", 's', attr)
done

func echo_n(number n)
  returns number
do
  return dlcall(libh, "echo", 'd', n)
done

func main(...)
  returns number
do
  set libname getenv("abs_builddir") . '/.libs/mfmod_echo.so'
  if not access(libname, X_OK)
    return 77
  fi
  set libh dlopen(libname)
  echo echo_n(10)
  echo echo_s("text")
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/mfmod01.at:21:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "mfmod01.at:21"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "10
text
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod01.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_92
#AT_START_93
at_fn_group_banner 93 'mfmod02.at:17' \
  "error reporting and type checking" "              " 15
at_xfail=no
(
  printf "%s\n" "93. $at_setup_line: testing $at_desc ..."
  $at_traceon








cat >prog <<'_ATEOF'
require 'status'
number libh -1
func main(...)
  returns number
do
  set libname getenv("abs_builddir") . '/.libs/mfmod_echo.so'
  if not access(libname, X_OK)
    return 77
  fi
  set libh dlopen(libname)
  void(dlcall(libh, 'argcheck', 'sn', "string", 0))
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/mfmod02.at:21:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "mfmod02.at:21"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod02.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/mfmod02.at:36: echo \"mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_inval: dlcall: call to argcheck in module \$abs_builddir/.libs/mfmod_echo.so failed: bad number of arguments\" > experr"
at_fn_check_prepare_dynamic "echo \"mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_inval: dlcall: call to argcheck in module $abs_builddir/.libs/mfmod_echo.so failed: bad number of arguments\" > experr" "mfmod02.at:36"
( $at_check_trace; echo "mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_inval: dlcall: call to argcheck in module $abs_builddir/.libs/mfmod_echo.so failed: bad number of arguments" > experr
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod02.at:36"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
number libh -1
func main(...)
  returns number
do
  set libname getenv("abs_builddir") . '/.libs/mfmod_echo.so'
  if not access(libname, X_OK)
    return 77
  fi
  set libh dlopen(libname)
  void(dlcall(libh, 'argcheck', 's', "string"))
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/mfmod02.at:38:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "mfmod02.at:38"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
$at_diff experr "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod02.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/mfmod02.at:57: echo \"mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_inval: dlcall: call to argcheck in module \$abs_builddir/.libs/mfmod_echo.so failed: bad type of argument #1: expected string, but given number\" > experr"
at_fn_check_prepare_dynamic "echo \"mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_inval: dlcall: call to argcheck in module $abs_builddir/.libs/mfmod_echo.so failed: bad type of argument #1: expected string, but given number\" > experr" "mfmod02.at:57"
( $at_check_trace; echo "mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_inval: dlcall: call to argcheck in module $abs_builddir/.libs/mfmod_echo.so failed: bad type of argument #1: expected string, but given number" > experr
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod02.at:57"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
number libh -1
func main(...)
  returns number
do
  set libname getenv("abs_builddir") . '/.libs/mfmod_echo.so'
  if not access(libname, X_OK)
    return 77
  fi
  set libh dlopen(libname)
  void(dlcall(libh, 'argcheck', 'nn', 1, 0))
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/mfmod02.at:59:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "mfmod02.at:59"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
$at_diff experr "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod02.at:59"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_93
#AT_START_94
at_fn_group_banner 94 'mfmod03.at:17' \
  "mfmod variadic functions" "                       " 15
at_xfail=no
(
  printf "%s\n" "94. $at_setup_line: testing $at_desc ..."
  $at_traceon








cat >prog <<'_ATEOF'
require 'status'
number libh -1

func sum(number ...)
  returns number
do
  return dlcall(libh, 'sum', 'n*', $@)
done

func main(...)
  returns number
do
  set libname getenv("abs_builddir") . '/.libs/mfmod_echo.so'
  if not access(libname, X_OK)
    return 77
  fi
  set libh dlopen(libname)
  echo sum()
  echo sum(1, 3, 5, 7)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/mfmod03.at:21:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "mfmod03.at:21"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "0
16
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod03.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
number libh -1
func sum(number ...)
  returns number
do
  return dlcall(libh, 'sum', 'n+', $@)
done
func main(...)
  returns number
do
  set libname getenv("abs_builddir") . '/.libs/mfmod_echo.so'
  if not access(libname, X_OK)
    return 77
  fi
  set libh dlopen(libname)
  echo sum(1)
  echo sum(1, 3, 5, 7)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/mfmod03.at:50:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "mfmod03.at:50"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1
16
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod03.at:50"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/mfmod03.at:77: echo \"mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_failure: dlcall: number of arguments doesn't satisfy type string\" > experr"
at_fn_check_prepare_trace "mfmod03.at:77"
( $at_check_trace; echo "mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_failure: dlcall: number of arguments doesn't satisfy type string" > experr
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod03.at:77"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
number libh -1
func main(...)
  returns number
do
  set libname getenv("abs_builddir") . '/.libs/mfmod_echo.so'
  if not access(libname, X_OK)
    return 77
  fi
  set libh dlopen(libname)
  return dlcall(libh, 'sum', 'n+')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/mfmod03.at:79:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "mfmod03.at:79"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
$at_diff experr "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/mfmod03.at:79"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_94
#AT_START_95
at_fn_group_banner 95 'numrcpt.at:17' \
  "rcpt_count" "                                     " 16
at_xfail=no
(
  printf "%s\n" "95. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'

prog envrcpt
do
  if rcpt_count > 2
    reject 550 5.7.1 "Too many recipients (%rcpt_count)"
  fi
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E250
MAIL FROM: <gray@localhost>
\E250
RCPT TO: <gray@localhost>
\E250
RCPT TO: <root@localhost>
\E550  "5\\.7\\.1 .*Too many recipients \\(3\\)"
RCPT TO: <devnull@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/numrcpt.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "numrcpt.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/numrcpt.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_95
#AT_START_96
at_fn_group_banner 96 'rset.at:20' \
  "rset" "                                           " 16
at_xfail=no
(
  printf "%s\n" "96. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

string currcpts
precious string allrcpts

prog envrcpt
do
  set currcpts "%currcpts $1"
  set allrcpts "%allrcpts $1"
  echo "rcpt_count=%rcpt_count"
  echo "currcpts=%currcpts"
  echo "allrcpts=%allrcpts"
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<>
\E250
RCPT TO:<a>
\E250
RCPT TO:<b>
\E250
RCPT TO:<c>
\E250
RSET
\E250
HELO localhost
\E250
MAIL FROM:<>
\E250
RCPT TO:<d>
\E250
RCPT TO:<e>
\E250
RCPT TO:<f>
\E250
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/rset.at:23:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "rset.at:23"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
rcpt_count=1
currcpts= <a>
allrcpts= <a>
rcpt_count=2
currcpts= <a> <b>
allrcpts= <a> <b>
rcpt_count=3
currcpts= <a> <b> <c>
allrcpts= <a> <b> <c>
rcpt_count=1
currcpts= <d>
allrcpts= <a> <b> <c> <d>
rcpt_count=2
currcpts= <d> <e>
allrcpts= <a> <b> <c> <d> <e>
rcpt_count=3
currcpts= <d> <e> <f>
allrcpts= <a> <b> <c> <d> <e> <f>
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/rset.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_96
#AT_START_97
at_fn_group_banner 97 'resolv_a.at:17' \
  "A lookup" "                                       " 17
at_xfail=no
(
  printf "%s\n" "97. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/resolv_a.at:20:
at_resolv_conf || exit 77
resolv -f resolv.conf a bkmx.test1.\$MF_TOPDOMAIN
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_a.at:20"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf a bkmx.test1.$MF_TOPDOMAIN

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
192.0.2.3
192.0.2.4
192.0.2.5
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_a.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/resolv_a.at:31:
at_resolv_conf || exit 77
resolv -f resolv.conf a nonexistent.\$MF_TOPDOMAIN
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_a.at:31"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf a nonexistent.$MF_TOPDOMAIN

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "NOTFOUND
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/resolv_a.at:31"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_97
#AT_START_98
at_fn_group_banner 98 'resolv_ptr.at:17' \
  "PTR lookup" "                                     " 17
at_xfail=no
(
  printf "%s\n" "98. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/resolv_ptr.at:19:
at_resolv_conf || exit 77
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr 192.0.2.1
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr 192.0.2.2
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr 192.0.2.3
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_ptr.at:19"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr 192.0.2.1
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr 192.0.2.2
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr 192.0.2.3

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
test1
OK
mail.test1
OK
mail1.test1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_ptr.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_98
#AT_START_99
at_fn_group_banner 99 'resolv_ptr.at:37' \
  "PTR lookup (IPv6)" "                              " 17
at_xfail=no
(
  printf "%s\n" "99. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/resolv_ptr.at:40: at_resolv_conf || exit 77
ipv6on || exit 77
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr 2001:db8::1
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr 2001:db8::2
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr 2001:db8::3
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_ptr.at:40"
( $at_check_trace; at_resolv_conf || exit 77
ipv6on || exit 77
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr 2001:db8::1
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr 2001:db8::2
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr 2001:db8::3

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
test1
OK
mail.test1
OK
bkmx.test1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_ptr.at:40"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_99
#AT_START_100
at_fn_group_banner 100 'resolv_txt.at:17' \
  "TXT lookup" "                                     " 17
at_xfail=no
(
  printf "%s\n" "100. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/resolv_txt.at:19:
at_resolv_conf || exit 77
resolv -f resolv.conf txt test1.\$MF_TOPDOMAIN
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_txt.at:19"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf txt test1.$MF_TOPDOMAIN

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
Mailfromd test domain 1
v=spf1 -all
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_txt.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_100
#AT_START_101
at_fn_group_banner 101 'resolv_mx.at:17' \
  "MX lookup" "                                      " 17
at_xfail=no
(
  printf "%s\n" "101. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/resolv_mx.at:19:
at_resolv_conf || exit 77
resolv -f resolv.conf -S .\$MF_TOPDOMAIN mx test1.\$MF_TOPDOMAIN
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_mx.at:19"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf -S .$MF_TOPDOMAIN mx test1.$MF_TOPDOMAIN

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
mail.test1
mail.test2
bkmx.test1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_mx.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_101
#AT_START_102
at_fn_group_banner 102 'resolv_spf.at:17' \
  "SPF lookup" "                                     " 17
at_xfail=no
(
  printf "%s\n" "102. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/resolv_spf.at:19:
at_resolv_conf || exit 77
resolv -f resolv.conf spf test1.\$MF_TOPDOMAIN
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_spf.at:19"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf spf test1.$MF_TOPDOMAIN

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
v=spf1 -all
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_spf.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_102
#AT_START_103
at_fn_group_banner 103 'resolv_ptr_val.at:17' \
  "PTR validate" "                                   " 17
at_xfail=no
(
  printf "%s\n" "103. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/resolv_ptr_val.at:19: at_resolv_conf || exit 77
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr_val 192.0.2.4
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_ptr_val.at:19"
( $at_check_trace; at_resolv_conf || exit 77
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr_val 192.0.2.4

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
bkmx.test1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_ptr_val.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_103
#AT_START_104
at_fn_group_banner 104 'resolv_ptr_val.at:28' \
  "PTR validate (IPv6)" "                            " 17
at_xfail=no
(
  printf "%s\n" "104. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/resolv_ptr_val.at:30: at_resolv_conf || exit 77
ipv6on || exit 77
resolv -f resolv.conf -S .\$MF_TOPDOMAIN ptr_val 2001:DB8::3
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_ptr_val.at:30"
( $at_check_trace; at_resolv_conf || exit 77
ipv6on || exit 77
resolv -f resolv.conf -S .$MF_TOPDOMAIN ptr_val 2001:DB8::3

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
bkmx.test1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_ptr_val.at:30"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_104
#AT_START_105
at_fn_group_banner 105 'resolv_cnamechain.at:17' \
  "CNAME chains" "                                   " 17
at_xfail=no
(
  printf "%s\n" "105. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/resolv_cnamechain.at:20:
at_resolv_conf || exit 77
resolv -f resolv.conf txt a6.cnamechain.mf.gnu.org.ua
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_cnamechain.at:20"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf txt a6.cnamechain.mf.gnu.org.ua

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
end of cname chain
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_cnamechain.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/resolv_cnamechain.at:29:
at_resolv_conf || exit 77
resolv -f resolv.conf txt a1.cnamechain.mf.gnu.org.ua
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_cnamechain.at:29"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf txt a1.cnamechain.mf.gnu.org.ua

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "NOTFOUND
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/resolv_cnamechain.at:29"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/resolv_cnamechain.at:37:
at_resolv_conf || exit 77
resolv -f resolv.conf -c6 txt a1.cnamechain.mf.gnu.org.ua
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_cnamechain.at:37"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf -c6 txt a1.cnamechain.mf.gnu.org.ua

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "OK
end of cname chain
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolv_cnamechain.at:37"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/resolv_cnamechain.at:46:
at_resolv_conf || exit 77
resolv -f resolv.conf -c8 txt a1.cnameloop.mf.gnu.org.ua
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_cnamechain.at:46"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf -c8 txt a1.cnameloop.mf.gnu.org.ua

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "NOTFOUND
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/resolv_cnamechain.at:46"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/resolv_cnamechain.at:54:
at_resolv_conf || exit 77
resolv -f resolv.conf txt a1.cnamedrop.mf.gnu.org.ua
"
at_fn_check_prepare_notrace 'an embedded newline' "resolv_cnamechain.at:54"
( $at_check_trace;
at_resolv_conf || exit 77
resolv -f resolv.conf txt a1.cnamedrop.mf.gnu.org.ua

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "NOTFOUND
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/resolv_cnamechain.at:54"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_105
#AT_START_106
at_fn_group_banner 106 'dns_query.at:46' \
  "dns_query: a" "                                   " 18
at_xfail=no
(
  printf "%s\n" "106. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:48:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_A, \"bkmx.test1.mf.gnu.org.ua\", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:48"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_A, "bkmx.test1.mf.gnu.org.ua", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3
192.0.2.3
192.0.2.4
192.0.2.5
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_106
#AT_START_107
at_fn_group_banner 107 'dns_query.at:58' \
  "dns_query: ptr" "                                 " 18
at_xfail=no
(
  printf "%s\n" "107. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:60:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_PTR, \"198.51.100.2\")
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:60"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_PTR, "198.51.100.2")
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1
mail1.test2.mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:60"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_107
#AT_START_108
at_fn_group_banner 108 'dns_query.at:68' \
  "dns_query: txt" "                                 " 18
at_xfail=no
(
  printf "%s\n" "108. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:70:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_TXT, \"test1.mf.gnu.org.ua\", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:70"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_TXT, "test1.mf.gnu.org.ua", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2
Mailfromd test domain 1
v=spf1 -all
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:70"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_108
#AT_START_109
at_fn_group_banner 109 'dns_query.at:79' \
  "dns_query: ns" "                                  " 18
at_xfail=no
(
  printf "%s\n" "109. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:81:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_NS, \"nstest.mf.gnu.org.ua\", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:81"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_NS, "nstest.mf.gnu.org.ua", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3
ns.test2.mf.gnu.org.ua
ns1.test1.mf.gnu.org.ua
ns2.test1.mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:81"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:88:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_NS, \"nstest.mf.gnu.org.ua\", 1, RESOLVE_IP4)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:88"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_NS, "nstest.mf.gnu.org.ua", 1, RESOLVE_IP4)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3
192.0.2.6
192.0.2.7
198.51.100.5
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:88"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_109
#AT_START_110
at_fn_group_banner 110 'dns_query.at:98' \
  "dns_query: aaaa" "                                " 18
at_xfail=no
(
  printf "%s\n" "110. $at_setup_line: testing $at_desc ..."
  $at_traceon







{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:101:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_NS, \"nstest.mf.gnu.org.ua\", 1, RESOLVE_IP6)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:101"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_NS, "nstest.mf.gnu.org.ua", 1, RESOLVE_IP6)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3
2001:db8::6
2001:db8::7
2001:db8::1:0:0:5
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:101"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_110
#AT_START_111
at_fn_group_banner 111 'dns_query.at:113' \
  "dns_query: mx" "                                  " 18
at_xfail=no
(
  printf "%s\n" "111. $at_setup_line: testing $at_desc ..."
  $at_traceon




{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:116:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, \"test1.mf.gnu.org.ua\")
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:116"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, "test1.mf.gnu.org.ua")
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3
mail.test1.mf.gnu.org.ua
mail.test2.mf.gnu.org.ua
bkmx.test1.mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:116"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:123:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, \"test1.mf.gnu.org.ua\", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:123"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, "test1.mf.gnu.org.ua", 1)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3
bkmx.test1.mf.gnu.org.ua
mail.test1.mf.gnu.org.ua
mail.test2.mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:123"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:130:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, \"test1.mf.gnu.org.ua\", 1, RESOLVE_IP4)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:130"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, "test1.mf.gnu.org.ua", 1, RESOLVE_IP4)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "7
192.0.2.2
192.0.2.3
192.0.2.4
192.0.2.5
198.51.100.2
198.51.100.3
198.51.100.4
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:130"
$at_failed && at_fn_log_failure
$at_traceon; }

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_111
#AT_START_112
at_fn_group_banner 112 'dns_query.at:142' \
  "dns_query: mx (IPv6)" "                           " 18
at_xfail=no
(
  printf "%s\n" "112. $at_setup_line: testing $at_desc ..."
  $at_traceon







{ set +x
printf "%s\n" "$at_srcdir/dns_query.at:145:
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, \"test1.mf.gnu.org.ua\", 1, RESOLVE_IP6)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog
"
at_fn_check_prepare_notrace 'an embedded newline' "dns_query.at:145"
( $at_check_trace;
at_resolv_conf || exit 77
cleardb

cat >prog <<'_ATEOF'
require dns
require status
func main(...) returns number
do
  set n dns_query(DNS_TYPE_MX, "test1.mf.gnu.org.ua", 1, RESOLVE_IP6)
  echo dns_reply_count(n)
  loop for set i 0,
       while i < dns_reply_count(n),
       set i i + 1
  do
    echo dns_reply_string(n, i)
  done
  return 0
done
_ATEOF

mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3
2001:db8::2
2001:db8::3
2001:db8::4
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dns_query.at:145"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_112
#AT_START_113
at_fn_group_banner 113 'resolve.at:17' \
  "Resolve" "                                        " 18
at_xfail=no
(
  printf "%s\n" "113. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo primitive_resolve($1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/resolve.at:20: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog test1.\$MF_TOPDOMAIN"
at_fn_check_prepare_notrace 'a $(...) command substitution' "resolve.at:20"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog test1.$MF_TOPDOMAIN
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "192.0.2.1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolve.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo primitive_resolve($1,'',RESOLVE_IP4)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/resolve.at:20: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog test1.\$MF_TOPDOMAIN"
at_fn_check_prepare_notrace 'a $(...) command substitution' "resolve.at:20"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog test1.$MF_TOPDOMAIN
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "192.0.2.1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolve.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_113
#AT_START_114
at_fn_group_banner 114 'resolve.at:53' \
  "Resolve (IPv6)" "                                 " 18
at_xfail=no
(
  printf "%s\n" "114. $at_setup_line: testing $at_desc ..."
  $at_traceon







cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo primitive_resolve($1,'',RESOLVE_IP6)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/resolve.at:56: at_resolv_conf || exit 77
ipv6on || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog test1.\$MF_TOPDOMAIN"
at_fn_check_prepare_notrace 'a $(...) command substitution' "resolve.at:56"
( $at_check_trace; at_resolv_conf || exit 77
ipv6on || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog test1.$MF_TOPDOMAIN
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2001:db8::1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/resolve.at:56"
$at_failed && at_fn_log_failure
$at_traceon; }






  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_114
#AT_START_115
at_fn_group_banner 115 'rescname.at:17' \
  "Resolve cname" "                                  " 18
at_xfail=no
(
  printf "%s\n" "115. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo primitive_resolve($1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/rescname.at:20: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog smtp.test1.\$MF_TOPDOMAIN"
at_fn_check_prepare_notrace 'a $(...) command substitution' "rescname.at:20"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog smtp.test1.$MF_TOPDOMAIN
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "192.0.2.2
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/rescname.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_115
#AT_START_116
at_fn_group_banner 116 'hostname.at:17' \
  "Resolve hostname" "                               " 18
at_xfail=no
(
  printf "%s\n" "116. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo primitive_hostname($1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/hostname.at:20: at_resolv_conf || exit 77
echo mail1.test2.\$MF_TOPDOMAIN > experr
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 198.51.100.2"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hostname.at:20"
( $at_check_trace; at_resolv_conf || exit 77
echo mail1.test2.$MF_TOPDOMAIN > experr
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 198.51.100.2
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
$at_diff experr "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hostname.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_116
#AT_START_117
at_fn_group_banner 117 'hasmx.at:17' \
  "Hasmx call" "                                     " 18
at_xfail=no
(
  printf "%s\n" "117. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo primitive_hasmx($1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/hasmx.at:20: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog test1.\$MF_TOPDOMAIN"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hasmx.at:20"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog test1.$MF_TOPDOMAIN
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hasmx.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_117
#AT_START_118
at_fn_group_banner 118 'ismx.at:17' \
  "Ismx call" "                                      " 18
at_xfail=no
(
  printf "%s\n" "118. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo primitive_ismx($1, $2)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/ismx.at:20: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog test1.\$MF_TOPDOMAIN mail.test2.\$MF_TOPDOMAIN"
at_fn_check_prepare_notrace 'a $(...) command substitution' "ismx.at:20"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog test1.$MF_TOPDOMAIN mail.test2.$MF_TOPDOMAIN
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ismx.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }






  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_118
#AT_START_119
at_fn_group_banner 119 'ismx.at:42' \
  "Ismx call (IPv6)" "                               " 18
at_xfail=no
(
  printf "%s\n" "119. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo primitive_ismx($1, $2)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/ismx.at:45: at_resolv_conf || exit 77
ipv6on || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog test2.\$MF_TOPDOMAIN mail6.\$MF_TOPDOMAIN"
at_fn_check_prepare_notrace 'a $(...) command substitution' "ismx.at:45"
( $at_check_trace; at_resolv_conf || exit 77
ipv6on || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog test2.$MF_TOPDOMAIN mail6.$MF_TOPDOMAIN
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ismx.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }






  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_119
#AT_START_120
at_fn_group_banner 120 'relayed01.at:17' \
  "Relayed: Not a relayed host" "                    " 19
at_xfail=no
(
  printf "%s\n" "120. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >relayed.list <<'_ATEOF'
foo
localhost
_ATEOF
]


cat >prog <<'_ATEOF'
prog helo
do
  if not relayed(${host})
    reject 550 "We do not relay mail for this host"
  fi
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/relayed01.at:25:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --test=helo --relayed-domain-file ./relayed.list host=remote"
at_fn_check_prepare_notrace 'a $(...) command substitution' "relayed01.at:25"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --test=helo --relayed-domain-file ./relayed.list host=remote
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 550 We do not relay mail for this host
State helo: reject
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/relayed01.at:25"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_120
#AT_START_121
at_fn_group_banner 121 'relayed02.at:17' \
  "Relayed: Relayed host" "                          " 19
at_xfail=no
(
  printf "%s\n" "121. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >relayed.list <<'_ATEOF'
foo
localhost
_ATEOF
]


cat >prog <<'_ATEOF'
prog helo
do
  if not relayed(${host})
    reject 550 "We do not relay mail for this host"
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/relayed02.at:25:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog --test=helo --relayed-domain-file ./relayed.list host=localhost"
at_fn_check_prepare_notrace 'a $(...) command substitution' "relayed02.at:25"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog --test=helo --relayed-domain-file ./relayed.list host=localhost
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State helo: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/relayed02.at:25"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_121
#AT_START_122
at_fn_group_banner 122 'greylist.at:17' \
  "Greylisting (traditional style)" "                " 20
at_xfail=no
(
  printf "%s\n" "122. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'
prog envfrom
do
  if greylist($f, 15)
    tempfail 450 "You are being greylisted for 15 seconds"
  else
    accept
  fi
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E450
MAIL FROM: <gray@localhost>
\# Wait
\W2
\#
\# Second attempt
\#
\E450
MAIL FROM: <gray@localhost>
\# Wait again
\W15
\#
\# Third attempt
\#
\E250
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/greylist.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "greylist.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/greylist.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_122
#AT_START_123
at_fn_group_banner 123 'greylist-ct.at:17' \
  "Greylisting (new style)" "                        " 20
at_xfail=no
(
  printf "%s\n" "123. $at_setup_line: testing $at_desc ..."
  $at_traceon




 cat >filter <<'_ATEOF'
#pragma greylist con-tassios
prog envfrom
do
  if greylist($f, 15)
    tempfail 450 "You are being greylisted for 15 seconds"
  else
    accept
  fi
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E450
MAIL FROM: <gray@localhost>
\# Wait
\W2
\#
\# Second attempt
\#
\E450
MAIL FROM: <gray@localhost>
\# Wait again
\W15
\#
\# Third attempt
\#
\E250
MAIL FROM: <gray@localhost>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/greylist-ct.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "greylist-ct.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/greylist-ct.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_123
#AT_START_124
at_fn_group_banner 124 'curmsg.at:25' \
  "Working current_message" "                        " 21
at_xfail=no
(
  printf "%s\n" "124. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eom
do
  echo "SIZE " . message_body_size(current_message())
done
_ATEOF

 cat >script <<'_ATEOF'
\#HUY
\E250
HELO localhost
\E250
MAIL FROM:<>
\E250
RCPT TO:<user>
\E354
DATA

0123456789
\E250
.
\E250
MAIL FROM:<>
\E250
RCPT TO:<user>
\E354
DATA

0
\E250
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/curmsg.at:28:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "curmsg.at:28"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
SIZE 17
SIZE 8
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/curmsg.at:28"
$at_failed && at_fn_log_failure
$at_traceon; }




# FIXME(mailutils): Size estimate does not include CRs

  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_124
#AT_START_125
at_fn_group_banner 125 'nulmsg.at:17' \
  "message_body_is_empty" "                          " 21
at_xfail=no
(
  printf "%s\n" "125. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eom
do
  if message_body_is_empty(current_message())
    echo "$i: NULL"
  else
    echo "$i: TEXT"
  fi
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E250
\Di=1
MAIL FROM:<>
\E250
RCPT TO:<user>
\E354
DATA
To: test

.
\Di=2
\E250
MAIL FROM:<>
\E250
RCPT TO:<user>
\E354
DATA
To: test
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

=20=20=20=0A
.
\Di=3
\E250
MAIL FROM:<>
\E250
RCPT TO:<user>
\E354
DATA
To: test
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable

=20=20=20t=0A
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/nulmsg.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "nulmsg.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
1: NULL
2: NULL
3: TEXT
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/nulmsg.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_125
#AT_START_126
at_fn_group_banner 126 'hdr-count.at:17' \
  "current_header_count" "                           " 22
at_xfail=no
(
  printf "%s\n" "126. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eoh
do
  echo "TOTAL: " . current_header_count()
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Proin varius dolor nec purus varius, sed volutpat magna pharetra.
Etiam tempor iaculis nunc, at facilisis purus fringilla at.  Quisque
quis tortor non ante sodales euismod eget nec lectus.
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-count.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-count.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
TOTAL: 5
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-count.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_126
#AT_START_127
at_fn_group_banner 127 'hdr-get.at:17' \
  "current_header" "                                 " 22
at_xfail=no
(
  printf "%s\n" "127. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eoh
do
  echo "From: " . current_header("From")
  echo "Subject: " . current_header("Subject")
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Quia licet
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-get.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-get.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
From: Sergey Poznyakoff <gray@gnu.org.ua>
Subject: Etiam tempor
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-get.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_127
#AT_START_128
at_fn_group_banner 128 'hdr-getn.at:17' \
  "current_header(name,ind)" "                       " 22
at_xfail=no
(
  printf "%s\n" "128. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eoh
do
  echo "Received: " . current_header("Received")
  echo "Received1: " . current_header("Received", 1)
  echo "Received2: " . current_header("Received", 2)
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Quia licet
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-getn.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-getn.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
Received: foo
Received1: foo
Received2: bar
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-getn.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_128
#AT_START_129
at_fn_group_banner 129 'hdr-gete.at:17' \
  "current_header(name,ind) - exception" "           " 22
at_xfail=no
(
  printf "%s\n" "129. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

require 'status'
prog eoh
do
  echo "Received3: " . current_header("Received", 3)
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Quia licet
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-gete.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-gete.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd#1: RUNTIME ERROR near filter:5: uncaught exception e_not_found: current_header: requested item (Received,3) not found
mailfromd#1: execution of the filter program was not finished
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-gete.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_129
#AT_START_130
at_fn_group_banner 130 'hdr-itr.at:17' \
  "current_header(name,ind) - iteration" "           " 22
at_xfail=no
(
  printf "%s\n" "130. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eoh
do
  number limit current_header_count("Received")
  loop for number i 1,
       while i <= limit,
       set i i + 1
  do
    echo "Received(%i): " . current_header("Received", i)
  done
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Quia licet
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-itr.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-itr.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
Received(1): foo
Received(2): bar
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-itr.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_130
#AT_START_131
at_fn_group_banner 131 'hdr-all.at:17' \
  "current_header(name,ind) - iteration over all" "  " 22
at_xfail=no
(
  printf "%s\n" "131. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'
prog eoh
do
  number limit current_header_count()
  loop for number i 1,
       while i <= limit,
       set i i + 1
  do
    echo current_header_nth_name(i) . ": " . current_header_nth_value(i)
  done
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Quia licet
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-all.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-all.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-all.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_131
#AT_START_132
at_fn_group_banner 132 'hdr-cap.at:17' \
  "current_header vs. capturing" "                   " 22
at_xfail=no
(
  printf "%s\n" "132. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eoh
do
  echo "TOTAL: " . current_header_count()
  echo "FROM: " . current_header("From")
done

func deliver(string mailto)
do
  set m umask(0)
  set mbx mailbox_open(mailto, "w+")

  set msg current_message()
  mailbox_append_message(mbx, msg)
  mailbox_close(mbx)
  set m umask(m)
done

prog eom
do
  deliver("mbox:$TESTDIR/capture.mbx")
done
_ATEOF

 cat >script <<'_ATEOF'
\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Proin varius dolor nec purus varius, sed volutpat magna pharetra.
Etiam tempor iaculis nunc, at facilisis purus fringilla at.
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-cap.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-cap.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
TOTAL: 5
FROM: Sergey Poznyakoff <gray@gnu.org.ua>
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-cap.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





{ set +x
printf "%s\n" "$at_srcdir/hdr-cap.at:71: sed -e '1d' -e '/^X-[A-Za-z]*:/d' capture.mbx"
at_fn_check_prepare_trace "hdr-cap.at:71"
( $at_check_trace; sed -e '1d' -e '/^X-[A-Za-z]*:/d' capture.mbx
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Proin varius dolor nec purus varius, sed volutpat magna pharetra.
Etiam tempor iaculis nunc, at facilisis purus fringilla at.

" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-cap.at:71"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_132
#AT_START_133
at_fn_group_banner 133 'hdr-mul.at:17' \
  "multiple message capturing" "                     " 22
at_xfail=no
(
  printf "%s\n" "133. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

prog eoh
do
  echo "TOTAL: " . current_header_count()
  echo "SUBJECT: " . current_header("Subject")
done

func deliver(string mailto)
do
  set m umask(0)
  set mbx mailbox_open(mailto, "w+")

  set msg current_message()
  mailbox_append_message(mbx, msg)
  mailbox_close(mbx)
  set m umask(m)
done

prog eom
do
  deliver("mbox:$TESTDIR/capture.mbx")
done
_ATEOF

 cat >script <<'_ATEOF'

\E250
HELO localhost
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Proin varius dolor nec purus varius, sed volutpat magna pharetra.
Etiam tempor iaculis nunc, at facilisis purus fringilla at.
.
\E250
MAIL FROM:<gray@gnu.org.ua>
\E250
RCPT TO:<gray@localhost>
\E354
DATA
Received: foo
Received: bar
Received: quux
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Nam vitae

Mauris sit amet tortor pharetra sem placerat ultrices a ut magna.
Integer ultricies felis in arcu feugiat vestibulum. In id neque sem.
Nam vitae ipsum at mauris blandit vulputate vel a lectus.
.
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/hdr-mul.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr \$MFOPTS \$MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "hdr-mul.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr $MFOPTS $MFADDOPTS --stderr --gacopyz-log=err filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
TOTAL: 5
SUBJECT: Etiam tempor
TOTAL: 6
SUBJECT: Nam vitae
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-mul.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





{ set +x
printf "%s\n" "$at_srcdir/hdr-mul.at:91: sed -e 's/^\\(From <.*>\\).*/\\1/' -e '/^X-[A-Za-z]*:/d' capture.mbx"
at_fn_check_prepare_trace "hdr-mul.at:91"
( $at_check_trace; sed -e 's/^\(From <.*>\).*/\1/' -e '/^X-[A-Za-z]*:/d' capture.mbx
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "From <gray@gnu.org.ua>
Received: foo
Received: bar
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Etiam tempor

Proin varius dolor nec purus varius, sed volutpat magna pharetra.
Etiam tempor iaculis nunc, at facilisis purus fringilla at.

From <gray@gnu.org.ua>
Received: foo
Received: bar
Received: quux
From: Sergey Poznyakoff <gray@gnu.org.ua>
To: gray@localhost
Subject: Nam vitae

Mauris sit amet tortor pharetra sem placerat ultrices a ut magna.
Integer ultricies felis in arcu feugiat vestibulum. In id neque sem.
Nam vitae ipsum at mauris blandit vulputate vel a lectus.

" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/hdr-mul.at:91"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_133
#AT_START_134
at_fn_group_banner 134 'read.at:17' \
  "read function" "                                  " 23
at_xfail=no
(
  printf "%s\n" "134. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >infile <<'_ATEOF'
Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifen.
_ATEOF



cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  string s read(fd, $2)
  echo "L ".length(s)
  echo "S '%s'"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/read.at:24:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile 10"
at_fn_check_prepare_notrace 'a $(...) command substitution' "read.at:24"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile 10
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "L 10
S 'Nullam sed'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/read.at:24"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  string s read(fd, $2)
  echo "L ".length(s)
  echo "S '%s'"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/read.at:43:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile 128"
at_fn_check_prepare_notrace 'a $(...) command substitution' "read.at:43"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile 128
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "L 128
S 'Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifen.
'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/read.at:43"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  string s read(fd, $2)
  echo "L ".length(s)
  echo "S '%s'"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/read.at:63:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile 512"
at_fn_check_prepare_notrace 'a $(...) command substitution' "read.at:63"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile 512
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "L 128
S 'Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifen.
'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/read.at:63"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  string s read(fd, 120)
  set s read(fd, 512)
  echo "L ".length(s)
  echo "S '%s'"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/read.at:83:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "read.at:83"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "L 8
S 'leifen.
'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/read.at:83"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  string s read(fd, 128)
  set s read(fd, 512)
  echo "L ".length(s)
  echo "S '%s'"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/read.at:104:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "read.at:104"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:8: uncaught exception e_eof: read: EOF on infile
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/read.at:104"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_134
#AT_START_135
at_fn_group_banner 135 'write.at:17' \
  "write function" "                                 " 23
at_xfail=no
(
  printf "%s\n" "135. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open('>test.out')
  write(fd, $1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/write.at:22:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog \"Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifend.\""
at_fn_check_prepare_notrace 'a $(...) command substitution' "write.at:22"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog "Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifend."
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/write.at:22"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/write.at:34: cat test.out"
at_fn_check_prepare_trace "write.at:34"
( $at_check_trace; cat test.out
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifend." | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/write.at:34"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open('>test.out')
  write(fd, $1, 19)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/write.at:38:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog \"Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifend.\""
at_fn_check_prepare_notrace 'a $(...) command substitution' "write.at:38"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog "Nullam sed felis eu libero tristique eleifend a eget metus. Nullam vitae velit mauris. Maecenas ullamcorper mollis leo eleifend."
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/write.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }



{ set +x
printf "%s\n" "$at_srcdir/write.at:50: cat test.out"
at_fn_check_prepare_trace "write.at:50"
( $at_check_trace; cat test.out
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "Nullam sed felis eu" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/write.at:50"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_135
#AT_START_136
at_fn_group_banner 136 'getline.at:17' \
  "getline function" "                               " 23
at_xfail=no
(
  printf "%s\n" "136. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >infile <<'_ATEOF'
Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.
_ATEOF



cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/getline.at:26:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "getline.at:26"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/getline.at:26"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/getline.at:45:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "getline.at:45"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.
mailfromd: RUNTIME ERROR near prog:10: uncaught exception e_eof: EOF on infile
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/getline.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  setbuf(fd, BUFFER_LINE, 1)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/getline.at:66:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "getline.at:66"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/getline.at:66"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  setbuf(fd, BUFFER_FULL, 16)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/getline.at:86:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "getline.at:86"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.
mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_eof: EOF on infile
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/getline.at:86"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  setbuf(fd, BUFFER_FULL, 512)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
  echo getline(fd)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/getline.at:108:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "getline.at:108"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.
mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_eof: EOF on infile
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/getline.at:108"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_136
#AT_START_137
at_fn_group_banner 137 'getdelim.at:17' \
  "getdelim function" "                              " 23
at_xfail=no
(
  printf "%s\n" "137. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >infile <<'_ATEOF'
Nulla vitae augue id turpis eleifend fermentum. Aliquam eratDELIM
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapienDELIM
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.DELIM
_ATEOF



cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/getdelim.at:26:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "getdelim.at:26"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat

volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien

malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.


mailfromd: RUNTIME ERROR near prog:11: uncaught exception e_eof: EOF on infile
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/getdelim.at:26"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

require 'status'
func main(...)
  returns number
do
  number fd open($1)
  # Set full buffering with buffer size less than the delimiter length
  setbuf(fd, BUFFER_FULL, 3)
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
  echo getdelim(fd, "DELIM")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/getdelim.at:54:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog infile"
at_fn_check_prepare_notrace 'a $(...) command substitution' "getdelim.at:54"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog infile
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat

volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien

malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus.


mailfromd: RUNTIME ERROR near prog:13: uncaught exception e_eof: EOF on infile
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/getdelim.at:54"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_137
#AT_START_138
at_fn_group_banner 138 'tempfile.at:17' \
  "tempfile" "                                       " 23
at_xfail=no
(
  printf "%s\n" "138. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'

string input <<EOT
Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus
fermentum sem. Curabitur nec lobortis quam. Phasellus erat orci,
eleifend vel consectetur in, pharetra sit amet odio. Morbi in purus
non enim finibus laoreet a a leo. Nullam vestibulum varius nunc, vitae
ornare erat tristique vitae. Nullam dapibus vitae nulla vitae
vulputate. Donec posuere eget ex eget commodo. Vestibulum in dignissim
urna. Sed nec magna eu ex blandit pharetra. Duis eleifend risus in iaculis
ullamcorper. Praesent sapient diam, fringilla in efficitur at, ultrices
sed quam. Proin facilisis et quam quis fringilla. Vestibulum a dolor
vitae erat mollis eleifend. Donec suscipit vitae risus vel
tincidunt. Sed rhoncus at neque maximus auctor. Quisque consectetur
non tortor in aliquet. Cras odio velit, faucibus quis tincidunt
rutrum, porta ac erat. Maecenas et enim turpis. Cras eget urna
felis. Integer tinc.

EOT

func main(...)
  returns number
do
  number fd tempfile()
  write(fd, input)
  rewind(fd)
  echo read(fd, 1024)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tempfile.at:39:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tempfile.at:39"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "Nulla vitae augue id turpis eleifend fermentum. Aliquam erat
volutpat. Nullam mattis vestibulum lacus, et ullamcorper sapien
malesuada non. Fusce augue ipsum, facilisis at lorem eleifend, maximus
fermentum sem. Curabitur nec lobortis quam. Phasellus erat orci,
eleifend vel consectetur in, pharetra sit amet odio. Morbi in purus
non enim finibus laoreet a a leo. Nullam vestibulum varius nunc, vitae
ornare erat tristique vitae. Nullam dapibus vitae nulla vitae
vulputate. Donec posuere eget ex eget commodo. Vestibulum in dignissim
urna. Sed nec magna eu ex blandit pharetra. Duis eleifend risus in iaculis
ullamcorper. Praesent sapient diam, fringilla in efficitur at, ultrices
sed quam. Proin facilisis et quam quis fringilla. Vestibulum a dolor
vitae erat mollis eleifend. Donec suscipit vitae risus vel
tincidunt. Sed rhoncus at neque maximus auctor. Quisque consectetur
non tortor in aliquet. Cras odio velit, faucibus quis tincidunt
rutrum, porta ac erat. Maecenas et enim turpis. Cras eget urna
felis. Integer tinc.

" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/tempfile.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_138
#AT_START_139
at_fn_group_banner 139 'spfexp.at:42' \
  "%{s}" "                                           " 24
at_xfail=no
(
  printf "%s\n" "139. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{s}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gray-test@mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_139
#AT_START_140
at_fn_group_banner 140 'spfexp.at:42' \
  "%{o}" "                                           " 24
at_xfail=no
(
  printf "%s\n" "140. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{o}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_140
#AT_START_141
at_fn_group_banner 141 'spfexp.at:42' \
  "%{d}" "                                           " 24
at_xfail=no
(
  printf "%s\n" "141. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_141
#AT_START_142
at_fn_group_banner 142 'spfexp.at:42' \
  "%{d5}" "                                          " 24
at_xfail=no
(
  printf "%s\n" "142. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d5}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_142
#AT_START_143
at_fn_group_banner 143 'spfexp.at:42' \
  "%{d4}" "                                          " 24
at_xfail=no
(
  printf "%s\n" "143. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d4}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mf.gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_143
#AT_START_144
at_fn_group_banner 144 'spfexp.at:42' \
  "%{d3}" "                                          " 24
at_xfail=no
(
  printf "%s\n" "144. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d3}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gnu.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_144
#AT_START_145
at_fn_group_banner 145 'spfexp.at:42' \
  "%{d2}" "                                          " 24
at_xfail=no
(
  printf "%s\n" "145. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d2}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_145
#AT_START_146
at_fn_group_banner 146 'spfexp.at:42' \
  "%{d1}" "                                          " 24
at_xfail=no
(
  printf "%s\n" "146. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d1}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_146
#AT_START_147
at_fn_group_banner 147 'spfexp.at:42' \
  "%{d2r}" "                                         " 24
at_xfail=no
(
  printf "%s\n" "147. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d2r}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gnu.mf
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_147
#AT_START_148
at_fn_group_banner 148 'spfexp.at:42' \
  "%{l}" "                                           " 24
at_xfail=no
(
  printf "%s\n" "148. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{l}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gray-test
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_148
#AT_START_149
at_fn_group_banner 149 'spfexp.at:42' \
  "%{l-}" "                                          " 24
at_xfail=no
(
  printf "%s\n" "149. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{l-}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gray.test
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_149
#AT_START_150
at_fn_group_banner 150 'spfexp.at:42' \
  "%{lr}" "                                          " 24
at_xfail=no
(
  printf "%s\n" "150. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{lr}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gray-test
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_150
#AT_START_151
at_fn_group_banner 151 'spfexp.at:42' \
  "%{lr-}" "                                         " 24
at_xfail=no
(
  printf "%s\n" "151. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{lr-}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "test.gray
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_151
#AT_START_152
at_fn_group_banner 152 'spfexp.at:42' \
  "%{l1r-}" "                                        " 24
at_xfail=no
(
  printf "%s\n" "152. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{l1r-}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gray
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_152
#AT_START_153
at_fn_group_banner 153 'spfexp.at:42' \
  "%{ir}.%{v}._spf.%{d2}" "                          " 24
at_xfail=no
(
  printf "%s\n" "153. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{ir}.%{v}._spf.%{d2}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1.2.0.192.in-addr._spf.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_153
#AT_START_154
at_fn_group_banner 154 'spfexp.at:42' \
  "%{lr-}.lp._spf.%{d2}" "                           " 24
at_xfail=no
(
  printf "%s\n" "154. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{lr-}.lp._spf.%{d2}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "test.gray.lp._spf.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_154
#AT_START_155
at_fn_group_banner 155 'spfexp.at:42' \
  "%{lr-}.lp.%{ir}.%{v}._spf.%{d2}" "                " 24
at_xfail=no
(
  printf "%s\n" "155. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{lr-}.lp.%{ir}.%{v}._spf.%{d2}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "test.gray.lp.1.2.0.192.in-addr._spf.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_155
#AT_START_156
at_fn_group_banner 156 'spfexp.at:42' \
  "%{ir}.%{v}.%{l1r-}.lp._spf.%{d2}" "               " 24
at_xfail=no
(
  printf "%s\n" "156. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{ir}.%{v}.%{l1r-}.lp._spf.%{d2}','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1.2.0.192.in-addr.gray.lp._spf.org.ua
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_156
#AT_START_157
at_fn_group_banner 157 'spfexp.at:42' \
  "%{d3}.trusted-domains.example.net" "              " 24
at_xfail=no
(
  printf "%s\n" "157. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_macro_expand('%{d3}.trusted-domains.example.net','192.0.2.1','mf.gnu.org.ua','gray-test@mf.gnu.org.ua','mf.gnu.org.ua',"local.domain",1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spfexp.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spfexp.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gnu.org.ua.trusted-domains.example.net
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spfexp.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_157
#AT_START_158
at_fn_group_banner 158 'spf.at:42' \
  "all" "                                            " 25
at_xfail=no
(
  printf "%s\n" "158. $at_setup_line: testing $at_desc ..."
  $at_traceon





cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 +all','192.0.2.1','example.org','test@example.org','example.org',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 +all;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 -all','192.0.2.1','example.org','test@example.org','example.org',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "3 -all;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ~all','192.0.2.1','example.org','test@example.org','example.org',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:42: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:42"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "4 ~all;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_158
#AT_START_159
at_fn_group_banner 159 'spf.at:47' \
  "a" "                                              " 25
at_xfail=no
(
  printf "%s\n" "159. $at_setup_line: testing $at_desc ..."
  $at_traceon




a:test1.mf.gnu.org.ua -all,
  192.0.2.3, example.org, test@example.org,
  3 -all;a:test1.mf.gnu.org.ua -all,
  192.0.2.3, example.org, test@example.org,
  3 -all;
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_159
#AT_START_160
at_fn_group_banner 160 'spf.at:58' \
  "mx" "                                             " 25
at_xfail=no
(
  printf "%s\n" "160. $at_setup_line: testing $at_desc ..."
  $at_traceon





cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 mx:test1.mf.gnu.org.ua','198.51.100.2','test1.mf.gnu.org.ua','test@test1.mf.gnu.org.ua','test1.mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:58: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:58"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 mx:test1.mf.gnu.org.ua;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 mx:test1.mf.gnu.org.ua/27','198.51.100.30','test1.mf.gnu.org.ua','test@test1.mf.gnu.org.ua','test1.mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:58: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:58"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 mx:test1.mf.gnu.org.ua/27;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 mx/27','198.51.100.30','test1.mf.gnu.org.ua','test@test1.mf.gnu.org.ua','test1.mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:58: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:58"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 mx/27;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 mx:test1.mf.gnu.org.ua/27','198.51.100.33','test1.mf.gnu.org.ua','test@test1.mf.gnu.org.ua','test1.mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:58: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:58"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_160
#AT_START_161
at_fn_group_banner 161 'spf.at:72' \
  "ptr" "                                            " 25
at_xfail=no
(
  printf "%s\n" "161. $at_setup_line: testing $at_desc ..."
  $at_traceon





cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ptr','192.0.2.1','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:72: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:72"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 ptr;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:72"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ptr','192.0.2.1','test2.mf.gnu.org.ua','test@test1.mf.gnu.org.ua','test2.mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:72: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:72"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:72"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ptr:bkmx.test1.mf.gnu.org.ua','192.0.2.4','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:72: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:72"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 ptr:bkmx.test1.mf.gnu.org.ua;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:72"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ptr:bkmx.test1.mf.gnu.org.ua','192.0.2.1','test2.mf.gnu.org.ua','test@test1.mf.gnu.org.ua','test2.mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:72: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:72"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:72"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_161
#AT_START_162
at_fn_group_banner 162 'spf.at:86' \
  "ip4" "                                            " 25
at_xfail=no
(
  printf "%s\n" "162. $at_setup_line: testing $at_desc ..."
  $at_traceon





cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip4:192.0.2.10','192.0.2.10','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:86: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:86"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 ip4:192.0.2.10;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:86"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip4:192.0.2.10','192.0.2.1','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:86: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:86"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:86"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip4:192.0.2.0/27','192.0.2.10','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:86: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:86"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 ip4:192.0.2.0/27;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:86"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip4:192.0.2.0/27','192.0.2.33','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:86: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:86"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:86"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_162
#AT_START_163
at_fn_group_banner 163 'spf.at:100' \
  "ip6" "                                            " 25
at_xfail=no
(
  printf "%s\n" "163. $at_setup_line: testing $at_desc ..."
  $at_traceon





cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip6:2001:db8:0:0:1::1','2001:db8:0:0:1::1','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:100: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:100"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 ip6:2001:db8:0:0:1::1;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip6:2001:db8:0:0:1::1','2001:db8:0:0:1::2','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:100: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:100"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip6:2001:DB8::/56','2001:db8:0:0:1::1','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:100: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:100"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 ip6:2001:DB8::/56;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip6:2001:DB8::/56','2001:0db8:0000:00ff:ffff:ffff:ffff:ffff','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:100: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:100"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 ip6:2001:DB8::/56;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 ip6:2001:DB8::/56','2001:0db8:0100::','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:100: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:100"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_163
#AT_START_164
at_fn_group_banner 164 'spf.at:117' \
  "exists" "                                         " 25
at_xfail=no
(
  printf "%s\n" "164. $at_setup_line: testing $at_desc ..."
  $at_traceon





cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 exists:test1.mf.gnu.org.ua','192.0.2.10','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:117: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:117"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 exists:test1.mf.gnu.org.ua;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:117"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 exists:nodomain.mf.gnu.org.ua','192.0.2.10','mf.gnu.org.ua','test@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:117: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:117"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1 ;
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:117"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 exists:%{ir}.%{l1r+-}._spf.%{d}','192.0.2.10','mf.gnu.org.ua','gray+box1@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:117: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:117"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 exists:%{ir}.%{l1r+-}._spf.%{d};
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:117"
$at_failed && at_fn_log_failure
$at_traceon; }


cat >prog <<'_ATEOF'
func main(...)
  returns number
do
  echo spf_test_record('v=spf1 exists:%{ir}.%{l1r+-}._spf.%{d}','192.0.2.10','mf.gnu.org.ua','gray-box1@test1.mf.gnu.org.ua','mf.gnu.org.ua',"local.domain") .
       " %spf_mechanism;"
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/spf.at:117: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "spf.at:117"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "2 exists:%{ir}.%{l1r+-}._spf.%{d};
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/spf.at:117"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_164
#AT_START_165
at_fn_group_banner 165 'strings.at:17' \
  "String functions" "                               " 26
at_xfail=no
(
  printf "%s\n" "165. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

set x "string of rings"
set gnu "GNU"

prog envfrom
do
  echo length(x)
  echo toupper(x)
  echo tolower(gnu)
  echo substr(x,2)
  echo substr(x,2,4)
  echo index(x,"ring")
  echo rindex(x,"ring")
  echo revstr("foobar")
  echo interval("3 weeks 5 days 15 hours 1 minute 56 seconds")
  echo domainpart("gray@gnu.org.ua")
  echo localpart("gray@gnu.org.ua")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strings.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strings.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "15
STRING OF RINGS
gnu
ring of rings
ring
2
10
raboof
2300516
gnu.org.ua
gray
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/strings.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo dequote("<gray@gnu.org>")
  echo dequote("<gray@gnu.org")
  echo dequote("gray@gnu.org>")
  echo dequote("gray@gnu.org")
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strings.at:56:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strings.at:56"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "gray@gnu.org
<gray@gnu.org
gray@gnu.org>
gray@gnu.org
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/strings.at:56"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo replstr("foo", 0)
  echo replstr("foo", 3)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strings.at:75:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strings.at:75"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "
foofoofoo
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/strings.at:75"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo "'" . ltrim(" \t\r\n\f foo") . "'"
  echo "'" . ltrim("AAAbar", "ABC") . "'"
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strings.at:90:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strings.at:90"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "'foo'
'bar'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/strings.at:90"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo "'" . rtrim("foo \t\r\n\f") . "'"
  echo "'" . rtrim("barAAA", "ABC") . "'"
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strings.at:105:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strings.at:105"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "'foo'
'bar'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/strings.at:105"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo "'" . substring("foobar", 2, 4) . "'"
  echo "'" . substring("foobar", 2, -1) . "'"
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strings.at:120:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strings.at:120"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "'oba'
'obar'
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/strings.at:120"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_165
#AT_START_166
at_fn_group_banner 166 'tr.at:17' \
  "tr" "                                             " 26
at_xfail=no
(
  printf "%s\n" "166. $at_setup_line: testing $at_desc ..."
  $at_traceon



# MFT_TR(TEXT, SRC, REPL, STDERR)



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('bar baz', 'az', 'XY')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:36:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:36"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "bXr bXY
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:36"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('upcase', 'a-z', 'A-Z')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:37:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:37"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "UPCASE
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:37"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('upcase-WORD', '-a-z', '+A-Z')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:38:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:38"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "UPCASE+WORD
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('upcase-WORD', 'a-z-', 'A-Z+')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:39:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:39"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "UPCASE+WORD
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('RevertCase', 'a-zA-Z', 'A-Za-z')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:40:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:40"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "rEVERTcASE
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:40"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('abcdefGHIJKL', 'a-zA-Z', 'Z-Az-a')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:41:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:41"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "ZYXWVUtsrqpo
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:41"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('a number 789', 'a-z0123456789', 'A-Z+')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:42:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:42"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A NUMBER +++
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:42"
$at_failed && at_fn_log_failure
$at_traceon; }



# Character classes

cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('Character class', '[aCls]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:45:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:45"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "_h_r_cter c____
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('Character Range', '[a-z]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:46:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:46"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "C________ R____
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:46"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('Character class', '[!aCls]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:48:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:48"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "C_a_a______lass
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('a2A?', '[[:alnum:]]', '+')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:50:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:50"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "+++?
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:50"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('a2A?', '[[:alpha:]]', 'L')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:51:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:51"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "L2L?
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:51"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr("text \tword", '[[:blank:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:52:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:52"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "text__word
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:52"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr("text\a \bword", '[[:cntrl:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:54:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:54"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "text_ _word
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:54"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('num f25,word', '[[:digit:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:55:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:55"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "num f__,word
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:55"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('num f25,word', '[[:xdigit:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:56:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:56"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "num ___,wor_
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:56"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr("foo , 2&=", '[[:graph:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:57:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:57"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "___ _ ___
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:57"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr("foo , 2&\a=", '[[:print:]][[:cntrl:]]', '_?')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:58:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:58"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "________?_
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr("foo , 2&\a=", '[[:graph:]][[:cntrl:]]', '_?')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:59:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:59"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "___ _ __?_
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:59"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('AbaBd', '[[:lower:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:60:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:60"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A__B_
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:60"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('AbaBd', '[[:upper:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:61:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:61"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "_ba_d
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:61"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('t=24,x!y&$a;', '[[:punct:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:62:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:62"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "t_24_x_y__a_
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:62"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr("a b\tc\fd\n", '[[:space:]]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:63:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:63"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "a_b_c_d_
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:63"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('A]@t & 3-4', '[0-9-][][:alpha:]@]', '0_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:65:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:65"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "____ & 000
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:65"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('A]@t & 3-4', '[0-9-][!][:alpha:]@]', '0_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:66:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:66"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A]@t___000
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:66"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('a number 789', 'a-z[0-9]', 'A-Z+')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:68:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:68"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A NUMBER +++
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:68"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('a number 789', 'a-z[[:digit:]]', 'A-Z+')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:69:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:69"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "A NUMBER +++
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:69"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('[string!]', '[][!]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:71:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:71"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "_string__
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:71"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('[string!]', '[!][]', '_')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:72:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:72"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "[_______]
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:72"
$at_failed && at_fn_log_failure
$at_traceon; }



# Exceptions

cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('text', 'a', '')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:75:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:75"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:5: uncaught exception e_inval: tr: replacement set cannot be empty
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:75"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('text', 'z-a', 'a-z')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:78:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:78"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:5: uncaught exception e_range: tr: ranges in source set must be in ascending order
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:78"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('text', 'a-z', 'a-')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:81:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:81"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:5: uncaught exception e_inval: tr: ranges should appear at the same offset in both source and replacement sets
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:81"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('text', 'a-z', 'abc')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:84:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:84"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:5: uncaught exception e_inval: tr: ranges should appear at the same offset in both source and replacement sets
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:84"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('text', '[ab', 'a-z')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:87:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:87"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:5: uncaught exception e_inval: unfinished character class near [ab
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:87"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('text', '[[:alpha', 'a-z')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:90:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:90"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:5: uncaught exception e_inval: unclosed character class near [:alpha
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:90"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo tr('text', '[[:foo:]]', 'a-z')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/tr.at:93:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "tr.at:93"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: RUNTIME ERROR near prog:5: uncaught exception e_inval: unrecognized character class foo
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/tr.at:93"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_166
#AT_START_167
at_fn_group_banner 167 'dc.at:17' \
  "dc" "                                             " 26
at_xfail=no
(
  printf "%s\n" "167. $at_setup_line: testing $at_desc ..."
  $at_traceon



# MFT_DC(TEXT, SRC, STDERR)



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo dc('test128er', '0-9')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/dc.at:36:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "dc.at:36"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "tester
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/dc.at:36"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo dc('test128er', '[0-9]')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/dc.at:37:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "dc.at:37"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "tester
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/dc.at:37"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo dc('test128er', '[[:digit:]]')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/dc.at:38:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "dc.at:38"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "tester
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/dc.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo dc('base-10', '[[:digit:]][a-c]-')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/dc.at:39:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "dc.at:39"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "se
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/dc.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_167
#AT_START_168
at_fn_group_banner 168 'sq.at:17' \
  "sq" "                                             " 26
at_xfail=no
(
  printf "%s\n" "168. $at_setup_line: testing $at_desc ..."
  $at_traceon



# MFT_SQ(TEXT, SRC, STDERR)



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo sq('looong one', 'o')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sq.at:36:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "sq.at:36"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "long one
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/sq.at:36"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo sq('looong oneee', 'oe')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sq.at:37:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "sq.at:37"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "long one
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/sq.at:37"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo sq('looong onnneee', '[[:alpha:]]')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sq.at:38:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "sq.at:38"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "long one
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/sq.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo sq('a119987b', '0-9')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sq.at:39:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "sq.at:39"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "a1987b
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/sq.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo sq('a119987b', '[0-9]')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sq.at:40:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "sq.at:40"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "a1987b
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/sq.at:40"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >prog <<'_ATEOF'
require 'status'
func main(...)
  returns number
do
  echo sq('a119987b', '[[:digit:]]')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sq.at:41:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "sq.at:41"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "a1987b
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/sq.at:41"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_168
#AT_START_169
at_fn_group_banner 169 'sed.at:17' \
  "sed builtin" "                                    " 26
at_xfail=no
(
  printf "%s\n" "169. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's/foo*/bar/')
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog \"foosing foooor\""
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog "foosing foooor"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "barsing foooor
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's/foo*/bar/g')
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:34:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog \"foosing foooor\""
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:34"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog "foosing foooor"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "barsing barr
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:34"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's/foo*/bar/g;s/bar/QUUX/')
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:48:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog \"foosing fooofoo\""
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:48"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog "foosing fooofoo"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "QUUXsing barbar
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's/foo*/bar/g', 's/bar/QUUX/')
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:62:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog \"foosing fooofoo\""
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:62"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog "foosing fooofoo"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "QUUXsing barbar
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:62"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's/foo*/bar/g', 's/bar/QUUX/')
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:76:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog -O0 \"foosing fooofoo\""
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:76"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog -O0 "foosing fooofoo"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "QUUXsing barbar
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:76"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed("foosing fooofoo", 's/foo*/bar/g', 's/bar/QUUX/')
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:90:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:90"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "QUUXsing barbar
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:90"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

#pragma regex +extended
func myqr(string s)
  returns string
do
  return sed(s, 's/([][/\+*?(){}])/\\\1/g')
done

func main(...)
  returns number
do
  echo myqr($1)
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:104:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog 'a[0]/(b{a})'"
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:104"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog 'a[0]/(b{a})'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "a\\[0\\]\\/\\(b\\{a\\}\\)
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:104"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's/s/@/2')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:125:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog /etc/passwd"
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:125"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog /etc/passwd
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "/etc/pas@wd
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:125"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's/s/@/2g')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:138:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog /etc/passswd"
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:138"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog /etc/passswd
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "/etc/pas@@wd
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:138"
$at_failed && at_fn_log_failure
$at_traceon; }





cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo sed($1, 's:[]1-3[:alpha:]\:]:\::2g')
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/sed.at:164:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog [98]5TEXT137:string"
at_fn_check_prepare_notrace 'a $(...) command substitution' "sed.at:164"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog [98]5TEXT137:string
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "[98]5::::::7:::::::
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/sed.at:164"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_169
#AT_START_170
at_fn_group_banner 170 'strftime.at:17' \
  "Strftime function" "                              " 26
at_xfail=no
(
  printf "%s\n" "170. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  echo strftime('%Y-%m-%d %H:%M', 0, 1)
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/strftime.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "strftime.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1970-01-01 00:00
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_skip $at_status "$at_srcdir/strftime.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_170
#AT_START_171
at_fn_group_banner 171 'cidr.at:17' \
  "cidr" "                                           " 26
at_xfail=no
(
  printf "%s\n" "171. $at_setup_line: testing $at_desc ..."
  $at_traceon




cat >prog <<'_ATEOF'
prog envfrom
do
  if match_cidr(${client_addr}, "10.10.0.0/19")
    reject 550 "Not from this address!"
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cidr.at:20:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog client_addr=10.10.0.1"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cidr.at:20"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog client_addr=10.10.0.1
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 550 Not from this address!
State envfrom: reject
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cidr.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
prog envfrom
do
  if match_cidr(${client_addr}, "10.10.0.0/19")
    reject 550 "Not from this address!"
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cidr.at:34:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog client_addr=10.10.31.255"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cidr.at:34"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog client_addr=10.10.31.255
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 550 Not from this address!
State envfrom: reject
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cidr.at:34"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
prog envfrom
do
  if match_cidr(${client_addr}, "10.10.0.0/19")
    reject 550 "Not from this address!"
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cidr.at:48:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog client_addr=10.10.32.1"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cidr.at:48"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog client_addr=10.10.32.1
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cidr.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }




cat >prog <<'_ATEOF'
require status

set network "127.0.0.0/8"

prog envfrom
do
  catch e_invip or e_invcidr
  do
    tempfail 450 "Caught condition $1"
  done
  if match_cidr($s, network)
    accept
  else
    reject
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cidr.at:61:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog s=127.0.0.a"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cidr.at:61"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog s=127.0.0.a
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 450 Caught condition 7
State envfrom: tempfail
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cidr.at:61"
$at_failed && at_fn_log_failure
$at_traceon; }



cat >experr <<'_ATEOF'
mailfromd: <command line>:1: warning: variable `network' already initialized
mailfromd: prog:3.5-11: warning: this is the location of the previous initialization
_ATEOF



cat >prog <<'_ATEOF'
require status

set network "127.0.0.0/8"

prog envfrom
do
  catch e_invip or e_invcidr
  do
    tempfail 450 "Caught condition $1"
  done
  if match_cidr($s, network)
    accept
  else
    reject
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cidr.at:90:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog s=10.0.0.1 -v network=10-10"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cidr.at:90"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog s=10.0.0.1 -v network=10-10
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
$at_diff experr "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "SET REPLY 450 Caught condition 8
State envfrom: tempfail
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cidr.at:90"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_171
#AT_START_172
at_fn_group_banner 172 'regopt0.at:17' \
  "regex on optimization level 0" "                  " 27
at_xfail=no
(
  printf "%s\n" "172. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Affected versions: <= 5.9.90-2009-10-03
# Description: With disabled optimisation, regular expressions
# were not registered in regex table and the `regind' parameter
# contained garbage. On runtime this caused coredumps.





cat >prog <<'_ATEOF'

func main(...)
  returns number
do
  string re '\(.*\)=\(.*\).*'
  if $1 matches re
    echo "\1 equals \2"
  fi
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/regopt0.at:25:
TESTDIR=\$(pwd)
mailfromd --stderr \$MFOPTS \$MFADDOPTS -O0 --run prog x=314"
at_fn_check_prepare_notrace 'a $(...) command substitution' "regopt0.at:25"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr $MFOPTS $MFADDOPTS -O0 --run prog x=314
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "x equals 314
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/regopt0.at:25"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_172
#AT_START_173
at_fn_group_banner 173 'setvar.at:17' \
  "setvar" "                                         " 27
at_xfail=no
(
  printf "%s\n" "173. $at_setup_line: testing $at_desc ..."
  $at_traceon



cat >mailfromd.conf <<'_ATEOF'

setvar stringvar "text";
setvar numvar 31;
setvar initstringvar "new text";
_ATEOF





cat >prog <<'_ATEOF'

string stringvar
number numvar
string initstringvar 'initial text'

prog envfrom
do
  echo stringvar
  echo numvar
  echo initstringvar
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/setvar.at:26:
TESTDIR=\$(pwd)
mailfromd --stderr \$MFOPTS \$MFADDOPTS --config-file ./mailfromd.conf --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "setvar.at:26"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr $MFOPTS $MFADDOPTS --config-file ./mailfromd.conf --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: ./mailfromd.conf:4.1-32: warning: variable \`initstringvar' already initialized
mailfromd: prog:4.8-20: warning: this is the location of the previous initialization
text
31
new text
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: continue
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setvar.at:26"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_173
#AT_START_174
at_fn_group_banner 174 'shellmagic.at:17' \
  "Initial shell comment" "                          " 27
at_xfail=no
(
  printf "%s\n" "174. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/shellmagic.at:20:
cat > mfs.sh <<_EOT
#! /bin/sh
# Apart from this initial boilerplace this is actually a -*- mfl -*- code.
exec \$MAILFROMD --no-config --run \\\$0 \"\\\$@\"
!#
func main(...)
  returns number
do
  loop for set i 1, while i <= \\\$#, set i i + 1
  do
    echo i. \": \" . \\\$(i)
  done
done
_EOT


sh mfs.sh one two
"
at_fn_check_prepare_notrace 'a $(...) command substitution' "shellmagic.at:20"
( $at_check_trace;
cat > mfs.sh <<_EOT
#! /bin/sh
# Apart from this initial boilerplace this is actually a -*- mfl -*- code.
exec $MAILFROMD --no-config --run \$0 "\$@"
!#
func main(...)
  returns number
do
  loop for set i 1, while i <= \$#, set i i + 1
  do
    echo i. ": " . \$(i)
  done
done
_EOT


sh mfs.sh one two

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "1: one
2: two
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/shellmagic.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_174
#AT_START_175
at_fn_group_banner 175 'commaize.at:17' \
  "Commaize" "                                       " 27
at_xfail=no
(
  printf "%s\n" "175. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/commaize.at:19:
cat >input <<'_ATEOF'
From: root
To: <test@example.com>,<tset@example.com>,  <root@example.org>
Resent-To: <foo@example.com> (main,and not only),    \"foo,bar\" <bar@example.com>,<baaz@example.com>
Resent-To: <foo@example.com> (main,and not only),    \"foo,bar,baz\" <bar@example.com>,<baaz@example.com>
Subject: test sendmail
 message processing

Text.
_ATEOF

smmsg input
"
at_fn_check_prepare_notrace 'an embedded newline' "commaize.at:19"
( $at_check_trace;
cat >input <<'_ATEOF'
From: root
To: <test@example.com>,<tset@example.com>,  <root@example.org>
Resent-To: <foo@example.com> (main,and not only),    "foo,bar" <bar@example.com>,<baaz@example.com>
Resent-To: <foo@example.com> (main,and not only),    "foo,bar,baz" <bar@example.com>,<baaz@example.com>
Subject: test sendmail
 message processing

Text.
_ATEOF

smmsg input

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "From: root
To: <test@example.com>, <tset@example.com>, <root@example.org>
Resent-To: <foo@example.com> (main,and not only), \"foo,bar\" <bar@example.com>,
        <baaz@example.com>
Resent-To: <foo@example.com> (main,and not only),
        \"foo,bar,baz\" <bar@example.com>, <baaz@example.com>
Subject: test sendmail
 message processing

Text.
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/commaize.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/commaize.at:44:
cat >headers.in <<'_ATEOF'
From: root
To: <test@example.com>,<tset@example.com>,  <root@example.org>
Resent-To: <foo@example.com> (main,and not only),    \"foo,bar\" <bar@example.com>,<baaz@example.com>
Subject: test sendmail
 message processing

_ATEOF

cat >headers.out <<'_ATEOF'
From: root
To: <test@example.com>, <tset@example.com>, <root@example.org>
Resent-To: <foo@example.com> (main,and not only), \"foo,bar\" <bar@example.com>,
        <baaz@example.com>
Subject: test sendmail
 message processing

_ATEOF

cat headers.in \$abs_top_srcdir/COPYING > msg.in
cat headers.out \$abs_top_srcdir/COPYING > expout
smmsg msg.in
"
at_fn_check_prepare_notrace 'an embedded newline' "commaize.at:44"
( $at_check_trace;
cat >headers.in <<'_ATEOF'
From: root
To: <test@example.com>,<tset@example.com>,  <root@example.org>
Resent-To: <foo@example.com> (main,and not only),    "foo,bar" <bar@example.com>,<baaz@example.com>
Subject: test sendmail
 message processing

_ATEOF

cat >headers.out <<'_ATEOF'
From: root
To: <test@example.com>, <tset@example.com>, <root@example.org>
Resent-To: <foo@example.com> (main,and not only), "foo,bar" <bar@example.com>,
        <baaz@example.com>
Subject: test sendmail
 message processing

_ATEOF

cat headers.in $abs_top_srcdir/COPYING > msg.in
cat headers.out $abs_top_srcdir/COPYING > expout
smmsg msg.in

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
$at_diff expout "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/commaize.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/commaize.at:69:
# The comma in the first address below would cause grief in
# scan_next.
cat >input <<'_ATEOF'
From: <\"first, second\"@foo.net>,
	\"Another one\" <anx@quux.com>

text
_ATEOF

smmsg input
"
at_fn_check_prepare_notrace 'an embedded newline' "commaize.at:69"
( $at_check_trace;
# The comma in the first address below would cause grief in
# scan_next.
cat >input <<'_ATEOF'
From: <"first, second"@foo.net>,
	"Another one" <anx@quux.com>

text
_ATEOF

smmsg input

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "From: <\"first, second\"@foo.net>, \"Another one\" <anx@quux.com>

text
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/commaize.at:69"
$at_failed && at_fn_log_failure
$at_traceon; }


  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_175
#AT_START_176
at_fn_group_banner 176 'poll.at:17' \
  "poll: Existing sender" "                          " 28
at_xfail=no
(
  printf "%s\n" "176. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

require status
require 'poll'

prog envfrom
do
  on _pollhost($client_addr, $f, "domain", "mailfromd-test@gnu.org.ua")  do
  when success:
    accept
  when not_found or failure:
    reject 550 5.1.0 "Sender validity not confirmed"
  when temp_failure:
    tempfail 450 4.1.0 "Try again later"
  done
done
_ATEOF

 cat >script <<'_ATEOF'
\Dclient_addr=relay1.gnu.org.ua
\E250
HELO localhost
\E250
MAIL FROM:<gray+mailfromd-test@gnu.org.ua>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/poll.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "poll.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/poll.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_176
#AT_START_177
at_fn_group_banner 177 'poll01.at:17' \
  "poll: Non-existing sender" "                      " 28
at_xfail=no
(
  printf "%s\n" "177. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

require status
require 'poll'

prog envfrom
do
  on _pollhost($client_addr, $f, "domain", "mailfromd-test@gnu.org.ua")  do
  when success:
    accept
  when not_found or failure:
    reject 550 5.1.0 "Sender validity not confirmed"
  when temp_failure:
    tempfail 450 4.1.0 "Try again later"
  done
done
_ATEOF

 cat >script <<'_ATEOF'
\Dclient_addr=relay1.gnu.org.ua
\E250
HELO localhost
\E550
MAIL FROM:<nonexisting+mailfromd-test@gnu.org.ua>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/poll01.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "poll01.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/poll01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_177
#AT_START_178
at_fn_group_banner 178 'poll02.at:17' \
  "poll: Tempfail" "                                 " 28
at_xfail=no
(
  printf "%s\n" "178. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

require status
require 'poll'

prog envfrom
do
  on _pollhost($client_addr, $f, "domain", "mailfromd-test@gnu.org.ua")  do
  when success:
    accept
  when not_found or failure:
    reject 550 5.1.0 "Sender validity not confirmed"
  when temp_failure:
    tempfail 450 4.1.0 "Try again later"
  done
done
_ATEOF

 cat >script <<'_ATEOF'
\Dclient_addr=relay1.gnu.org.ua
\E250
HELO localhost
\E450
MAIL FROM:<tempfail+mailfromd-test@gnu.org.ua>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/poll02.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "poll02.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/poll02.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_178
#AT_START_179
at_fn_group_banner 179 'poll03.at:17' \
  "poll: Multiple from addresses" "                  " 28
at_xfail=no
(
  printf "%s\n" "179. $at_setup_line: testing $at_desc ..."
  $at_traceon







 cat >filter <<'_ATEOF'

require status
require poll

prog envfrom
do
  on _pollhost($client_addr, $f, "domain",
         "bad-return-mailfromd-test@gnu.org.ua,mailfromd-test@gnu.org.ua")  do
  when success:
    accept
  when not_found or failure:
    reject 550 5.1.0 "Sender validity not confirmed"
  when temp_failure:
    tempfail 450 4.1.0 "Try again later"
  done
done
_ATEOF

 cat >script <<'_ATEOF'
\Dclient_addr=relay1.gnu.org.ua
\E250
HELO localhost
\E250
MAIL FROM:<gray+mailfromd-test@gnu.org.ua>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/poll03.at:20:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "poll03.at:20"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)
   at_resolv_conf || exit 77
portprobe relay1.gnu.org.ua 25 || exit 77


   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/poll03.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_179
#AT_START_180
at_fn_group_banner 180 'poll04.at:17' \
  "on poll without address" "                        " 28
at_xfail=no
(
  printf "%s\n" "180. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Synopsis: `on poll' without target address caused coredump in
# version 4.1
# Reported: Jan Rafaj, 2007-08-10
# References: <Pine.LNX.4.58.0708101024210.11880@cedric.unob.cz>


cat >prog <<'_ATEOF'

require poll

prog envfrom
do
  on poll host "HOST"
  do
    when 0: pass
  done
done
_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/poll04.at:25:
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --test prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "poll04.at:25"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --test prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: prog:6.6-21: recipient address not specified in \`on poll' construct
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 78 $at_status "$at_srcdir/poll04.at:25"
$at_failed && at_fn_log_failure
$at_traceon; }



  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_180
#AT_START_181
at_fn_group_banner 181 'cdb.at:16' \
  "cdb" "                                            " 29
at_xfail=no
(
  printf "%s\n" "181. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Check if mailutils dbm tool is available.  Skip tests if it is not.
{ set +x
printf "%s\n" "$at_srcdir/cdb.at:20: mailutils dbm --help >/dev/null 2>&1 || exit 77"
at_fn_check_prepare_trace "cdb.at:20"
( $at_check_trace; mailutils dbm --help >/dev/null 2>&1 || exit 77
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




# Source file for the mfctl database.
cat >mfctl.in <<'_ATEOF'
email:accept@example.org	ACCEPT
email:reject@example.org	REJECT
email:tempfail@example.org	TEMPFAIL
email:detail@example.org	550 5.7.1 Sender blacklisted
email:suspicious@example.org	GREYLIST
email:continue@example.org      CONTINUE
ip:127.0.0.2			GREYLIST
mx:bkmx.test1.mf.gnu.org.ua	ACCEPT
domain:org			ACCEPT
_ATEOF


# Create the state directory and the database.
{ set +x
printf "%s\n" "$at_srcdir/cdb.at:38: STATEDIR=\$(pwd)/statedir
mkdir \$STATEDIR
mailutils dbm -n -f mfctl.in load \$DEFAULT_DB_TYPE://\$STATEDIR/mfctl.db || exit 77"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:38"
( $at_check_trace; STATEDIR=$(pwd)/statedir
mkdir $STATEDIR
mailutils dbm -n -f mfctl.in load $DEFAULT_DB_TYPE://$STATEDIR/mfctl.db || exit 77
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }




#
# Test non-existing record handling.
#

 cat >filter <<'_ATEOF'
require "cdb"
prog begin
do
  set cdb_name "%__statedir__/mfctl.db"
done

prog envfrom
do
  cdb_check("email", $f)
  reject 521 5.7.1 "This mail is not accepted"
done
_ATEOF

 cat >script <<'_ATEOF'
\Di=feedbeef
\E250
HELO localhost
\E521 "5.7.1 This mail is not accepted"
MAIL FROM: <noname@example.org>
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/cdb.at:47:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)

   STATEDIR=\$(pwd)/statedir
   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:47"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)

   STATEDIR=$(pwd)/statedir
   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:47"
$at_failed && at_fn_log_failure
$at_traceon; }



#
# Test basic actions.
#

 cat >filter <<'_ATEOF'
require "cdb"
prog begin
do
  set cdb_name "%__statedir__/mfctl.db"
done

prog envfrom
do
  cdb_check("email", $f)
  reject 521 5.7.1 "This mail is not accepted"
done

prog envrcpt
do
  pass
done
_ATEOF

 cat >script <<'_ATEOF'
\Di=feedbeef
\E250
HELO localhost
\E250
MAIL FROM: <accept@example.org>
\E250
RSET
\E250
HELO localhost
\E550
MAIL FROM: <reject@example.org>
\E250
RSET
\E250
HELO localhost
\E451
MAIL FROM: <tempfail@example.org>
\E250
RSET
\E250
HELO localhost
\E550 "5\.7\.1 Sender blacklisted"
MAIL FROM: <detail@example.org>
\E250
RSET
\E250
HELO localhost
\E250
MAIL FROM: <continue@example.org>
\E250
RCPT TO: <root>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/cdb.at:73:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)

   STATEDIR=\$(pwd)/statedir
   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:73"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)

   STATEDIR=$(pwd)/statedir
   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
feedbeef: cdb_check_prefix(email, accept@example.org) => 'ACCEPT'
feedbeef: cdb_check_prefix(email, reject@example.org) => 'REJECT'
feedbeef: cdb_check_prefix(email, tempfail@example.org) => 'TEMPFAIL'
feedbeef: cdb_check_prefix(email, detail@example.org) => '550 5.7.1 Sender blacklisted'
feedbeef: cdb_check_prefix(email, continue@example.org) => 'CONTINUE'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:73"
$at_failed && at_fn_log_failure
$at_traceon; }



#
# Greylisting in envfrom
#

 cat >filter <<'_ATEOF'
require "cdb"
prog begin
do
  set cdb_name "%__statedir__/mfctl.db"
  set cdb_greylist_interval 5
done

prog envfrom
do
  cdb_check("email", $f)
  reject 521 5.7.1 "This mail is not accepted"
done

prog envrcpt
do
  accept
done
_ATEOF

 cat >script <<'_ATEOF'
\Di=feedbeef
\Dclient_addr=127.0.0.1
\E250
HELO localhost
\E250
MAIL FROM: <suspicious@example.org>
\E450 "4\.7\.0 You are greylisted for 5 seconds"
RCPT TO: <root>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/cdb.at:137:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)

   STATEDIR=\$(pwd)/statedir
   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:137"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)

   STATEDIR=$(pwd)/statedir
   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
feedbeef: cdb_check_prefix(email, suspicious@example.org) => 'GREYLIST'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:137"
$at_failed && at_fn_log_failure
$at_traceon; }



# Wait for greylisting to expire...
{ set +x
printf "%s\n" "$at_srcdir/cdb.at:173: sleep 6"
at_fn_check_prepare_trace "cdb.at:173"
( $at_check_trace; sleep 6
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:173"
$at_failed && at_fn_log_failure
$at_traceon; }


# And retry the test.

 cat >filter <<'_ATEOF'
require "cdb"
prog begin
do
  set cdb_name "%__statedir__/mfctl.db"
  set cdb_greylist_interval 5
done

prog envfrom
do
  cdb_check("email", $f)
  reject 521 5.7.1 "This mail is not accepted"
done

prog envrcpt
do
  accept
done
_ATEOF

 cat >script <<'_ATEOF'
\Di=feedbeef
\Dclient_addr=127.0.0.1
\E250
HELO localhost
\E250
MAIL FROM: <suspicious@example.org>
\E250
RCPT TO: <root>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/cdb.at:176:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)

   STATEDIR=\$(pwd)/statedir
   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:176"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)

   STATEDIR=$(pwd)/statedir
   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
feedbeef: cdb_check_prefix(email, suspicious@example.org) => 'GREYLIST'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:176"
$at_failed && at_fn_log_failure
$at_traceon; }



#
# Test greylisting in early milter states (connect).
#

 cat >filter <<'_ATEOF'
require "cdb"
prog begin
do
  set cdb_name "%__statedir__/mfctl.db"
  set cdb_greylist_interval 5
done

prog connect
do
  cdb_check("ip", $4)
done

prog helo
do
  echo "HELO $1"
done

prog envfrom
do
  cdb_check("email", $f)
  reject 521 5.7.1 "This mail is not accepted"
done

prog envrcpt
do
  accept
done
_ATEOF

 cat >script <<'_ATEOF'
\Di=feedbeef
\Sinet localhost 127.0.0.2 34567
\Dclient_addr=127.0.0.2
\E250
HELO localhost
\E250
MAIL FROM: <accept@example.org>
\E450
RCPT TO: <root>
\E221
QUIT
_ATEOF


 { set +x
printf "%s\n" "$at_srcdir/cdb.at:214:
# Skip test if running at root privileges
echo \"test\" > \$\$
chmod 0 \$\$
cat \$\$ > /dev/null 2>&1
result=\$?
rm -f \$\$
test \$result -eq 0 && exit 77

   TESTDIR=\$(pwd)

   STATEDIR=\$(pwd)/statedir
   X_OPT=auto
   if test -n \"\$STATEDIR\"; then
     if test -d \$STATEDIR; then
       X_OPT=dir:\$STATEDIR
     fi
   fi
   mtasim -DTESTDIR=\"\$TESTDIR\" --stdio -X\$X_OPT --statedir -- --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS filter < script 2>err >out
   rc=\$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit \$rc"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:214"
( $at_check_trace;
# Skip test if running at root privileges
echo "test" > $$
chmod 0 $$
cat $$ > /dev/null 2>&1
result=$?
rm -f $$
test $result -eq 0 && exit 77

   TESTDIR=$(pwd)

   STATEDIR=$(pwd)/statedir
   X_OPT=auto
   if test -n "$STATEDIR"; then
     if test -d $STATEDIR; then
       X_OPT=dir:$STATEDIR
     fi
   fi
   mtasim -DTESTDIR="$TESTDIR" --stdio -X$X_OPT --statedir -- --stderr -P$TESTDIR $MFOPTS $MFADDOPTS filter < script 2>err >out
   rc=$?
   sed -e 's/^mailfromd: info: *//' err >&2
   exit $rc
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "mailfromd: warning: script file is given without full file name
mailfromd: warning: program started without full file name
mailfromd: warning: restart (SIGHUP) will not work
mailfromd: mailfromd started
feedbeef: cdb_check_prefix(ip, 127.0.0.2) => 'GREYLIST'
mailfromd: mailfromd terminating
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:214"
$at_failed && at_fn_log_failure
$at_traceon; }



#
# Subdomain
#



cat >prog <<'_ATEOF'
require "cdb"
prog begin
do
  set cdb_name "%__statedir__/mfctl.db"
  set cdb_greylist_interval 5
done

prog envfrom
do
  cdb_check("subdomain", "gray@subdir.EXAMPLE.ORG")
  reject
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cdb.at:263:
TESTDIR=\$(pwd)
mailfromd --stderr \$MFOPTS \$MFADDOPTS --state-directory=\$(pwd)/statedir --test prog i=feedbeef"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:263"
( $at_check_trace;
TESTDIR=$(pwd)
mailfromd --stderr $MFOPTS $MFADDOPTS --state-directory=$(pwd)/statedir --test prog i=feedbeef
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "feedbeef: cdb_check_prefix(domain, subdir.example.org) => ''
feedbeef: cdb_check_prefix(domain, example.org) => ''
feedbeef: cdb_check_prefix(domain, org) => 'ACCEPT'
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: accept
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:263"
$at_failed && at_fn_log_failure
$at_traceon; }




#
# Domain MX matching
#





cat >prog <<'_ATEOF'
require "cdb"
prog begin
do
  set cdb_name "%__statedir__/mfctl.db"
  set cdb_greylist_interval 5
done

prog envfrom
do
  cdb_check("mx", "test1.mf.gnu.org.ua")
  reject
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/cdb.at:290: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr \$MFOPTS \$MFADDOPTS --state-directory=\$(pwd)/statedir --test prog i=feedbeef"
at_fn_check_prepare_notrace 'a $(...) command substitution' "cdb.at:290"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr $MFOPTS $MFADDOPTS --state-directory=$(pwd)/statedir --test prog i=feedbeef
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "feedbeef: cdb_check_prefix(mx, mail.test1.mf.gnu.org.ua) => ''
feedbeef: cdb_check_prefix(mx, mail.test2.mf.gnu.org.ua) => ''
feedbeef: cdb_check_prefix(mx, bkmx.test1.mf.gnu.org.ua) => 'ACCEPT'
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "State envfrom: accept
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/cdb.at:290"
$at_failed && at_fn_log_failure
$at_traceon; }








  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_181
#AT_START_182
at_fn_group_banner 182 'dnsbl.at:17' \
  "dnsbl" "                                          " 29
at_xfail=no
(
  printf "%s\n" "182. $at_setup_line: testing $at_desc ..."
  $at_traceon






cat >prog <<'_ATEOF'
require 'match_dnsbl'
func main(...)
  returns number
do
  echo match_dnsbl("203.0.113.1", "dnsbl.mf.gnu.org.ua", 'ANY')
  echo match_dnsbl("203.0.113.10", "dnsbl.mf.gnu.org.ua", 'ANY')
  echo match_dnsbl("203.0.113.10", "dnsbl.mf.gnu.org.ua", '127.0.0.32/27')
  return 0
done

_ATEOF

{ set +x
printf "%s\n" "$at_srcdir/dnsbl.at:20: at_resolv_conf || exit 77
TESTDIR=\$(pwd)
mailfromd --stderr -P\$TESTDIR \$MFOPTS \$MFADDOPTS --run prog "
at_fn_check_prepare_notrace 'a $(...) command substitution' "dnsbl.at:20"
( $at_check_trace; at_resolv_conf || exit 77
TESTDIR=$(pwd)
mailfromd --stderr -P$TESTDIR $MFOPTS $MFADDOPTS --run prog
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "0
1
0
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/dnsbl.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }





  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_182
