# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# AT_CHECK_AT_PREP(NAME, SUITE-CODE, [STATUS = 0], [STDOUT], [STDERR],
+# [DIR = .])
+# --------------------------------------------------------------------
+# Create a new testsuite named NAME that runs a minimal Autotest test suite,
+# SUITE-CODE. Do not use `testsuite' for NAME, or the log file it generates
+# will overwrite the log that the Autoconf test produces when managing
+# this test case. STATUS, STDOUT, and STDERR pass directly to the AT_CHECK
+# that compiles the testsuite. DIR can specify a particular subdirectory
+# where the testsuite should live.
+m4_define([AT_CHECK_AT_PREP],
+[AT_KEYWORDS([autotest])dnl
+dnl overquote AT_dir, to make it easier to use
+m4_pushdef([AT_dir], m4_ifval([$6], [[[$6]]], [.]))dnl
+dnl
+AT_CAPTURE_FILE([$1.log])dnl
+dnl
+AT_DATA(AT_dir[/package.m4],
+[[m4_define([AT_PACKAGE_NAME], [GNU Nonsense])
+m4_define([AT_PACKAGE_TARNAME], [nonsense])
+m4_define([AT_PACKAGE_VERSION], [1.0])
+m4_define([AT_PACKAGE_STRING], [GNU Nonsense 1.0])
+m4_define([AT_PACKAGE_BUGREPORT], [bug-autoconf@gnu.org])
+]])
+dnl
+AT_DATA(AT_dir[/$1.at], [$2])
+m4_ifval([$6], [(cd AT_dir])
+AT_CHECK_AUTOM4TE([--language=autotest -o $1 $1.at], [$3], [$4], [$5])
+m4_ifval([$6], [)])
+m4_popdef([AT_dir])dnl
+]) # AT_CHECK_AT_PREP
+
# AT_CHECK_AT(TITLE, SUITE-CODE, [XFAIL-CONDITION], [STATUS = 0],
# [STDOUT := ignore], STDERR, [POST-TEST-CODE])
# ---------------------------------------------------------------
# used, but it is reserved for future use. Run POST-TEST-CODE
# at the top level after the micro-suite has been run.
m4_define([AT_CHECK_AT],
-[
-AT_SETUP([$1])
-AT_KEYWORDS([autotest])
-AT_CAPTURE_FILE([micro-suite.log])
+[AT_SETUP([$1])
AT_XFAIL_IF([$3])
+AT_CHECK_AT_PREP([micro-suite], [$2])
-AT_DATA([package.m4],[[
-m4_define([AT_PACKAGE_NAME], [GNU Nonsense])
-m4_define([AT_PACKAGE_TARNAME], [nonsense])
-m4_define([AT_PACKAGE_VERSION], [1.0])
-m4_define([AT_PACKAGE_STRING], [GNU Nonsense 1.0])
-m4_define([AT_PACKAGE_BUGREPORT], [bug-autoconf@gnu.org])
-]])
-
-AT_DATA([mysuite.at], [$2])
-
-# Do not use `testsuite' as the name of the small test suite, or the
-# log file it generates will overwrite the log that the Autoconf test
-# suite produces for this test case.
-AT_CHECK_AUTOM4TE([--language=autotest -o micro-suite mysuite.at])
-AT_CHECK([$CONFIG_SHELL ./micro-suite], m4_default([$4], 0), [ignore], [$6])
-AT_CHECK([$CONFIG_SHELL ./micro-suite -v -x], m4_default([$4], 0), [ignore], [$6])
+AT_CHECK([$CONFIG_SHELL ./micro-suite], m4_default([$4], 0),
+ [ignore], [$6])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -v -x], m4_default([$4], 0),
+ [ignore], [$6])
$7
AT_CLEANUP
])# AT_CHECK_AT
## Banners. ##
## -------- ##
AT_SETUP([Banners])
-AT_KEYWORDS([autotest])
-AT_DATA([b.at],
-[[m4_define([AT_PACKAGE_STRING],[b])
-m4_define([AT_PACKAGE_BUGREPORT],[devnull])
-AT_INIT
+AT_CHECK_AT_PREP([b],
+[[AT_INIT
AT_SETUP(zero)# 1
AT_CHECK(:)
AT_CLEANUP
AT_CHECK(:)
AT_CLEANUP
-
AT_BANNER()
AT_SETUP(two)# 4
AT_CHECK(:)
AT_CHECK(:)
AT_CLEANUP
]])
-AT_CHECK_AUTOM4TE([--language=autotest -o b b.at])
# AT_CHECK_BANNERS(TESTSUITE-OPTIONS, PATTERN1, COUNT1, PATTERN2, COUNT2)
m4_define([AT_CHECK_BANNERS],
## Keywords. ##
## --------- ##
AT_SETUP([Keywords and ranges])
-AT_KEYWORDS([autotest])
-AT_DATA([k.at],
-[[m4_define([AT_PACKAGE_STRING],[k])
-m4_define([AT_PACKAGE_BUGREPORT],[devnull])
-AT_INIT
+AT_CHECK_AT_PREP([k],
+[[AT_INIT
AT_SETUP(none)
AT_CHECK(:)
AT_CLEANUP
AT_CHECK(:)
AT_CLEANUP
]])
-AT_CHECK_AUTOM4TE([--language=autotest -o k k.at])
dnl check that AT_KEYWORDS does not duplicate words
AT_CHECK([grep 'key1.*key1' k], [1])
dnl check that -k requires an argument
## ------------------- ##
AT_SETUP([srcdir propagation])
-AT_KEYWORDS([autotest])
-AT_CAPTURE_FILE([suite.log])
mkdir pkg vpath-outside vpath-abs
mkdir pkg/t pkg/vpath-inside
AT_CHECK_AUTOCONF
cd ..
-AT_DATA([pkg/t/suite.at],
-[[m4_define([AT_PACKAGE_NAME], [GNU Nonsense])
-m4_define([AT_PACKAGE_TARNAME], [nonsense])
-m4_define([AT_PACKAGE_VERSION], [1.0])
-m4_define([AT_PACKAGE_STRING], [GNU Nonsense 1.0])
-m4_define([AT_PACKAGE_BUGREPORT], [bug-autoconf@gnu.org])
-AT_INIT([suite to check srcdir])
+AT_CHECK_AT_PREP([suite],
+[[AT_INIT([suite to check srcdir])
AT_SETUP([my only test])
AT_CHECK([test -f "$top_srcdir"/a && test -f "$srcdir"/b])
AT_CLEANUP
-]])
-cd pkg/t
-AT_CHECK_AUTOM4TE([--language=autotest -o suite suite.at])
-cd ../..
+]], [], [], [], [pkg/t])
# Build directory totally outside source directory.
cd vpath-outside
## ------------------------------ ##
AT_SETUP([whitespace in absolute testdir])
-AT_KEYWORDS([autotest])
dir='dir with whitespace'
mkdir "$dir"
wd=`pwd`
AT_DATA([a])
-AT_DATA([suite.at],
-[[m4_define([AT_PACKAGE_NAME], [GNU Nonsense])
-m4_define([AT_PACKAGE_TARNAME], [nonsense])
-m4_define([AT_PACKAGE_VERSION], [1.0])
-m4_define([AT_PACKAGE_STRING], [GNU Nonsense 1.0])
-m4_define([AT_PACKAGE_BUGREPORT], [bug-autoconf@gnu.org])
-AT_INIT([suite to check srcdir])
+AT_CHECK_AT_PREP([suite],
+[[AT_INIT([suite to check srcdir])
AT_SETUP([my only test])
AT_CHECK([test -f "$top_srcdir"/a])
AT_CLEANUP
]])
-AT_CHECK_AUTOM4TE([--language=autotest -o suite suite.at])
AT_CHECK([top_srcdir=$wd ./suite], [0], [ignore])
AT_CHECK([top_srcdir=$wd ./suite -d], [0], [ignore])
AT_CHECK([cd suite.dir/1 && ./run top_srcdir="$wd"], [0], [ignore], [ignore])
## ------------------ ##
AT_SETUP([unusual file names])
-AT_KEYWORDS([autotest])
AT_DATA_M4SUGAR([d@&t@nl.at],
[[AT_SETUP([test one])
AT_CLEANUP
]])
-AT_DATA([suite.at],
-[[m4_define([AT_PACKAGE_NAME], [GNU Nonsense])
-m4_define([AT_PACKAGE_TARNAME], [nonsense])
-m4_define([AT_PACKAGE_VERSION], [1.0])
-m4_define([AT_PACKAGE_STRING], [GNU Nonsense 1.0])
-m4_define([AT_PACKAGE_BUGREPORT], [bug-autoconf@gnu.org])
-AT_INIT([suite to check included file names])
+AT_CHECK_AT_PREP([suite],
+[[AT_INIT([suite to check included file names])
m4@&t@_include([d][nl.at])
m4@&t@_include([sub/two spaces.at])
]])
-AT_CHECK_AUTOM4TE([--language=autotest -o suite suite.at])
AT_CHECK([$CONFIG_SHELL ./suite], [0], [ignore])
AT_CLEANUP