summaryrefslogtreecommitdiff
path: root/lib/autotest/specific.m4
diff options
context:
space:
mode:
Diffstat (limited to 'lib/autotest/specific.m4')
-rw-r--r--lib/autotest/specific.m474
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/autotest/specific.m4 b/lib/autotest/specific.m4
new file mode 100644
index 0000000..155a5da
--- /dev/null
+++ b/lib/autotest/specific.m4
@@ -0,0 +1,74 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# M4 macros used in running tests using third-party testing tools.
+m4_define([_AT_COPYRIGHT_YEARS],
+[Copyright (C) 2009-2012 Free Software Foundation, Inc.])
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+
+## ------------------------ ##
+## Erlang EUnit unit tests. ##
+## ------------------------ ##
+
+# AT_CHECK_EUNIT(MODULE, SPEC, [ERLFLAGS], [RUN-IF-FAIL], [RUN-IF-PASS])
+# ----------------------------------------------------------------------
+# Check that the EUnit test specification SPEC passes. The ERLFLAGS
+# optional flags are passed to the Erlang interpreter command line to
+# execute the test. The test is executed from an automatically
+# generated Erlang module named MODULE. Each call to this macro should
+# have a distinct MODULE name within each test group, to ease
+# debugging.
+# An Erlang/OTP version which contains the eunit library must be
+# installed, in order to execute this macro in a test suite. The ERL,
+# ERLC, and ERLCFLAGS variables must be defined in atconfig,
+# typically by using the AC_ERLANG_PATH_ERL and AC_ERLANG_PATH_ERLC
+# Autoconf macros.
+_AT_DEFINE_SETUP([AT_CHECK_EUNIT],
+[AT_SKIP_IF([test ! -f "$ERL" || test ! -f "$ERLC"])
+## A wrapper to EUnit, to exit the Erlang VM with the right exit code:
+AT_DATA([$1.erl],
+[[-module($1).
+-export([test/0, test/1]).
+test() -> test([]).
+test(Options) ->
+ TestSpec = $2,
+ ReturnValue = case code:load_file(eunit) of
+ {module, _} -> case eunit:test(TestSpec, Options) of
+ ok -> "0\n"; %% test passes
+ _ -> "1\n" %% test fails
+ end;
+ _ -> "77\n" %% EUnit not found, test skipped
+ end,
+ file:write_file("$1.result", ReturnValue),
+ init:stop().
+]])
+AT_CHECK(["$ERLC" $ERLCFLAGS -b beam $1.erl])
+## Make EUnit verbose when testsuite is verbose:
+if test -z "$at_verbose"; then
+ at_eunit_options="verbose"
+else
+ at_eunit_options=""
+fi
+AT_CHECK(["$ERL" $3 -s $1 test $at_eunit_options -noshell], [0], [ignore], [],
+ [$4], [$5])
+AT_CAPTURE_FILE([$1.result])
+AT_CHECK([test -f "$1.result" && (exit `cat "$1.result"`)])
+])