#! /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;lex.at:32;identifier;lex;
2;lex.at:40;unquoted string;lex;
3;lex.at:51;number;lex;
4;lex.at:67;quoted string;lex;
5;lex.at:75;escapes in quoted string;lex;
6;lex.at:83;multiline string;lex;
7;lex.at:93;complex multiline string;lex;
8;lex.at:103;invalid escape sequence;lex;
9;lex.at:111;unquoted variable;lex;
10;lex.at:119;unquoted variable with defaults;lex;
11;null.at:17;null;null;
12;qstr.at:17;quoted strings;qstr string;
13;setvar.at:17;setvar;setvar;
14;unsetvar.at:17;unsetvar;unsetvar;
15;undef.at:17;expanding undefined variables;undef;
16;argc.at:17;argc;argc;
17;command.at:17;command;command;
18;matcharg.at:17;match arg;match arg;
19;matchprog.at:17;match program name;matchprog;
20;regexp.at:17;regexp options;match regexp;
21;uid.at:17;uid;uid;
22;user.at:17;user;user;
23;in.at:17;in;in;
24;gid.at:17;gid;gid;
25;group.at:17;group;group;
26;fstest.at:51;basic filesystem tests;match fstest;
27;fstest.at:115;match -h;match fstest fs_symlink;
28;fstest.at:126;match -p;match fstest fs_pipe;
29;fstest.at:135;match -k;match fstest fs_sticky;
30;fstest.at:144;match -c;match fstest fs_char_special;
31;fstest.at:154;match -b;match fstest fs_block_special;
32;fstest.at:161;match -S;match fstest fs_socket;
33;fstest.at:171;match -O;match fstest fs_owner_euid;
34;fstest.at:180;match -G;match fstest fs_owner_egid;
35;fstest.at:189;match -u;match fstest fs_set_uid;
36;fstest.at:199;match -g;match fstest fs_set_gid;
37;and.at:17;and;match and;
38;or.at:17;or;match or;
39;compound.at:17;compound;match compound;
40;set.at:17;set;set;
41;delete.at:17;delete;delete;
42;transform.at:17;transform;transform;
43;map.at:17;map;map;
44;insert.at:17;insert;insert;
45;remopt.at:17;remopt;remopt;
46;umask.at:17;umask;umask;
47;newgrp.at:17;newgrp;newgrp;
48;chdir.at:17;chdir;chdir;
49;interactive.at:17;interactive;interactive;
50;clrenv.at:17;clrenv;clrenv;
51;unsetenv.at:17;unsetenv;unsetenv;
52;keepenv.at:17;keepenv;keepenv;
53;setenv.at:17;setenv;setenv;
54;evalenv.at:17;evalenv;evalenv;
55;backref.at:17;Back-reference expansion;backref;
56;fallthrough.at:17;fall-through;fallthrough fall-through;
57;error.at:17;error;error;
58;inc00.at:17;basic include functionality;inc00 inc include;
59;inc01.at:17;rule and global statements;inc01 inc include;
60;argc.at:17;argc;argc;
61;command.at:17;command;command;
62;match.at:17;match;match;
63;matchprog.at:17;match program name;matchprog;
64;uid.at:17;uid;uid;
65;gid.at:17;gid;gid;
66;set.at:17;set;set;
67;delete.at:17;delete;delete;
68;transform.at:17;transform;transform;
69;map.at:17;map;map;
70;umask.at:17;umask;umask;
71;newgrp.at:17;newgrp;newgrp;
72;chdir.at:17;chdir;chdir;
73;env.at:17;env;env;
74;interactive.at:17;interactive;interactive;
75;fallthrough.at:17;fall-through;fallthrough fall-through;
76;error.at:17;error;error;
77;backref.at:17;Back-reference expansion;backref;
78;setvar.at:17;setvar;setvar;
79;unsetvar.at:17;unsetvar;unsetvar;
"
# 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 79; 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='"rush"'


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-rush@gnu.org>.
General help using GNU software: <https://www.gnu.org/gethelp/>.
_ATEOF
  exit $at_write_fail
fi

# List of tests.
if $at_list_p; then
  cat <<_ATEOF || at_write_fail=1
GNU rush 2.4 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 (GNU rush 2.4)" &&
  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. lex.at:17
# Category starts at test group 1.
at_banner_text_1="Lexical structure"
# Banner 2. testsuite.at:62
# Category starts at test group 11.
at_banner_text_2="Base"
# Banner 3. testsuite.at:69
# Category starts at test group 16.
at_banner_text_3="Simple Conditions"
# Banner 4. testsuite.at:82
# Category starts at test group 37.
at_banner_text_4="Complex Conditions"
# Banner 5. testsuite.at:87
# Category starts at test group 40.
at_banner_text_5="Transformations"
# Banner 6. testsuite.at:95
# Category starts at test group 46.
at_banner_text_6="Rule attributes"
# Banner 7. testsuite.at:101
# Category starts at test group 50.
at_banner_text_7="Environment"
# Banner 8. testsuite.at:108
# Category starts at test group 55.
at_banner_text_8="Features"
# Banner 9. testsuite.at:111
# Category starts at test group 56.
at_banner_text_9="Flow control"
# Banner 10. testsuite.at:115
# Category starts at test group 58.
at_banner_text_10="Includes"
# Banner 11. testsuite.at:119
# Category starts at test group 60.
at_banner_text_11="Legacy configuration"

