projects/guix·blob java-team · refs

3826 lines · 150.4 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2012 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2014 David Thompson <[email protected]>
4;;; Copyright © 2015 Paul van der Walt <[email protected]>
5;;; Copyright © 2014, 2015 Eric Bavier <[email protected]>
6;;; Copyright © 2015 Mark H Weaver <[email protected]>
7;;; Copyright © 2015, 2017 Cyril Roelandt <[email protected]>
8;;; Copyright © 2015 Federico Beffa <[email protected]>
9;;; Copyright © 2015 Andreas Enge <[email protected]>
10;;; Copyright © 2015, 2016, 2018-2025 Efraim Flashner <[email protected]>
11;;; Copyright © 2016, 2017 Leo Famulari <[email protected]>
12;;; Copyright © 2016 Christine Lemmer-Webber <[email protected]>
13;;; Copyright © 2016, 2017 Danny Milosavljevic <[email protected]>
14;;; Copyright © 2016 Roel Janssen <[email protected]>
15;;; Copyright © 2016 Sou Bunnbu <[email protected]>
16;;; Copyright © 2016 Troy Sankey <[email protected]>
17;;; Copyright © 2016 Lukas Gradl <[email protected]>
18;;; Copyright © 2016 Hartmut Goebel <[email protected]>
19;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <[email protected]>
20;;; Copyright © 2017 Julien Lepiller <[email protected]>
21;;; Copyright © 2017 Thomas Danckaert <[email protected]>
22;;; Copyright © 2017, 2018 Arun Isaac <[email protected]>
23;;; Copyright © 2017 Frederick M. Muriithi <[email protected]>
24;;; Copyright © 2017, 2019 Mathieu Othacehe <[email protected]>
25;;; Copyright © 2017, 2019 Kei Kebreau <[email protected]>
26;;; Copyright © 2017 Nikita <[email protected]>
27;;; Copyright © 2015, 2017, 2018, 2020, 2021, 2023, 2024, 2025 Ricardo Wurmus <[email protected]>
28;;; Copyright © 2016-2022 Marius Bakke <[email protected]>
29;;; Copyright © 2017-2018, 2020-2021, 2024 Ludovic Courtès <[email protected]>
30;;; Copyright © 2018 Fis Trivial <[email protected]>
31;;; Copyright © 2019, 2021 Pierre Langlois <[email protected]>
32;;; Copyright © 2019 Chris Marusich <[email protected]>
33;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
34;;; Copyright © 2020 Brice Waegeneire <[email protected]>
35;;; Copyright © 2020 Danny Milosavljevic <[email protected]>
36;;; Copyright © 2020 Josh Marshall <[email protected]>
37;;; Copyright © 2020 Vinicius Monego <[email protected]>
38;;; Copyright © 2020 Tanguy Le Carrour <[email protected]>
39;;; Copyright © 2020-2026 Maxim Cournoyer <[email protected]>
40;;; Copyright © 2021 Hugo Lecomte <[email protected]>
41;;; Copyright © 2022 Maxime Devos <[email protected]>
42;;; Copyright © 2022, 2023 David Elsing <[email protected]>
43;;; Copyright © 2022-2025 Sharlatan Hellseher <[email protected]>
44;;; Copyright © 2022 jgart <[email protected]>
45;;; Copyright © 2023 Luis Felipe López Acevedo <[email protected]>
46;;; Copyright © 2023 Timo Wilken <[email protected]>
47;;; Copyright © 2023 Zhu Zihao <[email protected]>
48;;; Copyright © 2023 Bruno Victal <[email protected]>
49;;; Copyright © 2023 Reza Housseini <[email protected]>
50;;; Copyright © 2023 Hilton Chain <[email protected]>
51;;; Copyright © 2023, 2024 Troy Figiel <[email protected]>
52;;; Copyright © 2024 Giacomo Leidi <[email protected]>
53;;; Copyright © 2024 Zheng Junjie <[email protected]>
54;;; Copyright © 2024 Navid Afkhami <[email protected]>
55;;; Copyright © 2024, 2025 gemmaro <[email protected]>
56;;; Copyright © 2024 Ashvith Shetty <[email protected]>
57;;; Copyright © 2025 Jordan Moore <[email protected]>
58;;; Copyright © 2025 Nicolas Graves <[email protected]>
59;;; Copyright © 2025 nomike Postmann <[email protected]>
60;;; Copyright © 2025 Josep Bigorra <[email protected]>
61;;; Copyright © 2025 Murilo <[email protected]>
62;;; Copyright © 2026 Artyom V. Poptsov <[email protected]>
63;;;
64;;; This file is part of GNU Guix.
65;;;
66;;; GNU Guix is free software; you can redistribute it and/or modify it
67;;; under the terms of the GNU General Public License as published by
68;;; the Free Software Foundation; either version 3 of the License, or (at
69;;; your option) any later version.
70;;;
71;;; GNU Guix is distributed in the hope that it will be useful, but
72;;; WITHOUT ANY WARRANTY; without even the implied warranty of
73;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
74;;; GNU General Public License for more details.
75;;;
76;;; You should have received a copy of the GNU General Public License
77;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
78
79(define-module (gnu packages check)
80 #:use-module (gnu packages)
81 #:use-module (gnu packages admin)
82 #:use-module (gnu packages autotools)
83 #:use-module (gnu packages base)
84 #:use-module (gnu packages bash)
85 #:use-module (gnu packages boost)
86 #:use-module (gnu packages nss)
87 #:use-module (gnu packages cmake)
88 #:use-module (gnu packages compression)
89 #:use-module (gnu packages cpp)
90 #:use-module (gnu packages linux)
91 #:use-module (gnu packages llvm)
92 #:use-module (gnu packages lua)
93 #:use-module (gnu packages gdb)
94 #:use-module (gnu packages glib)
95 #:use-module (gnu packages gnome)
96 #:use-module (gnu packages golang-build)
97 #:use-module (gnu packages golang-check)
98 #:use-module (gnu packages golang-xyz)
99 #:use-module (gnu packages gtk)
100 #:use-module (gnu packages guile)
101 #:use-module (gnu packages guile-xyz)
102 #:use-module (gnu packages maths)
103 #:use-module (gnu packages ncurses)
104 #:use-module (gnu packages perl)
105 #:use-module (gnu packages perl-check)
106 #:use-module (gnu packages php)
107 #:use-module (gnu packages pkg-config)
108 #:use-module (gnu packages python)
109 #:use-module (gnu packages python-check)
110 #:use-module (gnu packages python-build)
111 #:use-module (gnu packages python-web)
112 #:use-module (gnu packages python-xyz)
113 #:use-module (gnu packages python-science)
114 #:use-module (gnu packages ruby)
115 #:use-module (gnu packages sqlite)
116 #:use-module (gnu packages texinfo)
117 #:use-module (gnu packages time)
118 #:use-module (gnu packages xml)
119 #:use-module (guix utils)
120 #:use-module ((guix licenses) #:prefix license:)
121 #:use-module (guix packages)
122 #:use-module (guix download)
123 #:use-module (guix gexp)
124 #:use-module (guix git-download)
125 #:use-module (guix build-system cargo)
126 #:use-module (guix build-system cmake)
127 #:use-module (guix build-system copy)
128 #:use-module (guix build-system glib-or-gtk)
129 #:use-module (guix build-system gnu)
130 #:use-module (guix build-system go)
131 #:use-module (guix build-system guile)
132 #:use-module (guix build-system meson)
133 #:use-module (guix build-system perl)
134 #:use-module (guix build-system pyproject)
135 #:use-module (guix build-system trivial)
136 #:use-module (ice-9 match)
137 #:use-module (srfi srfi-1))
138
139(define-public atf
140 (package
141 (name "atf")
142 (version "0.25")
143 (source
144 (origin
145 (method git-fetch)
146 (uri (git-reference
147 (url "https://github.com/freebsd/atf")
148 (commit (string-append name "-" version))))
149 (file-name (git-file-name name version))
150 (sha256
151 (base32
152 "01nq62s4vm6bf4ldl8jqx636i7ramw367r7kg7k59pql11vxjmn6"))))
153 (build-system gnu-build-system)
154 (arguments
155 (list
156 #:configure-flags
157 #~(list (string-append "ATF_SHELL="
158 #$(this-package-input "bash-minimal")
159 "/bin/sh"))))
160 (native-inputs
161 (list autoconf
162 automake
163 libtool))
164 (inputs
165 (list bash-minimal))
166 (home-page "https://github.com/freebsd/atf")
167 (synopsis "C/C++ Automated Testing Framework libraries")
168 (description
169 "@acronym{ATF, Automated Testing Framework}, is a collection of libraries
170to write test programs in C, C++ and POSIX shell.
171
172The ATF libraries offer a simple API orthogonal through the various bindings,
173allowing developers to quickly learn how to write test programs in different
174languages.
175
176ATF-based test programs offer a consistent end-user command-line interface,
177allowing execution to both humans and automation.
178
179ATF-based test programs rely on a third-party execution engine to be run,
180shipped separatedly. @command{Kyua} is the engine of choice.")
181 (license
182 (list license:bsd-2
183 license:bsd-3))))
184
185(define-public pict
186 (package
187 (name "pict")
188 (version "3.7.4")
189 (source
190 (origin
191 (method git-fetch)
192 (uri (git-reference
193 (url "https://github.com/Microsoft/pict")
194 (commit (string-append "v" version))))
195 (file-name (git-file-name name version))
196 (sha256
197 (base32
198 "1f3xpcdwihlxd8lj5clzfiz4rybhzdib95nrsnjfl009gh6gbwh0"))))
199 (build-system gnu-build-system)
200 (arguments
201 (list
202 #:test-target "test"
203 #:phases
204 #~(modify-phases %standard-phases
205 (delete 'configure)
206 (replace 'install
207 (lambda _
208 (install-file "pict" (string-append #$output "/bin"))
209 (install-file "doc/pict.md"
210 (string-append #$output
211 "/share/doc/pict-" #$version)))))))
212 (native-inputs (list perl))
213 (home-page "https://www.pairwise.org/")
214 (synopsis "Pairwise Independent Combinatorial Tool")
215 (description "PICT is a pairwise testing tool that generates test cases
216and test configurations. With PICT, you can generate tests that are more
217effective than manually generated tests and in a fraction of the time required
218by hands-on test case design. PICT runs as a command line tool. It takes a
219model file detailing the parameters of the interface as an input and generates
220a compact set of parameter value choices that represent the test cases you
221should use to get comprehensive combinatorial coverage of your parameters.")
222 (license license:expat)))
223
224(define-public pedansee
225 (package
226 (name "pedansee")
227 (version "0.0.3")
228 (source
229 (origin
230 (method url-fetch)
231 (uri
232 (string-append "https://www.flyn.org/projects/"
233 name "/" name "-" version ".tar.gz"))
234 (sha256
235 (base32 "0lsg791x6n95pxg6vif8qfc46nqcamhjq3g0dl5xqf6imy7n3acd"))))
236 (build-system glib-or-gtk-build-system)
237 (native-inputs
238 (list clang-13 pkg-config python-wrapper))
239 (inputs
240 (list glib))
241 (synopsis "Code checker for C")
242 (description "Pedansee checks C source files for compliance with a particular
243programming style. The style is currently defined by the pedansee source code
244in the form of functions which walk each source file’s syntax tree. You can
245modify some aspects of this style through the use of regular expressions.")
246 (home-page "https://www.flyn.org/projects/pedansee/")
247 (license license:gpl3+)))
248
249(define-public mutest
250 (package
251 (name "mutest")
252 (version "0.0.0")
253 (source
254 (origin
255 (method git-fetch)
256 (uri
257 (git-reference
258 (url "https://github.com/ebassi/mutest")
259 (commit "e6246c9")))
260 (file-name (git-file-name name version))
261 (sha256
262 (base32 "0gdqwq6fvk06wld4rhnw5752hahrvhd69zrci045x25rwx90x26q"))))
263 (build-system meson-build-system)
264 (synopsis "Small C testing library")
265 (description "Mutest aims to be a small unit testing library for C projects,
266with an API heavily modelled on high level Behavior-Driver Development frameworks
267like Jasmine or Mocha.")
268 (home-page "https://ebassi.github.io/mutest/mutest.md.html")
269 (license license:expat)))
270
271(define-public cargo-nextest
272 (package
273 (name "cargo-nextest")
274 (version "0.9.97")
275 (source
276 (origin
277 (method url-fetch)
278 (uri (crate-uri "cargo-nextest" version))
279 (file-name (string-append name "-" version ".tar.gz"))
280 (sha256
281 (base32 "0j55sqr3fnhsk5b9n2jwy6g1h605qgrhwpxlsx789k8b3yhhnfyz"))))
282 (build-system cargo-build-system)
283 (arguments
284 `(#:install-source? #f))
285 (inputs
286 (cons* pkg-config zlib `(,zstd "lib") (cargo-inputs 'cargo-nextest)))
287 (home-page "https://github.com/nextest-rs/nextest")
288 (synopsis "next-generation test runner for Rust")
289 (description
290 "This package provides a next-generation test runner for Rust.")
291 (license (list license:asl2.0 license:expat))))
292
293(define-public check
294 (package
295 (name "check")
296 (version "0.15.2")
297 (source
298 (origin
299 (method url-fetch)
300 (uri (string-append "https://github.com/libcheck/check/releases/download/"
301 version "/check-" version ".tar.gz"))
302 (sha256
303 (base32
304 "02m25y9m46pb6n46s51av62kpd936lkfv3b13kfpckgvmh5lxpm8"))
305 (patches
306 (list
307 ;; This patch fixes some tests that would otherwise fail on
308 ;; powerpc64le-linux. Without this patch, the tests make certain
309 ;; assumptions about floating point number precision that are not true
310 ;; on that platform.
311 ;;
312 ;; TODO: Remove this patch when updating to the next check release,
313 ;; since it will be included there. See:
314 ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=47698
315 (origin
316 (method url-fetch)
317 (uri
318 (string-append "https://github.com/libcheck/check/commit/"
319 "4fbe702fa4f35bee8a90512f9f59d1441c4ae82e.patch"))
320 (file-name (string-append name
321 "-fix-test-precision-for-ppc.patch"))
322 (sha256
323 (base32
324 "04qg1p9afdd6453k18qskazrvscysdcjz9j6w4i6p5x4xyma19v6")))))))
325 (arguments
326 ;; FIXME: The tests hang on the 64bit Hurd.
327 (list #:tests? (and (not (%current-target-system))
328 (not (system-hurd64?)))))
329 (build-system gnu-build-system)
330 (home-page "https://libcheck.github.io/check/")
331 (synopsis "Unit test framework for C")
332 (description
333 "Check is a unit testing framework for C. It features a simple
334interface for defining unit tests, putting little in the way of the
335developer. Tests are run in a separate address space, so Check can
336catch both assertion failures and code errors that cause segmentation
337faults or other signals. The output from unit tests can be used within
338source code editors and IDEs.")
339 (license license:lgpl2.1+)))
340
341;; Some packages require older versions. Removed once no longer needed.
342(define-public check-0.14
343 (package
344 (inherit check)
345 (version "0.14.0")
346 (source (origin
347 (inherit (package-source check))
348 (method url-fetch)
349 (uri (string-append "https://github.com/libcheck/check/releases"
350 "/download/" version "/check-" version ".tar.gz"))
351 (sha256
352 (base32
353 "02zkfiyklckmivrfvdsrlzvzphkdsgjrz3igncw05dv5pshhq3xx"))))))
354
355(define-public check-0.12
356 (package
357 (inherit check)
358 (version "0.12.0")
359 (source (origin
360 (method url-fetch)
361 (uri (string-append "https://github.com/libcheck/check/releases"
362 "/download/" version "/check-" version ".tar.gz"))
363 (sha256
364 (base32
365 "0d22h8xshmbpl9hba9ch3xj8vb9ybm5akpsbbh7yj07fic4h2hj6"))))))
366
367(define-public checkmake
368 (package
369 (name "checkmake")
370 (version "0.3.2")
371 (source
372 (origin
373 (method git-fetch)
374 (uri (git-reference
375 (url "https://github.com/checkmake/checkmake")
376 (commit (string-append "v" version))))
377 (file-name (git-file-name name version))
378 (sha256
379 (base32 "00c8bdj614fygq97aikci9hwsl7ji0digazajhw3bmi3qacjlqp4"))))
380 (build-system go-build-system)
381 (arguments
382 (list
383 #:install-source? #f
384 #:import-path "github.com/checkmake/checkmake/..."
385 #:unpack-path "github.com/checkmake/checkmake"
386 #:phases
387 #~(modify-phases %standard-phases
388 (add-after 'install 'install-man
389 (lambda* (#:key unpack-path #:allow-other-keys)
390 (with-directory-excursion (string-append "src/" unpack-path)
391 (let ((man-dir (string-append #$output "/share/man/man1")))
392 (mkdir-p man-dir)
393 (invoke "go-md2man"
394 "-in" "man/man1/checkmake.1.md"
395 "-out" (string-append man-dir "/checkmake.1")))))))))
396 (native-inputs
397 (list go-github-com-go-ini-ini
398 go-github-com-olekukonko-tablewriter
399 go-github-com-spf13-cobra
400 go-github-com-stretchr-testify
401 go-md2man))
402 (home-page "https://github.com/checkmake/checkmake")
403 (synopsis "Linter and analyzer for @file{Makefile}")
404 (description
405 "@samp{checkmake} is an experimental tool for linting and checking
406Makefiles. It allows for a set of configurable rules being run
407against a @file{Makefile} or a set of @file{*.mk} files.")
408 (license license:expat)))
409
410(define-public mbake
411 (package
412 (name "mbake")
413 (version "1.4.0")
414 (source
415 (origin
416 (method url-fetch)
417 (uri (pypi-uri "mbake" version))
418 (sha256
419 (base32 "1badaaw5cxbca7fqahjm6j5yk6mmcakc4772q9gdrr84jx9wjd67"))))
420 (build-system pyproject-build-system)
421 (native-inputs
422 (list python-hatchling
423 python-pytest))
424 (propagated-inputs
425 (list python-rich
426 python-typer))
427 (home-page "https://github.com/EbodShojaei/bake")
428 (synopsis "Makefile formatter and linter")
429 (description
430 "@command{mbake} is a Makefile formatter and linter,which is configurable
431via a TOML file. It intelligently deals with @code{.PHONY} declarations and
432line continuations, and ensures consistent formatting and style for your
433Makefile.")
434 (license license:expat)))
435
436(define-public clitest
437 (package
438 (name "clitest")
439 (version "0.4.0")
440 (home-page "https://github.com/aureliojargas/clitest")
441 (source (origin
442 (method git-fetch)
443 (uri (git-reference (url home-page) (commit version)))
444 (file-name (git-file-name name version))
445 (patches (search-patches "clitest-grep-compat.patch"))
446 (sha256
447 (base32
448 "1p745mxiq3hgi3ywfljs5sa1psi06awwjxzw0j9c2xx1b09yqv4a"))))
449 (build-system gnu-build-system)
450 (arguments
451 (list
452 #:phases
453 #~(modify-phases %standard-phases
454 ;; This package is distributed as a single shell script and comes
455 ;; without a proper build system.
456 (delete 'configure)
457 (delete 'build)
458 (replace 'check
459 (lambda* (#:key tests? #:allow-other-keys)
460 (when tests?
461 (setenv "HOME" "/tmp")
462 (invoke "./clitest" "test.md"))))
463 (replace 'install
464 (lambda _
465 (install-file "clitest" (string-append #$output "/bin"))
466 (install-file "README.md"
467 (string-append #$output "/share/doc/clitest-"
468 #$(package-version this-package))))))))
469 (native-inputs
470 (list perl)) ;for tests
471 (inputs
472 (list bash-minimal))
473 (synopsis "Command line test tool")
474 (description
475 "@command{clitest} is a portable shell script that performs automatic
476testing of Unix command lines.")
477 (license license:expat)))
478
479(define-public cunit
480 (package
481 (name "cunit")
482 (version "2.1-3")
483 (source
484 (origin
485 (method url-fetch)
486 (uri (string-append "mirror://sourceforge/cunit/CUnit/"
487 version "/CUnit-" version ".tar.bz2"))
488 (sha256
489 (base32
490 "057j82da9vv4li4z5ri3227ybd18nzyq81f6gsvhifs5z0vr3cpm"))))
491 (build-system gnu-build-system)
492 (arguments '(#:phases
493 (modify-phases %standard-phases
494 ;; XXX: The "bootstrap" phase detects the "bootstrap"
495 ;; script, but fails to execute it, so we bootstrap
496 ;; manually.
497 (replace 'bootstrap
498 (lambda _ (invoke "autoreconf" "-vfi"))))))
499 (native-inputs
500 (list automake autoconf libtool))
501 (home-page "https://cunit.sourceforge.net/")
502 (synopsis "Automated testing framework for C")
503 (description
504 "CUnit is a lightweight system for writing, administering, and running
505unit tests in C. It provides C programmers with basic testing functionality
506with a flexible variety of user interfaces.")
507 (license license:gpl2+)))
508
509(define-public cppunit
510 (package
511 (name "cppunit")
512 (version "1.15.1")
513 (source (origin
514 (method url-fetch)
515 (uri (string-append "http://dev-www.libreoffice.org/src/"
516 name "-" version ".tar.gz"))
517 (sha256
518 (base32
519 "19qpqzy66bq76wcyadmi3zahk5v1ll2kig1nvg96zx9padkcdic9"))))
520 ;; Explicitly link with libdl. This is expected to be done by packages
521 ;; relying on cppunit for their tests. However, not all of them do.
522 ;; If we added the linker flag to such packages, we would pollute all
523 ;; binaries, not only those used for testing.
524 (arguments
525 `(#:make-flags '("LDFLAGS=-ldl")))
526 (build-system gnu-build-system)
527 (home-page "https://wiki.freedesktop.org/www/Software/cppunit/")
528 (synopsis "Unit testing framework for C++")
529 (description "CppUnit is the C++ port of the famous JUnit framework for
530unit testing. Test output is in XML for automatic testing and GUI based for
531supervised tests.")
532 (license license:lgpl2.1))) ; no copyright notices. LGPL2.1 is in the tarball
533
534(define-public python-pytest-pretty
535 (package
536 (name "python-pytest-pretty")
537 (version "1.3.0")
538 (source
539 (origin
540 (method url-fetch)
541 (uri (pypi-uri "pytest_pretty" version))
542 (sha256
543 (base32 "1wrvqhn0r5vpa1xhj61lywms87hc9a6hgnvqmr03w00gwhdr5scp"))))
544 (build-system pyproject-build-system)
545 (propagated-inputs (list python-pytest python-rich))
546 (native-inputs (list python-hatchling))
547 (home-page "https://github.com/samuelcolvin/pytest-pretty")
548 (synopsis "Pytest plugin to customize summary output")
549 (description "@code{pytest-pretty} is a Pytest plugin for customizing the
550appearance of the printed summary data.")
551 (license license:expat)))
552
553(define-public shunit2
554 (package
555 (name "shunit2")
556 (version "2.1.8")
557 (source (origin
558 (method git-fetch)
559 (uri (git-reference
560 (url "https://github.com/kward/shunit2")
561 (commit (string-append "v" version))))
562 (file-name (git-file-name name version))
563 (sha256
564 (base32
565 "08vs0jjl3pfh100sjlw31x4638xj7fghr0j2g1zfikba8n1f9491"))))
566 (build-system gnu-build-system)
567 (arguments
568 `(#:phases
569 (modify-phases %standard-phases
570 (delete 'configure) ; no configure script
571 (delete 'build)
572 (add-after 'patch-source-shebangs 'patch-more-shebangs
573 (lambda _
574 (substitute* "shunit2"
575 (("#! /bin/sh") (string-append "#! " (which "sh")))
576 (("/usr/bin/od") (which "od")))
577 (substitute* "test_runner"
578 (("/bin/sh") (which "sh"))
579 (("/bin/bash") (which "bash")))
580 #t))
581 (replace 'check
582 (lambda* (#:key tests? #:allow-other-keys)
583 (when tests?
584 ;; This test is buggy in the build container.
585 (delete-file "shunit2_misc_test.sh")
586 (invoke "sh" "test_runner"))
587 #t))
588 (replace 'install
589 (lambda* (#:key outputs #:allow-other-keys)
590 (install-file "shunit2"
591 (string-append (assoc-ref outputs "out")
592 "/bin"))
593 #t)))))
594 (home-page "https://github.com/kward/shunit2")
595 (synopsis "@code{xUnit} based unit testing for Unix shell scripts")
596 (description "@code{shUnit2} was originally developed to provide a
597consistent testing solution for @code{log4sh}, a shell based logging framework
598similar to @code{log4j}. It is designed to work in a similar manner to JUnit,
599PyUnit and others.")
600 (license license:asl2.0)))
601
602(define-public snitch
603 (package
604 (name "snitch")
605 (version "1.3.2")
606 (source (origin
607 (method git-fetch)
608 (uri (git-reference
609 (url "https://github.com/snitch-org/snitch")
610 (commit (string-append "v" version))))
611 (file-name (git-file-name name version))
612 (sha256
613 (base32
614 "0mf55yi8ahpczl9jz2is3dnghfi3g9qz5vch7mx7akqx4gfhhviz"))))
615 (build-system cmake-build-system)
616 (arguments (list #:tests? #f
617 #:configure-flags
618 #~(list "-DBUILD_SHARED_LIBS=ON"
619 "-DSNITCH_DO_TEST=ON"
620 "-DSNITCH_USE_SYSTEM_DOCTEST=ON")))
621 (native-inputs (list doctest))
622 (home-page "https://github.com/snitch-org/snitch")
623 (synopsis "Lightweight C++20 testing framework")
624 (description "@code{snitch} aims to be a simple, cheap, non-invasive, and
625user-friendly testing framework. The design philosophy is to keep the testing
626API lean, including only what is strictly necessary to present clear messages
627when a test fails.")
628 (license license:boost1.0)))
629
630;; When dependent packages upgraded to use newer version of catch, this one should
631;; be removed.
632(define-public catch-framework
633 (package
634 (name "catch")
635 (version "1.3.5") ;Sub-minor is the build number
636 (source (origin
637 (method git-fetch)
638 (uri (git-reference
639 (url "https://github.com/philsquared/Catch")
640 ;; Semi-arbitrary.
641 (commit "ae5ee2cf63d6d67bd1369b512d2a7b60b571c907")))
642 (file-name (string-append name "-" version))
643 (sha256
644 (base32
645 "1yfb3lxv929szqy1nw9xw3d45wzkppziqshkjxvrb1fdmf46x564"))))
646 (build-system trivial-build-system)
647 (arguments
648 `(#:modules ((guix build utils))
649 #:builder (begin
650 (use-modules (guix build utils))
651 (let* ((source (assoc-ref %build-inputs "source"))
652 (output (assoc-ref %outputs "out"))
653 (incdir (string-append output "/include"))
654 (docdir (string-append output "/share/doc/catch-"
655 ,version)))
656 (for-each mkdir-p (list incdir docdir))
657 (install-file (string-append source
658 "/single_include/catch.hpp")
659 incdir)
660 (copy-recursively (string-append source "/docs")
661 docdir)
662 #t))))
663 (home-page "http://catch-lib.net/")
664 (synopsis "Automated test framework for C++ and Objective-C")
665 (description
666 "Catch stands for C++ Automated Test Cases in Headers and is a
667multi-paradigm automated test framework for C++ and Objective-C.")
668 (license license:boost1.0)))
669
670(define-public catch2-1
671 (package
672 (name "catch2")
673 (version "1.12.2")
674 (home-page "https://github.com/catchorg/Catch2")
675 (source (origin
676 (method git-fetch)
677 (uri (git-reference
678 (url "https://github.com/catchorg/Catch2")
679 (commit (string-append "v" version))))
680 (file-name (git-file-name name version))
681 (sha256
682 (base32
683 "1gdp5wm8khn02g2miz381llw3191k7309qj8s3jd6sasj01rhf23"))
684 (modules '((guix build utils)))
685 (snippet
686 '(substitute* '("include/internal/catch_fatal_condition.hpp"
687 "single_include/catch.hpp")
688 ;; In glibc 2.34 and later, SIGSTKSZ is no longer a
689 ;; compile-time constant. Hard code a reasonably large
690 ;; value.
691 (("SIGSTKSZ")
692 "32768")))))
693 (build-system cmake-build-system)
694 (synopsis "Automated test framework for C++ and Objective-C")
695 (description "Catch2 stands for C++ Automated Test Cases in Headers and is
696a multi-paradigm automated test framework for C++ and Objective-C.")
697 (license license:boost1.0)))
698
699(define-public catch2-2
700 (package
701 (name "catch2")
702 (version "2.13.10")
703 (home-page "https://github.com/catchorg/Catch2")
704 (source (origin
705 (method git-fetch)
706 (uri (git-reference
707 (url "https://github.com/catchorg/Catch2")
708 (commit (string-append "v" version))))
709 (file-name (git-file-name name version))
710 (sha256
711 (base32
712 "1dcwp41963vga22hm32hj609wxgfn0a6p9impcw8dxqj477gcx2y"))))
713 (build-system cmake-build-system)
714 (inputs
715 (list python-wrapper))
716 (synopsis "Automated test framework for C++ and Objective-C")
717 (description "Catch2 stands for C++ Automated Test Cases in Headers and is
718a multi-paradigm automated test framework for C++ and Objective-C.")
719 (license license:boost1.0)))
720
721(define-public cbehave
722 ;; XXX: The last time updated on <2013-07-12>, the only user is tinydir
723 ;; package.
724 (let ((commit "5deaea0eaaf52f1c5ccdac0c68c003988f348fb4")
725 (revision "1"))
726 (package
727 (name "cbehave")
728 (version (git-version "0.2.0" revision commit))
729 (source (origin
730 (method git-fetch)
731 (uri (git-reference
732 (url "https://github.com/bigwhite/cbehave")
733 (commit commit)))
734 (file-name (git-file-name name version))
735 (sha256
736 (base32
737 "0kicawxmxn059n3rmfc7r2q5wfjrqbr6lm8dmsi86ba76ak0f9gi"))
738 (snippet
739 #~(begin
740 (for-each delete-file
741 '("aclocal.m4"
742 "config.guess" "config.sub" "configure"
743 "depcomp" "install-sh"
744 "libtool" "ltmain.sh" "missing"
745 "Makefile.in" "src/Makefile.in"
746 "src/example/Makefile.in"))))))
747 (build-system gnu-build-system)
748 (arguments
749 (list
750 #:configure-flags
751 #~(list "CFLAGS=-g -O2 -Wno-error=implicit-function-declaration"
752 "--enable-shared"
753 "--disable-static")
754 #:phases
755 #~(modify-phases %standard-phases
756 (add-before 'bootstrap 'rename-configure.in
757 (lambda _
758 (rename-file "configure.in" "configure.ac")))
759 (add-after 'rename-configure.in 'set-AM_PROG_AR
760 (lambda _
761 (substitute* "configure.ac"
762 (("^AC_PROG_LIBTOOL.*" orig)
763 (string-append "AM_PROG_AR\n" orig)))))
764 (add-after 'set-AM_PROG_AR 'enable-tests
765 (lambda _
766 (let ((port (open-file "src/example/Makefile.am" "a")))
767 (display (string-append "\nTESTS = calculator_test"
768 " text_editor_test string_test"
769 " product_database_test mock_test\n")
770 port)
771 (close-port port))))
772 (add-before 'check 'create-dummy-file
773 (lambda _
774 (invoke "touch" "src/example/foo.txt"))))))
775 (native-inputs (list autoconf automake libtool))
776 (home-page "https://github.com/bigwhite/cbehave")
777 (synopsis "Behavior-driven development framework")
778 (description "CBehave is a behavior-driven development implemented in C.
779It allows the specification of behaviour scenarios using a given-when-then
780pattern.")
781 (license license:apsl2))))
782
783(define-public catch2
784 (package
785 (name "catch2")
786 (version "3.16.0")
787 (source
788 (origin
789 (method git-fetch)
790 (uri (git-reference
791 (url "https://github.com/catchorg/Catch2")
792 (commit (string-append "v" version))))
793 (file-name (git-file-name name version))
794 (sha256
795 (base32
796 "13z43pniw76w5iv2j52anz6g22xi796a7vinfhf64d6b1i6xkwxy"))))
797 (build-system cmake-build-system)
798 (arguments
799 (list
800 #:configure-flags
801 #~(list "-DCATCH_DEVELOPMENT_BUILD=ON"
802 "-DCATCH_ENABLE_WERROR=OFF"
803 "-DBUILD_SHARED_LIBS=ON"
804 #$@(if (target-x86-32?)
805 ;; Lower precision to the regular 64-bit IEEE floats, to
806 ;; avoid failures in tests comparing floats.
807 #~("-DCMAKE_CXX_FLAGS=-msse2 -mfpmath=sse")
808 #~()))))
809 (inputs (list python-wrapper))
810 (home-page "https://github.com/catchorg/Catch2")
811 (synopsis "Automated test framework for C++ and Objective-C")
812 (description "Catch2 stands for C++ Automated Test Cases in Headers and is
813a multi-paradigm automated test framework for C++ and Objective-C.")
814 (license license:boost1.0)))
815
816(define-public catch2-3.5
817 (package
818 (inherit catch2)
819 (name "catch2")
820 (version "3.5.3")
821 (source (origin
822 (method git-fetch)
823 (uri (git-reference
824 (url "https://github.com/catchorg/Catch2")
825 (commit (string-append "v" version))))
826 (file-name (git-file-name name version))
827 (sha256
828 (base32
829 "11yla93vm2896fzhm3fz8lk3y3iz5iy7vd6wa7wnwvhsfd2dbfq3"))))))
830
831(define-public cmocka
832 (package
833 (name "cmocka")
834 (version "1.1.5")
835 (source (origin
836 (method url-fetch)
837 (uri (string-append "https://cmocka.org/files/"
838 (version-major+minor version) "/cmocka-"
839 version ".tar.xz"))
840 (sha256
841 (base32
842 "1dm8pdvkyfa8dsbz9bpq7wwgixjij4sii9bbn5sgvqjm5ljdik7h"))))
843 (build-system cmake-build-system)
844 (arguments
845 `(#:tests? #f)) ; no test target
846 (home-page "https://cmocka.org/")
847 (synopsis "Unit testing framework for C")
848 (description "Cmocka is a unit testing framework for C with support for
849mock objects. It only requires the standard C library, and works with
850different compilers. Cmocka supports several different message output formats
851like Test Anything Protocol, Subunit, xUnit XML or the original cmockery output
852format.")
853 (license license:asl2.0)))
854
855(define-public cppcheck
856 (package
857 (name "cppcheck")
858 (version "2.21.0")
859 (source (origin
860 (method git-fetch)
861 (uri (git-reference
862 (url "https://github.com/cppcheck-opensource/cppcheck")
863 (commit version)))
864 (file-name (git-file-name name version))
865 (sha256
866 (base32 "0skh0rpv7vkadwzisz0sgbag7mmp0s2p6273q849w2sb73jzdcyb"))
867 (patches (search-patches "cppcheck-fix-basedir-test.patch"))))
868 (build-system cmake-build-system)
869 (arguments
870 '(#:parallel-tests? #f
871 #:configure-flags '("-DBUILD_TESTING=ON"
872 "-DUSE_BUNDLED_TINYXML2=OFF")
873 #:phases
874 (modify-phases %standard-phases
875 (add-after 'unpack 'fix-testcondition-test
876 (lambda _
877 (substitute* "test/testcondition.cpp"
878 (("test.cpp:4\\] -> \\[test.cpp:6")
879 "test.cpp:4:25] -> [test.cpp:6:18")
880 (("test.cpp:3\\] -> \\[test.cpp:5(.*false)"_ rest)
881 (string-append "test.cpp:3:22] -> [test.cpp:5:22" rest
882 " [knownConditionTrueFalse]"))))))))
883 (inputs
884 (list tinyxml2))
885 (home-page "https://cppcheck.sourceforge.io")
886 (synopsis "Static C/C++ code analyzer")
887 (description "Cppcheck is a static code analyzer for C and C++. Unlike
888C/C++ compilers and many other analysis tools it does not detect syntax errors
889in the code. Cppcheck primarily detects the types of bugs that the compilers
890normally do not detect. The goal is to detect only real errors in the code
891(i.e. have zero false positives).")
892 (license license:gpl3+)))
893
894(define-public cukinia
895 (package
896 (name "cukinia")
897 (version "0.9.0")
898 (source (origin
899 (method git-fetch)
900 (uri (git-reference
901 (url "https://github.com/savoirfairelinux/cukinia")
902 (commit (string-append "v" version))))
903 (file-name (git-file-name name version))
904 (sha256
905 (base32
906 "0glf7pvw95sirnm6n791pdn8z6i6fbgl2cmrvb9rkpkrvi4cx77v"))))
907 (build-system gnu-build-system)
908 (arguments
909 (list
910 ;; The test suite assumes the host system runs systemd, has a root user,
911 ;; among other things (see:
912 ;; https://github.com/savoirfairelinux/cukinia/issues/51).
913 #:tests? #f
914 #:phases
915 #~(modify-phases %standard-phases
916 (delete 'configure) ;no configure script
917 (delete 'build) ;no build system
918 (replace 'check
919 (lambda* (#:key tests? #:allow-other-keys)
920 (when tests?
921 (invoke "./cukinia" "tests/testcases.conf"))))
922 (replace 'install
923 (lambda _
924 (install-file "cukinia" (string-append #$output "/bin")))))))
925 (home-page "https://github.com/savoirfairelinux/cukinia")
926 (synopsis "Simple on-target system test framework")
927 (description "Cukinia is designed to help GNU/Linux-based embedded
928firmware developers run simple system-level validation tests on their
929firmware. Cukinia integrates well with embedded firmware generation
930frameworks such as Buildroot and Yocto, and can be run manually or by your
931favourite continuous integration framework. Among Cukinia features are:
932@itemize
933@item simple to use
934@item no dependencies other than BusyBox or GNU Coreutils
935@item easy integration with CI/CD pipelines.
936@end itemize")
937 (license (list license:gpl3+ license:asl2.0)))) ;dual license
938
939(define-public cxxtest
940 (package
941 (name "cxxtest")
942 ;; 4.4 is from 2014, there is some move on master branch but still no
943 ;; fresh tag, see: <https://github.com/CxxTest/cxxtest/issues/156>.
944 (version "4.4")
945 (source
946 (origin
947 (method url-fetch)
948 (uri (string-append "mirror://sourceforge/cxxtest/cxxtest/" version
949 "/cxxtest-" version ".tar.gz"))
950 (sha256
951 (base32 "1n7pbj4z9ivx005hqvivj9ddhq8awynzg6jishfbypf6j7ply58w"))))
952 (build-system pyproject-build-system)
953 (arguments
954 (list
955 ;; XXX: There are SCons and CMake tests, but not pytest ones.
956 #:tests? #f
957 #:phases
958 #~(modify-phases %standard-phases
959 (add-after 'unpack 'chdir-to-source
960 (lambda _
961 (chdir "python")))
962 (add-after 'install 'install-headers
963 (lambda* (#:key outputs #:allow-other-keys)
964 (let ((include-dir (string-append #$output "/include/cxxtest")))
965 (for-each (lambda (header-file)
966 (install-file header-file include-dir))
967 (find-files "../cxxtest")))))
968 (add-after 'install 'install-doc
969 (lambda* (#:key outputs #:allow-other-keys)
970 (let ((doc-dir (string-append #$output "/share/doc/cxxtest")))
971 (install-file "../README" doc-dir)
972 (install-file "../doc/guide.txt" doc-dir)
973 (copy-recursively "../sample"
974 (string-append doc-dir "/sample"))))))))
975 (native-inputs (list python-setuptools))
976 (propagated-inputs (list python-ply))
977 (home-page
978 "https://web.archive.org/web/20230604070022/http://cxxtest.com/")
979 (synopsis "Unit testing framework for C++")
980 (description
981 "CxxTest is a unit testing framework for C++ that is similar in spirit to
982JUnit, CppUnit, and xUnit. CxxTest does not require precompiling a CxxTest
983testing library, it employs no advanced features of C++ (e.g. RTTI) and it
984supports a very flexible form of test discovery.")
985 (license license:lgpl3+)))
986
987(define-public doctest
988 (package
989 (name "doctest")
990 (version "2.4.9")
991 (home-page "https://github.com/onqtam/doctest")
992 (source (origin
993 (method git-fetch)
994 (uri (git-reference (url home-page)
995 (commit (string-append "v" version))))
996 (file-name (git-file-name name version))
997 (sha256
998 (base32
999 "1pkpwwvskcr21p00zrbnxpddv34p605mls86qirqqdwggmws82ds"))))
1000 (build-system cmake-build-system)
1001 (synopsis "C++ test framework")
1002 (description
1003 "doctest is a single-header testing framework for C++11 and later. It
1004has been designed to be fast, light and unintrusive.")
1005 (license license:expat)))
1006
1007(define-public doctest-next
1008 (package
1009 (inherit doctest)
1010 (version "2.4.12")
1011 (source (origin
1012 (method git-fetch)
1013 (uri (git-reference (url (package-home-page doctest))
1014 (commit (string-append "v" version))))
1015 (file-name (git-file-name (package-name doctest) version))
1016 (sha256
1017 (base32
1018 "1bwywljm4lzgwl5mig0h4621z7lx3xz0lzhwq9ys71lxdh8ka6qp"))))))
1019
1020(define-public ftest
1021 ;; There aren't any releases and it looks more like a small side project.
1022 ;; It is included for completeness to run tests for package utfcpp.
1023 (let ((commit "c4ad4af0946b73ce1a40cbc72205d15d196c7e06")
1024 (revision "0"))
1025 (package
1026 (name "ftest")
1027 (version (git-version "0" revision commit))
1028 (source (origin
1029 (method git-fetch)
1030 (uri (git-reference
1031 (url "https://github.com/nemtrif/ftest")
1032 (commit commit)))
1033 (file-name (git-file-name name version))
1034 (sha256
1035 (base32
1036 "1jcd76zjhx5f2nsi80hj7gmywgpz1f7vcw8lv5yf7gx0l99dn86x"))))
1037 ;; No CMakeLists.txt file provided, only one to run tests
1038 (build-system copy-build-system)
1039 (arguments
1040 (list #:install-plan
1041 #~'(("ftest.h" "include/ftest/"))
1042 #:phases
1043 #~(modify-phases %standard-phases
1044 (add-before 'install 'check
1045 (lambda _
1046 (with-directory-excursion "tests"
1047 (invoke "cmake" ".")
1048 (invoke "make")
1049 (invoke "ctest")))))))
1050 (native-inputs (list cmake-minimal))
1051 (home-page "https://github.com/nemtrif/ftest")
1052 (synopsis "C++ testing framework")
1053 (description
1054 "This package provides a simple and limited unit-test framework for C++.")
1055 (license license:boost1.0))))
1056
1057(define-public kyua
1058 (package
1059 (name "kyua")
1060 (version "0.14.1")
1061 (source
1062 (origin
1063 (method git-fetch)
1064 (uri (git-reference
1065 (url "https://github.com/freebsd/kyua")
1066 (commit (string-append name "-" version))))
1067 (file-name (git-file-name name version))
1068 (sha256
1069 (base32
1070 "0w238ynhnjz7p2v8fbgxv35kl1x7a4vs86227qhb4gxncr75nsbl"))))
1071 (build-system gnu-build-system)
1072 (arguments
1073 (list
1074 #:phases
1075 #~(modify-phases %standard-phases
1076 (add-after 'unpack 'patch-paths
1077 (lambda _
1078 (substitute* '("Makefile.am"
1079 "utils/process/isolation_test.cpp"
1080 "utils/stacktrace_test.cpp"
1081 "integration/utils.sh"
1082 "integration/cmd_test_test.sh")
1083 (("/bin/sh")
1084 ;; The 'local-kyua' generated script in Makefile.am is used
1085 ;; to run the built kyua binary for tests.
1086 (which "sh")))))
1087 (add-after 'unpack 'fix-to_absolute-test
1088 ;; This test checks for the existence of /bin and /bin/ls.
1089 (lambda _
1090 (substitute* "utils/fs/path_test.cpp"
1091 (("chdir\\(\"/bin\")")
1092 (format #f "chdir(~s)" (dirname (which "ls"))))
1093 (("\"/bin/ls\"")
1094 (string-append "\"" (which "ls") "\"")))))
1095 (add-after 'unpack 'disable-problematic-tests
1096 (lambda _
1097 ;; The stacktrace tests expect core files to be dumped to the
1098 ;; current directory, which doesn't happen with our kernel
1099 ;; configuration (see:
1100 ;; https://github.com/freebsd/kyua/issues/214).
1101 (substitute* "utils/Kyuafile"
1102 ((".*atf_test_program.*stacktrace_test.*")
1103 "")))))))
1104 (native-inputs
1105 (list autoconf
1106 automake
1107 gdb-minimal
1108 libtool
1109 pkg-config))
1110 (inputs
1111 (list atf
1112 lutok
1113 sqlite))
1114 (home-page "https://github.com/freebsd/kyua")
1115 (synopsis "Testing framework for infrastructure software")
1116 (description
1117 "Kyua is a lightweight and simple testing framework for infrastructure
1118software., integrating well with various build systems and continuous
1119integration frameworks.
1120
1121Kyua features an expressive test suite definition language, a safe runtime
1122engine for test suites and a powerful report generation engine.
1123
1124Kyua is able to execute test programs written with a plethora of testing
1125libraries and languages. The library of choice is @code{atf}, for which Kyua
1126was originally designed, but simple, framework-less and @acronym{TAP, Test
1127Anything Protocol} compliant programs can also be executed through Kyua.")
1128 (license license:bsd-3)))
1129
1130(define-public googletest
1131 (package
1132 (name "googletest")
1133 (version "1.17.0")
1134 (source
1135 (origin
1136 (method git-fetch)
1137 (uri (git-reference
1138 (url "https://github.com/google/googletest")
1139 (commit (string-append "v" version))))
1140 (file-name (git-file-name name version))
1141 (sha256
1142 (base32 "1zn701fgmbk29y45p49sajaswm01i2bv89ds2kkbiq8i0p2cr08w"))))
1143 (build-system cmake-build-system)
1144 (arguments
1145 `(#:tests? #f
1146 #:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
1147 (native-inputs (list python-wrapper))
1148 (home-page "https://github.com/google/googletest/")
1149 (synopsis "Test discovery and XUnit test framework")
1150 (description "Google Test features an XUnit test framework, automated test
1151discovery, death tests, assertions, parameterized tests and XML test report
1152generation.")
1153 (license license:bsd-3)))
1154
1155(define-public googletest-1.13
1156 (package
1157 (inherit googletest)
1158 (name "googletest")
1159 (version "1.13.0")
1160 (source
1161 (origin
1162 (method git-fetch)
1163 (uri (git-reference
1164 (url "https://github.com/google/googletest")
1165 (commit (string-append "v" version))))
1166 (file-name (git-file-name name version))
1167 (sha256
1168 (base32 "1x5lr1k4kgw3i8d7c12vp759p0w8c8r2y8lwvqswswxvwygw8lid"))))))
1169
1170(define-public googletest-1.12
1171 (package
1172 (inherit googletest-1.13)
1173 (name "googletest")
1174 (version "1.12.1")
1175 (source
1176 (origin
1177 (method git-fetch)
1178 (uri (git-reference
1179 (url "https://github.com/google/googletest")
1180 (commit (string-append "v" version))))
1181 (file-name (git-file-name name version))
1182 (sha256
1183 (base32 "1cv55x3amwrvfan9pr8dfnicwr8r6ar3yf6cg9v6nykd6m2v3qsv"))))))
1184
1185(define-public googletest-1.8
1186 (package
1187 (inherit googletest)
1188 (version "1.8.1")
1189 (source (origin
1190 (method git-fetch)
1191 (uri (git-reference
1192 (url "https://github.com/google/googletest")
1193 (commit (string-append "release-" version))))
1194 (file-name (git-file-name "googletest" version))
1195 (sha256
1196 (base32
1197 "0270msj6n7mggh4xqqjp54kswbl7mkcc8px1p5dqdpmw5ngh9fzk"))))))
1198
1199(define-public googlebenchmark
1200 (package
1201 (name "googlebenchmark")
1202 (version "1.9.1")
1203 (home-page "https://github.com/google/benchmark")
1204 (source (origin
1205 (method git-fetch)
1206 (uri (git-reference (url home-page)
1207 (commit (string-append "v" version))))
1208 (file-name (git-file-name "google-benchmark" version))
1209 (sha256
1210 (base32
1211 "1ky51j4hbqcaxp7i7sfiyh1435mgyijgbfgc48bbmi52vgay0477"))))
1212 (build-system cmake-build-system)
1213 (arguments
1214 '(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON"
1215 (string-append
1216 "-DGOOGLETEST_PATH="
1217 (assoc-ref %build-inputs "googletest")))))
1218 (inputs
1219 `(("googletest" ,(package-source googletest))))
1220 (synopsis "C++ library to support the benchmarking of functions")
1221 (description
1222 "The googlebenchmark C++ library support the benchmarking of functions,
1223similar to unit tests.")
1224 (license license:asl2.0)))
1225
1226(define-public gotestsum
1227 (package
1228 (name "gotestsum")
1229 (version "1.12.3")
1230 (source
1231 (origin
1232 (method git-fetch)
1233 (uri (git-reference
1234 (url "https://github.com/gotestyourself/gotestsum")
1235 (commit (string-append "v" version))))
1236 (file-name (git-file-name name version))
1237 (sha256
1238 (base32 "1pj2d2rjab1zdzrc88ksf2v09fk9is9hg4rn6grcyaq76b8l3jcg"))))
1239 (build-system go-build-system)
1240 (arguments
1241 (list
1242 #:install-source? #f
1243 #:import-path "gotest.tools/gotestsum"
1244 #:test-flags
1245 #~(list "-skip"
1246 (string-join
1247 (list "TestE2E_IgnoresWarnings"
1248 "TestE2E_MaxFails_EndTestRun"
1249 "TestE2E_RerunFails/first_run_has_errors,_abort_rerun"
1250 "TestE2E_RerunFails/reruns_continues_to_fail"
1251 "TestE2E_RerunFails/reruns_until_success"
1252 "TestScanTestOutput_TestTimeoutPanicRace/panic-race-2")
1253 "|"))
1254 ;; Run just unit test, integration tests from "testjson" require: run
1255 ;; 'go test . -update' to automatically update
1256 ;; testdata/summary/with-run-id to the new expected value.'
1257 #:test-subdirs #~(list "cmd/..." "internal/...")))
1258 (native-inputs
1259 (list go-github-com-bitfield-gotestdox
1260 go-github-com-dnephin-pflag
1261 go-github-com-fatih-color
1262 go-github-com-fsnotify-fsnotify
1263 go-github-com-google-go-cmp
1264 go-github-com-google-shlex
1265 go-golang-org-x-sync
1266 go-golang-org-x-sys
1267 go-golang-org-x-term
1268 go-golang-org-x-tools
1269 go-gotest-tools-v3))
1270 (home-page "https://github.com/gotestyourself/gotestsum")
1271 (synopsis "Go test runner with output optimized for humans")
1272 (description
1273 "This package provides a @code{go test} runner with output optimized for
1274humans, JUnit XML for CI integration, and a summary of the test results.")
1275 (license license:asl2.0)))
1276
1277(define-public greatest
1278 (package
1279 (name "greatest")
1280 (version "1.5.0")
1281 (source (origin
1282 (method git-fetch)
1283 (uri (git-reference
1284 (url "https://github.com/silentbicycle/greatest")
1285 (commit (string-append "v" version))))
1286 (file-name (git-file-name name version))
1287 (sha256
1288 (base32
1289 "11rajkb5m7mlzi3i3v0i27k6rrjw3x8a7bl6fkc29igzpwfbxndy"))))
1290 (build-system copy-build-system)
1291 (arguments (list #:install-plan
1292 #~'(("greatest.h" "include/"))))
1293 (home-page "https://github.com/silentbicycle/greatest")
1294 (synopsis "Single-header test system")
1295 (description "Greatest is a single-header test system for C, including
1296macros for defining tests, grouping them into suites, and providing a test
1297runner. It is quite unopinionated with most of its features being optional.")
1298 (license license:isc)))
1299
1300(define-public klee-uclibc
1301 (let ((commit "955d502cc1f0688e82348304b053ad787056c754"))
1302 (package
1303 (name "klee-uclibc")
1304 (version (git-version "20230612" "0" commit))
1305 (source
1306 (origin
1307 (method git-fetch)
1308 (uri (git-reference
1309 (url "https://github.com/klee/klee-uclibc")
1310 (commit commit)))
1311 (file-name (git-file-name name version))
1312 (sha256
1313 (base32 "12fnr5mq80cxwvv09gi844mi31jgi8067swagxnlxlhxj4mi125j"))))
1314 (build-system gnu-build-system)
1315 (supported-systems '("x86_64-linux"))
1316 (arguments
1317 `(#:tests? #f ;upstream uClibc tests do not work in the fork
1318 #:strip-directories '() ;only ships a static library, so don't strip anything.
1319 #:phases (modify-phases %standard-phases
1320 ;; Disable locales as these would have to be downloaded and
1321 ;; shouldn't really be needed for symbolic execution either.
1322 (add-after 'unpack 'patch-config
1323 (lambda _
1324 (substitute* "klee-premade-configs/x86_64/config"
1325 (("UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA=y")
1326 "UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA=n")
1327 (("UCLIBC_PREGENERATED_LOCALE_DATA=y")
1328 "UCLIBC_PREGENERATED_LOCALE_DATA=n")
1329 (("UCLIBC_HAS_LOCALE=y")
1330 "UCLIBC_HAS_LOCALE=n")
1331 (("UCLIBC_HAS_XLOCALE=y")
1332 "UCLIBC_HAS_XLOCALE=n"))))
1333
1334 ;; Upstream uses a custom non-GNU configure script written
1335 ;; in Python, replace the default configure phase accordingly.
1336 (replace 'configure
1337 (lambda _
1338 (invoke "./configure" "--make-llvm-lib"
1339 "--enable-release")))
1340
1341 ;; Custom install phase to only install the libc.a file manually.
1342 ;; This is the only file which is used/needed by KLEE itself.
1343 (replace 'install
1344 (lambda* (#:key outputs #:allow-other-keys)
1345 (install-file "lib/libc.a"
1346 (string-append (assoc-ref outputs "out")
1347 "/lib/klee")))))))
1348 ;; ncurses is only needed for the `make menuconfig` interface.
1349 (native-inputs (list clang-16 llvm-16 python ncurses))
1350 (synopsis "Variant of uClibc tailored to symbolic execution")
1351 (description
1352 "Modified version of uClibc for symbolic execution of
1353Unix userland software. This library can only be used in conjunction
1354with the @code{klee} package.")
1355 (home-page "https://klee-se.org/")
1356 (license license:lgpl2.1))))
1357
1358(define-public klee
1359 (package
1360 (name "klee")
1361 (version "3.2")
1362 (source
1363 (origin
1364 (method git-fetch)
1365 (uri (git-reference
1366 (url "https://github.com/klee/klee")
1367 (commit (string-append "v" version))))
1368 (file-name (git-file-name name version))
1369 (sha256
1370 (base32 "0rvvdbv0c6b2jhsdxhzcbm0smzndd4ibsg1bxwjw0mwkpk21yfph"))))
1371 (arguments
1372 (list
1373 #:strip-directories #~(list "bin") ;don't strip LLVM bitcode in /lib
1374 #:modules '((guix build cmake-build-system)
1375 ((guix build gnu-build-system) #:prefix gnu:)
1376 (guix build utils))
1377 #:phases
1378 #~(modify-phases %standard-phases
1379 (add-after 'unpack 'patch
1380 (lambda _
1381 ;; Allow specification of an absolute full path to uclibc.
1382 (substitute* "CMakeLists.txt"
1383 (("\\$\\{KLEE_UCLIBC_PATH\\}/lib/libc\\.a")
1384 "${KLEE_UCLIBC_PATH}"))
1385 ;; Make sure that we retain the value of the GUIX_PYTHONPATH
1386 ;; environment variable in the test environmented created by
1387 ;; python-lit. Otherwise, the test scripts won't be able to
1388 ;; find the python-tabulate dependency, causing test failures.
1389 (substitute* "test/lit.cfg"
1390 (("addEnv\\('PWD'\\)" env)
1391 (string-append env "\n" "addEnv('GUIX_PYTHONPATH')")))))
1392 (replace 'check (assoc-ref gnu:%standard-phases 'check))
1393 (add-after 'install 'wrap-programs
1394 (lambda* (#:key inputs outputs #:allow-other-keys)
1395 (let* ((out (assoc-ref outputs "out"))
1396 (bin (string-append out "/bin"))
1397 (lib (string-append out "/lib")))
1398 ;; Ensure that klee-stats finds its Python dependencies.
1399 (wrap-program (string-append bin "/klee-stats")
1400 `("GUIX_PYTHONPATH" ":" prefix
1401 ,(search-path-as-string->list
1402 (getenv "GUIX_PYTHONPATH"))))
1403 ;; Ensure that klee finds runtime libraries (e.g. uclibc).
1404 (wrap-program (string-append bin "/klee")
1405 `("KLEE_RUNTIME_LIBRARY_PATH" =
1406 (,(string-append lib "/klee/runtime/"))))))))
1407 #:configure-flags
1408 #~(list "-DENABLE_UNIT_TESTS=ON"
1409 "-DENABLE_SYSTEM_TESTS=ON"
1410 (string-append "-DGTEST_SRC_DIR="
1411 #+(package-source googletest))
1412 (string-append "-DGTEST_INCLUDE_DIR="
1413 #+(package-source googletest) "/googletest/include")
1414 (string-append "-DLLVMCC="
1415 (search-input-file %build-inputs "/bin/clang"))
1416 (string-append "-DLLVMCXX="
1417 (search-input-file %build-inputs "/bin/clang++"))
1418 (string-append "-DKLEE_UCLIBC_PATH="
1419 (search-input-file %build-inputs "/lib/klee/libc.a"))
1420 "-DENABLE_POSIX_RUNTIME=ON")))
1421 (native-inputs (list clang-16 llvm-16 python-lit))
1422 (inputs (list bash-minimal klee-uclibc gperftools sqlite z3 python python-tabulate))
1423 (build-system cmake-build-system)
1424 (supported-systems '("x86_64-linux"))
1425 (home-page "https://klee-se.org/")
1426 (synopsis "Symbolic execution engine")
1427 (description "KLEE is a symbolic virtual machine built on top of the LLVM
1428compiler infrastructure.")
1429 (license license:bsd-3)))
1430
1431(define-public cpputest
1432 (package
1433 (name "cpputest")
1434 (version "4.0")
1435 (source
1436 (origin
1437 (method url-fetch)
1438 (uri (string-append "https://github.com/cpputest/cpputest/releases/download/v"
1439 version "/cpputest-" version ".tar.gz"))
1440 (sha256
1441 (base32
1442 "1xslavlb1974y5xvs8n1j9zkk05dlw8imy4saasrjlmibl895ii1"))))
1443 (build-system gnu-build-system)
1444 (native-inputs
1445 (list googletest))
1446 (home-page "https://cpputest.github.io/")
1447 (synopsis "Unit testing and mocking framework for C/C++")
1448 (description
1449 "CppUTest is a C/C++ based unit xUnit test framework. It is written in
1450C++ but is used in C and C++ projects and frequently used in embedded systems
1451but it works for any C/C++ project.")
1452 (license license:bsd-3)))
1453
1454(define-public actionlint
1455 (package
1456 (name "actionlint")
1457 (version "1.7.7")
1458 (source
1459 (origin
1460 (method git-fetch)
1461 (uri (git-reference
1462 (url "https://github.com/rhysd/actionlint")
1463 (commit (string-append "v" version))))
1464 (file-name (git-file-name name version))
1465 (sha256
1466 (base32 "0xbsrcvklxn0lppikabwrizav945jk85d0mz16zc3spxc80plrvn"))))
1467 (build-system go-build-system)
1468 (arguments
1469 (list
1470 #:install-source? #f
1471 #:build-flags
1472 #~(list (string-append
1473 "-ldflags=-X github.com/rhysd/actionlint.version=" #$version))
1474 #:import-path "github.com/rhysd/actionlint/cmd/actionlint"
1475 #:unpack-path "github.com/rhysd/actionlint"
1476 #:test-subdirs #~(list "../../"))) ;test from project's root
1477 ;; XXX: Install Man page, wrap with shellcheck and pyflakes.
1478 (native-inputs
1479 (list go-github-com-bmatcuk-doublestar-v4
1480 go-github-com-fatih-color
1481 go-github-com-google-go-cmp
1482 go-github-com-mattn-go-colorable
1483 go-github-com-mattn-go-runewidth
1484 go-github-com-mattn-go-shellwords
1485 go-github-com-robfig-cron-v3
1486 go-github-com-yuin-goldmark
1487 go-golang-org-x-sync
1488 go-golang-org-x-sys
1489 go-gopkg-in-yaml-v3))
1490 (home-page "https://rhysd.github.io/actionlint/")
1491 (synopsis "Static checker for GitHub Actions workflow files")
1492 (description
1493 "actionlint is a static checker for GitHub Actions
1494workflow files. Features include:
1495
1496@itemize
1497@item Syntax check for workflow files to check unexpected or missing
1498keys following workflow syntax
1499@item Strong type check for @code{$@{@{ @}@}} expressions to catch
1500several semantic errors like access to not existing property, type
1501mismatches, ...
1502@item Actions usage check to check that inputs at @code{with:} and
1503outputs in @code{steps.@{id@}.outputs} are correct
1504@item Reusable workflow check to check inputs/outputs/secrets of
1505reusable workflows and workflow calls
1506@item shellcheck and pyflakes integrations for scripts at @code{run:}
1507@item Security checks; script injection by untrusted inputs,
1508hard-coded credentials
1509@item Other several useful checks; glob syntax validation,
1510dependencies check for @code{needs:}, runner label validation, cron
1511syntax validation, ...
1512@end itemize
1513")
1514 (license license:expat)))
1515
1516(define-public python-parameterized
1517 (package
1518 (name "python-parameterized")
1519 (version "0.9.0")
1520 (source
1521 (origin
1522 (method url-fetch)
1523 (uri (pypi-uri "parameterized" version))
1524 (sha256
1525 (base32 "1c89vc40zj5aj2zvbvw875wqpyf0x6xrqhm3q5jg797g5hkhbjbz"))))
1526 (build-system pyproject-build-system)
1527 ;; See: <https://github.com/wolever/parameterized/issues/181>,
1528 ;; <https://github.com/wolever/parameterized/issues/167>,
1529 ;; <https://github.com/wolever/parameterized/pull/162>.
1530 (arguments
1531 (list #:tests? #f))
1532 (native-inputs
1533 (list python-setuptools))
1534 (home-page "https://github.com/wolever/parameterized")
1535 (synopsis "Parameterized testing with any Python test framework")
1536 (description
1537 "Parameterized is a Python library that aims to fix parameterized testing
1538for every Python test framework. It supports nose, py.test, and unittest.")
1539 (license license:bsd-2)))
1540
1541(define-public python-minimock
1542 (package
1543 (name "python-minimock")
1544 (version "1.3.0")
1545 (source
1546 (origin
1547 (method git-fetch)
1548 (uri (git-reference
1549 (url "https://github.com/lowks/minimock")
1550 (commit (string-append "v" version))))
1551 (file-name (git-file-name name version))
1552 (sha256
1553 (base32 "0mby3y78w8zka3dwp2dnsq3a0bq9nxr5g0h538p6zbyjrqly5paj"))))
1554 (build-system pyproject-build-system)
1555 (native-inputs (list python-pynose python-setuptools))
1556 (home-page "https://github.com/lowks/minimock")
1557 (synopsis "Simple Python library for using mock objects")
1558 (description
1559 "MiniMock is a simple library for building mock objects with doctest.")
1560 (license license:expat)))
1561
1562(define-public python-mock
1563 (package
1564 (name "python-mock")
1565 (version "5.2.0")
1566 (source
1567 (origin
1568 (method git-fetch)
1569 (uri (git-reference
1570 (url "https://github.com/testing-cabal/mock")
1571 (commit version)))
1572 (file-name (git-file-name name version))
1573 (sha256
1574 (base32 "1ph3g75znd4k10vzmcrv0jqzhqmi6ps1a2icvxv7p6yn1sbbcb3b"))))
1575 (build-system pyproject-build-system)
1576 (native-inputs
1577 (list python-pytest
1578 python-setuptools))
1579 (home-page "https://github.com/testing-cabal/mock")
1580 (synopsis "Python mocking and patching library for testing")
1581 (description
1582 "Mock is a library for testing in Python. It allows you to replace parts
1583of your system under test with mock objects and make assertions about how they
1584have been used. This library is now part of Python (since Python 3.3),
1585available via the @code{unittest.mock} module.")
1586 (license license:expat)))
1587
1588(define-public python-nose2
1589 (package
1590 (name "python-nose2")
1591 (version "0.16.0")
1592 (source
1593 (origin
1594 (method git-fetch)
1595 (uri (git-reference
1596 (url "https://github.com/nose-devs/nose2")
1597 (commit version)))
1598 (file-name (git-file-name name version))
1599 (sha256
1600 (base32 "0wpi4dw60pknbdj4aq4z00gbq6sgid4klr2jw6vc9n4ma259aayz"))))
1601 (build-system pyproject-build-system)
1602 (arguments
1603 (list #:phases
1604 #~(modify-phases %standard-phases
1605 (replace 'check
1606 (lambda* (#:key tests? #:allow-other-keys)
1607 (when tests?
1608 ;; Tests require nose2 itself.
1609 (setenv "PYTHONPATH" (getcwd))
1610 (invoke (string-append #$output "/bin/nose2") "-v")))))))
1611 (native-inputs
1612 (list python-setuptools))
1613 (home-page "https://github.com/nose-devs/nose2")
1614 (synopsis "Next generation of nicer testing for Python")
1615 (description
1616 "Nose2 is the next generation of nicer testing for Python, based on the
1617plugins branch of unittest2. Nose2 aims to improve on nose by providing a
1618better plugin api, being easier for users to configure, and simplifying internal
1619interfaces and processes.")
1620 (license license:bsd-2)))
1621
1622(define-public python-pytest
1623 (package
1624 (name "python-pytest")
1625 ;; Keep in sync with python-pytest-bootstrap in (gnu packages python-build)
1626 (version "9.0.2")
1627 (source
1628 (origin
1629 (method url-fetch)
1630 (uri (pypi-uri "pytest" version))
1631 (sha256
1632 (base32 "04fz1vbhb2l6k8lmrk8wqhkxhprlnkq21z6rs48rdn1bm58nc63m"))))
1633 (build-system pyproject-build-system)
1634 (arguments
1635 (list
1636 ;; tests: 3933 passed, 115 skipped, 2 deselected, 11 xfailed, 1 xpassed
1637 #:test-flags
1638 ;; Just 2 tests fail:
1639 ;; 1. access to "/usr/" is required.
1640 ;; 2. assertion fails to compare length of the list.
1641 #~(map (lambda (ls)
1642 (string-append "--deselect=" (string-join ls "::")))
1643 '(("testing/test_argcomplete.py"
1644 "TestArgComplete"
1645 "test_remove_dir_prefix")
1646 ("testing/test_assertrewrite.py"
1647 "TestAssertionRewrite"
1648 "test_len")))))
1649 (native-inputs
1650 ;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
1651 (list bash
1652 python-attrs-bootstrap
1653 python-hypothesis
1654 python-setuptools
1655 python-setuptools-scm
1656 python-xmlschema))
1657 (propagated-inputs
1658 (list python-iniconfig
1659 python-packaging-bootstrap
1660 python-pluggy
1661 python-pygments-bootstrap)) ;it is in installation dependencies
1662 (home-page "https://docs.pytest.org/en/latest/")
1663 (synopsis "Python testing library")
1664 (description
1665 "Pytest is a testing tool that provides auto-discovery of test modules
1666and functions, detailed info on failing assert statements, modular fixtures,
1667and many external plugins.")
1668 (license license:expat)))
1669
1670;; It's the last 8.X.X version, released on 2025-09-04.
1671(define-public python-pytest-8
1672 (package
1673 (inherit python-pytest)
1674 (version "8.4.2")
1675 (source
1676 (origin
1677 (method url-fetch)
1678 (uri (pypi-uri "pytest" version))
1679 (sha256
1680 (base32 "008fqfrxvg8s6pgnkffl2day4zzjg54dp932ipan3f866fwx1h46"))))))
1681
1682(define-public python-pytest-cov
1683 (package
1684 (name "python-pytest-cov")
1685 (version "6.0.0")
1686 (source
1687 (origin
1688 (method url-fetch)
1689 (uri (pypi-uri "pytest-cov" version))
1690 (sha256
1691 (base32 "1h5dvj4lr0qpbxqd38g66ab7q41vbx30n0kgszibi2r4raavbq7x"))))
1692 (build-system pyproject-build-system)
1693 (arguments
1694 `(#:phases
1695 (modify-phases %standard-phases
1696 (replace 'check
1697 (lambda _
1698 ;; Options taken from tox.ini.
1699 ;; TODO: make "--restructuredtext" tests pass. They currently fail
1700 ;; with "Duplicate implicit target name".
1701 (invoke "python" "./setup.py" "check"
1702 "--strict" "--metadata"))))))
1703 (native-inputs
1704 (list python-setuptools
1705 python-wheel))
1706 (propagated-inputs
1707 (list python-coverage python-pytest))
1708 (home-page "https://github.com/pytest-dev/pytest-cov")
1709 (synopsis "Pytest plugin for measuring coverage")
1710 (description
1711 "Pytest-cov produces coverage reports. It supports centralised testing and
1712distributed testing in both @code{load} and @code{each} modes. It also
1713supports coverage of subprocesses.")
1714 (license license:expat)))
1715
1716(define-public python-pytest-relaxed
1717 (package
1718 (name "python-pytest-relaxed")
1719 (version "2.0.2")
1720 (source
1721 (origin
1722 (method git-fetch)
1723 (uri (git-reference
1724 (url "https://github.com/bitprophet/pytest-relaxed")
1725 (commit version)))
1726 (file-name (git-file-name name version))
1727 (sha256
1728 (base32 "0j37gkgcag4rpv9g5q2n80425cs1alwx8fwncx3mv7sdgqgdgqnz"))))
1729 (build-system pyproject-build-system)
1730 (arguments
1731 ;; Shaky tests with Pytest@8
1732 (list #:test-flags #~(list "-k" "not test_skips_pytest_fixture")))
1733 (native-inputs
1734 (list python-pytest-bootstrap
1735 python-setuptools))
1736 (propagated-inputs
1737 (list python-decorator))
1738 (home-page "https://github.com/bitprophet/pytest-relaxed")
1739 (synopsis "Relaxed test discovery for pytest")
1740 (description "This package provides relaxed test discovery for pytest.")
1741 (license license:bsd-2)))
1742
1743(define-public python-pytest-dotenv
1744 (package
1745 (name "python-pytest-dotenv")
1746 (version "0.5.2")
1747 (source
1748 (origin
1749 ;; No tests in the PyPI tarball.
1750 (method git-fetch)
1751 (uri (git-reference
1752 (url "https://github.com/quiqua/pytest-dotenv")
1753 (commit version)))
1754 (file-name (git-file-name name version))
1755 (sha256
1756 (base32 "0bdxwaak5clhsd63b9q65nf2amqqv5hfn7dskfakyldxsqnnh0y6"))))
1757 (build-system pyproject-build-system)
1758 (native-inputs
1759 (list python-pytest
1760 python-setuptools
1761 python-wheel))
1762 (propagated-inputs (list python-dotenv))
1763 (home-page "https://github.com/quiqua/pytest-dotenv")
1764 (synopsis "Automatically detect and load a .env file before running tests")
1765 (description
1766 "This Pytest plugin automatically detects and loads environment variables
1767from a .env file before running tests.")
1768 (license license:expat)))
1769
1770(define-public python-pytest-examples
1771 (package
1772 (name "python-pytest-examples")
1773 (version "0.0.13")
1774 (source
1775 (origin
1776 ;; No tests in the PyPI tarball.
1777 (method git-fetch)
1778 (uri (git-reference
1779 (url "https://github.com/pydantic/pytest-examples")
1780 (commit (string-append "v" version))))
1781 (file-name (git-file-name name version))
1782 (sha256
1783 (base32 "11ifavc13s2b7grjv13l6am36v5kw8m9pj75j5hl4ch605ci4j27"))))
1784 (build-system pyproject-build-system)
1785 (arguments
1786 (list
1787 ;; TODO: Rework skipped tests when ruff is availalbe.
1788 ;; tests: 49 passed, 23 deselected, 1 xfailed
1789 #:test-flags
1790 #~(list "-k" (string-join
1791 ;; Disable tests requiring pthon-ruff.
1792 (list "not test_ruff"
1793 "test_find_examples[case_python_class.py:3-10]"
1794 "test_find_examples[my_file.md:3-5]"
1795 "test_find_examples[my_file.md:7-9]"
1796 "test_find_examples[my_file.py:5-7]"
1797 "test_find_run_examples[my_file.md:1-4]"
1798 "test_insert_print[example/README.md:3-33]"
1799 "test_insert_print[example/README.md:37-40]"
1800 "test_insert_print[example/README.md:44-47]"
1801 "test_insert_print[example/README.md:49-66]"
1802 "test_python_self[example/test_example.py:28-31]"
1803 "test_python_self[example/test_example.py:40-43]"
1804 "test_python_self_change_docstyle[example/test_example.py:28-31]"
1805 "test_python_self_change_docstyle[example/test_example.py:40-43]"
1806 "test_ruff_config"
1807 "test_ruff_error"
1808 "test_ruff_offset"
1809 "test_ruff_ok"
1810 ;; Black incompatability faileurs.
1811 "test_black_error"
1812 "test_black_error_multiline"
1813 "test_cases_update[call_twice.md]"
1814 "test_cases_update[dataclass_indent.md]"
1815 "test_cases_update[long_python_lines.py]"
1816 "test_cases_update[python_class.py]"
1817 "test_cases_update[simple.md]"
1818 "test_cases_update[simple.py]"
1819 "test_find_run_examples[my_file.md:3-5]"
1820 "test_run_example_ok_fail"
1821 "test_update_files")
1822 " and not "))
1823 #:phases
1824 #~(modify-phases %standard-phases
1825 (add-after 'unpack 'relax-requirements
1826 (lambda _
1827 (substitute* "pyproject.toml"
1828 ;; XXX: Removing ruff from required packages to pass Sanity
1829 ;; check, add it back when it's available.
1830 (("'ruff>=0.5.0',") "")))))))
1831 (propagated-inputs
1832 ;; TODO: Add python-ruff once it has been packaged.
1833 (list python-black python-pytest))
1834 (native-inputs
1835 (list python-hatchling))
1836 (home-page "https://pypi.org/project/pytest-examples/")
1837 (synopsis "Pytest plugin for testing examples in docstrings and markdown files")
1838 (description
1839 "Pytest-examples provides functionality for testing Python code examples
1840in docstrings and markdown files, with its main features being:
1841
1842@itemize
1843@item lint code examples using ruff and black
1844@item run code examples
1845@item run code examples and check print statements are inlined correctly in
1846the code
1847@item It can also update code examples in place to format them and insert or
1848update print statements
1849@end itemize")
1850 (license license:expat)))
1851
1852(define-public python-pytest-httpserver
1853 (package
1854 (name "python-pytest-httpserver")
1855 (version "1.1.5")
1856 (source
1857 (origin
1858 (method git-fetch)
1859 (uri (git-reference
1860 (url "https://github.com/csernazs/pytest-httpserver")
1861 (commit version)))
1862 (file-name (git-file-name name version))
1863 (sha256
1864 (base32 "0ak1dgwc88ayav933qs46immhlrpyc5a7xflh6f1dr5j00pknrg8"))))
1865 (build-system pyproject-build-system)
1866 (native-inputs
1867 (list python-poetry-core
1868 python-pytest
1869 python-requests))
1870 (propagated-inputs
1871 (list python-werkzeug))
1872 (home-page "https://github.com/csernazs/pytest-httpserver")
1873 (synopsis "HTTP server for pytest")
1874 (description
1875 "Pytest plugin library to test http clients without contacting the real
1876http server.")
1877 (license license:expat)))
1878
1879(define-public python-pytest-nunit
1880 (package
1881 (name "python-pytest-nunit")
1882 (version "1.0.4")
1883 (source
1884 (origin
1885 (method url-fetch)
1886 (uri (pypi-uri "pytest-nunit" version))
1887 (sha256
1888 (base32 "1gw3a33myq9yncjixs3kkcrr1xkjzvvf3xk6x955p3i79wlwkswx"))))
1889 (build-system pyproject-build-system)
1890 (arguments (list #:tests? #false)) ;no tests included
1891 (native-inputs
1892 (list python-pytest
1893 python-setuptools
1894 python-wheel
1895 python-xmlschema))
1896 (propagated-inputs
1897 (list python-attrs
1898 python-pytest))
1899 (home-page "https://github.com/pytest-dev/pytest-nunit")
1900 (synopsis "Pytest plugin for generating NUnit3 test result XML output")
1901 (description
1902 "This package provides a pytest plugin for generating NUnit3 test result
1903XML output")
1904 (license license:expat)))
1905
1906(define-public python-pytest-param-files
1907 (package
1908 (name "python-pytest-param-files")
1909 (version "0.3.4")
1910 (source (origin
1911 (method url-fetch)
1912 (uri (pypi-uri "pytest_param_files" version))
1913 (sha256
1914 (base32
1915 "0gc9nsqizrjapjnbcs1bdxfcl69dpmwbpd9sssjidgcikm7k433c"))))
1916 (build-system pyproject-build-system)
1917 (native-inputs (list python-flit-core))
1918 (propagated-inputs (list python-pytest))
1919 (home-page "https://github.com/chrisjsewell/pytest-param-files")
1920 (synopsis "Pytest plugin to parameterize tests from external files")
1921 (description "This Pytest plugin enables creating Pytest parametrize
1922decorators from external files.")
1923 (license license:expat)))
1924
1925(define-public python-pytest-lazy-fixtures
1926 (package
1927 (name "python-pytest-lazy-fixtures")
1928 (version "1.1.1")
1929 (source
1930 (origin
1931 (method url-fetch)
1932 (uri (pypi-uri "pytest_lazy_fixtures" version))
1933 (sha256
1934 (base32 "1v819n9jrgf0rk2fidn6fkdzz68r4jin94lvy9fbb9gf546iymhc"))))
1935 (native-inputs
1936 (list python-poetry-core))
1937 (propagated-inputs
1938 (list python-pytest))
1939 (build-system pyproject-build-system)
1940 (home-page "https://github.com/dev-petrov/pytest-lazy-fixtures")
1941 (synopsis "Use fixtures in @code{pytest.mark.parametrize}")
1942 (description
1943 "This plugin helps to use fixtures in @code{pytest.mark.parametrize},
1944inspied by @url{https://github.com/TvoroG/pytest-lazy-fixture,
1945pytest-lazy-fixture}.")
1946 (license license:expat)))
1947
1948(define-public python-pytest-mock
1949 (package
1950 (name "python-pytest-mock")
1951 (version "3.15.1")
1952 (source
1953 (origin
1954 (method url-fetch)
1955 (uri (pypi-uri "pytest_mock" version))
1956 (sha256
1957 (base32 "03vsv2q11b6yhs33m9vg852an50qrdrdws92fqcxm5pkyqwa4j8q"))))
1958 (build-system pyproject-build-system)
1959 (arguments
1960 (list
1961 ;; tests: 85 passed, 5 skipped, 3 warnings
1962 ;; Skip the assertion rewriting tests, which don't work in the presence
1963 ;; of read-only Python modules (a limitation of Pytest).
1964 #:test-flags #~(list "--assert=plain")))
1965 (native-inputs
1966 (list python-pytest-asyncio
1967 python-setuptools
1968 python-setuptools-scm))
1969 (propagated-inputs
1970 (list python-pytest))
1971 (home-page "https://github.com/pytest-dev/pytest-mock/")
1972 (synopsis "Thin-wrapper around the mock package for easier use with py.test")
1973 (description
1974 "This plugin installs a @code{mocker} fixture which is a thin-wrapper
1975around the patching API provided by the @code{mock} package, but with the
1976benefit of not having to worry about undoing patches at the end of a test.
1977The mocker fixture has the same API as @code{mock.patch}, supporting the
1978same arguments.")
1979 (license license:expat)))
1980
1981(define-public python-pytest-xdist
1982 (package
1983 (name "python-pytest-xdist")
1984 (version "3.8.0")
1985 (source
1986 (origin
1987 (method url-fetch)
1988 (uri (pypi-uri "pytest_xdist" version))
1989 (sha256
1990 (base32
1991 "1wd9sgcgmx5nj0n1qmfnjmahi38xkzaz54xac440bilvxhjq2mvy"))))
1992 (build-system pyproject-build-system)
1993 (arguments
1994 (list
1995 ;; tests: 193 passed, 6 skipped, 3 deselected, 10 xfailed
1996 #:test-flags
1997 ;; See: <https://github.com/pytest-dev/pytest-xdist/issues/1295>.
1998 #~(list #$@(map (lambda (ls)
1999 (string-append "--deselect=testing/"
2000 (string-join ls "::")))
2001 ;; execnet.gateway_base.RemoteError: Traceback (most
2002 ;; recent call last):
2003 '(("test_looponfail.py"
2004 "TestRemoteControl"
2005 "test_ignore_sys_path_hook_entry")
2006 ;; Failed: matched: '*HOOK: pytest_handlecrashitem'
2007 ("test_newhooks.py"
2008 "TestCrashItem"
2009 "test_handlecrashitem_one")
2010 ;; Failed: nomatch: '*usage: *
2011 ("test_remote.py"
2012 "test_remote_usage_prog"))))))
2013 (native-inputs
2014 (list python-filelock
2015 python-pytest
2016 python-setuptools
2017 python-setuptools-scm))
2018 (propagated-inputs
2019 (list python-execnet))
2020 (home-page "https://github.com/pytest-dev/pytest-xdist")
2021 (synopsis "Pytest plugin for distributed testing and loop-on-failures testing modes")
2022 (description
2023 "The pytest-xdist plugin extends pytest with some unique test execution
2024modes: parallelization, running tests in boxed subprocesses, the ability to
2025run tests repeatedly when failed, and the ability to run tests on multiple
2026Python interpreters or platforms. It uses rsync to copy the existing program
2027code to a remote location, executes there, and then syncs the result back.")
2028 (license license:expat)))
2029
2030(define-public python-pytest-timeout
2031 (package
2032 (name "python-pytest-timeout")
2033 (version "2.4.0")
2034 (source
2035 (origin
2036 (method url-fetch)
2037 (uri (pypi-uri "pytest_timeout" version))
2038 (sha256
2039 (base32
2040 "02jls37lng0qfqc70dm8wg25yjbmbkw02l5j689zgvzr045yjs3y"))))
2041 (build-system pyproject-build-system)
2042 ;; tests: 41 passed, 2 skipped, 4 xfailed
2043 (native-inputs
2044 (list python-pexpect
2045 python-setuptools))
2046 (propagated-inputs
2047 (list python-pytest))
2048 (home-page "https://github.com/pytest-dev/pytest-timeout")
2049 (synopsis "Plugin for py.test to abort hanging tests")
2050 (description
2051 "This package provides a py.test plugin that aborts hanging tests after a
2052timeout has been exceeded.")
2053 (license license:expat)))
2054
2055(define-public python-scripttest
2056 (package
2057 (name "python-scripttest")
2058 (version "2.0")
2059 (source
2060 (origin
2061 (method git-fetch)
2062 (uri (git-reference
2063 (url "https://github.com/pypa/scripttest")
2064 (commit version)))
2065 (file-name (git-file-name name version))
2066 (sha256
2067 (base32 "07cyrh4yp8497radz8cx7la2p8yr78r77xm62hh77hcs1migznaf"))))
2068 (build-system pyproject-build-system)
2069 (native-inputs (list python-pytest python-setuptools python-wheel))
2070 (home-page "https://github.com/pypa/scripttest")
2071 (synopsis "Python library to test command-line scripts")
2072 (description
2073 "Scripttest is a Python helper library for testing interactive
2074command-line applications. With it you can run a script in a subprocess and
2075see the output as well as any file modifications.")
2076 (license license:expat)))
2077
2078(define-public python-testtools
2079 (package
2080 (name "python-testtools")
2081 (version "2.7.2")
2082 (source
2083 (origin
2084 (method url-fetch)
2085 (uri (pypi-uri "testtools" version))
2086 (sha256
2087 (base32 "18vy77n4ab2dvgx5ni6gfp2d0haxhh3yrkm6mih8n3zsy30vprav"))))
2088 (build-system pyproject-build-system)
2089 (arguments
2090 (list
2091 #:test-backend #~'custom
2092 #:test-flags #~(list "-m" "testtools.run" "testtools.tests.test_suite")
2093 #:phases
2094 #~(modify-phases %standard-phases
2095 (add-before 'check 'pre-check
2096 (lambda _
2097 ;; There are six failing tests:
2098 ;; "test_fast_keyboard_interrupt_stops_test_run"
2099 ;; "test_keyboard_interrupt_stops_test_run"
2100 ;; "test_fast_sigint_raises_no_result_error"
2101 ;; "test_fast_sigint_raises_no_result_error_second_time"
2102 ;; "test_sigint_raises_no_result_error"
2103 ;; "test_sigint_raises_no_result_error_second_time"
2104 (substitute* "testtools/tests/twistedsupport/__init__.py"
2105 (("test_spinner,") "")
2106 (("test_runtest,") "")))))))
2107 (native-inputs
2108 (list python-hatch-vcs
2109 python-hatchling
2110 python-twisted
2111 python-testscenarios-bootstrap))
2112 (propagated-inputs
2113 (list python-fixtures))
2114 (home-page "https://github.com/testing-cabal/testtools")
2115 (synopsis "Extensions to the Python standard library unit testing framework")
2116 (description
2117 "Testtools extends the Python standard library unit testing framework to
2118provide matchers, more debugging information, and cross-Python
2119compatibility.")
2120 (license license:expat)))
2121
2122(define-public python-testtools-bootstrap
2123 (hidden-package
2124 (package/inherit python-testtools
2125 (arguments
2126 ;; To break cycle with python-fixtures.
2127 (list #:tests? #f))
2128 (propagated-inputs '()))))
2129
2130;; XXX: The project is not maintained since 2015, consider to remove when
2131;; nothing depends on it.
2132(define-public python-testscenarios
2133 (package
2134 (name "python-testscenarios")
2135 (version "0.5.0")
2136 (source
2137 (origin
2138 (method url-fetch)
2139 (uri (pypi-uri "testscenarios" version))
2140 (sha256
2141 (base32 "1dm2aydqpv76vnsk1pw7k8n42hq58cfi4n1ixy7nyzpaj1mwnmy2"))))
2142 (build-system pyproject-build-system)
2143 (arguments
2144 (list
2145 #:test-backend #~'custom
2146 #:test-flags #~(list "-m" "testtools.run" "testscenarios.test_suite")))
2147 (native-inputs
2148 (list python-setuptools))
2149 (propagated-inputs
2150 (list python-pbr
2151 python-testtools))
2152 (home-page "https://launchpad.net/testscenarios")
2153 (synopsis "Pyunit extension for dependency injection")
2154 (description
2155 "Testscenarios provides clean dependency injection for Python unittest
2156style tests.")
2157 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2158
2159(define-public python-testscenarios-bootstrap
2160 (hidden-package
2161 (package/inherit python-testscenarios
2162 (arguments
2163 ;; To break cycle with python-testtols and python-subunit.
2164 (list #:tests? #f
2165 #:phases
2166 #~(modify-phases %standard-phases
2167 (delete 'sanity-check))))
2168 (propagated-inputs
2169 (list python-pbr)))))
2170
2171(define-public python-testresources
2172 (package
2173 (name "python-testresources")
2174 (version "2.0.2")
2175 (source
2176 (origin
2177 (method url-fetch)
2178 (uri (pypi-uri "testresources" version))
2179 (sha256
2180 (base32 "1v7a3mzi461v4cw4qil094j39wzn8hk10jkm9gi9ybmb01z3vgrc"))))
2181 (build-system pyproject-build-system)
2182 (arguments
2183 (list
2184 #:test-backend #~'custom
2185 #:test-flags #~(list "-m" "testtools.run" "discover")))
2186 (native-inputs
2187 (list python-fixtures
2188 python-setuptools
2189 python-testtools))
2190 (propagated-inputs
2191 (list python-pbr))
2192 (home-page "https://github.com/testing-cabal/testresources")
2193 (synopsis "Pyunit extension for managing test resources")
2194 (description
2195 "Testresources is an extension to Python's unittest to allow declarative
2196use of resources by test cases.")
2197 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2198
2199(define-public python-subunit
2200 (package
2201 (name "python-subunit")
2202 (version "1.4.4")
2203 (source
2204 (origin
2205 (method url-fetch)
2206 (uri (pypi-uri "python-subunit" version))
2207 (sha256
2208 (base32 "0d7arni5h98x7mpgpv90bzipf6p6q9djcdwj4m2ky7da64qkcy8h"))))
2209 (build-system pyproject-build-system)
2210 (arguments
2211 (list
2212 #:test-backend #~'custom
2213 #:test-flags #~(list "-m" "testtools.run" "subunit.test_suite")
2214 #:phases
2215 #~(modify-phases %standard-phases
2216 (add-after 'unpack 'disable-failing-tests
2217 (lambda _
2218 ;; There are two failing tests:
2219 ;; subunit.tests.test_test_protocol.TestExecTestCase.test_args
2220 ;; AssertionError: 1 != 0
2221 ;;
2222 ;; subunit.tests.test_test_protocol.TestExecTestCase.test_run
2223 ;; AssertionError: Lists differ: [('startTest',
2224 ;; <subunit.RemotedTestCase de[666 chars]r'>)] != []
2225 (substitute* "python/subunit/tests/test_test_protocol.py"
2226 (("test_args") "_off_test_args")
2227 (("test_run") "_off_test_run"))))
2228 (add-after 'disable-failing-tests 'disable-failing-console-scripts
2229 (lambda _
2230 (substitute* "setup.py"
2231 ;; Requries not maintained python-junitxml.
2232 (("'subunit2junitxml=.*subunit2junitxml:main',") "")
2233 ;; To avoid Gtk in inputs.
2234 (("'subunit-notify=.*subunit_notify:main',") "")
2235 (("'subunit2gtk=.*subunit2gtk:main',") "")))))))
2236 (native-inputs
2237 (list python-fixtures
2238 python-setuptools
2239 python-testscenarios))
2240 (propagated-inputs
2241 (list python-iso8601
2242 python-pygobject
2243 python-testtools))
2244 (home-page "https://github.com/testing-cabal/subunit")
2245 (synopsis "Python implementation of the subunit protocol")
2246 (description
2247 "Python-subunit is a Python implementation of the subunit test streaming
2248protocol.")
2249 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
2250
2251(define-public python-fixtures
2252 (package
2253 (name "python-fixtures")
2254 (version "4.2.6")
2255 (source
2256 (origin
2257 (method url-fetch)
2258 (uri (pypi-uri "fixtures" version))
2259 (sha256
2260 (base32 "02y92rnl2vyjcbc31mcpxkxjky6g9hjb2cxy5xkkl1j5n4ajniwm"))))
2261 (build-system pyproject-build-system)
2262 (native-inputs
2263 (list python-hatch-vcs
2264 python-hatchling
2265 python-testtools-bootstrap))
2266 (home-page "https://github.com/testing-cabal/fixtures")
2267 (synopsis "Python test fixture library")
2268 (description
2269 "Fixtures provides a way to create reusable state, useful when writing
2270Python tests.")
2271 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2272
2273(define-public python-testrepository
2274 (package
2275 (name "python-testrepository")
2276 (version "0.0.21")
2277 (source
2278 (origin
2279 (method url-fetch)
2280 (uri (pypi-uri "testrepository" version))
2281 (sha256
2282 (base32 "1nd36zf1gz7rp5qqqvw15d8lwcdwcigs4m6ppn4cdcwhw3vzr2in"))))
2283 (build-system pyproject-build-system)
2284 (arguments
2285 (list
2286 #:phases
2287 #~(modify-phases %standard-phases
2288 (replace 'check
2289 (lambda* (#:key tests? #:allow-other-keys)
2290 (when tests?
2291 (setenv "HOME" "/tmp")
2292 (invoke "./testr" "init")
2293 (invoke "./testr" "run")))))))
2294 (native-inputs
2295 (list python-hatch-vcs
2296 python-hatchling
2297 python-pytz
2298 python-setuptools
2299 python-testresources
2300 python-testscenarios))
2301 (propagated-inputs
2302 (list python-fixtures
2303 python-iso8601
2304 python-subunit))
2305 (home-page "https://github.com/testing-cabal/testrepository")
2306 (synopsis "Database for Python test results")
2307 (description
2308 "Testrepository provides a database of test results which can be used as
2309part of a developer's workflow to check things such as what tests have failed
2310since the last commit or what tests are currently failing.")
2311 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
2312
2313(define-public python-coverage
2314 (package
2315 (name "python-coverage")
2316 (version "7.13.2")
2317 (source
2318 (origin
2319 (method git-fetch)
2320 (uri (git-reference
2321 (url "https://github.com/coveragepy/coveragepy")
2322 (commit version)))
2323 (file-name (git-file-name name version))
2324 (sha256
2325 (base32 "1vf1qa2cndkrr0l6yc84frfmabr96vkly9nsw0n0cgxf10n1k23m"))))
2326 (build-system pyproject-build-system)
2327 (arguments
2328 (list
2329 ;; tests: 1348 passed, 27 skipped
2330 #:test-flags
2331 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
2332 #$@(map (lambda (file) (string-append "--ignore=tests/" file))
2333 ;; XXX: The most of the tests fail.
2334 (list "test_process.py"
2335 ;; Unable to properly compare reports.
2336 "test_report.py"
2337 ;; Network connection is required
2338 "test_venv.py"))
2339 #$@(map (lambda (test) (string-append "--deselect="
2340 "tests/test_python.py::"
2341 "GetZipBytesTest::"
2342 "test_get_encoded_zip_files"
2343 test))
2344 ;; > assert zip_data is not None
2345 ;; E assert None is not None
2346 (list "[utf-8]@get_zip_bytes_test"
2347 "[gb2312]@get_zip_bytes_test"
2348 "[hebrew]@get_zip_bytes_test"
2349 "[shift_jis]@get_zip_bytes_test"
2350 "[cp1252]@get_zip_bytes_test"))
2351 #$@(map (lambda (test) (string-append "--deselect=tests/test_"
2352 test))
2353 ;; AssertionError
2354 (list "api.py::ReportIncludeOmitTest"
2355 "api.py::XmlIncludeOmitTest"
2356 "api.py::RelativePathTest::test_files_up_one_level"
2357 "concurrency.py::SigtermTest::\
2358test_sigterm_multiprocessing_saves_data"
2359 "oddball.py::DoctestTest::test_doctest"
2360 "oddball.py::MockingProtectionTest"
2361 "plugins.py::PluginTest::\
2362test_local_files_are_importable"
2363 "regions.py::test_real_code_regions"
2364 "setup.py::SetupPyTest::test_metadata"
2365 "testing.py::test_all_our_source_files"
2366 "xml.py::XmlReportTest::test_no_duplicate_packages"
2367 ;; FileNotFoundError
2368 "setup.py::SetupPyTest::test_more_metadata"
2369 ;; ModuleNotFoundError
2370 "filereporter.py::FileReporterTest::test_zipfile"
2371 ;; OSError
2372 "annotate.py::AnnotationGoldTest::test_multi"))
2373 #$@(if (or (equal? (%current-system) "riscv64-linux")
2374 (equal? (%current-system) "aarch64-linux"))
2375 ;; Thypothesis.errors.FailedHealthCheck: Data generation
2376 ;; is extremely slow.
2377 (map (lambda (test) (string-append "--deselect="
2378 "tests/test_numbits.py"
2379 test))
2380 (list "NumbitsOpTest::test_any_intersection"
2381 "NumbitsOpTest::test_conversion"
2382 "NumbitsOpTest::test_union"))
2383 '()))
2384 #:phases
2385 #~(modify-phases %standard-phases
2386 (add-after 'unpack 'fix-pytest-config
2387 (lambda _
2388 (substitute* "pyproject.toml"
2389 (("-q -n auto ") ""))))
2390 (add-before 'check 'pre-check
2391 (lambda _
2392 ;; WARNING: The directory '/homeless-shelter/.cache/pip' or its
2393 ;; parent directory is not owned or is not writable by the
2394 ;; current user. The cache has been disabled. Check the
2395 ;; permissions and owner of that directory. If executing pip
2396 ;; with sudo, you should use sudo's -H flag.
2397 (setenv "HOME" "/tmp")
2398 ;; This would otherwise interfere with finding the installed
2399 ;; coverage when running tests.
2400 (delete-file-recursively "coverage"))))))
2401 (native-inputs
2402 (list python-pytest
2403 python-pytest-xdist ;some tests need xdist_group
2404 python-flaky
2405 python-setuptools))
2406 (home-page "https://coverage.readthedocs.io")
2407 (synopsis "Code coverage measurement for Python")
2408 (description
2409 "Coverage measures code coverage, typically during test execution. It
2410uses the code analysis tools and tracing hooks provided in the Python standard
2411library to determine which lines are executable, and which have been
2412executed.")
2413 (license license:bsd-3)))
2414
2415(define-public python-pytest-asyncio
2416 (package
2417 (name "python-pytest-asyncio")
2418 (version "1.4.0")
2419 (source
2420 (origin
2421 (method git-fetch)
2422 (uri (git-reference
2423 (url "https://github.com/pytest-dev/pytest-asyncio")
2424 (commit (string-append "v" version))))
2425 (file-name (git-file-name name version))
2426 (sha256
2427 (base32 "08p5708g0mls4pwchbwd7rgzjyz50998h34rq19kzf62244wpr1j"))))
2428 (build-system pyproject-build-system)
2429 ;; tests: 292 passed, 7 deselected
2430 (native-inputs
2431 (list python-setuptools
2432 python-setuptools-scm))
2433 (propagated-inputs
2434 (list python-pytest
2435 python-typing-extensions)) ;Python version < 3.13
2436 (home-page "https://github.com/pytest-dev/pytest-asyncio")
2437 (synopsis "Pytest support for asyncio")
2438 (description "Python asyncio code is usually written in the form of
2439coroutines, which makes it slightly more difficult to test using normal
2440testing tools. @code{pytest-asyncio} provides useful fixtures and markers
2441to make testing async code easier.")
2442 (license license:asl2.0)))
2443
2444;; It's the last 0.26.X version which is still required and has breaking
2445;; changes with 1.X.X.
2446(define-public python-pytest-asyncio-0.26
2447 (package
2448 (inherit python-pytest-asyncio)
2449 (version "0.26.0")
2450 (source
2451 (origin
2452 (method url-fetch)
2453 (uri (pypi-uri "pytest_asyncio" version))
2454 (sha256
2455 (base32 "0bri1scs8whdrxb3jrv0ywiz20qb0mrll3kzkvriy928frljmpy4"))))
2456 (arguments
2457 (list
2458 ;; tests: 202 passed, 4 deselected
2459 #:test-flags
2460 #~(list "-k" (string-join
2461 (list "not test_strict_mode_ignores_unmarked_coroutine"
2462 "test_strict_mode_ignores_unmarked_fixture"
2463 "test_strict_mode_marked_test_unmarked_fixture_warning"
2464 "test_strict_mode_marked_test_unmarked_autouse_fixture_warning")
2465 " and not "))
2466 #:phases
2467 #~(modify-phases %standard-phases
2468 (add-after 'unpack 'relax-requirements
2469 (lambda _
2470 (substitute* "pyproject.toml"
2471 ;; Pytest is in propagated inputs, remove higher boundary to
2472 ;; avoid propagation of python-pytest-8.
2473 ((">=8.2,<9") ">=8.2")))))))))
2474
2475(define-public python-codecov
2476 (package
2477 (name "python-codecov")
2478 (version "2.1.13")
2479 (source
2480 (origin
2481 (method url-fetch)
2482 (uri (pypi-uri "codecov" version))
2483 (sha256
2484 (base32
2485 "131av6sdzxf3qqqb85fm3mcd771mrrv9n6lmp52szbiwcf2vcqi3"))))
2486 (build-system pyproject-build-system)
2487 (arguments
2488 (list #:tests? #f)) ;no tests in PyPI, tests in git are broken
2489 (native-inputs
2490 (list python-setuptools))
2491 (propagated-inputs
2492 (list python-coverage
2493 python-requests))
2494 (home-page "https://github.com/codecov/codecov-python")
2495 (synopsis "Upload code coverage reports to @code{codecov.io}")
2496 (description
2497 "Codecov collects code coverage reports from code written in Python, Java,
2498C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
2499 (license license:asl2.0)))
2500
2501(define-public python-pytest-localserver
2502 (package
2503 (name "python-pytest-localserver")
2504 (version "0.9.0.post0")
2505 (source
2506 (origin
2507 (method url-fetch)
2508 (uri (pypi-uri "pytest_localserver" version))
2509 (sha256
2510 (base32 "1w2zgpdr1wj7mxnsyqyiy3alqrdm7wngxb7ra14brll2ndps6cw0"))))
2511 (build-system pyproject-build-system)
2512 (native-inputs
2513 (list nss-certs-for-test
2514 python-pytest
2515 python-requests
2516 python-setuptools
2517 python-setuptools-scm
2518 python-wheel))
2519 (propagated-inputs
2520 (list python-werkzeug))
2521 (home-page "https://pypi.org/project/pytest-localserver/")
2522 (synopsis "Py.test plugin to test server connections locally")
2523 (description
2524 "Pytest-localserver is a plugin for the pytest testing framework which
2525enables you to test server connections locally.")
2526 (license license:expat)))
2527
2528(define-public python-pytest-xprocess
2529 (package
2530 (name "python-pytest-xprocess")
2531 (version "1.0.2")
2532 (source
2533 (origin
2534 (method git-fetch)
2535 (uri (git-reference
2536 (url "https://github.com/pytest-dev/pytest-xprocess/")
2537 (commit version)))
2538 (file-name (git-file-name name version))
2539 (sha256
2540 (base32 "06bxk48k67pkf629ndq0x3qfpllzz2blqqyj226yxdnbggq1slix"))))
2541 (build-system pyproject-build-system)
2542 (arguments
2543 (if (target-riscv64?)
2544 (list
2545 #:test-flags
2546 #~(list "-k"
2547 ;; Unclear why these tests are failing on riscv64-linux.
2548 (string-append "not test_startup_without_pattern"
2549 " and not test_startup_with_pattern_and_callback")))
2550 '()))
2551 (native-inputs
2552 (list python-pytest-bootstrap
2553 python-setuptools
2554 python-setuptools-scm))
2555 (propagated-inputs
2556 (list python-psutil))
2557 (home-page "https://github.com/pytest-dev/pytest-xprocess/")
2558 (synopsis "Pytest plugin to manage external processes across test runs")
2559 (description
2560 "Pytest-xprocess is an experimental py.test plugin for managing processes
2561across test runs.")
2562 (license license:expat)))
2563
2564(define-public python-pytest-sugar
2565 (package
2566 (name "python-pytest-sugar")
2567 (properties '((commit . "4b1cd8d03060072db3737983ace80f416534a2c4")
2568 (revision . "0")))
2569 (version (git-version "1.1.1"
2570 (assoc-ref properties 'revision)
2571 (assoc-ref properties 'commit)))
2572 (source
2573 (origin
2574 (method git-fetch)
2575 (uri (git-reference
2576 (url "https://github.com/Teemu/pytest-sugar")
2577 (commit (assoc-ref properties 'commit))))
2578 (file-name (git-file-name name version))
2579 (sha256
2580 (base32 "1smaxs7qabdfsvr9rvyyfp1d93j8vm0ghqwk4cskc9bnfhbhdn7d"))))
2581 (build-system pyproject-build-system)
2582 (propagated-inputs (list python-pytest python-termcolor))
2583 (native-inputs (list python-setuptools))
2584 (home-page "https://github.com/Teemu/pytest-sugar")
2585 (synopsis "Plugin for pytest that changes the default look and feel")
2586 (description
2587 "@code{pytest-sugar} is a plugin for py.test that changes the default
2588look and feel of @code{python-pytest}, using a progress bar and showing
2589failures and errors instantly.")
2590 (license license:bsd-3)))
2591
2592(define-public python-hypothesis
2593 (package
2594 (name "python-hypothesis")
2595 (version "6.150.2")
2596 (source
2597 (origin
2598 (method git-fetch)
2599 (uri (git-reference
2600 (url "https://github.com/HypothesisWorks/hypothesis")
2601 (commit (string-append "hypothesis-python-" version))))
2602 (file-name (git-file-name name version))
2603 (sha256
2604 (base32 "0c8mrgvyhvgrkfzxi953hmz9h6jgbdr752rcm9x87mqfxg3vzvp6"))))
2605 (build-system pyproject-build-system)
2606 (arguments
2607 (list
2608 ;; tests: 3528 passed, 13 skipped, 15 deselected, 3 xfailed, 1 xpassed
2609 #:test-flags
2610 ;; Run slim portion of tests, see more test scenarios in
2611 ;; <hypothesis-python/tests/README.rst>.
2612 #~(list "tests/cover"
2613 "-k"
2614 (string-join
2615 ;; ModuleNotFoundError: No module named 'pexpect'
2616 (list "not test_interactive_example_does_not_emit_warning"
2617 ;; Network access is required or setting up local
2618 ;; timezone.
2619 "test_can_generate_from_all_registered_types[ZoneInfo]"
2620 "test_disallowed_inputs_to_target"
2621 "test_generic_collections_only_use_hashable_elements[Dict]"
2622 "test_generic_collections_only_use_hashable_elements[FrozenSet]"
2623 "test_generic_collections_only_use_hashable_elements[Set]"
2624 "test_generic_collections_only_use_hashable_elements[dict]"
2625 "test_generic_collections_only_use_hashable_elements[set]"
2626 "test_hashable_type_unhashable_value"
2627 "test_inference_on_generic_collections_abc_aliases[Hashable]"
2628 "test_is_not_identity"
2629 "test_resolves_builtin_types[object]"
2630 "test_resolves_forwardrefs_to_builtin_types[object]"
2631 "test_timezone_lookup[tzinfo]"
2632 ;; hypothesis.errors.FailedHealthCheck: Input generation is slow
2633 #$@(if (target-riscv64?)
2634 '("test_can_run_with_no_db")
2635 '()))
2636 " and not "))
2637 #:phases
2638 #~(modify-phases %standard-phases
2639 (add-after 'unpack 'chdir-to-source
2640 (lambda _
2641 (chdir "hypothesis-python"))))))
2642 (native-inputs
2643 (list python-pytest-bootstrap
2644 python-setuptools))
2645 (propagated-inputs
2646 (list python-sortedcontainers))
2647 (home-page "https://hypothesis.works/")
2648 (synopsis "Library for property based testing")
2649 (description "Hypothesis is a library for testing your Python code against a
2650much larger range of examples than you would ever want to write by hand. It’s
2651based on the Haskell library, Quickcheck, and is designed to integrate
2652seamlessly into your existing Python unit testing work flow.")
2653 (license license:mpl2.0)))
2654
2655;; WARNING: This package is a dependency of mesa.
2656(define-public python-lit
2657 (package
2658 (name "python-lit")
2659 (version "18.1.8")
2660 (source
2661 (origin
2662 (method url-fetch)
2663 (uri (pypi-uri "lit" version))
2664 (sha256
2665 (base32 "1nsf3ikvlgvqqf185yz5smkvw0268jipdvady0qfh6llhshp9ha7"))))
2666 (build-system pyproject-build-system)
2667 (arguments (list #:test-backend #~'custom
2668 #:test-flags #~(list "lit.py" "tests")))
2669 ;; This can be built with any version of llvm.
2670 (native-inputs
2671 (list llvm-13
2672 python-setuptools))
2673 (home-page "https://llvm.org/")
2674 (synopsis "LLVM Software Testing Tool")
2675 (description "@code{lit} is a portable tool for executing LLVM and Clang
2676style test suites, summarizing their results, and providing indication of
2677failures.")
2678 (license license:ncsa)))
2679
2680(define-public python-pytest-enabler
2681 (package
2682 (name "python-pytest-enabler")
2683 (version "3.4.0")
2684 (source
2685 (origin
2686 (method url-fetch)
2687 (uri (pypi-uri "pytest_enabler" version))
2688 (sha256
2689 (base32 "0gxsr0wk8kzf8rqfnhy84yh1zi0b55j76c0m9n006d8q4bzy1v25"))))
2690 (build-system pyproject-build-system)
2691 (arguments
2692 (list
2693 #:test-flags #~(list "-k" "not test_coverage_explicit")))
2694 (native-inputs
2695 (list python-pytest
2696 python-setuptools
2697 python-setuptools-scm))
2698 (propagated-inputs
2699 (list python-importlib-resources
2700 python-jaraco-context
2701 python-jaraco-functools
2702 python-toml))
2703 (home-page "https://github.com/jaraco/pytest-enabler")
2704 (synopsis "Enable installed pytest plugins")
2705 (description "Enable installed pytest plugins")
2706 (license license:expat)))
2707
2708(define-public python-pytest-freezegun
2709 (package
2710 (name "python-pytest-freezegun")
2711 (version "0.4.2")
2712 (source
2713 (origin
2714 (method git-fetch)
2715 (uri (git-reference
2716 (url "https://github.com/ktosiek/pytest-freezegun")
2717 (commit version)))
2718 (file-name (git-file-name name version))
2719 (sha256
2720 (base32 "10c4pbh03b4s1q8cjd75lr0fvyf9id0zmdk29566qqsmaz28npas"))))
2721 (build-system pyproject-build-system)
2722 (propagated-inputs (list python-freezegun python-pytest))
2723 (native-inputs (list python-setuptools python-wheel))
2724 (home-page "https://github.com/ktosiek/pytest-freezegun")
2725 (synopsis "Pytest plugin to freeze time in test fixtures")
2726 (description
2727 "The @code{pytest-freezegun} plugin wraps tests and fixtures with
2728@code{freeze_time}, which controls (i.e., freeze) the time seen by the test.")
2729 (license license:expat)))
2730
2731(define-public python-pytest-mypy
2732 (package
2733 (name "python-pytest-mypy")
2734 (version "1.0.1")
2735 (source
2736 (origin
2737 (method url-fetch)
2738 (uri (pypi-uri "pytest_mypy" version))
2739 (sha256
2740 (base32 "0x60ap70ix4blavrwih9aglp3ghviv1frxccnv3cq3f8fpzwlprz"))))
2741 (build-system pyproject-build-system)
2742 (arguments
2743 (list
2744 #:test-flags
2745 #~(list "--numprocesses" (number->string (parallel-job-count))
2746 "-p" "no:mypy"
2747 ;; Fails to compare warnings.
2748 "--deselect=tests/test_pytest_mypy.py::test_mypy_encoding_warnings")
2749 #:phases
2750 (if (or (target-riscv64?)
2751 (target-ppc64le?))
2752 #~(modify-phases %standard-phases
2753 (add-after 'unpack 'extend-test-timeout
2754 (lambda _
2755 ;; Some architectures need an even longer timeout.
2756 (substitute* "tests/test_pytest_mypy.py"
2757 (("60\\.0") "180.0")))))
2758 #~%standard-phases)))
2759 (native-inputs
2760 (list python-pytest-xdist
2761 python-setuptools
2762 python-setuptools-scm))
2763 (propagated-inputs
2764 (list python-filelock
2765 python-mypy
2766 python-pytest))
2767 (home-page "https://github.com/dbader/pytest-mypy")
2768 (synopsis "Mypy static type checker plugin for Pytest")
2769 (description "@code{pytest-mypi} is a static type checker plugin for
2770Pytest that runs the mypy static type checker on your source files as part of
2771a Pytest test execution.")
2772 (license license:expat)))
2773
2774(define-public python-pytest-mypy-plugins
2775 (package
2776 (name "python-pytest-mypy-plugins")
2777 (version "4.0.0")
2778 (source
2779 (origin
2780 (method git-fetch)
2781 (uri (git-reference
2782 (url "https://github.com/TypedDjango/pytest-mypy-plugins")
2783 (commit version)))
2784 (file-name (git-file-name name version))
2785 (sha256
2786 (base32 "05vnv8m4qjrpyxw7f17wng6pnicvaps6vf8c6yn1a8lj10fkwazn"))))
2787 (build-system pyproject-build-system)
2788 (arguments
2789 (list
2790 #:test-flags
2791 #~(list "-k" (string-join
2792 (list "not reveal_type_extension_is_loaded"
2793 ;; Unsupported operand types for / ("str" and "int")
2794 "test_no_silence_site_packages_only"
2795 "test_no_silence_site_packages_and_modify_pythonpath"
2796 ;; subprocess.CalledProcessError
2797 ;; pytest not found?
2798 "test_pyproject_toml"
2799 "test_ini_files")
2800 " and not "))
2801 #:phases
2802 #~(modify-phases %standard-phases
2803 ;; Tests failed to run in project's root directory:
2804 ;; ModuleNotFoundError: No module named 'pytest_mypy_plugins.tests'
2805 (replace 'check
2806 (lambda* (#:key tests? test-flags #:allow-other-keys)
2807 (when tests?
2808 (setenv "HOME" "/tmp")
2809 (with-directory-excursion "/tmp"
2810 (apply invoke "pytest" "-v" test-flags))))))))
2811 (native-inputs
2812 (list python-setuptools))
2813 (propagated-inputs
2814 (list python-decorator
2815 python-jinja2
2816 python-jsonschema
2817 python-mypy
2818 python-packaging
2819 python-pytest
2820 python-pyyaml
2821 python-regex
2822 python-tomlkit))
2823 (home-page "https://github.com/TypedDjango/pytest-mypy-plugins")
2824 (synopsis "Pytest plugin for writing tests for mypy plugins")
2825 (description "This package provides a pytest plugin for writing tests for
2826mypy plugins.")
2827 (license license:expat)))
2828
2829(define-public python-pytest-perf
2830 (package
2831 (name "python-pytest-perf")
2832 (version "0.13.1")
2833 (source (origin
2834 (method git-fetch)
2835 (uri (git-reference
2836 (url "https://github.com/jaraco/pytest-perf")
2837 (commit (string-append "v" version))))
2838 (file-name (git-file-name name version))
2839 (sha256
2840 (base32
2841 "1hrccvrbccqwba04pqj749hdzn4sgldmbpg74nf3fzz7wyg6jxqk"))))
2842 (build-system pyproject-build-system)
2843 (arguments
2844 (list
2845 #:test-flags '(list "-k"
2846 (string-append
2847 ;; Do not test the myproject.toml build as it tries to pull
2848 ;; dependencies from the internet.
2849 "not project "
2850 ;; The benchmark test attempts to install the
2851 ;; package, failing to pull its dependencies from the
2852 ;; network.
2853 "and not BenchmarkRunner "
2854 ;; The upstream_url test requires networking.
2855 "and not upstream_url"))))
2856 (native-inputs
2857 (list python-pytest
2858 python-pytest-checkdocs
2859 python-pytest-enabler
2860 python-setuptools
2861 python-wheel))
2862 (propagated-inputs
2863 (list python-jaraco-context
2864 python-jaraco-functools
2865 python-more-itertools
2866 python-packaging
2867 python-pip
2868 python-pip-run
2869 python-tempora))
2870 (home-page "https://github.com/jaraco/pytest-perf")
2871 (synopsis "Pytest plugin for performance testing")
2872 (description "@code{pytest-perf} makes it easy to compare works by
2873creating two installs, the control and the experiment, and measuring the
2874performance of some Python code against each. Under the hood, it uses the
2875@command{pip-run} command to install from the upstream main
2876branch (e.g. https://github.com/jaraco/pytest-perf) for the control and from
2877@file{.} for the experiment. It then runs each of the experiments against
2878each of the environments.")
2879 (license license:expat)))
2880
2881(define-public python-pytest-flakes
2882 (package
2883 (name "python-pytest-flakes")
2884 (version "4.0.5")
2885 (source (origin
2886 (method url-fetch)
2887 (uri (pypi-uri "pytest-flakes" version))
2888 (sha256
2889 (base32
2890 "0959qfxb4ayvfxvmpargvh4zfhwdq5l77gczhzv33bhmfblk8ccm"))))
2891 (build-system pyproject-build-system)
2892 (arguments
2893 (list
2894 #:test-flags
2895 '(list "-k" "not test_syntax_error")))
2896 (native-inputs
2897 (list python-pytest python-setuptools python-wheel))
2898 (propagated-inputs
2899 (list python-pyflakes))
2900 (home-page "https://github.com/fschulze/pytest-flakes")
2901 (synopsis "Py.test plugin to check source code with pyflakes")
2902 (description "Pytest plugin for checking Python source code with pyflakes.")
2903 (license license:expat)))
2904
2905(define-public python-pylint
2906 (package
2907 (name "python-pylint")
2908 (version "4.0.8")
2909 (source
2910 (origin
2911 (method git-fetch)
2912 (uri (git-reference
2913 (url "https://github.com/pylint-dev/pylint")
2914 (commit (string-append "v" version))))
2915 (file-name (git-file-name name version))
2916 (sha256
2917 (base32 "0rp9dmfyq7ai5y5mlyi5vmhq4zrc9zbpivywy1pxwwrp4pkchavc"))))
2918 (build-system pyproject-build-system)
2919 (arguments
2920 (list
2921 ;; tests: 1993 passed, 257 skipped, 5 xfailed
2922 #:test-flags
2923 #~(list "--numprocesses" (number->string (parallel-job-count))
2924 "--ignore=tests/benchmark"
2925 ;; The unused but collected 'primer'-related test files require
2926 ;; the extraneous 'git' Python module; ignore them.
2927 "--ignore=tests/testutils/_primer/test_package_to_lint.py"
2928 "--ignore=tests/testutils/_primer/test_primer.py"
2929 "-k" (string-join
2930 ;; Test failing with multiple assertion errors.
2931 (list "not test_functional[missing_timeout]"
2932 "test_functional[wrong_import_order]"
2933 "test_progress_reporting")
2934 " and not "))
2935 #:phases
2936 #~(modify-phases %standard-phases
2937 (add-before 'check 'set-home
2938 (lambda _
2939 (setenv "HOME" "/tmp"))))))
2940 (native-inputs
2941 (list python-pytest
2942 python-pytest-timeout
2943 python-pytest-xdist
2944 python-setuptools))
2945 (propagated-inputs
2946 (list python-astroid
2947 python-dill
2948 python-isort
2949 python-mccabe
2950 python-platformdirs
2951 python-tomlkit))
2952 (home-page "https://github.com/pylint-dev/pylint")
2953 (synopsis "Advanced Python code static checker")
2954 (description "Pylint is a Python source code analyzer which looks
2955for programming errors, helps enforcing a coding standard and sniffs
2956for some code smells (as defined in Martin Fowler's Refactoring book).
2957
2958Pylint has many rules enabled by default, way too much to silence them
2959all on a minimally sized program. It's highly configurable and handle
2960pragmas to control it from within your code. Additionally, it is
2961possible to write plugins to add your own checks.")
2962 (license license:gpl2+)))
2963
2964(define-public behave
2965 (package
2966 (name "behave")
2967 ;; 1.3.3 (2025-09-04), the latest changes provide support for Python
2968 ;; 3.12+; move back to git tag when released.
2969 (properties '((commit . "43d0a93240c0b25b0cbf59bdc196b74fb8a2353e")
2970 (revision . "0")))
2971 (version (git-version "1.3.3"
2972 (assoc-ref properties 'revision)
2973 (assoc-ref properties 'commit)))
2974 (source
2975 (origin
2976 (method git-fetch)
2977 (uri (git-reference
2978 (url "https://github.com/behave/behave")
2979 (commit (assoc-ref properties 'commit))))
2980 (file-name (git-file-name name version))
2981 (sha256
2982 (base32 "05671jf7scpgqr8chzgs9bxidvf12nlkqqiqxa5qwmykqfvc8nk4"))))
2983 (build-system pyproject-build-system)
2984 ;; tests: 1638 passed, 3 skipped, 2 xfailed
2985 (native-inputs
2986 (list python-chardet
2987 python-freezegun
2988 python-charset-normalizer
2989 python-path
2990 python-pyhamcrest
2991 python-pytest
2992 python-pytest-html
2993 python-setuptools))
2994 (propagated-inputs
2995 (list python-colorama
2996 python-cucumber-expressions
2997 python-cucumber-tag-expressions
2998 python-parse
2999 python-parse-type))
3000 (home-page "https://github.com/behave/behave")
3001 (synopsis "Python behavior-driven development")
3002 (description
3003 "Behave is a tool for behavior-driven development in python.
3004Behavior-driven development (or BDD) is an agile software development
3005technique that encourages collaboration between developers, QA and
3006non-technical or business participants in a software project. Behave uses
3007tests written in a natural language style, backed up by Python code.")
3008 (license license:x11)))
3009
3010(define-public python-freezegun
3011 (package
3012 (name "python-freezegun")
3013 (version "1.5.5")
3014 (source
3015 (origin
3016 (method git-fetch)
3017 (uri (git-reference
3018 (url "https://github.com/spulec/freezegun")
3019 (commit version)))
3020 (file-name (git-file-name name version))
3021 (sha256
3022 (base32 "0jh2fvf1zq0h8mv2mqfhfpgzhbn9ybjrp412g0zzapyfbc2a8kph"))))
3023 (build-system pyproject-build-system)
3024 (native-inputs
3025 (list python-pytest
3026 python-setuptools))
3027 (propagated-inputs
3028 (list python-dateutil))
3029 (home-page "https://github.com/spulec/freezegun")
3030 (synopsis "Test utility for mocking the datetime module")
3031 (description
3032 "FreezeGun is a library that allows your python tests to travel through
3033time by mocking the datetime module.")
3034 (license license:asl2.0)))
3035
3036(define-public python-flaky
3037 (package
3038 (name "python-flaky")
3039 (version "3.8.1") ; On bump, remove some skipped tests in python-cherrypy.
3040 (source
3041 (origin
3042 (method git-fetch)
3043 (uri (git-reference
3044 (url "https://github.com/box/flaky")
3045 (commit (string-append "v" version))))
3046 (file-name (git-file-name name version))
3047 (sha256
3048 (base32 "1fyqrcny7v6wnyir2ys242cabxh42j39716fn890dig9ik2f86ck"))))
3049 (build-system pyproject-build-system)
3050 (arguments
3051 (list
3052 ;; XXX: Check with upstream. Tests failing with AttributeError: 'str'
3053 ;; object has no attribute 'tb_frame', ValueError: too many values to
3054 ;; unpack (expected 2), AssertionError: 'Plain HelloPlain Hellońőń ȁŝćȉȉ
3055 ;; ŝƭȕƒƒ' != 'Plain Hellońőń ȁŝćȉȉ ŝƭȕƒƒ'.
3056 #:test-flags
3057 #~(list "-k" (string-append
3058 "not test_flaky_plugin_handles_non_ascii_byte_string_in_exception"
3059 " and not test_flaky_plugin_identifies_failure"
3060 " and not test_write_then_read"
3061 " and not test_writelines_then_read"
3062 " and not test_something_flaky"))))
3063 (native-inputs
3064 (list python-pytest
3065 python-setuptools))
3066 (home-page "https://github.com/box/flaky")
3067 (synopsis "Automatically rerun flaky tests")
3068 (description
3069 "Flaky is a plugin for @code{nose} or @code{py.test} that automatically
3070reruns flaky tests.
3071
3072Ideally, tests reliably pass or fail, but sometimes test fixtures must rely
3073on components that aren't 100% reliable. With flaky, instead of removing
3074those tests or marking them to @code{@@skip}, they can be automatically
3075retried.")
3076 (license license:asl2.0)))
3077
3078(define-public python-pyhamcrest
3079 (package
3080 (name "python-pyhamcrest")
3081 (version "2.1.0")
3082 (source
3083 (origin
3084 (method url-fetch)
3085 (uri (pypi-uri "pyhamcrest" version))
3086 (sha256
3087 (base32 "175xfp4zgjmsxac79z39in77pjg7yck1kbr25kkvf31xjb0bxb66"))))
3088 (build-system pyproject-build-system)
3089 (native-inputs
3090 (list python-hatch-vcs
3091 python-hatchling
3092 python-pytest-bootstrap))
3093 (home-page "https://hamcrest.org/")
3094 (synopsis "Hamcrest matchers for Python")
3095 (description "PyHamcrest is a framework for writing matcher objects,
3096allowing you to declaratively define \"match\" rules.")
3097 (license license:bsd-3)))
3098
3099(define-public testu01
3100 (let ((commit "57e98bf33880daedc930739c81e39b89a8d24dba")
3101 (revision "1"))
3102 (package
3103 (name "testu01")
3104 (version (git-version "1.2.3" revision commit))
3105 (source
3106 (origin
3107 (method git-fetch)
3108 (uri (git-reference
3109 (url "https://github.com/umontreal-simul/TestU01-2009")
3110 (commit commit)))
3111 (sha256
3112 (base32 "0ja83px81jmvsijvdisi1n632p4wv0nk2im089z6jpldqdf1h4ws"))
3113 (file-name (git-file-name name version))))
3114 (build-system gnu-build-system)
3115 (synopsis "Utilities for testing uniform random number generators")
3116 (description
3117 "TestU01 is a software library, implemented in the ANSI C language, and
3118offering a collection of utilities for the empirical statistical testing of
3119uniform random number generators.")
3120 (home-page "https://github.com/umontreal-simul/TestU01-2009")
3121 (license license:asl2.0))))
3122
3123(define-public theft
3124 (package
3125 (name "theft")
3126 (version "0.4.5")
3127 (source (origin
3128 (method git-fetch)
3129 (uri (git-reference
3130 (url "https://github.com/silentbicycle/theft")
3131 (commit (string-append "v" version))))
3132 (file-name (git-file-name name version))
3133 (sha256
3134 (base32
3135 "1n2mkawfl2bpd4pwy3mdzxwlqjjvb5bdrr2x2gldlyqdwbk7qjhd"))
3136 (snippet #~(begin
3137 (delete-file "vendor/greatest.h")))))
3138 (build-system gnu-build-system)
3139 (arguments (list #:make-flags #~(list "VENDOR="
3140 (string-append "CC=" #$(cc-for-target))
3141 (string-append "PREFIX=" #$output))
3142 #:test-target "test"
3143 #:phases
3144 #~(modify-phases %standard-phases
3145 (delete 'bootstrap)
3146 (delete 'configure))))
3147 (native-inputs (list greatest))
3148 (home-page "https://github.com/silentbicycle/theft")
3149 (synopsis "Property-based testing for C")
3150 (description "Theft is a library for property-based testing.")
3151 (license license:isc)))
3152
3153(define-public toml-test
3154 (package
3155 ;; Upstream is informed to provide man/info for the project, see
3156 ;; <https://github.com/toml-lang/toml-test/issues/163>.
3157 (name "toml-test")
3158 (version "1.6.0")
3159 (source
3160 (origin
3161 (method git-fetch)
3162 (uri (git-reference
3163 (url "https://github.com/toml-lang/toml-test")
3164 (commit (string-append "v" version))))
3165 (file-name (git-file-name name version))
3166 (sha256
3167 (base32 "1b6lfamh673a4x509cacr6qr1xvf82562cpqn9ygrgnd81469qcc"))))
3168 (build-system go-build-system)
3169 (arguments
3170 (list
3171 #:install-source? #f
3172 #:import-path "github.com/toml-lang/toml-test/cmd/toml-test"
3173 #:unpack-path "github.com/toml-lang/toml-test"))
3174 (native-inputs
3175 (list go-zgo-at-zli
3176 go-zgo-at-jfmt
3177 go-github-com-burntsushi-toml))
3178 (home-page "https://github.com/toml-lang/toml-test")
3179 (synopsis "Language agnostic test suite for TOML parsers")
3180 (description
3181 "@samp{toml-test} is a language-agnostic test suite to verify the
3182correctness of @url{https://toml.io,TOML} parsers and writers. Tests are
3183divided into two groups: @emph{invalid} and @emph{valid}. Decoders or
3184encoders that reject @emph{invalid} tests pass the tests, and decoders that
3185accept @emph{valid} tests and output precisely what is expected pass the
3186tests. The output format is JSON.")
3187 (license license:expat)))
3188
3189(define-public trompeloeil
3190 (package
3191 (name "trompeloeil")
3192 (version "49")
3193 (source
3194 (origin
3195 (method git-fetch)
3196 (uri (git-reference
3197 (url "https://github.com/rollbear/trompeloeil")
3198 (commit (string-append "v" version))))
3199 (file-name (git-file-name name version))
3200 (sha256
3201 (base32 "0m4bfzcj033qfk3sihbikrhk9krsdbsqk79nsambnsnqqcgc2903"))))
3202 (build-system cmake-build-system)
3203 (arguments
3204 (append
3205 (if (%current-target-system)
3206 (list)
3207 (list #:configure-flags #~(list "-DTROMPELOEIL_BUILD_TESTS=yes")))
3208 (list
3209 #:phases #~(modify-phases %standard-phases
3210 (replace 'check
3211 (lambda* (#:key tests? #:allow-other-keys)
3212 (when tests?
3213 (invoke "test/self_test"))))))))
3214 (native-inputs (list catch2-3.5))
3215 (home-page "https://github.com/rollbear/trompeloeil")
3216 (synopsis "Header only C++14 mocking framework")
3217 (description
3218 "Trompeloeil is a thread-safe header-only mocking framework for C++11/14.")
3219 (license license:boost1.0)))
3220
3221(define-public tidyall
3222 (package
3223 (name "tidyall")
3224 (version "0.85")
3225 (source
3226 (origin
3227 (method url-fetch)
3228 (uri (string-append
3229 "mirror://cpan/authors/id/D/DR/DROLSKY/Code-TidyAll-" version
3230 ".tar.gz"))
3231 (sha256
3232 (base32 "1hb3xf07my3szlj5z8my95wcbzv0g17q9dsv7kajc1537g6xc0mr"))))
3233 (build-system perl-build-system)
3234 (arguments
3235 (list
3236 #:phases #~(modify-phases %standard-phases
3237 (delete 'remove-command-line-tool)
3238 (add-after 'install 'wrap-programs
3239 (lambda _
3240 (wrap-program (string-append #$output "/bin/tidyall")
3241 (list "PERL5LIB" ":"
3242 'prefix
3243 (list (getenv "PERL5LIB")
3244 (string-append #$output
3245 "/lib/perl5/site_perl")))))))))
3246 (native-inputs (list perl-test-class-most
3247 perl-test-differences
3248 perl-test-fatal
3249 perl-test-warnings
3250 perl-lib-relative
3251 php-8.4))
3252 (inputs (list bash-minimal))
3253 (propagated-inputs (list perl-capture-tiny
3254 perl-config-ini
3255 perl-timedate
3256 perl-file-which
3257 perl-ipc-run3
3258 perl-ipc-system-simple
3259 perl-list-compare
3260 perl-list-someutils
3261 perl-log-any
3262 perl-module-runtime
3263 perl-moo-2
3264 perl-path-tiny
3265 perl-scope-guard
3266 perl-specio
3267 perl-specio-library-path-tiny
3268 perl-text-diff
3269 perl-time-duration-parse
3270 perl-try-tiny
3271 perl-parallel-forkmanager
3272 perl-file-pushd))
3273 (home-page "https://metacpan.org/release/Code-TidyAll")
3274 (synopsis "Engine for tidyall, your all-in-one code tidier and validator")
3275 (description
3276 "@command{tidyall} makes a lot of code tidiers and validators available
3277from a single unified interface. You can run @command{tidyall} on a
3278single file or on an entire project hierarchy, and configure which
3279tidiers/validators are applied to which files. @command{tidyall} will
3280back up files beforehand, and for efficiency will only consider files
3281that have changed since they were last processed.
3282
3283Note that if you see some missing tidier or validator modules error,
3284you can let tidyall load them after install them. For example, one
3285can run @code{guix shell perl-perl-tidy perl} in advance to load
3286@code{Perl::Tidy}.")
3287 (license license:perl-license)))
3288
3289(define-public unittest-cpp
3290 (package
3291 (name "unittest-cpp")
3292 (version "2.0.0")
3293 (source (origin
3294 (method git-fetch)
3295 (uri (git-reference
3296 (url "https://github.com/unittest-cpp/unittest-cpp")
3297 (commit (string-append "v" version))))
3298 (file-name (git-file-name name version))
3299 (sha256
3300 (base32 "0sxb3835nly1jxn071f59fwbdzmqi74j040r81fanxyw3s1azw0i"))))
3301 (arguments
3302 (list
3303 #:tests? #f ; It's run after build automatically.
3304 ;; Fix 'Version:' setting in .pc file. See:
3305 ;; <https://github.com/unittest-cpp/unittest-cpp/pull/188>
3306 #:configure-flags #~(list (string-append "-DPACKAGE_VERSION=" #$version))))
3307 (build-system cmake-build-system)
3308 (home-page "https://github.com/unittest-cpp/unittest-cpp")
3309 (synopsis "Lightweight unit testing framework for C++")
3310 (description "UnitTest++ is a lightweight unit testing framework for C++.
3311It was designed to do test-driven development on a wide variety of platforms.
3312Simplicity, portability, speed, and small footprint are all very important
3313aspects of UnitTest++. UnitTest++ is mostly standard C++ and makes minimal use
3314of advanced library and language features, which means it should be easily
3315portable to just about any platform.")
3316 (license license:expat)))
3317
3318(define-public unity-test
3319 (package
3320 (name "unity-test")
3321 (version "2.6.1")
3322 (source (origin
3323 (method git-fetch)
3324 (uri (git-reference
3325 (url "https://github.com/ThrowTheSwitch/Unity")
3326 (commit (string-append "v" version))))
3327 (file-name (git-file-name name version))
3328 (sha256
3329 (base32 "1s0jj9f2zav49mn9ib90idcmb6hq93aczbqysn5hj6binjmrnjw3"))
3330 (patches (search-patches "unity-test-set-subdir-correctly.patch"
3331 "unity-test-support-int64.patch"))))
3332 (build-system meson-build-system)
3333 (arguments
3334 (list #:configure-flags
3335 #~(list "-Dsupport_double=true"
3336 "-Dsupport_int64=true")
3337 #:phases
3338 #~(modify-phases %standard-phases
3339 (add-after 'patch-source-shebangs 'patch-more-shebangs
3340 (lambda _
3341 (substitute* '("auto/unity_test_summary.rb")
3342 (("/usr/bin/ruby")
3343 (string-append #$(this-package-input "ruby")
3344 "/bin/ruby")))
3345 (substitute* '("auto/stylize_as_junit.py"
3346 "auto/unity_test_summary.py")
3347 (("#! python3")
3348 (string-append #$(this-package-input "python")
3349 "/bin/python3")))))
3350 (add-after 'install 'install-extra
3351 (lambda _
3352 (for-each (lambda (x)
3353 (install-file x
3354 (string-append #$output "/share/unity-test")))
3355 (find-files "../source/auto")))))))
3356 (native-inputs (list pkg-config))
3357 (inputs (list python ruby))
3358 (home-page "https://github.com/ThrowTheSwitch/Unity")
3359 (synopsis "Simple unit testing for C")
3360 (description "This package provides a unit testing framework built for C,
3361with a focus on working with embedded toolchains.")
3362 (license license:expat)))
3363
3364(define-public libfaketime
3365 (package
3366 (name "libfaketime")
3367 (version "0.9.10")
3368 (home-page "https://github.com/wolfcw/libfaketime")
3369 (source (origin
3370 (method git-fetch)
3371 (uri (git-reference
3372 (url home-page)
3373 (commit (string-append "v" version))))
3374 (sha256
3375 (base32
3376 "112l7x2gv4f47hpffpb8djfwvgrs8w5h9s266h1fshi1c916x10d"))
3377 (file-name (git-file-name name version))))
3378 (build-system gnu-build-system)
3379 (arguments
3380 (list
3381 #:test-target "test"
3382 #:phases
3383 #~(modify-phases %standard-phases
3384 (add-after 'unpack 'embed-date-reference
3385 (lambda* (#:key inputs #:allow-other-keys)
3386 (substitute* "src/faketime.c"
3387 (("\"date\"")
3388 (format #f "~s" (search-input-file inputs "bin/date"))))))
3389
3390 #$@(if (target-32bit?)
3391 #~((add-after 'unpack 'apply-32bit-patch
3392 (lambda _
3393 (let ((patch #$(local-file
3394 (search-patch "libfaketime-32bit.patch"))))
3395 (invoke "patch" "--force" "-p1" "-i" patch)))))
3396 #~())
3397
3398 (replace 'configure
3399 (lambda* (#:key outputs #:allow-other-keys)
3400 (setenv "CC" #$(cc-for-target))
3401 (setenv "PREFIX" #$output)
3402
3403 ;; XXX: Without this flag, the CLOCK_REALTIME test hangs
3404 ;; indefinitely. See README.packagers for more information.
3405 ;; There are specific instructions to not enable more flags
3406 ;; than absolutely needed.
3407 #$@(if (or (target-ppc64le?)
3408 (target-riscv64?)
3409 (target-hurd?))
3410 #~((setenv "FAKETIME_COMPILE_CFLAGS"
3411 "-DFORCE_MONOTONIC_FIX -DFORCE_PTHREAD_NONVER"))
3412 #~((setenv "FAKETIME_COMPILE_CFLAGS"
3413 "-DFORCE_MONOTONIC_FIX")))))
3414 (add-before 'check 'pre-check
3415 (lambda _
3416 (substitute* "test/functests/test_exclude_mono.sh"
3417 (("/bin/bash") (which "bash"))))))))
3418 (native-inputs (list perl)) ;for tests
3419 (inputs (list coreutils-minimal))
3420 (synopsis "Fake the system time for single applications")
3421 (description
3422 "The libfaketime library allows users to modify the system time that an
3423application \"sees\". It is meant to be loaded using the dynamic linker's
3424@code{LD_PRELOAD} environment variable. The @command{faketime} command
3425provides a simple way to achieve this.")
3426 (license license:gpl2)))
3427
3428(define-public rapidcheck
3429 (let ((commit "ff6af6fc683159deb51c543b065eba14dfcf329b")
3430 (revision "1"))
3431 (package
3432 (name "rapidcheck")
3433 (version (git-version "0.0.0" revision commit))
3434 (source
3435 (origin
3436 (method git-fetch)
3437 (uri
3438 (git-reference
3439 (url "https://github.com/emil-e/rapidcheck")
3440 (commit commit)))
3441 (file-name (git-file-name name version))
3442 (sha256
3443 (base32 "1s2qva1amhs887jcdj12ppxk9kkfvy25xy7vzhkwb7rljr3gj713"))
3444 (modules '((guix build utils)))
3445 (patches (search-patches "rapidcheck-fix-libs.patch"))
3446 (snippet
3447 #~(begin
3448 (make-file-writable "ext/CMakeLists.txt")
3449 (call-with-output-file "ext/CMakeLists.txt"
3450 (lambda (out)
3451 (display "find_package(Catch2 REQUIRED GLOBAL)\n" out)
3452 (display "find_package(GTest GLOBAL)\n" out)
3453 (display "find_package(Boost GLOBAL)\n" out)))
3454 (substitute* "extras/boost/test/CMakeLists.txt"
3455 (("^([ ]*)boost" all spaces)
3456 (string-append spaces "Boost::boost")))
3457 ;; Disable tests failing on Apple M1 and Hetzner CAX41 (aarch64).
3458 ;; Upstream issue: https://github.com/emil-e/rapidcheck/issues/328
3459 (substitute* "test/gen/NumericTests.cpp"
3460 (("forEachType<SignedProperties.*") ""))
3461 (substitute* "test/shrink/ShrinkTests.cpp"
3462 (("forEachType<SignedIntegralProperties.*") ""))))))
3463 (arguments
3464 (list
3465 #:configure-flags #~(list "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
3466 "-DRC_ENABLE_BOOST=on"
3467 "-DRC_ENABLE_CATCH=on"
3468 "-DRC_ENABLE_DOCTEST=on"
3469 "-DRC_ENABLE_GTEST=on"
3470 "-DRC_ENABLE_TESTS=on")))
3471 (build-system cmake-build-system)
3472 (inputs (list boost
3473 catch2-2
3474 doctest
3475 googletest))
3476 (native-inputs (list catch2-2 googletest))
3477 (home-page "https://github.com/emil-e/rapidcheck")
3478 (synopsis "Property based testing framework for C++")
3479 (description "Rapidcheck is a property based testing framework for C++.
3480It works by generating random data to try and find a case breaks your given
3481pre-condition.")
3482 (license license:bsd-2))))
3483
3484(define-public umockdev
3485 (package
3486 (name "umockdev")
3487 (version "0.19.7")
3488 (source (origin
3489 (method url-fetch)
3490 (uri (string-append "https://github.com/martinpitt/umockdev/"
3491 "releases/download/" version "/"
3492 "umockdev-" version ".tar.xz"))
3493 (sha256
3494 (base32
3495 "0w0845ws7827xbc8xcj24hwp4bq814hz3y3mqna0xg0k34ajxxy8"))
3496 (patches
3497 (search-patches "umockdev-disable-tests.patch"))))
3498 (build-system meson-build-system)
3499 (outputs '("out" "debug"))
3500 (arguments
3501 (list #:phases
3502 #~(modify-phases %standard-phases
3503 ;; Avoid having to set 'LD_LIBRARY_PATH' to use umockdev
3504 ;; via introspection.
3505 (add-after 'unpack 'absolute-introspection-library
3506 (lambda* (#:key outputs #:allow-other-keys)
3507 (substitute* "meson.build"
3508 (("libumockdev.so.0" all)
3509 (string-append #$output "/lib/" all)))))
3510 (add-after 'install 'absolute-filenames
3511 (lambda* (#:key inputs #:allow-other-keys)
3512 ;; 'patch-shebangs' will take care of the shebang.
3513 (substitute* (string-append #$output "/bin/umockdev-wrapper")
3514 (("env") (search-input-file inputs "bin/env"))
3515 (("libumockdev")
3516 (string-append #$output "/lib/libumockdev"))))))))
3517 (native-inputs
3518 (list gobject-introspection
3519 gtk-doc/stable
3520 pkg-config
3521 python
3522 vala
3523 which))
3524 (inputs
3525 (list bash-minimal ;for umockdev-wrapper
3526 coreutils-minimal ;for bin/env
3527 eudev
3528 glib
3529 libgudev
3530 libpcap))
3531 (home-page "https://github.com/martinpitt/umockdev/")
3532 (synopsis "Mock hardware devices for creating unit tests")
3533 (description "umockdev mocks hardware devices for creating integration
3534tests for hardware related libraries and programs. It also provides tools to
3535record the properties and behaviour of particular devices, and to run a
3536program or test suite under a test bed with the previously recorded devices
3537loaded.")
3538 (license license:lgpl2.1+)))
3539
3540(define-public virtest
3541 ;; No releases yet, so we take the commit that "vc" expects.
3542 (let ((commit "f7d03ef39fceba168745bd29e1b20af6e7971e04")
3543 (revision "0"))
3544 (package
3545 (name "virtest")
3546 (version (git-version "0.0" revision commit))
3547 (home-page "https://github.com/mattkretz/virtest")
3548 (source (origin
3549 (method git-fetch)
3550 (uri (git-reference (url home-page) (commit commit)))
3551 (file-name (git-file-name name version))
3552 (sha256
3553 (base32
3554 "07pjyb0mk7y2w1dg1bhl26nb7416xa1mw16ifj6mmps5y6aq054l"))))
3555 (build-system cmake-build-system)
3556 (arguments
3557 `(#:phases (modify-phases %standard-phases
3558 (add-after 'unpack 'adjust-install-directory
3559 (lambda _
3560 ;; Vc is the only consumer of this library, and expects
3561 ;; to find it in "virtest/vir/" instead of "vir/vir/".
3562 (substitute* "CMakeLists.txt"
3563 (("DESTINATION include/vir")
3564 "DESTINATION include/virtest"))))
3565 (add-after 'unpack 'gcc14
3566 (lambda _
3567 (substitute* "vir/test.h"
3568 (("#include <cmath>" all)
3569 (string-append all "\n#include <cstdint>"))))))))
3570 (synopsis "Header-only test framework")
3571 (description
3572 "@code{virtest} is a small header-only test framework for C++. It
3573grew out of the @dfn{Vc} project.")
3574 (license license:bsd-3))))
3575
3576(define-public python-pyfakefs
3577 ;; TODO: Move to python-build.
3578 (package
3579 (name "python-pyfakefs")
3580 (version "5.9.1")
3581 (source
3582 (origin
3583 (method git-fetch) ;no tets in PyPI archive
3584 (uri (git-reference
3585 (url "https://github.com/pytest-dev/pyfakefs")
3586 (commit (string-append "v" version))))
3587 (file-name (git-file-name name version))
3588 (sha256
3589 (base32 "0xdq8fgbqrrnhwbgklwfngmpzgna2frr9vc318vy1rb0vhsmzvjk"))))
3590 (build-system pyproject-build-system)
3591 (arguments
3592 (list
3593 #:test-backend #~'custom
3594 ;; Ran 2699 tests; 1177 skipped, 2 expected failures
3595 #:test-flags
3596 #~(list "-m" "pyfakefs.tests.all_tests_without_extra_packages")
3597 #:phases
3598 #~(modify-phases %standard-phases
3599 (add-after 'unpack 'disable-root-tests
3600 (lambda _
3601 (substitute* "pyfakefs/tests/fake_filesystem_test.py"
3602 (("def test_expand_root")
3603 "def __off_test_expand_root")))))))
3604 ;; As it would be imported by many through python-importlib-metadata, keep
3605 ;; dependencies on bare minimal.
3606 (native-inputs
3607 (list python-setuptools))
3608 (home-page "https://github.com/pytest-dev/pyfakefs")
3609 ;; TRANSLATORS: In the synopsis, "Mock" is a verb.
3610 (synopsis "Mock file system interactions in tests")
3611 (description
3612 "This package provides a Python library intended for use in automated
3613tests. One difficulty when testing software is that the code under test might
3614need to read or write to files in the local file system. If the file system
3615is not set up in just the right way, it might cause a spurious error during
3616the test. The pyfakefs library provides a solution to problems like this by
3617mocking file system interactions. In other words, it arranges for the code
3618under test to interact with a fake file system instead of the real file
3619system. The code under test requires no modification to work with pyfakefs.")
3620 (license license:asl2.0)))
3621
3622(define-public python-pytest-datadir
3623 (package
3624 (name "python-pytest-datadir")
3625 (version "1.7.2")
3626 (source
3627 (origin
3628 (method url-fetch)
3629 (uri (pypi-uri "pytest_datadir" version))
3630 (sha256
3631 (base32
3632 "0gj49053hzb3xchzrsp14hj7d4fakhxmvrv895g218yh6n525x8m"))))
3633 (build-system pyproject-build-system)
3634 (native-inputs
3635 (list python-pytest-bootstrap
3636 python-setuptools
3637 python-setuptools-scm))
3638 (home-page "https://github.com/gabrielcnr/pytest-datadir")
3639 (synopsis "Pytest plugin for manipulating test data directories and files")
3640 (description
3641 "This package provides a Pytest plugin for manipulating test data
3642directories and files.")
3643 (license license:expat)))
3644
3645(define-public guile-proba
3646 (package
3647 (name "guile-proba")
3648 (version "0.3.1")
3649 (source
3650 (origin
3651 (method git-fetch)
3652 (uri (git-reference
3653 (url "https://codeberg.org/luis-felipe/guile-proba")
3654 (commit version)))
3655 (file-name (git-file-name name version))
3656 (sha256
3657 (base32 "17ab304ylylm9z980ij5lv188inx6331r1mn1s7qrlxly9fzx888"))))
3658 (build-system guile-build-system)
3659 (inputs (list bash-minimal guile-3.0))
3660 (native-inputs (list texinfo))
3661 (propagated-inputs (list guile-config guile-lib))
3662 (arguments
3663 (list
3664 #:phases
3665 #~(modify-phases %standard-phases
3666 (add-after 'set-paths 'add-output-to-guile-load-paths
3667 (lambda* (#:key outputs #:allow-other-keys)
3668 (let* ((out (assoc-ref outputs "out"))
3669 (guile-version (target-guile-effective-version))
3670 (scm-path (string-append out
3671 "/share/guile/site/"
3672 guile-version))
3673 (go-path (string-append out
3674 "/lib/guile/"
3675 guile-version
3676 "/site-ccache")))
3677 (setenv "GUILE_LOAD_PATH"
3678 (string-append scm-path ":"
3679 (getenv "GUILE_LOAD_PATH")))
3680 (setenv "GUILE_LOAD_COMPILED_PATH"
3681 (string-append
3682 go-path ":"
3683 (getenv "GUILE_LOAD_COMPILED_PATH"))))))
3684 (add-after 'build 'build-manual
3685 (lambda _
3686 (invoke "makeinfo" "manual/main.texi")))
3687 (add-after 'build 'check
3688 (lambda _
3689 (invoke "guile" "proba.scm" "run" "tests")))
3690 (add-after 'check 'install-wrapped-script
3691 (lambda* (#:key outputs #:allow-other-keys)
3692 (let* ((out (assoc-ref outputs "out"))
3693 (bin-dir (string-append out "/bin"))
3694 (script (string-append bin-dir "/proba")))
3695 (mkdir-p bin-dir)
3696 (copy-file "proba.scm" script)
3697 (chmod script #o555)
3698 (wrap-program script
3699 `("GUILE_LOAD_PATH" prefix (,(getenv "GUILE_LOAD_PATH")))
3700 `("GUILE_LOAD_COMPILED_PATH" prefix
3701 (,(getenv "GUILE_LOAD_COMPILED_PATH")))))))
3702 (add-after 'build-manual 'install-manual
3703 (lambda* (#:key outputs #:allow-other-keys)
3704 (let* ((out (assoc-ref outputs "out"))
3705 (info-dir (string-append out "/share/info")))
3706 (mkdir-p info-dir)
3707 (install-file "guile-proba" info-dir)))))
3708 #:scheme-file-regexp
3709 #~(begin
3710 (use-modules (ice-9 regex))
3711 (lambda (file stat) (string-match "/proba/.*\\.scm$" file)))))
3712 (home-page "https://luis-felipe.gitlab.io/guile-proba/")
3713 (synopsis "Testing tools for GNU Guile projects with SRFI 64 test suites")
3714 (description
3715 "This software is a set of testing tools for GNU Guile projects
3716with SRFI 64-based test suites. It comes with a command-line interface
3717to run test collections, and a library that includes a test runner and
3718helpers for writing tests.")
3719 (license license:public-domain)))
3720
3721(define-public subunit
3722 (package
3723 (name "subunit")
3724 (version "1.4.4")
3725 (source
3726 (origin
3727 (method git-fetch)
3728 (uri (git-reference
3729 (url "https://github.com/testing-cabal/subunit")
3730 (commit version)))
3731 (file-name (git-file-name name version))
3732 (sha256
3733 (base32 "0fcqxh4cwhn9yz2z1zszzvgc554gai5b7c59w45a4cg9y9p30h8d"))))
3734 (build-system gnu-build-system)
3735 (native-inputs
3736 (list autoconf
3737 automake
3738 check
3739 cppunit
3740 libtool
3741 pkg-config
3742 python-fixtures
3743 python-hypothesis
3744 python-testscenarios))
3745 (inputs
3746 (list perl
3747 python))
3748 (propagated-inputs
3749 (list python-iso8601
3750 python-pygobject
3751 python-testtools))
3752 (home-page "https://github.com/testing-cabal/subunit")
3753 (synopsis "Test reporting and control protocol")
3754 (description
3755 "Subunit is a streaming protocol for test results. Subunit comes with
3756command line filters to process a subunit stream and language bindings for
3757Python, C, C++ and shell. Bindings are easy to write for other languages.")
3758 (license (list license:asl2.0 license:bsd-3)))) ;user can pick
3759
3760(define-public uitest
3761 ;; XXX: No releases.
3762 (let ((commit "d845427140cbcbce99bb6c72919199ac5f033784")
3763 (revision "0"))
3764 (package
3765 (name "uitest")
3766 (version (git-version "0.0.0" revision commit))
3767 (source
3768 (origin
3769 (method git-fetch)
3770 (uri (git-reference
3771 (url "https://github.com/Grumbel/uitest")
3772 (commit commit)))
3773 (file-name (git-file-name name version))
3774 (sha256
3775 (base32 "0bgpqakls8bs3n3v0igni9xgyrc4sp43b4bf85f7jnv1rxr88gf4"))))
3776 (build-system cmake-build-system)
3777 (arguments
3778 (list
3779 #:configure-flags
3780 #~(list "-DBUILD_TESTS=ON")))
3781 (native-inputs (list googletest tinycmmc))
3782 (home-page "https://github.com/Grumbel/uitest")
3783 (synopsis "Simple testing framework for interactive tests")
3784 (description
3785 "This package is a simple helper library for writing interactive tests.")
3786 (license license:gpl3+))))
3787
3788(define-public munit
3789 ;; Last release in 2016, see also <https://github.com/nemequ/munit/issues/95>.
3790 (let ((commit "fbbdf1467eb0d04a6ee465def2e529e4c87f2118")
3791 (revision "1"))
3792 (package
3793 (name "munit")
3794 (version (git-version "0.2.0" revision commit))
3795 (source (origin
3796 (method git-fetch)
3797 (uri (git-reference
3798 (url "https://github.com/nemequ/munit")
3799 (commit commit)))
3800 (file-name (git-file-name name version))
3801 (sha256
3802 (base32
3803 "13725v4pps2bpndniksa58nqi9gvx0f0900k0rqvp95bxw5z8vda"))))
3804 (build-system meson-build-system)
3805 (arguments
3806 (list
3807 #:phases
3808 #~(modify-phases %standard-phases
3809 (add-after 'unpack 'fix-install
3810 ;; munit is paradoxically configured to only be installed
3811 ;; when built as a subproject.
3812 ;; See <https://github.com/nemequ/munit/pull/67> for a
3813 ;; pull request that aims to fix this. As we don't care about
3814 ;; bundling scenarios (or rather: aim to unbundle everything),
3815 ;; install it unconditionally.
3816 (lambda _
3817 (substitute* "meson.build"
3818 (("install: meson.is_subproject\\(\\)")
3819 "install: true")))))))
3820 (synopsis "Small unit testing framework for C")
3821 (description
3822 "µnit is a small testing framework for C with nested test suites,
3823parameterized tests, timing of the wall clock and CPU time, reproducible
3824random number generation, and more.")
3825 (home-page "https://nemequ.github.io/munit/")
3826 (license license:x11))))