mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-17 00:03:03 +00:00
Automate regression testing of the XML/XSLT implementation. Discussed
starting at <http://lists.gnu.org/archive/html/bison-patches/2007-11/msg00021.html>. * configure.ac (XSLTPROC): New substitution. * Makefile.am (maintainer-xml-check): New phony target invoking... * tests/Makefile.am (maintainer-xml-check): ... this new phony target invoking make maintainer-check with BISON_TEST_XML=1. * tests/atlocal.in (XSLTPROC): New. * tests/local.at (AT_BISON_CHECK): New macro to (1) instruct Valgrind not to report reachable memory when Bison is expected to have a non-zero exit status and (2) to compare XML/XSLT output with --graph and --report=all output for every working grammar when BISON_TEST_XML=1. (AT_BISON_CHECK_NO_XML): Likewise, but skip XML checks. (AT_BISON_CHECK_XML): New. (AT_QUELL_VALGRIND): New. * tests/testsuite.at (ORIGINAL_AT_CHECK): Remove this and... (AT_CHECK): ... don't redefine this since this was the old way to quell Valgrind. * tests/actions.at: Rewrite all AT_CHECK invocations for bison as AT_BISON_CHECK invocations. * tests/c++.at: Likewise. * tests/calc.at: Likewise. * tests/conflicts.at: Likewise. * tests/cxx-type.at: Likewise. * tests/existing.at: Likewise. * tests/glr-regression.at: Likewise. * tests/headers.at: Likewise. * tests/input.at: Likewise. * tests/java.at: Likewise. * tests/output.at: Likewise. * tests/push.at: Likewise. * tests/reduce.at: Likewise. * tests/regression.at: Likewise. * tests/sets.at: Likewise. * tests/skeletons.at: Likewise. * tests/synclines.at: Likewise. * tests/torture.at: Likewise. (Big triangle): Use AT_BISON_CHECK_NO_XML instead since this grammar tends to hang xsltproc. (Big horizontal): Likewise.
This commit is contained in:
@@ -169,6 +169,79 @@ m4_define([AT_DATA_GRAMMAR],
|
||||
$2])
|
||||
])
|
||||
|
||||
# AT_BISON_CHECK(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
|
||||
# -------------------------------------------------
|
||||
# Check Bison by invoking `bison BISON_ARGS'. OTHER_AT_CHECK_ARGS are the
|
||||
# usual remaining arguments to AT_CHECK: STATUS, STDOUT, etc.
|
||||
#
|
||||
# This macro or AT_BISON_CHECK_NO_XML should always be used whenever invoking
|
||||
# Bison in the test suite. For now it ensures that:
|
||||
#
|
||||
# 1. Valgrind doesn't report reachable memory when Bison is expected to have
|
||||
# a non-zero exit status since Bison doesn't always try to free all memory
|
||||
# in that case.
|
||||
#
|
||||
# 2. In the case of maintainer-xml-check, XML/XSLT output is compared with
|
||||
# --graph and --report=all output for every working grammar.
|
||||
m4_define([AT_BISON_CHECK],
|
||||
[m4_if(m4_quote($2), [0], [AT_BISON_CHECK_XML($@)],
|
||||
m4_quote($2), [], [AT_BISON_CHECK_XML($@)])
|
||||
AT_BISON_CHECK_NO_XML($@)])
|
||||
|
||||
# AT_BISON_CHECK_NO_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
|
||||
# --------------------------------------------------------
|
||||
# Same as AT_BISON_CHECK except don't perform XML/XSLT checks. This is useful
|
||||
# when a tortured grammar's XML is known to be too large for xsltproc to
|
||||
# handle.
|
||||
m4_define([AT_BISON_CHECK_NO_XML],
|
||||
[AT_CHECK(m4_if(m4_quote($2), [0], [], m4_quote($2), [], [],
|
||||
[AT_QUELL_VALGRIND ])[[bison ]]$@)])
|
||||
|
||||
# AT_BISON_CHECK_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
|
||||
# -----------------------------------------------------
|
||||
# Run AT_BISON_CHECK's XML/XSLT checks if $BISON_TEST_XML=1 and $XSLTPROC is
|
||||
# defined. It doesn't make sense to invoke this macro if Bison is expected to
|
||||
# have a non-zero exit status.
|
||||
m4_define([AT_BISON_CHECK_XML],
|
||||
[[if test x"$BISON_TEST_XML" = x1 && test x"$XSLTPROC" != x""; then]
|
||||
mkdir xml-tests
|
||||
m4_pushdef([AT_BISON_ARGS],
|
||||
[m4_bpatsubsts([[$1]],
|
||||
[--report(-file)?=[^][ ]*], [],
|
||||
[--graph=[^][ ]*], [],
|
||||
[--xml=[^][ ]*], [])])dnl
|
||||
# Don't combine these Bison invocations since we want to be sure that
|
||||
# --report=all isn't required to get the full XML file.
|
||||
AT_CHECK([[bison --report=all --report-file=xml-tests/test.output \
|
||||
--graph=xml-tests/test.dot ]]AT_BISON_ARGS,
|
||||
[[0]], [ignore], [ignore])
|
||||
AT_CHECK([[bison --xml=xml-tests/test.xml ]]AT_BISON_ARGS,
|
||||
[[0]], [ignore], [ignore])
|
||||
m4_popdef([AT_BISON_ARGS])dnl
|
||||
cp xml-tests/test.output expout
|
||||
AT_CHECK([[$XSLTPROC \
|
||||
`]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2text.xsl \
|
||||
xml-tests/test.xml]], [[0]], [expout])
|
||||
cp xml-tests/test.dot expout
|
||||
AT_CHECK([[$XSLTPROC \
|
||||
`]]AT_QUELL_VALGRIND[[ bison --print-datadir`/xslt/xml2dot.xsl \
|
||||
xml-tests/test.xml]], [[0]], [expout])
|
||||
rm -rf xml-tests expout
|
||||
[fi]])
|
||||
|
||||
# AT_QUELL_VALGRIND
|
||||
# -----------------
|
||||
# Put this before a Bison invocation to keep Valgrind from complaining about
|
||||
# reachable memory.
|
||||
#
|
||||
# Do not quote invocations of this macro within the first argument of AT_CHECK.
|
||||
# The triple quoting below will cause test cases to fail if you do. If you do
|
||||
# so anyway but also decrease the quoting below to avoid that problem, AT_CHECK
|
||||
# will then fail to shell-escape its contents when attempting to print them.
|
||||
# The testsuite verbose output, at least, will be incorrect, but nothing may
|
||||
# fail to make sure you notice.
|
||||
m4_define([AT_QUELL_VALGRIND],
|
||||
[[[VALGRIND_OPTS="$VALGRIND_OPTS --leak-check=summary --show-reachable=no"; export VALGRIND_OPTS;]]])
|
||||
|
||||
## ------------------------ ##
|
||||
## Compiling C, C++ Files. ##
|
||||
|
||||
Reference in New Issue
Block a user