commit:     a66615fe89a2ab310bc1b778275b0835dbe1faed
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 11 07:48:14 2021 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Aug 15 06:54:36 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a66615fe

python-utils-r1.eclass: Handle deselect/ignore in epytest

Support (potentially global-scope) EPYTEST_DESELECT and EPYTEST_IGNORE
arrays to conveniently deselect/skip tests.  This effectively replaces
local hacks such as:

    epytest ${deselect[@]/#/--deselect }

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/python-utils-r1.eclass | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/eclass/python-utils-r1.eclass b/eclass/python-utils-r1.eclass
index a2b5b6d5d41..4fedf939c77 100644
--- a/eclass/python-utils-r1.eclass
+++ b/eclass/python-utils-r1.eclass
@@ -1250,11 +1250,30 @@ build_sphinx() {
        HTML_DOCS+=( "${dir}/_build/html/." )
 }
 
+# @VARIABLE: EPYTEST_DESELECT
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Specifies an array of tests to be deselected via pytest's --deselect
+# parameter, when calling epytest.  The list can include file paths,
+# specific test functions or parametrized test invocations.
+#
+# Note that the listed files will still be subject to collection,
+# i.e. modules imported in global scope will need to be available.
+# If this is undesirable, EPYTEST_IGNORE can be used instead.
+
+# @VARIABLE: EPYTEST_IGNORE
+# @DEFAULT_UNSET
+# @DESCRIPTION:
+# Specifies an array of paths to be ignored via pytest's --ignore
+# parameter, when calling epytest.  The listed files will be entirely
+# skipped from test collection.
+
 # @FUNCTION: epytest
 # @USAGE: [<args>...]
 # @DESCRIPTION:
-# Run pytest, passing the standard set of pytest options, followed
-# by user-specified options.
+# Run pytest, passing the standard set of pytest options, then
+# --deselect and --ignore options based on EPYTEST_DESELECT
+# and EPYTEST_IGNORE, then user-specified options.
 #
 # This command dies on failure and respects nonfatal.
 epytest() {
@@ -1274,6 +1293,13 @@ epytest() {
                # for end users, as it tends to fail on new warnings from deps
                -Wdefault
        )
+       local x
+       for x in "${EPYTEST_DESELECT[@]}"; do
+               args+=( --deselect "${x}" )
+       done
+       for x in "${EPYTEST_IGNORE[@]}"; do
+               args+=( --ignore "${x}" )
+       done
        set -- "${EPYTHON}" -m pytest "${args[@]}" "${@}"
 
        echo "${@}" >&2

Reply via email to