]> git.draconx.ca Git - liblbx.git/blobdiff - tests/util/test-init.sh
tests: First stab at a proper test suite.
[liblbx.git] / tests / util / test-init.sh
diff --git a/tests/util/test-init.sh b/tests/util/test-init.sh
new file mode 100644 (file)
index 0000000..e8a53da
--- /dev/null
@@ -0,0 +1,118 @@
+# 2ooM: The Master of Orion II Reverse Engineering Project
+# Common test suite initialization functions.
+# Copyright © 2013 Nick Bowler
+#
+# 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 file incorporates work covered by the following copyright and
+# permission notice:
+#
+#   Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+#   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 2, or (at your option)
+#   any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+test ${test_lib_sourced-no} = yes && return 0
+test_lib_sourced=yes
+
+# CDPATH is evil if used in non-interactive scripts (and even more
+# evil if exported in the environment).
+CDPATH=; unset CDPATH
+
+# Be more Bourne compatible.
+# (Snippet inspired to configure's initialization in Autoconf 2.64)
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+       emulate sh
+       NULLCMD=:
+       setopt NO_GLOB_SUBST
+       # If Zsh is not started directly in POSIX-compatibility mode, it has
+       # some incompatibilities in the handling of $0 that conflict with our
+       # usage; i.e., $0 inside a file sourced with the '.' builtin is
+       # temporarily set to the name of the sourced file.  Work around that.
+       # Note that a bug in some versions of Zsh prevents us from resetting $0
+       # in a sourced script, so the use of $argv0.  For more info see:
+       #   <http://www.zsh.org/mla/workers/2009/msg01140.html>
+       # The apparently useless 'eval' here is needed by at least dash 0.5.2,
+       # to prevent it from bailing out with an error like:
+       #   "Syntax error: Bad substitution".
+       eval 'argv0=${functrace[-1]%:*}' && test -f "$argv0" || {
+               echo "Cannot determine the path of running test script." >&2
+               echo "Your Zsh (version $ZSH_VERSION) is probably too old." >&2
+               exit 99
+       }
+else
+       argv0=$0
+       # Ignore command substitution failure, for it might cause problems
+       # with "set -e" on some shells.
+       am_shell_opts=$(set -o) || :
+       case $am_shell_opts in *posix*) set -o posix;; esac
+       unset am_shell_opts
+fi
+
+# A single whitespace character.
+sp=' '
+# A tabulation character.
+tab='  '
+# A newline character.
+nl='
+'
+
+# As autoconf-generated configure scripts do, ensure that IFS
+# is defined initially, so that saving and restoring $IFS works.
+IFS=$sp$tab$nl
+
+. "$srcdir/tests/util/tap-functions.sh"
+. "$srcdir/tests/util/test-defs.sh"
+
+testdata=$srcdir/tests/testdata
+
+# We need a scratch directory for most tests, so set that up now.
+dx_testname=`expr x"$argv0" : x'.*/\(.*\)\.'`
+dx_testdir=tests/$dx_testname.dir
+
+dx_cleanup_testdir()
+{
+       exitstatus=$1
+
+       cd "$builddir"
+       if test "$exitstatus" -eq 0 &&
+          test $tap_pass_count_ -eq $tap_count_
+       then
+               rm -rf "$dx_testdir"
+       fi
+}
+
+dx_create_testdir()
+{
+       $MKDIR_P "$dx_testdir"
+       trap 'dx_cleanup_testdir $?' 0
+       cd "$dx_testdir"
+}
+
+# Variables to run the LBX tools.  Default to the build tree, but can also be
+# set explicitly to test installed tools.
+: "${LBXTOOL=$builddir/lbxtool$EXEEXT}"
+: "${LBXIMG=$builddir/lbximg$EXEEXT}"
+
+# Set MALLOC_CHECK_ in the environment of the test programs which will enable
+# malloc instrumentation on glibc-based systems to hopefully catch some forms
+# of memory corruption.
+dx_test_wrapper="$builddir/libtool --mode=execute env MALLOC_CHECK_=3"
+LBXTOOL="$dx_test_wrapper $LBXTOOL"
+LBXIMG="$dx_test_wrapper $LBXIMG"