[bug#78828,2/8] build-system/pyproject: Add stestr, unittest and custom options.

Message ID 20250619075859.10878-2-ngraves@ngraves.fr
State New
Headers
Series None |

Commit Message

Nicolas Graves June 19, 2025, 7:58 a.m. UTC
  * guix/build-system/pyproject.scm (check): Add stestr, unittest and
custom test-backends.
---
 guix/build/pyproject-build-system.scm | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)
  

Patch

diff --git a/guix/build/pyproject-build-system.scm b/guix/build/pyproject-build-system.scm
index 1b66dce99c..1fa610faa9 100644
--- a/guix/build/pyproject-build-system.scm
+++ b/guix/build/pyproject-build-system.scm
@@ -150,18 +150,26 @@  (define* (check #:key tests? test-backend test-flags #:allow-other-keys)
       (let* ((pytest (which "pytest"))
              (nosetests (which "nosetests"))
              (nose2 (which "nose2"))
+             (stestr (which "stestr"))
              (have-setup-py (file-exists? "setup.py"))
+             ;; unittest default pattern
+             ;; See https://docs.python.org/3/library/unittest.html\
+             ;; #cmdoption-unittest-discover-p
+             (tests-found (find-files "." "test.*\\.py$"))
              (use-test-backend
               (or test-backend
                   ;; Prefer pytest
                   (if pytest 'pytest #f)
+                  (if stestr 'stestr #f)
                   (if nosetests 'nose #f)
                   (if nose2 'nose2 #f)
-                  ;; But fall back to setup.py, which should work for most
-                  ;; packages. XXX: would be nice not to depend on setup.py here?
-                  ;; fails more often than not to find any tests at all.  Maybe
-                  ;; we can run `python -m unittest`?
-                  (if have-setup-py 'setup.py #f))))
+                  ;; Fall back to setup.py. The command is deprecated, but is
+                  ;; a superset of unittest, so should work for most packages.
+                  ;; Keep it until setuptools removes `setup.py test'.
+                  ;; See https://setuptools.pypa.io/en/latest/deprecated/\
+                  ;; commands.html#test-build-package-and-run-a-unittest-suite
+                  (if have-setup-py 'setup.py #f)
+                  (if tests-found 'unittest #f))))
         (format #t "Using ~a~%" use-test-backend)
         (match use-test-backend
           ('pytest
@@ -175,7 +183,11 @@  (define* (check #:key tests? test-backend test-flags #:allow-other-keys)
                   (if (null? test-flags)
                       '("test" "-v")
                       test-flags)))
-          ('python
+          ('stestr
+           (apply invoke stestr "run" test-flags))
+          ('unittest
+           (apply invoke "python" "-m" "unittest" test-flags))
+          ('custom
            (apply invoke "python" test-flags))
           ;; The developer should explicitly disable tests in this case.
           (else (raise (condition (&test-system-not-found))))))