# 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" "## ------------------------ ##
## GNU rush 2.4 test suite. ##
## ------------------------ ##"
{
  printf "%s\n" "## ------------------------ ##
## GNU rush 2.4 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:56: $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-rush@gnu.org>.
_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-rush@gnu.org>
   Subject: [GNU rush 2.4] $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 'lex.at:32' \
  "identifier" "                                     " 1
at_xfail=no
(
  printf "%s\n" "1. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:32: rush -T <<'EOT'
rule test
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:32"
( $at_check_trace; rush -T <<'EOT'
rule test
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-9: IDENT test
state 1, stdin:1.10-2: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:32"
$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 'lex.at:40' \
  "unquoted string" "                                " 1
at_xfail=no
(
  printf "%s\n" "2. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:40: rush -T <<'EOT'
rule /un.quoted,string&()
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:40"
( $at_check_trace; rush -T <<'EOT'
rule /un.quoted,string&()
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-22: STRING \"/un.quoted,string\"
state 2, stdin:1.23: '&'
state 2, stdin:1.24: '('
state 2, stdin:1.25: ')'
state 1, stdin:1.26-2: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.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_2
#AT_START_3
at_fn_group_banner 3 'lex.at:51' \
  "number" "                                         " 1
at_xfail=no
(
  printf "%s\n" "3. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:51: rush -T <<'EOT'
rule 10
rule +10
rule -10
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:51"
( $at_check_trace; rush -T <<'EOT'
rule 10
rule +10
rule -10
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-7: NUMBER 10
state 1, stdin:1.8-2: EOL
state 2, stdin:2.1-4: 'rule'
state 2, stdin:2.6-8: NUMBER +10
state 1, stdin:2.9-3: EOL
state 2, stdin:3.1-4: 'rule'
state 2, stdin:3.6-8: NUMBER -10
state 1, stdin:3.9-4: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:51"
$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 'lex.at:67' \
  "quoted string" "                                  " 1
at_xfail=no
(
  printf "%s\n" "4. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:67: rush -T <<'EOT'
rule \"input string\"
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:67"
( $at_check_trace; rush -T <<'EOT'
rule "input string"
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-19: STRING \"input string\"
state 1, stdin:1.20-2: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:67"
$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 'lex.at:75' \
  "escapes in quoted string" "                       " 1
at_xfail=no
(
  printf "%s\n" "5. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:75: rush -T <<'EOT'
rule \"simple\\btext\\040with e\\163capes \\%3\"
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:75"
( $at_check_trace; rush -T <<'EOT'
rule "simple\btext\040with e\163capes \%3"
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-42: STRING \"simple\\btext with escapes \\\\%3\"
state 1, stdin:1.43-2: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:75"
$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 'lex.at:83' \
  "multiline string" "                               " 1
at_xfail=no
(
  printf "%s\n" "6. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:83: rush -T <<'EOT'
rule \"multiline\\
 text\\
\"
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:83"
( $at_check_trace; rush -T <<'EOT'
rule "multiline\
 text\
"
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-3.1: STRING \"multiline text\"
state 1, stdin:3.2-4: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:83"
$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 'lex.at:93' \
  "complex multiline string" "                       " 1
at_xfail=no
(
  printf "%s\n" "7. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:93: rush -T <<'EOT'
rule \"a \\\"com\\x70lex\\r\\n\\
multiline\\\"\\r\\n\\
text\"
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:93"
( $at_check_trace; rush -T <<'EOT'
rule "a \"com\x70lex\r\n\
multiline\"\r\n\
text"
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-3.5: STRING \"a \\\"complex\\r\\nmultiline\\\"\\r\\ntext\"
state 1, stdin:3.6-4: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.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_7
#AT_START_8
at_fn_group_banner 8 'lex.at:103' \
  "invalid escape sequence" "                        " 1
at_xfail=no
(
  printf "%s\n" "8. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:103: rush -T <<'EOT'
rule \"bad \\&escape\"
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:103"
( $at_check_trace; rush -T <<'EOT'
rule "bad \&escape"
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-19: STRING \"bad \\\\&escape\"
state 1, stdin:1.20-2: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:103"
$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 'lex.at:111' \
  "unquoted variable" "                              " 1
at_xfail=no
(
  printf "%s\n" "9. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:111: rush -T <<'EOT'
rule \$VAR
EOT
"
at_fn_check_prepare_notrace 'an embedded newline' "lex.at:111"
( $at_check_trace; rush -T <<'EOT'
rule $VAR
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-9: STRING \"\$VAR\"
state 1, stdin:1.10-2: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:111"
$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 'lex.at:119' \
  "unquoted variable with defaults" "                " 1
at_xfail=no
(
  printf "%s\n" "10. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/lex.at:119: rush -T <<'EOT'
rule \${VAR:-\"string\\
\\145\\x6et \${SUBVAR=:} \\\"test\\\"\"}
EOT
"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "lex.at:119"
( $at_check_trace; rush -T <<'EOT'
rule ${VAR:-"string\
\145\x6et ${SUBVAR=:} \"test\""}
EOT

) >>"$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 2, stdin:1.1-4: 'rule'
state 2, stdin:1.6-2.32: STRING \"\${VAR:-\\\"string\\\\145\\\\x6et \${SUBVAR=:} \\\\\\\"test\\\\\\\"\\\"}\"
state 1, stdin:2.33-3: EOL
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/lex.at:119"
$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 'null.at:17' \
  "null" "                                           " 2
at_xfail=no
(
  printf "%s\n" "11. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/null.at:20:
cat > test.conf <<EOT

rush 2.0

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dall -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "null.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dall -c "/usr/bin/echo foo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
rush: Error: no matching rule for \"/usr/bin/echo foo\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/null.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 'qstr.at:17' \
  "quoted strings" "                                 " 2
at_xfail=no
(
  printf "%s\n" "12. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/qstr.at:20: cat >test.cf <<'_ATEOF'
rush 2.0
rule
  set t1 = \"simple text\"
  set t2 = \"simple\\btext\\040with e\\163capes \\%3\"
  set t3 = \"multiline\\
 text\\
\"
  set t4 = \"complex\\r\\n\\
multiline\\r\\n\\
text\"
  set t5 = \"bad \\&escape\"
_ATEOF

rush -C none -D vars -c \"ls\" test.cf
"
at_fn_check_prepare_notrace 'an embedded newline' "qstr.at:20"
( $at_check_trace; cat >test.cf <<'_ATEOF'
rush 2.0
rule
  set t1 = "simple text"
  set t2 = "simple\btext\040with e\163capes \%3"
  set t3 = "multiline\
 text\
"
  set t4 = "complex\r\n\
multiline\r\n\
text"
  set t5 = "bad \&escape"
_ATEOF

rush -C none -D vars -c "ls" test.cf

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "rush: Error: test.cf:11.17-19: unrecognized escape \\&
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "{
    \"vars\":{
        \"t1\":\"simple text\",
        \"t2\":\"simple\\btext with escapes %3\",
        \"t3\":\"multiline text\",
        \"t4\":\"complex\\r\\nmultiline\\r\\ntext\",
        \"t5\":\"bad \\\\&escape\"
    }
}
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/qstr.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_12
#AT_START_13
at_fn_group_banner 13 'setvar.at:17' \
  "setvar" "                                         " 2
at_xfail=no
(
  printf "%s\n" "13. $at_setup_line: testing $at_desc ..."
  $at_traceon



myvars
{ set +x
printf "%s\n" "$at_srcdir/setvar.at:19:
cat > test.conf <<EOT

rush 2.0
rule first
  set count = 1
  set FOO =  bar
  fall-through

rule last
  set command = \"\\\$FOO \\\$count\"

EOT
echo \"; ls\"
echo \"; ls\" >&2
rush -C none -Dcmdline,vars -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "setvar.at:19"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule first
  set count = 1
  set FOO =  bar
  fall-through

rule last
  set command = "\$FOO \$count"

EOT
echo "; ls"
echo "; ls" >&2
rush -C none -Dcmdline,vars -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
{
    \"cmdline\":\"bar 1\",
    \"vars\":{
        \"FOO\":\"bar\",
        \"count\":\"1\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setvar.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/setvar.at:42:
cat > test.conf <<EOT

rush 2.0
rule first
  set home = \"\$PWD\"

EOT
echo \"; ls\"
echo \"; ls\" >&2
rush -C none -Dcmdline,vars -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "setvar.at:42"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule first
  set home = "$PWD"

EOT
echo "; ls"
echo "; ls" >&2
rush -C none -Dcmdline,vars -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
rush: Error: test.conf:4.7-10: attempt to modify a read-only variable
rush: Error: errors in configuration file
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setvar.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_13
#AT_START_14
at_fn_group_banner 14 'unsetvar.at:17' \
  "unsetvar" "                                       " 2
at_xfail=no
(
  printf "%s\n" "14. $at_setup_line: testing $at_desc ..."
  $at_traceon



myvars
{ set +x
printf "%s\n" "$at_srcdir/unsetvar.at:19:
cat > test.conf <<EOT

rush 2.0
rule first
  set count = 1
  set FOO = bar
  fall-through

rule intermediate
  unset count
  fall-through

rule last
  set command = \"\\\$FOO \\\${count:-}\"

EOT
echo \"; ls\"
echo \"; ls\" >&2
rush -C none -Dcmdline,vars -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "unsetvar.at:19"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule first
  set count = 1
  set FOO = bar
  fall-through

rule intermediate
  unset count
  fall-through

rule last
  set command = "\$FOO \${count:-}"

EOT
echo "; ls"
echo "; ls" >&2
rush -C none -Dcmdline,vars -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
{
    \"cmdline\":\"bar \",
    \"vars\":{
        \"FOO\":\"bar\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/unsetvar.at:19"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/unsetvar.at:45:
cat > test.conf <<EOT

rush 2.0
rule first
  unset home

EOT
echo \"; ls\"
echo \"; ls\" >&2
rush -C none -Dcmdline,vars -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "unsetvar.at:45"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule first
  unset home

EOT
echo "; ls"
echo "; ls" >&2
rush -C none -Dcmdline,vars -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
rush: Error: test.conf:4.9-12: attempt to modify a read-only variable
rush: Error: errors in configuration file
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/unsetvar.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_14
#AT_START_15
at_fn_group_banner 15 'undef.at:17' \
  "expanding undefined variables" "                  " 2
at_xfail=no
(
  printf "%s\n" "15. $at_setup_line: testing $at_desc ..."
  $at_traceon





myvars
{ set +x
printf "%s\n" "$at_srcdir/undef.at:21:
cat > test.conf <<EOT

rush 2.0
rule first
  set command = \\\$COMMAND

EOT
echo \"; ls\"
echo \"; ls\" >&2
env -i \$RUSHDIR/rush -C none -Dcmdline -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "undef.at:21"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule first
  set command = \$COMMAND

EOT
echo "; ls"
echo "; ls" >&2
env -i $RUSHDIR/rush -C none -Dcmdline -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
rush: Error: undefined variable: COMMAND
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/undef.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/undef.at:33:
cat > test.conf <<EOT

rush 2.0
rule first
  set command = \\\${COMMAND:-\\\$command}

EOT
echo \"; ls\"
echo \"; ls\" >&2
env -i \$RUSHDIR/rush -C none -Dcmdline -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "undef.at:33"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule first
  set command = \${COMMAND:-\$command}

EOT
echo "; ls"
echo "; ls" >&2
env -i $RUSHDIR/rush -C none -Dcmdline -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
{
    \"cmdline\":\"ls\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/undef.at:33"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/undef.at:47:
cat > test.conf <<EOT

rush 2.0
global
  expand-undefined true

rule first
  set command = \\\$COMMAND

EOT
echo \"; ls\"
echo \"; ls\" >&2
env -i \$RUSHDIR/rush -C none -Dcmdline -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "undef.at:47"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
global
  expand-undefined true

rule first
  set command = \$COMMAND

EOT
echo "; ls"
echo "; ls" >&2
env -i $RUSHDIR/rush -C none -Dcmdline -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
{
    \"cmdline\":\"\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/undef.at:47"
$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 'argc.at:17' \
  "argc" "                                           " 3
at_xfail=no
(
  printf "%s\n" "16. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/argc.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$# == 2

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo foo bar\"
echo \"; /usr/bin/echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "argc.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$# == 2

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; /usr/bin/echo foo bar"
echo "; /usr/bin/echo foo bar" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
; /usr/bin/echo foo bar
rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null,
    \"interactive\":0,
    \"fork\":-1,
    \"acct\":-1
}
; 0
; /usr/bin/echo foo bar
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/argc.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 'command.at:17' \
  "command" "                                        " 3
at_xfail=no
(
  printf "%s\n" "17. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/command.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command ~ \"echo[[:space:]]+foo\$\"

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo foo bar\"
echo \"; /usr/bin/echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "command.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command ~ "echo[[:space:]]+foo$"

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; /usr/bin/echo foo bar"
echo "; /usr/bin/echo foo bar" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
; /usr/bin/echo foo bar
rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null,
    \"interactive\":0,
    \"fork\":-1,
    \"acct\":-1
}
; 0
; /usr/bin/echo foo bar
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/command.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/command.at:49:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command == \"/bin/ls\"

EOT
echo \"; /bin/ls\"
echo \"; /bin/ls\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/bin/ls\" test.conf
echo \"; \$?\"
echo \"; /bin/ls /\"
echo \"; /bin/ls /\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/bin/ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "command.at:49"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command == "/bin/ls"

EOT
echo "; /bin/ls"
echo "; /bin/ls" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/bin/ls" test.conf
echo "; $?"
echo "; /bin/ls /"
echo "; /bin/ls /" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/bin/ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /bin/ls
; /bin/ls /
rush: Error: no matching rule for \"/bin/ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /bin/ls
{
    \"cmdline\":\"/bin/ls\",
    \"argv\":[
        \"/bin/ls\"
    ],
    \"prog\":null,
    \"interactive\":0,
    \"fork\":-1,
    \"acct\":-1
}
; 0
; /bin/ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/command.at:49"
$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 'matcharg.at:17' \
  "match arg" "                                      " 3
at_xfail=no
(
  printf "%s\n" "18. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/matcharg.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$1 ~ \"^fo+\\\$\"
  set RULE = 1

rule
  match \\\${1} ~ \"^ba\"
  set RULE = 2

rule
  match \\\${-1} ~ \"/\"
  set RULE = 3

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,vars -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo bar\"
echo \"; /usr/bin/echo bar\" >&2
rush -C none -Dcmdline,vars -c \"/usr/bin/echo bar\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo /var\"
echo \"; /usr/bin/echo /var\" >&2
rush -C none -Dcmdline,vars -c \"/usr/bin/echo /var\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo for\"
echo \"; /usr/bin/echo for\" >&2
rush -C none -Dcmdline,vars -c \"/usr/bin/echo for\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "matcharg.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$1 ~ "^fo+\$"
  set RULE = 1

rule
  match \${1} ~ "^ba"
  set RULE = 2

rule
  match \${-1} ~ "/"
  set RULE = 3

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,vars -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; /usr/bin/echo bar"
echo "; /usr/bin/echo bar" >&2
rush -C none -Dcmdline,vars -c "/usr/bin/echo bar" test.conf
echo "; $?"
echo "; /usr/bin/echo /var"
echo "; /usr/bin/echo /var" >&2
rush -C none -Dcmdline,vars -c "/usr/bin/echo /var" test.conf
echo "; $?"
echo "; /usr/bin/echo for"
echo "; /usr/bin/echo for" >&2
rush -C none -Dcmdline,vars -c "/usr/bin/echo for" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
; /usr/bin/echo bar
; /usr/bin/echo /var
; /usr/bin/echo for
rush: Error: no matching rule for \"/usr/bin/echo for\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"vars\":{
        \"RULE\":\"1\"
    }
}
; 0
; /usr/bin/echo bar
{
    \"cmdline\":\"/usr/bin/echo bar\",
    \"vars\":{
        \"RULE\":\"2\"
    }
}
; 0
; /usr/bin/echo /var
{
    \"cmdline\":\"/usr/bin/echo /var\",
    \"vars\":{
        \"RULE\":\"3\"
    }
}
; 0
; /usr/bin/echo for
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/matcharg.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 'matchprog.at:17' \
  "match program name" "                             " 3
at_xfail=no
(
  printf "%s\n" "19. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/matchprog.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$0 ~ \"/usr/bin/.*\"

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; echo foo\"
echo \"; echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "matchprog.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$0 ~ "/usr/bin/.*"

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; echo foo"
echo "; echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
; echo foo
rush: Error: no matching rule for \"echo foo\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
; echo foo
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/matchprog.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/matchprog.at:46:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$program ~ \"/usr/bin/.*\"

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; echo foo\"
echo \"; echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "matchprog.at:46"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$program ~ "/usr/bin/.*"

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; echo foo"
echo "; echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
; echo foo
rush: Error: no matching rule for \"echo foo\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
; echo foo
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/matchprog.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_19
#AT_START_20
at_fn_group_banner 20 'regexp.at:17' \
  "regexp options" "                                 " 3
at_xfail=no
(
  printf "%s\n" "20. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/regexp.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command ~ \"fo+\\\$\"

EOT
echo \"; ls foo\"
echo \"; ls foo\" >&2
rush -C none -Dcmdline,argv -c \"ls foo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command ~ "fo+\$"

EOT
echo "; ls foo"
echo "; ls foo" >&2
rush -C none -Dcmdline,argv -c "ls foo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls foo
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls foo
{
    \"cmdline\":\"ls foo\",
    \"argv\":[
        \"ls\",
        \"foo\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/regexp.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/regexp.at:38:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command !~ \"fo+\\\$\"

EOT
echo \"; ls foo\"
echo \"; ls foo\" >&2
rush -C none -Dcmdline,argv -c \"ls foo\" test.conf
echo \"; \$?\"
echo \"; ls bar\"
echo \"; ls bar\" >&2
rush -C none -Dcmdline,argv -c \"ls bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:38"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command !~ "fo+\$"

EOT
echo "; ls foo"
echo "; ls foo" >&2
rush -C none -Dcmdline,argv -c "ls foo" test.conf
echo "; $?"
echo "; ls bar"
echo "; ls bar" >&2
rush -C none -Dcmdline,argv -c "ls bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls foo
rush: Error: no matching rule for \"ls foo\", user $MY_USER
; ls bar
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls foo
; 1
; ls bar
{
    \"cmdline\":\"ls bar\",
    \"argv\":[
        \"ls\",
        \"bar\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/regexp.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/regexp.at:63:
cat > test.conf <<EOT

rush 2.0
global
  regexp basic
rule
  match \\\$command ~ \"fo+\\\$\"

EOT
echo \"; ls foo\"
echo \"; ls foo\" >&2
rush -C none -Dcmdline,argv -c \"ls foo\" test.conf
echo \"; \$?\"
echo \"; ls fo+\"
echo \"; ls fo+\" >&2
rush -C none -Dcmdline,argv -c \"ls fo+\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:63"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
global
  regexp basic
rule
  match \$command ~ "fo+\$"

EOT
echo "; ls foo"
echo "; ls foo" >&2
rush -C none -Dcmdline,argv -c "ls foo" test.conf
echo "; $?"
echo "; ls fo+"
echo "; ls fo+" >&2
rush -C none -Dcmdline,argv -c "ls fo+" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls foo
rush: Error: no matching rule for \"ls foo\", user $MY_USER
; ls fo+
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls foo
; 1
; ls fo+
{
    \"cmdline\":\"ls fo+\",
    \"argv\":[
        \"ls\",
        \"fo+\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/regexp.at:63"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/regexp.at:90:
cat > test.conf <<EOT

rush 2.0
global
  regexp basic ignore-case
rule
  match \\\$command ~ \"fo+\\\$\"

EOT
echo \"; ls Fo+\"
echo \"; ls Fo+\" >&2
rush -C none -Dcmdline,argv -c \"ls Fo+\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "regexp.at:90"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
global
  regexp basic ignore-case
rule
  match \$command ~ "fo+\$"

EOT
echo "; ls Fo+"
echo "; ls Fo+" >&2
rush -C none -Dcmdline,argv -c "ls Fo+" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls Fo+
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls Fo+
{
    \"cmdline\":\"ls Fo+\",
    \"argv\":[
        \"ls\",
        \"Fo+\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/regexp.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_20
#AT_START_21
at_fn_group_banner 21 'uid.at:17' \
  "uid" "                                            " 3
at_xfail=no
(
  printf "%s\n" "21. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/uid.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$uid == \$MY_UID

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "uid.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$uid == $MY_UID

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/uid.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/uid.at:39:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$uid != \$MY_UID

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "uid.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$uid != $MY_UID

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Error: no matching rule for \"ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/uid.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_21
#AT_START_22
at_fn_group_banner 22 'user.at:17' \
  "user" "                                           " 3
at_xfail=no
(
  printf "%s\n" "22. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/user.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$user == \$MY_USER

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "user.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$user == $MY_USER

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/user.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/user.at:39:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$user != \$MY_USER

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "user.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$user != $MY_USER

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Error: no matching rule for \"ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/user.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_22
#AT_START_23
at_fn_group_banner 23 'in.at:17' \
  "in" "                                             " 3
at_xfail=no
(
  printf "%s\n" "23. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/in.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$user in (root bin \$MY_USER daemon)

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "in.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$user in (root bin $MY_USER daemon)

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/in.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/in.at:39:
cat > test.conf <<EOT

rush 2.0
rule
  match !(\\\$user in (root bin \$MY_USER daemon))

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "in.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match !(\$user in (root bin $MY_USER daemon))

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Error: no matching rule for \"ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/in.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_23
#AT_START_24
at_fn_group_banner 24 'gid.at:17' \
  "gid" "                                            " 3
at_xfail=no
(
  printf "%s\n" "24. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/gid.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$gid == \$MY_GID

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "gid.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$gid == $MY_GID

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/gid.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/gid.at:39:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$gid != \$MY_GID

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "gid.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$gid != $MY_GID

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Error: no matching rule for \"ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/gid.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_24
#AT_START_25
at_fn_group_banner 25 'group.at:17' \
  "group" "                                          " 3
at_xfail=no
(
  printf "%s\n" "25. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/group.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$group == \$MY_GROUP

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "group.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$group == $MY_GROUP

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/group.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/group.at:39:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$group != \$MY_GROUP

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "group.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$group != $MY_GROUP

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Error: no matching rule for \"ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/group.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_25
#AT_START_26
at_fn_group_banner 26 'fstest.at:51' \
  "basic filesystem tests" "                         " 3
at_xfail=no
(
  printf "%s\n" "26. $at_setup_line: testing $at_desc ..."
  $at_traceon



# ##############################
# test -e
# ##############################

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:58: rm -f file"
at_fn_check_prepare_trace "fstest.at:58"
( $at_check_trace; rm -f file
) >>"$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/fstest.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:58:
cat > test.conf <<EOT

rush 2.0
rule
  match -e file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:58"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -e file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:59: touch file"
at_fn_check_prepare_trace "fstest.at:59"
( $at_check_trace; touch file
) >>"$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/fstest.at:59"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:59:
cat > test.conf <<EOT

rush 2.0
rule
  match -e file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:59"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -e file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:59"
$at_failed && at_fn_log_failure
$at_traceon; }


# ##############################
# test -f
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:64: rm -rf file"
at_fn_check_prepare_trace "fstest.at:64"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:64"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:64:
cat > test.conf <<EOT

rush 2.0
rule
  match -f file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:64"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -f file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:64"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:65: touch file"
at_fn_check_prepare_trace "fstest.at:65"
( $at_check_trace; touch file
) >>"$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/fstest.at:65"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:65:
cat > test.conf <<EOT

rush 2.0
rule
  match -f file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:65"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -f file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:65"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:66: rm -f file && mkdir file"
at_fn_check_prepare_trace "fstest.at:66"
( $at_check_trace; rm -f file && mkdir file
) >>"$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/fstest.at:66"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:66:
cat > test.conf <<EOT

rush 2.0
rule
  match -f file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:66"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -f file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:66"
$at_failed && at_fn_log_failure
$at_traceon; }


# ##############################
# test -d
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:71: rm -rf file"
at_fn_check_prepare_trace "fstest.at:71"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:71"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:71:
cat > test.conf <<EOT

rush 2.0
rule
  match -d file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:71"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -d file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:71"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:72: touch file"
at_fn_check_prepare_trace "fstest.at:72"
( $at_check_trace; touch file
) >>"$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/fstest.at:72"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:72:
cat > test.conf <<EOT

rush 2.0
rule
  match -d file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:72"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -d file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:72"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:73: rm -f file && mkdir file"
at_fn_check_prepare_trace "fstest.at:73"
( $at_check_trace; rm -f file && mkdir file
) >>"$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/fstest.at:73"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:73:
cat > test.conf <<EOT

rush 2.0
rule
  match -d file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:73"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -d file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:73"
$at_failed && at_fn_log_failure
$at_traceon; }


# ##############################
# test -s
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:78: rm -rf file"
at_fn_check_prepare_trace "fstest.at:78"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:78"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:78:
cat > test.conf <<EOT

rush 2.0
rule
  match -s file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:78"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -s file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:78"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:79: touch file"
at_fn_check_prepare_trace "fstest.at:79"
( $at_check_trace; touch file
) >>"$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/fstest.at:79"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:79:
cat > test.conf <<EOT

rush 2.0
rule
  match -s file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:79"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -s file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:79"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:80: echo \"test\" > file"
at_fn_check_prepare_trace "fstest.at:80"
( $at_check_trace; echo "test" > file
) >>"$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/fstest.at:80"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:80:
cat > test.conf <<EOT

rush 2.0
rule
  match -s file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:80"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -s file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:80"
$at_failed && at_fn_log_failure
$at_traceon; }


# ##############################
# test -r
# ##############################

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:86: rm -rf file && touch file"
at_fn_check_prepare_trace "fstest.at:86"
( $at_check_trace; rm -rf file && touch file
) >>"$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/fstest.at:86"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:87: chmod u=r file"
at_fn_check_prepare_trace "fstest.at:87"
( $at_check_trace; chmod u=r file
) >>"$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/fstest.at:87"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:87:
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:87"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:87"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:88: chmod g=r file"
at_fn_check_prepare_trace "fstest.at:88"
( $at_check_trace; chmod g=r file
) >>"$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/fstest.at:88"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:88:
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:88"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:88"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:89: chmod o=r file"
at_fn_check_prepare_trace "fstest.at:89"
( $at_check_trace; chmod o=r file
) >>"$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/fstest.at:89"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:89:
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:89"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:89"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:90: chmod a=r file"
at_fn_check_prepare_trace "fstest.at:90"
( $at_check_trace; chmod a=r file
) >>"$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/fstest.at:90"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:90:
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:90"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:90"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:91: chmod -r file"
at_fn_check_prepare_trace "fstest.at:91"
( $at_check_trace; chmod -r file
) >>"$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/fstest.at:91"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:91:
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:91"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -r file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:91"
$at_failed && at_fn_log_failure
$at_traceon; }


# ##############################
# test -w
# ##############################

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:97: chmod u=w file"
at_fn_check_prepare_trace "fstest.at:97"
( $at_check_trace; chmod u=w file
) >>"$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/fstest.at:97"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:97:
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:97"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:97"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:98: chmod g=w file"
at_fn_check_prepare_trace "fstest.at:98"
( $at_check_trace; chmod g=w file
) >>"$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/fstest.at:98"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:98:
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:98"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:98"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:99: chmod o=w file"
at_fn_check_prepare_trace "fstest.at:99"
( $at_check_trace; chmod o=w file
) >>"$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/fstest.at:99"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:99:
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:99"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:99"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:100: chmod a=w file"
at_fn_check_prepare_trace "fstest.at:100"
( $at_check_trace; chmod a=w file
) >>"$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/fstest.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:100:
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:100"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:100"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:101: chmod 444 file"
at_fn_check_prepare_trace "fstest.at:101"
( $at_check_trace; chmod 444 file
) >>"$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/fstest.at:101"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:101:
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:101"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -w file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:101"
$at_failed && at_fn_log_failure
$at_traceon; }


# ##############################
# test -x
# ##############################

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:107: chmod u=x file"
at_fn_check_prepare_trace "fstest.at:107"
( $at_check_trace; chmod u=x file
) >>"$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/fstest.at:107"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:107:
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:107"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:107"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:108: chmod g=x file"
at_fn_check_prepare_trace "fstest.at:108"
( $at_check_trace; chmod g=x file
) >>"$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/fstest.at:108"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:108:
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:108"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:108"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:109: chmod o=x file"
at_fn_check_prepare_trace "fstest.at:109"
( $at_check_trace; chmod o=x file
) >>"$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/fstest.at:109"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:109:
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:109"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:109"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:110: chmod a=x file"
at_fn_check_prepare_trace "fstest.at:110"
( $at_check_trace; chmod a=x file
) >>"$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/fstest.at:110"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:110:
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:110"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:110"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:111: chmod 644 file"
at_fn_check_prepare_trace "fstest.at:111"
( $at_check_trace; chmod 644 file
) >>"$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/fstest.at:111"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:111:
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:111"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -x file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:111"
$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 'fstest.at:115' \
  "match -h" "                                       " 3
at_xfail=no
(
  printf "%s\n" "27. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -h
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:120: rm -rf file symlink"
at_fn_check_prepare_trace "fstest.at:120"
( $at_check_trace; rm -rf file symlink
) >>"$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/fstest.at:120"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:120:
cat > test.conf <<EOT

rush 2.0
rule
  match -h symlink
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:120"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -h symlink
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:120"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:121: touch file"
at_fn_check_prepare_trace "fstest.at:121"
( $at_check_trace; touch file
) >>"$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/fstest.at:121"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:121:
cat > test.conf <<EOT

rush 2.0
rule
  match -h file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:121"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -h file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:121"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:122: ln -sf file symlink || exit 77"
at_fn_check_prepare_trace "fstest.at:122"
( $at_check_trace; ln -sf file symlink || 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/fstest.at:122"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:122:
cat > test.conf <<EOT

rush 2.0
rule
  match -h symlink
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:122"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -h symlink
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:122"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:123: true"
at_fn_check_prepare_trace "fstest.at:123"
( $at_check_trace; true
) >>"$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/fstest.at:123"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:123:
cat > test.conf <<EOT

rush 2.0
rule
  match -L symlink
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:123"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -L symlink
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.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_27
#AT_START_28
at_fn_group_banner 28 'fstest.at:126' \
  "match -p" "                                       " 3
at_xfail=no
(
  printf "%s\n" "28. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -p
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:131: rm -rf file"
at_fn_check_prepare_trace "fstest.at:131"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:131"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:131:
cat > test.conf <<EOT

rush 2.0
rule
  match -p file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:131"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -p file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:131"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:132: mkfifo file || exit 77"
at_fn_check_prepare_trace "fstest.at:132"
( $at_check_trace; mkfifo file || 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/fstest.at:132"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:132:
cat > test.conf <<EOT

rush 2.0
rule
  match -p file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:132"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -p file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:132"
$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 'fstest.at:135' \
  "match -k" "                                       " 3
at_xfail=no
(
  printf "%s\n" "29. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -k
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:140: rm -rf file"
at_fn_check_prepare_trace "fstest.at:140"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:140"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:140:
cat > test.conf <<EOT

rush 2.0
rule
  match -k file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:140"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -k file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:140"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:141: touch file && chmod +t file || exit 77"
at_fn_check_prepare_trace "fstest.at:141"
( $at_check_trace; touch file && chmod +t file || 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/fstest.at:141"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:141:
cat > test.conf <<EOT

rush 2.0
rule
  match -k file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:141"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -k file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:141"
$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 'fstest.at:144' \
  "match -c" "                                       " 3
at_xfail=no
(
  printf "%s\n" "30. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -c
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:149: rm -rf file"
at_fn_check_prepare_trace "fstest.at:149"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:149"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:149:
cat > test.conf <<EOT

rush 2.0
rule
  match -c file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:149"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -c file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:149"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:150: touch file"
at_fn_check_prepare_trace "fstest.at:150"
( $at_check_trace; touch file
) >>"$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/fstest.at:150"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:150:
cat > test.conf <<EOT

rush 2.0
rule
  match -c file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:150"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -c file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:150"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:151: test -c /dev/tty || exit 77"
at_fn_check_prepare_trace "fstest.at:151"
( $at_check_trace; test -c /dev/tty || 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/fstest.at:151"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:151:
cat > test.conf <<EOT

rush 2.0
rule
  match -c /dev/tty
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:151"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -c /dev/tty
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:151"
$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 'fstest.at:154' \
  "match -b" "                                       " 3
at_xfail=no
(
  printf "%s\n" "31. $at_setup_line: testing $at_desc ..."
  $at_traceon


{ set +x
printf "%s\n" "$at_srcdir/fstest.at:156: rm -rf file"
at_fn_check_prepare_trace "fstest.at:156"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:156"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:156:
cat > test.conf <<EOT

rush 2.0
rule
  match -b file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:156"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -b file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:156"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:157: touch file"
at_fn_check_prepare_trace "fstest.at:157"
( $at_check_trace; touch file
) >>"$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/fstest.at:157"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:157:
cat > test.conf <<EOT

rush 2.0
rule
  match -b file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:157"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -b file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:157"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:158: mknod file b 1 1 || exit 77"
at_fn_check_prepare_trace "fstest.at:158"
( $at_check_trace; mknod file b 1 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/fstest.at:158"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:158:
cat > test.conf <<EOT

rush 2.0
rule
  match -b file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:158"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -b file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:158"
$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 'fstest.at:161' \
  "match -S" "                                       " 3
at_xfail=no
(
  printf "%s\n" "32. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -c
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:166: rm -rf file"
at_fn_check_prepare_trace "fstest.at:166"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:166"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:166:
cat > test.conf <<EOT

rush 2.0
rule
  match -S file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:166"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -S file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:166"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:167: touch file"
at_fn_check_prepare_trace "fstest.at:167"
( $at_check_trace; touch file
) >>"$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/fstest.at:167"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:167:
cat > test.conf <<EOT

rush 2.0
rule
  match -S file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:167"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -S file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:167"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:168: mksock socket || exit 77"
at_fn_check_prepare_trace "fstest.at:168"
( $at_check_trace; mksock socket || 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/fstest.at:168"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:168:
cat > test.conf <<EOT

rush 2.0
rule
  match -S socket
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:168"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -S socket
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:168"
$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 'fstest.at:171' \
  "match -O" "                                       " 3
at_xfail=no
(
  printf "%s\n" "33. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -O
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:176: rm -rf file"
at_fn_check_prepare_trace "fstest.at:176"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:176"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:176:
cat > test.conf <<EOT

rush 2.0
rule
  match -O file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:176"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -O file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:176"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:177: touch file"
at_fn_check_prepare_trace "fstest.at:177"
( $at_check_trace; touch file
) >>"$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/fstest.at:177"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:177:
cat > test.conf <<EOT

rush 2.0
rule
  match -O file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:177"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -O file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:177"
$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 'fstest.at:180' \
  "match -G" "                                       " 3
at_xfail=no
(
  printf "%s\n" "34. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -G
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:185: rm -rf file"
at_fn_check_prepare_trace "fstest.at:185"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:185"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:185:
cat > test.conf <<EOT

rush 2.0
rule
  match -G file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:185"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -G file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:185"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:186: touch file"
at_fn_check_prepare_trace "fstest.at:186"
( $at_check_trace; touch file
) >>"$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/fstest.at:186"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:186:
cat > test.conf <<EOT

rush 2.0
rule
  match -G file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:186"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -G file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:186"
$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 'fstest.at:189' \
  "match -u" "                                       " 3
at_xfail=no
(
  printf "%s\n" "35. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -u
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:194: rm -rf file"
at_fn_check_prepare_trace "fstest.at:194"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:194"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:194:
cat > test.conf <<EOT

rush 2.0
rule
  match -u file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:194"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -u file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:194"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:195: touch file"
at_fn_check_prepare_trace "fstest.at:195"
( $at_check_trace; touch file
) >>"$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/fstest.at:195"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:195:
cat > test.conf <<EOT

rush 2.0
rule
  match -u file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:195"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -u file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:195"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:196: chmod u+s file || exit 77"
at_fn_check_prepare_trace "fstest.at:196"
( $at_check_trace; chmod u+s file || 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/fstest.at:196"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:196:
cat > test.conf <<EOT

rush 2.0
rule
  match -u file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:196"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -u file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:196"
$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 'fstest.at:199' \
  "match -g" "                                       " 3
at_xfail=no
(
  printf "%s\n" "36. $at_setup_line: testing $at_desc ..."
  $at_traceon


# ##############################
# test -g
# ##############################
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:204: rm -rf file"
at_fn_check_prepare_trace "fstest.at:204"
( $at_check_trace; rm -rf file
) >>"$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/fstest.at:204"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:204:
cat > test.conf <<EOT

rush 2.0
rule
  match -g file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:204"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -g file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:204"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:205: touch file"
at_fn_check_prepare_trace "fstest.at:205"
( $at_check_trace; touch file
) >>"$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/fstest.at:205"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:205:
cat > test.conf <<EOT

rush 2.0
rule
  match -g file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:205"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -g file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
rush: Error: no matching rule for \"cmd\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:205"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/fstest.at:206: chmod g+s file || exit 77"
at_fn_check_prepare_trace "fstest.at:206"
( $at_check_trace; chmod g+s file || 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/fstest.at:206"
$at_failed && at_fn_log_failure
$at_traceon; }


myvars
{ set +x
printf "%s\n" "$at_srcdir/fstest.at:206:
cat > test.conf <<EOT

rush 2.0
rule
  match -g file
  set SUCCESS = true

EOT
echo \"; cmd\"
echo \"; cmd\" >&2
rush -C none -Dvars -c \"cmd\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fstest.at:206"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match -g file
  set SUCCESS = true

EOT
echo "; cmd"
echo "; cmd" >&2
rush -C none -Dvars -c "cmd" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cmd
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cmd
{
    \"vars\":{
        \"SUCCESS\":\"true\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fstest.at:206"
$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 'and.at:17' \
  "and" "                                            " 4
at_xfail=no
(
  printf "%s\n" "37. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/and.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$0 == \"/bin/ls\" && \\\$1 ~ \"^/usr\"

EOT
echo \"; /bin/ls /usr/lib\"
echo \"; /bin/ls /usr/lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib\" test.conf
echo \"; \$?\"
echo \"; /bin/ls /lib\"
echo \"; /bin/ls /lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/ls /lib\" test.conf
echo \"; \$?\"
echo \"; /bin/stat /usr/lib\"
echo \"; /bin/stat /usr/lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/stat /usr/lib\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "and.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$0 == "/bin/ls" && \$1 ~ "^/usr"

EOT
echo "; /bin/ls /usr/lib"
echo "; /bin/ls /usr/lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib" test.conf
echo "; $?"
echo "; /bin/ls /lib"
echo "; /bin/ls /lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/ls /lib" test.conf
echo "; $?"
echo "; /bin/stat /usr/lib"
echo "; /bin/stat /usr/lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/stat /usr/lib" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /bin/ls /usr/lib
; /bin/ls /lib
rush: Error: no matching rule for \"/bin/ls /lib\", user $MY_USER
; /bin/stat /usr/lib
rush: Error: no matching rule for \"/bin/stat /usr/lib\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /bin/ls /usr/lib
{
    \"cmdline\":\"/bin/ls /usr/lib\",
    \"argv\":[
        \"/bin/ls\",
        \"/usr/lib\"
    ],
    \"prog\":null
}
; 0
; /bin/ls /lib
; 1
; /bin/stat /usr/lib
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/and.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 'or.at:17' \
  "or" "                                             " 4
at_xfail=no
(
  printf "%s\n" "38. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/or.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$0 == \"/bin/ls\" || \\\$0 == \"/bin/stat\"

EOT
echo \"; /bin/ls /usr/lib\"
echo \"; /bin/ls /usr/lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib\" test.conf
echo \"; \$?\"
echo \"; /bin/stat /usr/lib\"
echo \"; /bin/stat /usr/lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/stat /usr/lib\" test.conf
echo \"; \$?\"
echo \"; /bin/find /usr/lib\"
echo \"; /bin/find /usr/lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/find /usr/lib\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "or.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$0 == "/bin/ls" || \$0 == "/bin/stat"

EOT
echo "; /bin/ls /usr/lib"
echo "; /bin/ls /usr/lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib" test.conf
echo "; $?"
echo "; /bin/stat /usr/lib"
echo "; /bin/stat /usr/lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/stat /usr/lib" test.conf
echo "; $?"
echo "; /bin/find /usr/lib"
echo "; /bin/find /usr/lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/find /usr/lib" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /bin/ls /usr/lib
; /bin/stat /usr/lib
; /bin/find /usr/lib
rush: Error: no matching rule for \"/bin/find /usr/lib\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /bin/ls /usr/lib
{
    \"cmdline\":\"/bin/ls /usr/lib\",
    \"argv\":[
        \"/bin/ls\",
        \"/usr/lib\"
    ],
    \"prog\":null
}
; 0
; /bin/stat /usr/lib
{
    \"cmdline\":\"/bin/stat /usr/lib\",
    \"argv\":[
        \"/bin/stat\",
        \"/usr/lib\"
    ],
    \"prog\":null
}
; 0
; /bin/find /usr/lib
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/or.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 'compound.at:17' \
  "compound" "                                       " 4
at_xfail=no
(
  printf "%s\n" "39. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/compound.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$0 == \"/bin/ls\" && \\\$# == 2 && (\\\$1 ~ \"^/usr\" || \\\$1 == \"/\")

EOT
echo \"; /bin/ls /usr/lib\"
echo \"; /bin/ls /usr/lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib\" test.conf
echo \"; \$?\"
echo \"; /bin/ls /\"
echo \"; /bin/ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/ls /\" test.conf
echo \"; \$?\"
echo \"; /bin/ls /usr/lib /\"
echo \"; /bin/ls /usr/lib /\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/ls /usr/lib /\" test.conf
echo \"; \$?\"
echo \"; /bin/ls /lib\"
echo \"; /bin/ls /lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/ls /lib\" test.conf
echo \"; \$?\"
echo \"; /bin/stat /usr/lib\"
echo \"; /bin/stat /usr/lib\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/stat /usr/lib\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "compound.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$0 == "/bin/ls" && \$# == 2 && (\$1 ~ "^/usr" || \$1 == "/")

EOT
echo "; /bin/ls /usr/lib"
echo "; /bin/ls /usr/lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib" test.conf
echo "; $?"
echo "; /bin/ls /"
echo "; /bin/ls /" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/ls /" test.conf
echo "; $?"
echo "; /bin/ls /usr/lib /"
echo "; /bin/ls /usr/lib /" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/ls /usr/lib /" test.conf
echo "; $?"
echo "; /bin/ls /lib"
echo "; /bin/ls /lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/ls /lib" test.conf
echo "; $?"
echo "; /bin/stat /usr/lib"
echo "; /bin/stat /usr/lib" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/stat /usr/lib" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /bin/ls /usr/lib
; /bin/ls /
; /bin/ls /usr/lib /
rush: Error: no matching rule for \"/bin/ls /usr/lib /\", user $MY_USER
; /bin/ls /lib
rush: Error: no matching rule for \"/bin/ls /lib\", user $MY_USER
; /bin/stat /usr/lib
rush: Error: no matching rule for \"/bin/stat /usr/lib\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /bin/ls /usr/lib
{
    \"cmdline\":\"/bin/ls /usr/lib\",
    \"argv\":[
        \"/bin/ls\",
        \"/usr/lib\"
    ],
    \"prog\":null
}
; 0
; /bin/ls /
{
    \"cmdline\":\"/bin/ls /\",
    \"argv\":[
        \"/bin/ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
; /bin/ls /usr/lib /
; 1
; /bin/ls /lib
; 1
; /bin/stat /usr/lib
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/compound.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_39
#AT_START_40
at_fn_group_banner 40 'set.at:17' \
  "set" "                                            " 5
at_xfail=no
(
  printf "%s\n" "40. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  set command = \"ls /\"

EOT
echo \"; echo\"
echo \"; echo\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  set command = "ls /"

EOT
echo "; echo"
echo "; echo" >&2
rush -C none -Dcmdline,argv,prog -c "echo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:39:
cat > test.conf <<EOT

rush 2.0
rule
  set [0] = \"/usr/bin/\\\$0\"

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  set [0] = "/usr/bin/\$0"

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"/usr/bin/ls /\",
    \"argv\":[
        \"/usr/bin/ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:58:
cat > test.conf <<EOT

rush 2.0
rule
  set [1] = \"/chroot\\\${1}\"

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "set.at:58"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  set [1] = "/chroot\${1}"

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /chroot/\",
    \"argv\":[
        \"ls\",
        \"/chroot/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:77:
cat > test.conf <<EOT

rush 2.0
rule
  set program = \"/usr/bin/ls\"

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:77"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  set program = "/usr/bin/ls"

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":\"/usr/bin/ls\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:77"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:96:
cat > test.conf <<EOT

rush 2.0
rule
  set [-1] = \"/tmp\"

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:96"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  set [-1] = "/tmp"

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /tmp\",
    \"argv\":[
        \"ls\",
        \"/tmp\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:96"
$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 'delete.at:17' \
  "delete" "                                         " 5
at_xfail=no
(
  printf "%s\n" "41. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  delete 1

EOT
echo \"; echo foo bar\"
echo \"; echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  delete 1

EOT
echo "; echo foo bar"
echo "; echo foo bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar
{
    \"cmdline\":\"echo bar\",
    \"argv\":[
        \"echo\",
        \"bar\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:39:
cat > test.conf <<EOT

rush 2.0
rule
  delete -1

EOT
echo \"; echo foo bar\"
echo \"; echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  delete -1

EOT
echo "; echo foo bar"
echo "; echo foo bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar
{
    \"cmdline\":\"echo foo\",
    \"argv\":[
        \"echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:58:
cat > test.conf <<EOT

rush 2.0
rule
  delete 2 4

EOT
echo \"; echo foo bar baz quux wum\"
echo \"; echo foo bar baz quux wum\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar baz quux wum\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:58"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  delete 2 4

EOT
echo "; echo foo bar baz quux wum"
echo "; echo foo bar baz quux wum" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar baz quux wum" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar baz quux wum
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar baz quux wum
{
    \"cmdline\":\"echo foo wum\",
    \"argv\":[
        \"echo\",
        \"foo\",
        \"wum\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:78:
cat > test.conf <<EOT

rush 2.0
rule
  delete 0

EOT
echo \"; echo foo bar\"
echo \"; echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:78"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  delete 0

EOT
echo "; echo foo bar"
echo "; echo foo bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar
rush: Error: test.conf:4.10: \$0 cannot be deleted
rush: Error: errors in configuration file
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:78"
$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 'transform.at:17' \
  "transform" "                                      " 5
at_xfail=no
(
  printf "%s\n" "42. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:20:
cat > test.conf <<EOT

rush 2.0
rule
    set command =~ \"s/^[^[:space:]]+/& -t/\"

EOT
echo \"; svnserve\"
echo \"; svnserve\" >&2
rush -C none -Dcmdline,argv,prog -c \"svnserve\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    set command =~ "s/^[^[:space:]]+/& -t/"

EOT
echo "; svnserve"
echo "; svnserve" >&2
rush -C none -Dcmdline,argv,prog -c "svnserve" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; svnserve
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; svnserve
{
    \"cmdline\":\"svnserve -t\",
    \"argv\":[
        \"svnserve\",
        \"-t\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:39:
cat > test.conf <<EOT

rush 2.0
rule
    set command = \"\\\${command} end\" ~ \"s/[[:space:]]+-[^[:space:]]+//g\"

EOT
echo \"; echo -c -t foo -n bar\"
echo \"; echo -c -t foo -n bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo -c -t foo -n bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "transform.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    set command = "\${command} end" ~ "s/[[:space:]]+-[^[:space:]]+//g"

EOT
echo "; echo -c -t foo -n bar"
echo "; echo -c -t foo -n bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo -c -t foo -n bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo -c -t foo -n bar
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo -c -t foo -n bar
{
    \"cmdline\":\"echo foo bar end\",
    \"argv\":[
        \"echo\",
        \"foo\",
        \"bar\",
        \"end\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:60:
cat > test.conf <<EOT

rush 2.0
rule
    set [0] =~ \"s|^[^/]|/usr/bin/&|\"

EOT
echo \"; echo foo\"
echo \"; echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf
echo \"; \$?\"
echo \"; /bin/echo foo\"
echo \"; /bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/echo foo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:60"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    set [0] =~ "s|^[^/]|/usr/bin/&|"

EOT
echo "; echo foo"
echo "; echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf
echo "; $?"
echo "; /bin/echo foo"
echo "; /bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/echo foo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo
; /bin/echo foo
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
; /bin/echo foo
{
    \"cmdline\":\"/bin/echo foo\",
    \"argv\":[
        \"/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:60"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:92:
cat > test.conf <<EOT

rush 2.0
rule
    set [0] = \\\$program ~ \"s,.*/,-,\"

EOT
echo \"; /bin/sh\"
echo \"; /bin/sh\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/sh\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:92"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    set [0] = \$program ~ "s,.*/,-,"

EOT
echo "; /bin/sh"
echo "; /bin/sh" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/sh" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /bin/sh
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /bin/sh
{
    \"cmdline\":\"-sh\",
    \"argv\":[
        \"-sh\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:92"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:110:
cat > test.conf <<EOT

rush 2.0
rule
    set command =~ \"s/s/@/2\"

EOT
echo \"; password\"
echo \"; password\" >&2
rush -C none -Dcmdline -c \"password\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:110"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    set command =~ "s/s/@/2"

EOT
echo "; password"
echo "; password" >&2
rush -C none -Dcmdline -c "password" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; password
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; password
{
    \"cmdline\":\"pas@word\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:110"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:124:
cat > test.conf <<EOT

rush 2.0
rule
    set command =~ \"s/s/@/2g\"

EOT
echo \"; passwords\"
echo \"; passwords\" >&2
rush -C none -Dcmdline -c \"passwords\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:124"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    set command =~ "s/s/@/2g"

EOT
echo "; passwords"
echo "; passwords" >&2
rush -C none -Dcmdline -c "passwords" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; passwords
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; passwords
{
    \"cmdline\":\"pas@word@\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:124"
$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 'map.at:17' \
  "map" "                                            " 5
at_xfail=no
(
  printf "%s\n" "43. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/map.at:20:
myvars

cat > passwd.rush <<EOT
x\$MY_USER:x:\$((\$MY_UID + 1)):\$((\$MY_GID + 1))::/root:/bin/bash
\$MY_USER:x:\$MY_UID:\$MY_GID:Me:/:/rush_special_shell
EOT

WD=\`pwd\`
cat > test.conf <<EOT
rush 2.0
rule
    map [0] \"\$WD/passwd.rush\" \":\" \"\\\${user}\" 1 7 \"/nologin\"
EOT

set -e
echo Matching map
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, return default
> passwd.rush
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, no default
cat > test.conf <<EOT
rush 2.0
rule
    map [0] \"\$WD/passwd.rush\" \":\" \"\\\${user}\" 1 7
EOT
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf
"
at_fn_check_prepare_notrace 'a `...` command substitution' "map.at:20"
( $at_check_trace;
myvars

cat > passwd.rush <<EOT
x$MY_USER:x:$(($MY_UID + 1)):$(($MY_GID + 1))::/root:/bin/bash
$MY_USER:x:$MY_UID:$MY_GID:Me:/:/rush_special_shell
EOT

WD=`pwd`
cat > test.conf <<EOT
rush 2.0
rule
    map [0] "$WD/passwd.rush" ":" "\${user}" 1 7 "/nologin"
EOT

set -e
echo Matching map
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, return default
> passwd.rush
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, no default
cat > test.conf <<EOT
rush 2.0
rule
    map [0] "$WD/passwd.rush" ":" "\${user}" 1 7
EOT
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

) >>"$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" "Matching map
{
    \"cmdline\":\"/rush_special_shell arg\",
    \"argv\":[
        \"/rush_special_shell\",
        \"arg\"
    ],
    \"prog\":null
}
No match, return default
{
    \"cmdline\":\"/nologin arg\",
    \"argv\":[
        \"/nologin\",
        \"arg\"
    ],
    \"prog\":null
}
No match, no default
{
    \"cmdline\":\"command arg\",
    \"argv\":[
        \"command\",
        \"arg\"
    ],
    \"prog\":null
}
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/map.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 'insert.at:17' \
  "insert" "                                         " 5
at_xfail=no
(
  printf "%s\n" "44. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/insert.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command ~ \"^svnserve -t\"
  insert [1] = \"-r\"
  insert [2] = \"/svnroot\"

EOT
echo \"; svnserve -t -v\"
echo \"; svnserve -t -v\" >&2
rush -C none -Dcmdline,argv -c \"svnserve -t -v\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "insert.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command ~ "^svnserve -t"
  insert [1] = "-r"
  insert [2] = "/svnroot"

EOT
echo "; svnserve -t -v"
echo "; svnserve -t -v" >&2
rush -C none -Dcmdline,argv -c "svnserve -t -v" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; svnserve -t -v
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; svnserve -t -v
{
    \"cmdline\":\"svnserve -r /svnroot -t -v\",
    \"argv\":[
        \"svnserve\",
        \"-r\",
        \"/svnroot\",
        \"-t\",
        \"-v\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/insert.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/insert.at:43:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command ~ \"^svnserve -t\"
  insert [1] = \"/svnroot\"
  insert [1] = \"-r\"

EOT
echo \"; svnserve -t -v\"
echo \"; svnserve -t -v\" >&2
rush -C none -Dcmdline,argv -c \"svnserve -t -v\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "insert.at:43"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command ~ "^svnserve -t"
  insert [1] = "/svnroot"
  insert [1] = "-r"

EOT
echo "; svnserve -t -v"
echo "; svnserve -t -v" >&2
rush -C none -Dcmdline,argv -c "svnserve -t -v" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; svnserve -t -v
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; svnserve -t -v
{
    \"cmdline\":\"svnserve -r /svnroot -t -v\",
    \"argv\":[
        \"svnserve\",
        \"-r\",
        \"/svnroot\",
        \"-t\",
        \"-v\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/insert.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_44
#AT_START_45
at_fn_group_banner 45 'remopt.at:17' \
  "remopt" "                                         " 5
at_xfail=no
(
  printf "%s\n" "45. $at_setup_line: testing $at_desc ..."
  $at_traceon



# Option without argument

myvars
{ set +x
printf "%s\n" "$at_srcdir/remopt.at:21:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command ~ \"^server\"
  remopt r root

EOT
echo \"; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting\"
echo \"; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting\" >&2
rush -C none -Dcmdline,argv -c \"server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "remopt.at:21"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command ~ "^server"
  remopt r root

EOT
echo "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting"
echo "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting" >&2
rush -C none -Dcmdline,argv -c "server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; server -A -r -B -ref -C -erf -D -efr -C --root -D --roo -E --ro -F --r -G --rooting
{
    \"cmdline\":\"server -A -B -ef -C -ef -D -ef -C -D -E -F -G --rooting\",
    \"argv\":[
        \"server\",
        \"-A\",
        \"-B\",
        \"-ef\",
        \"-C\",
        \"-ef\",
        \"-D\",
        \"-ef\",
        \"-C\",
        \"-D\",
        \"-E\",
        \"-F\",
        \"-G\",
        \"--rooting\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/remopt.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }


# Option with mandatory argument

myvars
{ set +x
printf "%s\n" "$at_srcdir/remopt.at:53:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command ~ \"^server\"
  remopt r: root

EOT
echo \"; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root\"
echo \"; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root\" >&2
rush -C none -Dcmdline,argv -c \"server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "remopt.at:53"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command ~ "^server"
  remopt r: root

EOT
echo "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root"
echo "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root" >&2
rush -C none -Dcmdline,argv -c "server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; server -t -r ARG -A -rARG -B -C -aeFrARG -D --root=ARG -E --root ARG -F --ro=ARG -G --ro ARG -H --root
{
    \"cmdline\":\"server -t -A -B -C -aeF -D -E -F -G -H --root\",
    \"argv\":[
        \"server\",
        \"-t\",
        \"-A\",
        \"-B\",
        \"-C\",
        \"-aeF\",
        \"-D\",
        \"-E\",
        \"-F\",
        \"-G\",
        \"-H\",
        \"--root\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/remopt.at:53"
$at_failed && at_fn_log_failure
$at_traceon; }


# Option with optional argument

myvars
{ set +x
printf "%s\n" "$at_srcdir/remopt.at:83:
cat > test.conf <<EOT

rush 2.0
rule
  match \\\$command ~ \"^server\"
  remopt r:: root

EOT
echo \"; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root\"
echo \"; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root\" >&2
rush -C none -Dcmdline,argv -c \"server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "remopt.at:83"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  match \$command ~ "^server"
  remopt r:: root

EOT
echo "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root"
echo "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root" >&2
rush -C none -Dcmdline,argv -c "server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; server -t -rARG -A -r ARG -B -aeFrARG -D -beFr -E --root=ARG -F --roo=ARG -G --root ARG -H --root
{
    \"cmdline\":\"server -t -A ARG -B -aeF -D -beF -E -F -G ARG -H --root\",
    \"argv\":[
        \"server\",
        \"-t\",
        \"-A\",
        \"ARG\",
        \"-B\",
        \"-aeF\",
        \"-D\",
        \"-beF\",
        \"-E\",
        \"-F\",
        \"-G\",
        \"ARG\",
        \"-H\",
        \"--root\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/remopt.at:83"
$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 'umask.at:17' \
  "umask" "                                          " 6
at_xfail=no
(
  printf "%s\n" "46. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/umask.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  umask 017

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dumask -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "umask.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  umask 017

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dumask -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"umask\":017
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/umask.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_46
#AT_START_47
at_fn_group_banner 47 'newgrp.at:17' \
  "newgrp" "                                         " 6
at_xfail=no
(
  printf "%s\n" "47. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/newgrp.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  newgrp 0

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dgid -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "newgrp.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  newgrp 0

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dgid -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"gid\":0
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/newgrp.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 'chdir.at:17' \
  "chdir" "                                          " 6
at_xfail=no
(
  printf "%s\n" "48. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/chdir.at:20:
cat > test.conf <<EOT

rush 2.0
rule
  chdir \"\$PWD\"

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dhome_dir -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "chdir.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
  chdir "$PWD"

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dhome_dir -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"home_dir\":\"$TESTDIR\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/chdir.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_48
#AT_START_49
at_fn_group_banner 49 'interactive.at:17' \
  "interactive" "                                    " 6
at_xfail=no
(
  printf "%s\n" "49. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/interactive.at:20:
cat > test.conf <<EOT

rush 2.0
rule
    interactive true

EOT
echo \"; interactive\"
echo \"; interactive\" >&2
rush -C none -Dcmdline,argv,prog,interactive -i test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "interactive.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    interactive true

EOT
echo "; interactive"
echo "; interactive" >&2
rush -C none -Dcmdline,argv,prog,interactive -i test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; interactive
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; interactive
{
    \"cmdline\":\"/bin/sh\",
    \"argv\":[
        \"/bin/sh\"
    ],
    \"prog\":null,
    \"interactive\":1
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/interactive.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_49
#AT_START_50
at_fn_group_banner 50 'clrenv.at:17' \
  "clrenv" "                                         " 7
at_xfail=no
(
  printf "%s\n" "50. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/clrenv.at:20:
cat > test.conf <<EOT

rush 2.0
rule
    clrenv

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "clrenv.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    clrenv

EOT
echo "; command"
echo "; command" >&2
rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/clrenv.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_50
#AT_START_51
at_fn_group_banner 51 'unsetenv.at:17' \
  "unsetenv" "                                       " 7
at_xfail=no
(
  printf "%s\n" "51. $at_setup_line: testing $at_desc ..."
  $at_traceon





myvars
{ set +x
printf "%s\n" "$at_srcdir/unsetenv.at:21:
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv LOGIN

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:21"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv LOGIN

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/unsetenv.at:38:
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv LOGIN=\$MY_USER

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:38"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv LOGIN=$MY_USER

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:38"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/unsetenv.at:57:
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv LOGIN=\$MY_USER

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:57"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv LOGIN=$MY_USER

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"LOGIN=NO_$MY_USER\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:57"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/unsetenv.at:77:
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv \"TEST_*\"

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER TEST_FOO=foo TEST_BAR=bar \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "unsetenv.at:77"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    unsetenv "TEST_*"

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER TEST_FOO=foo TEST_BAR=bar $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/unsetenv.at:77"
$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 'keepenv.at:17' \
  "keepenv" "                                        " 7
at_xfail=no
(
  printf "%s\n" "52. $at_setup_line: testing $at_desc ..."
  $at_traceon





myvars
{ set +x
printf "%s\n" "$at_srcdir/keepenv.at:21:
cat > test.conf <<EOT

rush 2.0
rule
    clrenv
    keepenv HOME USER \"TEST_*\"

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER PATH=\$PATH TEST_FOO=foo TEST_BAR=bar \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "keepenv.at:21"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    clrenv
    keepenv HOME USER "TEST_*"

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER PATH=$PATH TEST_FOO=foo TEST_BAR=bar $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"TEST_BAR=bar\",
        \"TEST_FOO=foo\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/keepenv.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_52
#AT_START_53
at_fn_group_banner 53 'setenv.at:17' \
  "setenv" "                                         " 7
at_xfail=no
(
  printf "%s\n" "53. $at_setup_line: testing $at_desc ..."
  $at_traceon





myvars
{ set +x
printf "%s\n" "$at_srcdir/setenv.at:21:
cat > test.conf <<EOT

rush 2.0
rule
    setenv NEWVAR=foo

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "setenv.at:21"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    setenv NEWVAR=foo

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"NEWVAR=foo\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:21"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/setenv.at:41:
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH=\"\\\${MYPATH:-}\\\${MYPATH+:}/usr/local/bin\"

EOT
echo \"; command\"
echo \"; command\" >&2
env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:41"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH="\${MYPATH:-}\${MYPATH+:}/usr/local/bin"

EOT
echo "; command"
echo "; command" >&2
env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:41"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/setenv.at:59:
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH=\"\\\${MYPATH:-}\\\${MYPATH+:}/usr/local/bin\"

EOT
echo \"; command\"
echo \"; command\" >&2
env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:59"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH="\${MYPATH:-}\${MYPATH+:}/usr/local/bin"

EOT
echo "; command"
echo "; command" >&2
env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/bin:/usr/bin:/usr/local/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:59"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/setenv.at:77:
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH=\"/usr/local/bin\\\${MYPATH+:}\\\${MYPATH:-}\"

EOT
echo \"; command\"
echo \"; command\" >&2
env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:77"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH="/usr/local/bin\${MYPATH+:}\${MYPATH:-}"

EOT
echo "; command"
echo "; command" >&2
env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:77"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/setenv.at:95:
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH=\"/usr/local/bin\\\${MYPATH+:}\\\$MYPATH\"

EOT
echo \"; command\"
echo \"; command\" >&2
env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "setenv.at:95"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH="/usr/local/bin\${MYPATH+:}\$MYPATH"

EOT
echo "; command"
echo "; command" >&2
env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin:/bin:/usr/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:95"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/setenv.at:113:
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH=\"/usr/local/bin:\\\$MYPATH\"

EOT
echo \"; command\"
echo \"; command\" >&2
env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "setenv.at:113"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    setenv MYPATH="/usr/local/bin:\$MYPATH"

EOT
echo "; command"
echo "; command" >&2
env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin:/bin:/usr/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setenv.at:113"
$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 'evalenv.at:17' \
  "evalenv" "                                        " 7
at_xfail=no
(
  printf "%s\n" "54. $at_setup_line: testing $at_desc ..."
  $at_traceon





myvars
{ set +x
printf "%s\n" "$at_srcdir/evalenv.at:21:
cat > test.conf <<EOT

rush 2.0
rule
    evalenv \\\${FOO:=test}
    evalenv \\\${BAR:=bar}
    evalenv \\\$HOME

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER FOO=foo \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "evalenv.at:21"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    evalenv \${FOO:=test}
    evalenv \${BAR:=bar}
    evalenv \$HOME

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER FOO=foo $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"BAR=bar\",
        \"FOO=foo\",
        \"HOME=$TESTDIR\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/evalenv.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_54
#AT_START_55
at_fn_group_banner 55 'backref.at:17' \
  "Back-reference expansion" "                       " 8
at_xfail=no
(
  printf "%s\n" "55. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/backref.at:20:
cat > test.conf <<EOT

rush 2.0
rule chdir
  match \\\$command ~ \"^cd \\\"(.+)\\\" && (runcom .*)\$\"
  chdir %1
  set command = \"%{2}\"
  fall-through

rule runcom
  match \\\$0 == runcom
  set [0] = \"./bin/runcom\"

EOT
echo \"; cd \\\"\$PWD\\\" && runcom test\"
echo \"; cd \\\"\$PWD\\\" && runcom test\" >&2
rush -C none -Dcmdline,home_dir -c \"cd \\\"\$PWD\\\" && runcom test\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "backref.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule chdir
  match \$command ~ "^cd \"(.+)\" && (runcom .*)$"
  chdir %1
  set command = "%{2}"
  fall-through

rule runcom
  match \$0 == runcom
  set [0] = "./bin/runcom"

EOT
echo "; cd \"$PWD\" && runcom test"
echo "; cd \"$PWD\" && runcom test" >&2
rush -C none -Dcmdline,home_dir -c "cd \"$PWD\" && runcom test" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cd \"$PWD\" && runcom test
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cd \"$PWD\" && runcom test
{
    \"cmdline\":\"./bin/runcom test\",
    \"home_dir\":\"$TESTDIR\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/backref.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_55
#AT_START_56
at_fn_group_banner 56 'fallthrough.at:17' \
  "fall-through" "                                   " 9
at_xfail=no
(
  printf "%s\n" "56. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/fallthrough.at:20:
cat > test.conf <<EOT

rush 2.0
rule
    set [0] = newcommand
    fall-through

rule
    set [1] = list

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline,argv -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    set [0] = newcommand
    fall-through

rule
    set [1] = list

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline,argv -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"cmdline\":\"newcommand list\",
    \"argv\":[
        \"newcommand\",
        \"list\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/fallthrough.at:42:
cat > test.conf <<EOT

rush 2.0
rule
    chdir \"/tmp\"
    fall-through

rule
    set [0] = newcommand
    interactive true

EOT
echo \"; interactive\"
echo \"; interactive\" >&2
rush -C none -Dcmdline,interactive,home_dir -i test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:42"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    chdir "/tmp"
    fall-through

rule
    set [0] = newcommand
    interactive true

EOT
echo "; interactive"
echo "; interactive" >&2
rush -C none -Dcmdline,interactive,home_dir -i test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; interactive
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; interactive
{
    \"cmdline\":\"newcommand\",
    \"interactive\":1,
    \"home_dir\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.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_56
#AT_START_57
at_fn_group_banner 57 'error.at:17' \
  "error" "                                          " 9
at_xfail=no
(
  printf "%s\n" "57. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/error.at:20:
cat > test.conf <<EOT

rush 2.0
rule
    exit \"Forced error\"

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "error.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    exit "Forced error"

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
Forced error
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/error.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/error.at:32:
cat > test.conf <<EOT

rush 2.0
rule
    exit 1 \"Forced error\"

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "error.at:32"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    exit 1 "Forced error"

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
Forced error
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/error.at:32"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/error.at:44:
cat > test.conf <<EOT

rush 2.0
rule
    exit 1 nologin-error

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "error.at:44"
( $at_check_trace;
cat > test.conf <<EOT

rush 2.0
rule
    exit 1 nologin-error

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
You do not have interactive login access to this machine.
Contact the systems administrator for further assistance.
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/error.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_57
#AT_START_58
at_fn_group_banner 58 'inc00.at:17' \
  "basic include functionality" "                    " 10
at_xfail=no
(
  printf "%s\n" "58. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/inc00.at:20:
cat >test.cf <<'_ATEOF'
rush 2.0
rule
  match \$0 == \"ls\"
  include \"i1.cf\"

rule
  match \$0 == \"dir\"
  include \"i2.cf\"
_ATEOF

cat >i1.cf <<'_ATEOF'
set [0] = \"/bin/ls\"
_ATEOF

cat >i2.cf <<'_ATEOF'
set [0] = \"/bin/dir\"
_ATEOF

rush -C none -D cmdline -t -c \"ls\" test.cf
rush -C none -D cmdline -t -c \"dir\" test.cf
"
at_fn_check_prepare_notrace 'an embedded newline' "inc00.at:20"
( $at_check_trace;
cat >test.cf <<'_ATEOF'
rush 2.0
rule
  match $0 == "ls"
  include "i1.cf"

rule
  match $0 == "dir"
  include "i2.cf"
_ATEOF

cat >i1.cf <<'_ATEOF'
set [0] = "/bin/ls"
_ATEOF

cat >i2.cf <<'_ATEOF'
set [0] = "/bin/dir"
_ATEOF

rush -C none -D cmdline -t -c "ls" test.cf
rush -C none -D cmdline -t -c "dir" test.cf

) >>"$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" "{
    \"cmdline\":\"/bin/ls\"
}
{
    \"cmdline\":\"/bin/dir\"
}
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/inc00.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_58
#AT_START_59
at_fn_group_banner 59 'inc01.at:17' \
  "rule and global statements" "                     " 10
at_xfail=no
(
  printf "%s\n" "59. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/inc01.at:20:
cat >test.cf <<'_ATEOF'
rush 2.0
rule
  match \$0 == \"ls\"
  include \"i1.cf\"
_ATEOF

cat >i1.cf <<'_ATEOF'
setenv INC=\"i1\"

rule new
  set command = \"dir\"
_ATEOF

rush -C none -D cmdline -t -c \"ls\" test.cf
"
at_fn_check_prepare_notrace 'an embedded newline' "inc01.at:20"
( $at_check_trace;
cat >test.cf <<'_ATEOF'
rush 2.0
rule
  match $0 == "ls"
  include "i1.cf"
_ATEOF

cat >i1.cf <<'_ATEOF'
setenv INC="i1"

rule new
  set command = "dir"
_ATEOF

rush -C none -D cmdline -t -c "ls" test.cf

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "rush: Error: i1.cf:3.1-5: the rule statement is not allowed in included file
rush: Error: i1.cf:3.1-5: skipping to the end of file
rush: Error: errors in configuration file
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/inc01.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/inc01.at:42:
cat >test.cf <<'_ATEOF'
rush 2.0
rule
  match \$0 == \"ls\"
  include \"i1.cf\"
_ATEOF

cat >i1.cf <<'_ATEOF'
setenv INC=\"i1\"

global
  debug 2
_ATEOF

rush -C none -D cmdline -t -c \"ls\" test.cf
"
at_fn_check_prepare_notrace 'an embedded newline' "inc01.at:42"
( $at_check_trace;
cat >test.cf <<'_ATEOF'
rush 2.0
rule
  match $0 == "ls"
  include "i1.cf"
_ATEOF

cat >i1.cf <<'_ATEOF'
setenv INC="i1"

global
  debug 2
_ATEOF

rush -C none -D cmdline -t -c "ls" test.cf

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "rush: Error: i1.cf:3.1-7: the global statement is not allowed in included file
rush: Error: i1.cf:3.1-7: skipping to the end of file
rush: Error: errors in configuration file
" | \
  $at_diff - "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/inc01.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_59
#AT_START_60
at_fn_group_banner 60 'argc.at:17' \
  "argc" "                                           " 11
at_xfail=no
(
  printf "%s\n" "60. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/argc.at:20:
cat > test.conf <<EOT

rule
  argc 2

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo foo bar\"
echo \"; /usr/bin/echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "argc.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  argc 2

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; /usr/bin/echo foo bar"
echo "; /usr/bin/echo foo bar" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
rush: Notice: parsing legacy configuration file test.conf
; /usr/bin/echo foo bar
rush: Notice: parsing legacy configuration file test.conf
rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null,
    \"interactive\":0,
    \"fork\":-1,
    \"acct\":-1
}
; 0
; /usr/bin/echo foo bar
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/argc.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_60
#AT_START_61
at_fn_group_banner 61 'command.at:17' \
  "command" "                                        " 11
at_xfail=no
(
  printf "%s\n" "61. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/command.at:20:
cat > test.conf <<EOT

rule
  command echo[[:space:]]+foo\$

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo foo bar\"
echo \"; /usr/bin/echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c \"/usr/bin/echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "command.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  command echo[[:space:]]+foo$

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; /usr/bin/echo foo bar"
echo "; /usr/bin/echo foo bar" >&2
rush -C none -Dcmdline,argv,prog,interactive,fork,acct -c "/usr/bin/echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
rush: Notice: parsing legacy configuration file test.conf
; /usr/bin/echo foo bar
rush: Notice: parsing legacy configuration file test.conf
rush: Error: no matching rule for \"/usr/bin/echo foo bar\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null,
    \"interactive\":0,
    \"fork\":-1,
    \"acct\":-1
}
; 0
; /usr/bin/echo foo bar
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/command.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_61
#AT_START_62
at_fn_group_banner 62 'match.at:17' \
  "match" "                                          " 11
at_xfail=no
(
  printf "%s\n" "62. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/match.at:20:
cat > test.conf <<EOT

rule
  match[1] fo+

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; /usr/bin/echo bar\"
echo \"; /usr/bin/echo bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "match.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  match[1] fo+

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; /usr/bin/echo bar"
echo "; /usr/bin/echo bar" >&2
rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
rush: Notice: parsing legacy configuration file test.conf
; /usr/bin/echo bar
rush: Notice: parsing legacy configuration file test.conf
rush: Error: no matching rule for \"/usr/bin/echo bar\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
; /usr/bin/echo bar
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/match.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_62
#AT_START_63
at_fn_group_banner 63 'matchprog.at:17' \
  "match program name" "                             " 11
at_xfail=no
(
  printf "%s\n" "63. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/matchprog.at:20:
cat > test.conf <<EOT

rule
  match[^] /usr/bin/.*

EOT
echo \"; /usr/bin/echo foo\"
echo \"; /usr/bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"/usr/bin/echo foo\" test.conf
echo \"; \$?\"
echo \"; echo foo\"
echo \"; echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "matchprog.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  match[^] /usr/bin/.*

EOT
echo "; /usr/bin/echo foo"
echo "; /usr/bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "/usr/bin/echo foo" test.conf
echo "; $?"
echo "; echo foo"
echo "; echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /usr/bin/echo foo
rush: Notice: parsing legacy configuration file test.conf
; echo foo
rush: Notice: parsing legacy configuration file test.conf
rush: Error: no matching rule for \"echo foo\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /usr/bin/echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
; echo foo
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/matchprog.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_63
#AT_START_64
at_fn_group_banner 64 'uid.at:17' \
  "uid" "                                            " 11
at_xfail=no
(
  printf "%s\n" "64. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/uid.at:20:
cat > test.conf <<EOT

rule
  uid \$MY_USER

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "uid.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  uid $MY_USER

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/uid.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/uid.at:39:
cat > test.conf <<EOT

rule
  uid != \$MY_USER

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "uid.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rule
  uid != $MY_USER

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
rush: Error: no matching rule for \"ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/uid.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_64
#AT_START_65
at_fn_group_banner 65 'gid.at:17' \
  "gid" "                                            " 11
at_xfail=no
(
  printf "%s\n" "65. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/gid.at:20:
cat > test.conf <<EOT

rule
  gid \$MY_GROUP

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "gid.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  gid $MY_GROUP

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/gid.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/gid.at:39:
cat > test.conf <<EOT

rule
  gid != \$MY_GROUP

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "gid.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rule
  gid != $MY_GROUP

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
rush: Error: no matching rule for \"ls /\", user $MY_USER
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/gid.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_65
#AT_START_66
at_fn_group_banner 66 'set.at:17' \
  "set" "                                            " 11
at_xfail=no
(
  printf "%s\n" "66. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:20:
cat > test.conf <<EOT

rule
  set ls /

EOT
echo \"; echo\"
echo \"; echo\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  set ls /

EOT
echo "; echo"
echo "; echo" >&2
rush -C none -Dcmdline,argv,prog -c "echo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:39:
cat > test.conf <<EOT

rule
  set[0] /usr/bin/\\\$0

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rule
  set[0] /usr/bin/\$0

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"/usr/bin/ls /\",
    \"argv\":[
        \"/usr/bin/ls\",
        \"/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:58:
cat > test.conf <<EOT

rule
  set[1] /chroot\\\${1}

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "set.at:58"
( $at_check_trace;
cat > test.conf <<EOT

rule
  set[1] /chroot\${1}

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /chroot/\",
    \"argv\":[
        \"ls\",
        \"/chroot/\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:77:
cat > test.conf <<EOT

rule
  set[^] /usr/bin/ls

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:77"
( $at_check_trace;
cat > test.conf <<EOT

rule
  set[^] /usr/bin/ls

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /\",
    \"argv\":[
        \"ls\",
        \"/\"
    ],
    \"prog\":\"/usr/bin/ls\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:77"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/set.at:96:
cat > test.conf <<EOT

rule
  set[\$] /tmp

EOT
echo \"; ls /\"
echo \"; ls /\" >&2
rush -C none -Dcmdline,argv,prog -c \"ls /\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "set.at:96"
( $at_check_trace;
cat > test.conf <<EOT

rule
  set[$] /tmp

EOT
echo "; ls /"
echo "; ls /" >&2
rush -C none -Dcmdline,argv,prog -c "ls /" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls /
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls /
{
    \"cmdline\":\"ls /tmp\",
    \"argv\":[
        \"ls\",
        \"/tmp\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/set.at:96"
$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 'delete.at:17' \
  "delete" "                                         " 11
at_xfail=no
(
  printf "%s\n" "67. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:20:
cat > test.conf <<EOT

rule
  delete[1]

EOT
echo \"; echo foo bar\"
echo \"; echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  delete[1]

EOT
echo "; echo foo bar"
echo "; echo foo bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar
{
    \"cmdline\":\"echo bar\",
    \"argv\":[
        \"echo\",
        \"bar\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:39:
cat > test.conf <<EOT

rule
  delete[\$]

EOT
echo \"; echo foo bar\"
echo \"; echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rule
  delete[$]

EOT
echo "; echo foo bar"
echo "; echo foo bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar
{
    \"cmdline\":\"echo foo\",
    \"argv\":[
        \"echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:58:
cat > test.conf <<EOT

rule
  delete 2 4

EOT
echo \"; echo foo bar baz quux wum\"
echo \"; echo foo bar baz quux wum\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar baz quux wum\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:58"
( $at_check_trace;
cat > test.conf <<EOT

rule
  delete 2 4

EOT
echo "; echo foo bar baz quux wum"
echo "; echo foo bar baz quux wum" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar baz quux wum" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar baz quux wum
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar baz quux wum
{
    \"cmdline\":\"echo foo wum\",
    \"argv\":[
        \"echo\",
        \"foo\",
        \"wum\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:58"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/delete.at:78:
cat > test.conf <<EOT

rule
  delete[0]

EOT
echo \"; echo foo bar\"
echo \"; echo foo bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "delete.at:78"
( $at_check_trace;
cat > test.conf <<EOT

rule
  delete[0]

EOT
echo "; echo foo bar"
echo "; echo foo bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo bar
rush: Notice: parsing legacy configuration file test.conf
rush: Error: Deleting argv[0] is prohibited
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo bar
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/delete.at:78"
$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 'transform.at:17' \
  "transform" "                                      " 11
at_xfail=no
(
  printf "%s\n" "68. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:20:
cat > test.conf <<EOT

rule
    transform s/^[^[:space:]]+/& -t/

EOT
echo \"; svnserve\"
echo \"; svnserve\" >&2
rush -C none -Dcmdline,argv,prog -c \"svnserve\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
    transform s/^[^[:space:]]+/& -t/

EOT
echo "; svnserve"
echo "; svnserve" >&2
rush -C none -Dcmdline,argv,prog -c "svnserve" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; svnserve
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; svnserve
{
    \"cmdline\":\"svnserve -t\",
    \"argv\":[
        \"svnserve\",
        \"-t\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:39:
cat > test.conf <<EOT

rule
    transform \"\\\${command} end\"  s/[[:space:]]+-[^[:space:]]+//g

EOT
echo \"; echo -c -t foo -n bar\"
echo \"; echo -c -t foo -n bar\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo -c -t foo -n bar\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "transform.at:39"
( $at_check_trace;
cat > test.conf <<EOT

rule
    transform "\${command} end"  s/[[:space:]]+-[^[:space:]]+//g

EOT
echo "; echo -c -t foo -n bar"
echo "; echo -c -t foo -n bar" >&2
rush -C none -Dcmdline,argv,prog -c "echo -c -t foo -n bar" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo -c -t foo -n bar
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo -c -t foo -n bar
{
    \"cmdline\":\"echo foo bar end\",
    \"argv\":[
        \"echo\",
        \"foo\",
        \"bar\",
        \"end\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:39"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:60:
cat > test.conf <<EOT

rule
    transform[0] s|^[^/]|/usr/bin/&|

EOT
echo \"; echo foo\"
echo \"; echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"echo foo\" test.conf
echo \"; \$?\"
echo \"; /bin/echo foo\"
echo \"; /bin/echo foo\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/echo foo\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:60"
( $at_check_trace;
cat > test.conf <<EOT

rule
    transform[0] s|^[^/]|/usr/bin/&|

EOT
echo "; echo foo"
echo "; echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "echo foo" test.conf
echo "; $?"
echo "; /bin/echo foo"
echo "; /bin/echo foo" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/echo foo" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; echo foo
rush: Notice: parsing legacy configuration file test.conf
; /bin/echo foo
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; echo foo
{
    \"cmdline\":\"/usr/bin/echo foo\",
    \"argv\":[
        \"/usr/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
; /bin/echo foo
{
    \"cmdline\":\"/bin/echo foo\",
    \"argv\":[
        \"/bin/echo\",
        \"foo\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.at:60"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/transform.at:93:
cat > test.conf <<EOT

rule
    transform[0] \\\$program s,.*/,-,

EOT
echo \"; /bin/sh\"
echo \"; /bin/sh\" >&2
rush -C none -Dcmdline,argv,prog -c \"/bin/sh\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "transform.at:93"
( $at_check_trace;
cat > test.conf <<EOT

rule
    transform[0] \$program s,.*/,-,

EOT
echo "; /bin/sh"
echo "; /bin/sh" >&2
rush -C none -Dcmdline,argv,prog -c "/bin/sh" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; /bin/sh
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; /bin/sh
{
    \"cmdline\":\"-sh\",
    \"argv\":[
        \"-sh\"
    ],
    \"prog\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/transform.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_68
#AT_START_69
at_fn_group_banner 69 'map.at:17' \
  "map" "                                            " 11
at_xfail=no
(
  printf "%s\n" "69. $at_setup_line: testing $at_desc ..."
  $at_traceon



{ set +x
printf "%s\n" "$at_srcdir/map.at:20:
myvars

cat > passwd.rush <<EOT
x\$MY_USER:x:\$((\$MY_UID + 1)):\$((\$MY_GID + 1))::/root:/bin/bash
\$MY_USER:x:\$MY_UID:\$MY_GID:Me:/:/rush_special_shell
EOT

WD=\`pwd\`
cat > test.conf <<EOT
rule
    map[0] \$WD/passwd.rush : \\\${user} 1 7 /nologin
EOT

set -e
echo Matching map
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, return default
> passwd.rush
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, no default
cat > test.conf <<EOT
rule
    map[0] \$WD/passwd.rush : \\\${user} 1 7
EOT
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf
"
at_fn_check_prepare_notrace 'a `...` command substitution' "map.at:20"
( $at_check_trace;
myvars

cat > passwd.rush <<EOT
x$MY_USER:x:$(($MY_UID + 1)):$(($MY_GID + 1))::/root:/bin/bash
$MY_USER:x:$MY_UID:$MY_GID:Me:/:/rush_special_shell
EOT

WD=`pwd`
cat > test.conf <<EOT
rule
    map[0] $WD/passwd.rush : \${user} 1 7 /nologin
EOT

set -e
echo Matching map
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, return default
> passwd.rush
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

echo No match, no default
cat > test.conf <<EOT
rule
    map[0] $WD/passwd.rush : \${user} 1 7
EOT
rush -C none -Dcmdline,argv,prog -c 'command arg' test.conf

) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "rush: Notice: parsing legacy configuration file test.conf
rush: Notice: parsing legacy configuration file test.conf
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "Matching map
{
    \"cmdline\":\"/rush_special_shell arg\",
    \"argv\":[
        \"/rush_special_shell\",
        \"arg\"
    ],
    \"prog\":null
}
No match, return default
{
    \"cmdline\":\"/nologin arg\",
    \"argv\":[
        \"/nologin\",
        \"arg\"
    ],
    \"prog\":null
}
No match, no default
{
    \"cmdline\":\"command arg\",
    \"argv\":[
        \"command\",
        \"arg\"
    ],
    \"prog\":null
}
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/map.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 'umask.at:17' \
  "umask" "                                          " 11
at_xfail=no
(
  printf "%s\n" "70. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/umask.at:20:
cat > test.conf <<EOT

rule
  umask 017

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dumask -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "umask.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  umask 017

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dumask -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"umask\":017
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/umask.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_70
#AT_START_71
at_fn_group_banner 71 'newgrp.at:17' \
  "newgrp" "                                         " 11
at_xfail=no
(
  printf "%s\n" "71. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/newgrp.at:20:
cat > test.conf <<EOT

rule
  newgrp 0

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dgid -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "newgrp.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  newgrp 0

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dgid -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"gid\":0
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/newgrp.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_71
#AT_START_72
at_fn_group_banner 72 'chdir.at:17' \
  "chdir" "                                          " 11
at_xfail=no
(
  printf "%s\n" "72. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/chdir.at:20:
cat > test.conf <<EOT

rule
  chdir \$PWD

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dhome_dir -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "chdir.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
  chdir $PWD

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dhome_dir -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"home_dir\":\"$TESTDIR\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/chdir.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_72
#AT_START_73
at_fn_group_banner 73 'env.at:17' \
  "env" "                                            " 11
at_xfail=no
(
  printf "%s\n" "73. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:20:
cat > test.conf <<EOT

rule
    env -

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env -

EOT
echo "; command"
echo "; command" >&2
rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }




myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:35:
cat > test.conf <<EOT

rule
    env -LOGIN

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:35"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env -LOGIN

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:35"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:52:
cat > test.conf <<EOT

rule
    env -LOGIN=\$MY_USER

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:52"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env -LOGIN=$MY_USER

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:52"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:71:
cat > test.conf <<EOT

rule
    env -LOGIN=\$MY_USER

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:71"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env -LOGIN=$MY_USER

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"LOGIN=NO_$MY_USER\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:71"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:91:
cat > test.conf <<EOT

rule
    env - HOME USER

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER LOGIN=NO_\$MY_USER PATH=\$PATH \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:91"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env - HOME USER

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER LOGIN=NO_$MY_USER PATH=$PATH $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:91"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:110:
cat > test.conf <<EOT

rule
    env NEWVAR=foo

EOT
echo \"; command\"
echo \"; command\" >&2
env -i HOME=\$PWD USER=\$MY_USER \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:110"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env NEWVAR=foo

EOT
echo "; command"
echo "; command" >&2
env -i HOME=$PWD USER=$MY_USER $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"HOME=$TESTDIR\",
        \"NEWVAR=foo\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:110"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:130:
cat > test.conf <<EOT

rule
    env MYPATH+=:/usr/local/bin

EOT
echo \"; command\"
echo \"; command\" >&2
env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:130"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env MYPATH+=:/usr/local/bin

EOT
echo "; command"
echo "; command" >&2
env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:130"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:148:
cat > test.conf <<EOT

rule
    env MYPATH+=:/usr/local/bin

EOT
echo \"; command\"
echo \"; command\" >&2
env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:148"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env MYPATH+=:/usr/local/bin

EOT
echo "; command"
echo "; command" >&2
env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/bin:/usr/bin:/usr/local/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:148"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:166:
cat > test.conf <<EOT

rule
    env MYPATH=+/usr/local/bin:

EOT
echo \"; command\"
echo \"; command\" >&2
env -i \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:166"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env MYPATH=+/usr/local/bin:

EOT
echo "; command"
echo "; command" >&2
env -i $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:166"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:184:
cat > test.conf <<EOT

rule
    env MYPATH=+/usr/local/bin:

EOT
echo \"; command\"
echo \"; command\" >&2
env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:184"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env MYPATH=+/usr/local/bin:

EOT
echo "; command"
echo "; command" >&2
env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin:/bin:/usr/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:184"
$at_failed && at_fn_log_failure
$at_traceon; }





myvars
{ set +x
printf "%s\n" "$at_srcdir/env.at:202:
cat > test.conf <<EOT

rule
    env MYPATH=/usr/local/bin:\\\$MYPATH

EOT
echo \"; command\"
echo \"; command\" >&2
env -i MYPATH=/bin:/usr/bin \$RUSHDIR/rush -C none -Denviron -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "env.at:202"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env MYPATH=/usr/local/bin:\$MYPATH

EOT
echo "; command"
echo "; command" >&2
env -i MYPATH=/bin:/usr/bin $RUSHDIR/rush -C none -Denviron -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"environ\":[
        \"MYPATH=/usr/local/bin:/bin:/usr/bin\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/env.at:202"
$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 'interactive.at:17' \
  "interactive" "                                    " 11
at_xfail=no
(
  printf "%s\n" "74. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/interactive.at:20:
cat > test.conf <<EOT

rule
    interactive

EOT
echo \"; interactive\"
echo \"; interactive\" >&2
rush -C none -Dcmdline,argv,prog,interactive -i test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "interactive.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
    interactive

EOT
echo "; interactive"
echo "; interactive" >&2
rush -C none -Dcmdline,argv,prog,interactive -i test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; interactive
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; interactive
{
    \"cmdline\":\"/bin/sh\",
    \"argv\":[
        \"/bin/sh\"
    ],
    \"prog\":null,
    \"interactive\":1
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/interactive.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_74
#AT_START_75
at_fn_group_banner 75 'fallthrough.at:17' \
  "fall-through" "                                   " 11
at_xfail=no
(
  printf "%s\n" "75. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/fallthrough.at:20:
cat > test.conf <<EOT

rule
    env - USER=\$MY_USER STATUS='Fall-through working'
    fall-through

rule
    set[0] newcommand

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline,environ -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
    env - USER=$MY_USER STATUS='Fall-through working'
    fall-through

rule
    set[0] newcommand

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline,environ -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
{
    \"cmdline\":\"newcommand\",
    \"environ\":[
        \"STATUS=Fall-through working\",
        \"USER=$MY_USER\"
    ]
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/fallthrough.at:42:
cat > test.conf <<EOT

rule
    chdir /tmp
    fall-through

rule
    set[0] newcommand
    interactive

EOT
echo \"; interactive\"
echo \"; interactive\" >&2
rush -C none -Dcmdline,interactive,home_dir -i test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "fallthrough.at:42"
( $at_check_trace;
cat > test.conf <<EOT

rule
    chdir /tmp
    fall-through

rule
    set[0] newcommand
    interactive

EOT
echo "; interactive"
echo "; interactive" >&2
rush -C none -Dcmdline,interactive,home_dir -i test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; interactive
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; interactive
{
    \"cmdline\":\"newcommand\",
    \"interactive\":1,
    \"home_dir\":null
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/fallthrough.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_75
#AT_START_76
at_fn_group_banner 76 'error.at:17' \
  "error" "                                          " 11
at_xfail=no
(
  printf "%s\n" "76. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/error.at:20:
cat > test.conf <<EOT

rule
    exit \"Forced error\"

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "error.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule
    exit "Forced error"

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
\"Forced error\"
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/error.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/error.at:32:
cat > test.conf <<EOT

rule
    exit 1 \"Forced error\"

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "error.at:32"
( $at_check_trace;
cat > test.conf <<EOT

rule
    exit 1 "Forced error"

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
\"Forced error\"
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/error.at:32"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/error.at:44:
cat > test.conf <<EOT

rule
    exit 1 @nologin-error

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "error.at:44"
( $at_check_trace;
cat > test.conf <<EOT

rule
    exit 1 @nologin-error

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
You do not have interactive login access to this machine.
Contact the systems administrator for further assistance.
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/error.at:44"
$at_failed && at_fn_log_failure
$at_traceon; }



myvars
{ set +x
printf "%s\n" "$at_srcdir/error.at:57:
cat > test.conf <<EOT

rule
    exit 1 @@nologin-error

EOT
echo \"; command\"
echo \"; command\" >&2
rush -C none -Dcmdline -c \"command\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "error.at:57"
( $at_check_trace;
cat > test.conf <<EOT

rule
    exit 1 @@nologin-error

EOT
echo "; command"
echo "; command" >&2
rush -C none -Dcmdline -c "command" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; command
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; command
@nologin-error
; 1
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/error.at:57"
$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 'backref.at:17' \
  "Back-reference expansion" "                       " 11
at_xfail=no
(
  printf "%s\n" "77. $at_setup_line: testing $at_desc ..."
  $at_traceon




myvars
{ set +x
printf "%s\n" "$at_srcdir/backref.at:20:
cat > test.conf <<EOT

rule chdir
  command ^cd \"(.+)\" && (runcom .*)\$
  chdir %1
  set %2
  fall-through

rule runcom
  command ^runcom
  set[0] ./bin/runcom

EOT
echo \"; cd \\\"\$PWD\\\" && runcom test\"
echo \"; cd \\\"\$PWD\\\" && runcom test\" >&2
rush -C none -Dcmdline,home_dir -c \"cd \\\"\$PWD\\\" && runcom test\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "backref.at:20"
( $at_check_trace;
cat > test.conf <<EOT

rule chdir
  command ^cd "(.+)" && (runcom .*)$
  chdir %1
  set %2
  fall-through

rule runcom
  command ^runcom
  set[0] ./bin/runcom

EOT
echo "; cd \"$PWD\" && runcom test"
echo "; cd \"$PWD\" && runcom test" >&2
rush -C none -Dcmdline,home_dir -c "cd \"$PWD\" && runcom test" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; cd \"$PWD\" && runcom test
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; cd \"$PWD\" && runcom test
{
    \"cmdline\":\"./bin/runcom test\",
    \"home_dir\":\"$TESTDIR\"
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/backref.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_77
#AT_START_78
at_fn_group_banner 78 'setvar.at:17' \
  "setvar" "                                         " 11
at_xfail=no
(
  printf "%s\n" "78. $at_setup_line: testing $at_desc ..."
  $at_traceon



myvars
{ set +x
printf "%s\n" "$at_srcdir/setvar.at:19:
cat > test.conf <<EOT

rule first
  setvar[home] \$PWD
  setvar[count] 1
  setvar[FOO] bar
  fall-through

rule last
  command .*
  set %0 \\\$FOO \\\$count

EOT
echo \"; ls\"
echo \"; ls\" >&2
rush -C none -Dcmdline,vars -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'an embedded newline' "setvar.at:19"
( $at_check_trace;
cat > test.conf <<EOT

rule first
  setvar[home] $PWD
  setvar[count] 1
  setvar[FOO] bar
  fall-through

rule last
  command .*
  set %0 \$FOO \$count

EOT
echo "; ls"
echo "; ls" >&2
rush -C none -Dcmdline,vars -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
{
    \"cmdline\":\"ls bar 1\",
    \"vars\":{
        \"FOO\":\"bar\",
        \"count\":\"1\",
        \"home\":\"$TESTDIR\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/setvar.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_78
#AT_START_79
at_fn_group_banner 79 'unsetvar.at:17' \
  "unsetvar" "                                       " 11
at_xfail=no
(
  printf "%s\n" "79. $at_setup_line: testing $at_desc ..."
  $at_traceon



myvars
{ set +x
printf "%s\n" "$at_srcdir/unsetvar.at:19:
cat > test.conf <<EOT

rule first
  setvar[home] \$PWD
  setvar[count] 1
  setvar[FOO] bar
  fall-through

rule intermediate
  unsetvar[count]
  fall-through

rule last
  command .*
  set %0 \\\$FOO \\\${count:-0}

EOT
echo \"; ls\"
echo \"; ls\" >&2
rush -C none -Dcmdline,vars -c \"ls\" test.conf
echo \"; \$?\"

"
at_fn_check_prepare_notrace 'a ${...} parameter expansion' "unsetvar.at:19"
( $at_check_trace;
cat > test.conf <<EOT

rule first
  setvar[home] $PWD
  setvar[count] 1
  setvar[FOO] bar
  fall-through

rule intermediate
  unsetvar[count]
  fall-through

rule last
  command .*
  set %0 \$FOO \${count:-0}

EOT
echo "; ls"
echo "; ls" >&2
rush -C none -Dcmdline,vars -c "ls" test.conf
echo "; $?"


) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo >>"$at_stderr"; printf "%s\n" "; ls
rush: Notice: parsing legacy configuration file test.conf
" | \
  $at_diff - "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "; ls
{
    \"cmdline\":\"ls bar 0\",
    \"vars\":{
        \"FOO\":\"bar\",
        \"home\":\"$TESTDIR\"
    }
}
; 0
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/unsetvar.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_79
