build-system/pyproject: Add stestr, unittest and custom options.

* guix/build-system/pyproject.scm (check): Add stestr, unittest and
custom test-backends.

Change-Id: I2d44b3b8dd928ab844b4479fb073afff845e13ee
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
This commit is contained in:
Nicolas Graves 2025-06-19 09:58:48 +02:00 committed by Sharlatan Hellseher
parent 74a1e9d543
commit 9a40c5145d
No known key found for this signature in database
GPG key ID: 76D727BFF62CD2B5

View file

@ -150,18 +150,26 @@ builder.build_wheel(sys.argv[3], config_settings=config_settings)"
(let* ((pytest (which "pytest")) (let* ((pytest (which "pytest"))
(nosetests (which "nosetests")) (nosetests (which "nosetests"))
(nose2 (which "nose2")) (nose2 (which "nose2"))
(stestr (which "stestr"))
(have-setup-py (file-exists? "setup.py")) (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 (use-test-backend
(or test-backend (or test-backend
;; Prefer pytest ;; Prefer pytest
(if pytest 'pytest #f) (if pytest 'pytest #f)
(if stestr 'stestr #f)
(if nosetests 'nose #f) (if nosetests 'nose #f)
(if nose2 'nose2 #f) (if nose2 'nose2 #f)
;; But fall back to setup.py, which should work for most ;; Fall back to setup.py. The command is deprecated, but is
;; packages. XXX: would be nice not to depend on setup.py here? ;; a superset of unittest, so should work for most packages.
;; fails more often than not to find any tests at all. Maybe ;; Keep it until setuptools removes `setup.py test'.
;; we can run `python -m unittest`? ;; See https://setuptools.pypa.io/en/latest/deprecated/\
(if have-setup-py 'setup.py #f)))) ;; 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) (format #t "Using ~a~%" use-test-backend)
(match use-test-backend (match use-test-backend
('pytest ('pytest
@ -175,7 +183,11 @@ builder.build_wheel(sys.argv[3], config_settings=config_settings)"
(if (null? test-flags) (if (null? test-flags)
'("test" "-v") '("test" "-v")
test-flags))) test-flags)))
('python ('stestr
(apply invoke stestr "run" test-flags))
('unittest
(apply invoke "python" "-m" "unittest" test-flags))
('custom
(apply invoke "python" test-flags)) (apply invoke "python" test-flags))
;; The developer should explicitly disable tests in this case. ;; The developer should explicitly disable tests in this case.
(else (raise (condition (&test-system-not-found)))))) (else (raise (condition (&test-system-not-found))))))