serval-dna/testdefs_java.sh
Andrew Bettison 16d4a6d18e Fix the $JAVAC conditional in tests/all
Add a test script for all Java tests, called "alljava".

Include testconfig.sh in testdefs.sh, not testdefs_java.sh, so that the
tests/all script can successfully test the $JAVAC variable.
2018-03-06 15:16:56 +10:30

129 lines
3.7 KiB
Bash

# Definitions for test suites using Java.
# Copyright 2014-2015 Serval Project Inc.
# Copyright 2016 Flinders University
#
# 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
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
java_build_root="${servald_build_root?}/java-api"
java_classdir="$java_build_root/classes"
java_testclassdir="$java_build_root/testclasses"
# Utility function for setting up servald JNI fixtures:
# - check that libservaldaemon.so is present
# - set LD_LIBRARY_PATH so that libservaldaemon.so can be found
setup_servald_so() {
assert [ -r "$servald_build_root/libservaldaemon.so" ]
export LD_LIBRARY_PATH="$servald_build_root"
}
assert_java_classes_exist() {
assert [ -r "$java_classdir/org/servalproject/servaldna/ServalDCommand.class" ]
assert [ -r "$java_classdir/org/servalproject/servaldna/IJniResults.class" ]
assert [ -r "$java_testclassdir/org/servalproject/test/ServalDTests.class" ]
}
_executeJava() {
local func="${1?}"
shift
local opts=()
while [ $# -ne 0 ]; do
case "$1" in
--) shift; break;;
--*) opts+=("$1"); shift;;
*) break;;
esac
done
"$func" "${opts[@]}" java "-Djava.library.path=$LD_LIBRARY_PATH" -classpath "$java_classdir:$java_testclassdir" "$@"
}
_run() {
tfw_log "$@"
"$@"
}
runJava() {
_executeJava _run "$@"
}
executeJava() {
_executeJava execute --core-backtrace "$@"
}
executeJavaOk() {
_executeJava executeOk --core-backtrace "$@"
}
# Utility function:
#
# unset_vars_with_prefix PREFIX
#
# Unsets all shell variables whose names starting with the given PREFIX
unset_vars_with_prefix() {
local __prefix="${1?}"
local __varname
for __varname in $(declare -p | sed -n -e "s/^declare -[^ ]* \($__prefix[A-Za-z0-9_]\+\)=.*/\1/p"); do
unset $__varname
done
}
# Utility function:
#
# unpack_vars PREFIX TEXT
#
# parses the given TEXT which must have the form:
#
# ident1=..., ident2=...., ... identN=...
#
# into shell variables:
#
# PREFIXident1=...
# PREFIXident2=...
# ...
# PREFIXidentN=...
#
# Sets the UNPACKED_VAR_NAMES[] array variable to a list of the names of the
# variables that were set (names include the PREFIX).
#
# Warning: overwrites existing shell variables. Names of overwritten shell
# variables are derived directly from the output of the command, so cannot be
# controlled. PREFIX should be used to ensure that special variables cannot
# be clobbered by accident.
unpack_vars() {
local __prefix="${1?}"
local __text="${2?}"
local __oo
tfw_shopt __oo -s extglob
UNPACKED_VAR_NAMES=()
while [ -n "$__text" ]; do
case "$__text" in
[A-Za-z_.]+([A-Za-z_.0-9])=*)
local __ident="${__text%%=*}"
__ident="${__ident//./__}"
__text="${__text#*=}"
local __value="${__text%%, [A-Za-z_.]+([A-Za-z_.0-9])=*}"
__text="${__text:${#__value}}"
__text="${__text#, }"
UNPACKED_VAR_NAMES+=("$__ident")
eval ${__prefix}${__ident}=\"\$__value\"
;;
*)
fail "cannot unpack variable from '$__text'"
;;
esac
done
tfw_shopt_restore __oo
}