mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
201 lines
5.7 KiB
Plaintext
201 lines
5.7 KiB
Plaintext
|
#!/bin/bash
|
||
|
# these vars are usable *only* for debugging purposes; they're not allowed as part of the spec, thus don't use them.
|
||
|
# set MENU_FAKE_PREFIX to a non empty val to force testing for if things would succeed if XDG_MENU_PREFIX were
|
||
|
# implemented
|
||
|
# set MENU_FAKE_APPLICATIONS to force a work around for applications-merged postfixing.
|
||
|
#
|
||
|
function installData()
|
||
|
{
|
||
|
local DIR="$1"
|
||
|
shift
|
||
|
mkdir -p "${DIR}"
|
||
|
for file in $*; do
|
||
|
cp "data/${file}" "${DIR}"
|
||
|
WIPE[$WIPE_IDX]="${DIR}/${file}"
|
||
|
WIPE_IDX=$(( $WIPE_IDX + 1 ))
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function installDataAs()
|
||
|
{
|
||
|
local DIR="$1"
|
||
|
mkdir -p "${DIR}"
|
||
|
cp "data/$2" "${DIR}/$3"
|
||
|
WIPE[${WIPE_IDX}]="${DIR}/${3}"
|
||
|
WIPE_IDX=$(( $WIPE_IDX + 1 ))
|
||
|
}
|
||
|
|
||
|
setup_local_xdg_vars() {
|
||
|
export XDG_CONFIG_HOME="${MENUTESTDIR}/xdg_config_home"
|
||
|
export XDG_DATA_HOME="${MENUTESTDIR}/xdg_data_home"
|
||
|
export XDG_CONFIG_DIR="${MENUTESTDIR}/xdg_config_dir"
|
||
|
export XDG_CONFIG_DIRS="$XDG_CONFIG_DIR:${XDG_CONFIG_DIRS}2"
|
||
|
export XDG_DATA_DIR="${MENUTESTDIR}/xdg_data_dir"
|
||
|
export XDG_DATA_DIRS="$XDG_DATA_DIR:${XDG_DATA_DIR}2"
|
||
|
export XDG_CACHE_HOME="${MENUTESTDIR}/xdg_cache_home"
|
||
|
}
|
||
|
|
||
|
setup_xdg_system_data_vars()
|
||
|
{
|
||
|
export XDG_CACHE_HOME="${XDG_DATA_HOME:-${HOME}/.cache}"
|
||
|
export XDG_DATA_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}"
|
||
|
export XDG_CONFIG_DIR="${XDG_CONFIG_DIR:-/etc/xdg}"
|
||
|
if [ -z "${XDG_DATA_DIRS}" ]; then
|
||
|
export XDG_DATA_DIRS="/usr/local/share:/usr/share"
|
||
|
fi
|
||
|
export XDG_DATA_DIRS="${XDG_DATA_DIRS}:${MENUTESTDIR}/xdg_cache_dir"
|
||
|
export XDG_DATA_DIR="${XDG_DATA_DIRS//*:}"
|
||
|
if [ -z "${XDG_CONFIG_DIRS}" ]; then
|
||
|
export XDG_CONFIG_DIRS="/etc/xdg"
|
||
|
fi
|
||
|
export XDG_CONFIG_DIR="${XDG_CONFIG_DIRS/:*}"
|
||
|
}
|
||
|
|
||
|
run_test() {
|
||
|
if [ -z "$1" ]; then
|
||
|
echo "requires name of test directory to run"
|
||
|
exit 1
|
||
|
fi
|
||
|
local TEST="$1"
|
||
|
rm -rf "${MENUTESTDIR}" 2> /dev/null
|
||
|
mkdir "${MENUTESTDIR}"
|
||
|
RESULT="${TEST}/result"
|
||
|
|
||
|
(
|
||
|
unset WIPE WIPE_IDX
|
||
|
declare -a WIPE
|
||
|
declare -i WIPE_IDX=0
|
||
|
unset MODE
|
||
|
|
||
|
. ${TEST}/test
|
||
|
echo ">>> Running test ${TEST}, purpose $TEST_PURPOSE"
|
||
|
|
||
|
if [ "${MODE:-local}" == "local" ]; then
|
||
|
setup_local_xdg_vars
|
||
|
elif [ "${MODE}" == "system_data" ]; then
|
||
|
setup_xdg_system_data_vars
|
||
|
else
|
||
|
echo "!!! unknown MODE from $TEST, bailing"
|
||
|
exit -1
|
||
|
fi
|
||
|
|
||
|
test_code
|
||
|
|
||
|
declare -i IDX=0
|
||
|
while [ $WIPE_IDX -gt $IDX ]; do
|
||
|
echo "${WIPE[$IDX]}" >> "${MENUTESTDIR}/wipe"
|
||
|
IDX=$(( $IDX + 1 ))
|
||
|
done
|
||
|
|
||
|
DEBUG_OVERRIDES=''
|
||
|
[ -n "$MENU_FAKE_PREFIX" ] && DEBUG_OVERRIDES=.menu
|
||
|
[ -n "$MENU_FAKE_APPLICATIONS" ] && DEBUG_OVERIDES="${DEBUG_OVERRIDES} -merged"
|
||
|
|
||
|
for x in dir home; do
|
||
|
for y in ${DEBUG_OVERRIDES}; do
|
||
|
if [ -e "${MENUTESTDIR}/xdg_config_${x}/menus/applications${y}" ]; then
|
||
|
ln -s applications${y} "${MENUTESTDIR}/xdg_config_${x}/menus/kde-applications${y}"
|
||
|
ln -s applications${y} "${MENUTESTDIR}/xdg_config_${x}/menus/gnome-applications${y}"
|
||
|
fi
|
||
|
done
|
||
|
unset y
|
||
|
done
|
||
|
unset x DEBUG_OVERRIDES
|
||
|
|
||
|
$MENUTEST > ${MENUTESTDIR}/run-result 2> ${MENUTESTDIR}/log
|
||
|
|
||
|
if [ -e "${RESULT}" ]; then
|
||
|
./expand "${RESULT}" > "${MENUTESTDIR}/required-result"
|
||
|
fi
|
||
|
|
||
|
if [ "$(type -t interpret_results)" == "function" ]; then
|
||
|
interpret_results
|
||
|
else
|
||
|
default_interpret_results
|
||
|
fi
|
||
|
ret=$?
|
||
|
if [ -e "${MENUTESTDIR}/wipe" ]; then
|
||
|
cat "${MENUTESTDIR}/wipe" | while read l; do
|
||
|
[ -z "$l" ] && continue
|
||
|
rm "$l"
|
||
|
done
|
||
|
fi
|
||
|
return $ret
|
||
|
)
|
||
|
}
|
||
|
|
||
|
default_interpret_results() {
|
||
|
if [ ! -e "${RESULT}" ]; then
|
||
|
echo "!!! Result file (${RESULT}) for ${TEST} missing"
|
||
|
echo '>>> Failed'
|
||
|
return 1
|
||
|
elif diff -q "${MENUTESTDIR}/run-result" "${MENUTESTDIR}/required-result" > /dev/null; then
|
||
|
echo '>>> OK'
|
||
|
return 0
|
||
|
fi
|
||
|
sort "${MENUTESTDIR}/run-result" > "${MENUTESTDIR}/run-result.sorted"
|
||
|
sort "${MENUTESTDIR}/required-result" > "${MENUTESTDIR}/required-result.sorted"
|
||
|
if diff -u "${MENUTESTDIR}/run-result.sorted" "${MENUTESTDIR}/required-result.sorted" > "${MENUTESTDIR}/result.diff"; then
|
||
|
echo '>>> OK (different order)'
|
||
|
return 0
|
||
|
fi
|
||
|
grep "${MENUTESTDIR}" "${MENUTESTDIR}/run-result" > "${MENUTESTDIR}/run-result.filtered" 2> /dev/null
|
||
|
if diff -q "${MENUTESTDIR}/run-result.filtered" "${MENUTESTDIR}/required-result" > /dev/null; then
|
||
|
echo '>>> OK (additional system items)'
|
||
|
return 0
|
||
|
fi
|
||
|
grep "${MENUTESTDIR}" "${MENUTESTDIR}/run-result.sorted" > "${MENUTESTDIR}/required-result.filtered" 2> /dev/null
|
||
|
if diff -u "${MENUTESTDIR}/run-result.filtered" "${MENUTESTDIR}/required-result.sorted" > "${MENUTESTDIR}/result.diff"; then
|
||
|
echo '>>> OK (different order, additional system items)'
|
||
|
return 0
|
||
|
fi
|
||
|
echo '>>> Failed'
|
||
|
cat "${MENUTESTDIR}/result.diff"
|
||
|
cat "${MENUTESTDIR}/log"
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
if [ -z "${TESTS}" ]; then
|
||
|
export TESTS=`ls tests/*/test | sed -e 's:^\(\./\)\?tests/\+::' -e 's:/\+test$::'`
|
||
|
fi
|
||
|
|
||
|
if [ -z "$TET_RUN" ]; then
|
||
|
|
||
|
if [ "x${MENUTEST}" == "x" ]; then
|
||
|
echo 'To run the test set $MENUTEST to your menu-spec implementation.'
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ "x${MENUTESTDIR}" == "x" ]; then
|
||
|
MENUTESTDIR=/tmp/menutestdir
|
||
|
echo Using ${MENUTESTDIR} as test directory, override with \$MENUTESTDIR.
|
||
|
else
|
||
|
echo Using ${MENUTESTDIR} as test directory.
|
||
|
fi
|
||
|
|
||
|
export MENUTESTDIR
|
||
|
export USER=${USER:-test}
|
||
|
|
||
|
|
||
|
FAILED=
|
||
|
SUCCEEDED=
|
||
|
|
||
|
for TESTCASE in ${TESTS}; do
|
||
|
if [ "${TESTCASE}" == "CVS" ]; then
|
||
|
continue
|
||
|
fi
|
||
|
echo
|
||
|
if ! run_test "tests/${TESTCASE}" ${MODE}; then
|
||
|
FAILED="${FAILED} ${TESTCASE}"
|
||
|
else
|
||
|
SUCCEEDED="${SUCCEEDED} ${TESTCASE}"
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
echo "OK tests: ${SUCCEEDED}"
|
||
|
[ -n "${FAILED}" ] && echo "Failed tests: ${FAILED}"
|
||
|
echo "$(echo ${SUCCEEDED} | wc -w) tests passed, $(echo ${FAILED} | wc -w) tests failed"
|
||
|
[ -z "${FAILED}" ] && exit 0
|
||
|
exit 1
|
||
|
fi
|