Skip to content

Commit

Permalink
distutils-r1.eclass: Use a common distutils-r1_python_test
Browse files Browse the repository at this point in the history
Use a common distutils-r1_python_test function to simplify handling
different test scenarios.  This avoids code duplication due to defining
a lot of python_test() variants, as well as it makes it possible for
overriden python_test() to call the base implementation provided
by distutils_enable_tests.

Signed-off-by: Michał Górny <[email protected]>
  • Loading branch information
mgorny committed Mar 11, 2021
1 parent ab0e928 commit 22ab1c3
Showing 1 changed file with 47 additions and 46 deletions.
93 changes: 47 additions & 46 deletions eclass/distutils-r1.eclass
Original file line number Diff line number Diff line change
Expand Up @@ -406,10 +406,10 @@ distutils_enable_sphinx() {
distutils_enable_tests() {
debug-print-function ${FUNCNAME} "${@}"

local do_install=
_DISTUTILS_TEST_INSTALL=
case ${1} in
--install)
do_install=1
_DISTUTILS_TEST_INSTALL=1
shift
;;
esac
Expand All @@ -419,62 +419,21 @@ distutils_enable_tests() {
case ${1} in
nose)
test_pkg=">=dev-python/nose-1.3.7-r4"
if [[ ${do_install} ]]; then
python_test() {
distutils_install_for_testing --via-root
nosetests -v || die "Tests fail with ${EPYTHON}"
}
else
python_test() {
nosetests -v || die "Tests fail with ${EPYTHON}"
}
fi
;;
pytest)
test_pkg=">=dev-python/pytest-4.5.0"
if [[ ${do_install} ]]; then
python_test() {
distutils_install_for_testing --via-root
epytest
}
else
python_test() {
epytest
}
fi
;;
setup.py)
if [[ ${do_install} ]]; then
python_test() {
distutils_install_for_testing --via-root
nonfatal esetup.py test --verbose ||
die "Tests fail with ${EPYTHON}"
}
else
python_test() {
nonfatal esetup.py test --verbose ||
die "Tests fail with ${EPYTHON}"
}
fi
;;
unittest)
if [[ ${do_install} ]]; then
python_test() {
distutils_install_for_testing --via-root
"${EPYTHON}" -m unittest discover -v ||
die "Tests fail with ${EPYTHON}"
}
else
python_test() {
"${EPYTHON}" -m unittest discover -v ||
die "Tests fail with ${EPYTHON}"
}
fi
;;
*)
die "${FUNCNAME}: unsupported argument: ${1}"
esac

_DISTUTILS_TEST_RUNNER=${1}
python_test() { distutils-r1_python_test; }

local test_deps=${RDEPEND}
if [[ -n ${test_pkg} ]]; then
if [[ ! ${DISTUTILS_SINGLE_IMPL} ]]; then
Expand Down Expand Up @@ -841,6 +800,48 @@ _distutils-r1_wrap_scripts() {
fi
}

# @FUNCTION: distutils-r1_python_test
# @USAGE: [additional-args...]
# @DESCRIPTION:
# The python_test() implementation used by distutils_enable_tests.
# Runs tests using the specified test runner, possibly installing them
# first.
#
# This function is used only if distutils_enable_tests is called.
distutils-r1_python_test() {
debug-print-function ${FUNCNAME} "${@}"

if [[ -z ${_DISTUTILS_TEST_RUNNER} ]]; then
die "${FUNCNAME} can be only used after calling distutils_enable_tests"
fi

if [[ ${_DISTUTILS_TEST_INSTALL} ]]; then
distutils_install_for_testing
fi

case ${_DISTUTILS_TEST_RUNNER} in
nose)
nosetests -v "${@}"
;;
pytest)
epytest
;;
setup.py)
nonfatal esetup.py test --verbose
;;
unittest)
"${EPYTHON}" -m unittest discover -v
;;
*)
die "Mis-synced test runner between ${FUNCNAME} and distutils_enable_testing"
;;
esac

if [[ ${?} -ne 0 ]]; then
die "Tests failed with ${EPYTHON}"
fi
}

# @FUNCTION: distutils-r1_python_install
# @USAGE: [additional-args...]
# @DESCRIPTION:
Expand Down

0 comments on commit 22ab1c3

Please sign in to comment.