gnu: qtserialbus: Add libsocketcan support.
[jackhill/guix/guix.git] / gnu / packages / check.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
4 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
5 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
6 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
7 ;;; Copyright © 2015, 2017 Cyril Roelandt <tipecaml@gmail.com>
8 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
9 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
10 ;;; Copyright © 2015, 2016, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
11 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
12 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
13 ;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
14 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
15 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
16 ;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
17 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
18 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
19 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
20 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
21 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
22 ;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
23 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
24 ;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
25 ;;; Copyright © 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
26 ;;; Copyright © 2017 Nikita <nikita@n0.is>
27 ;;; Copyright © 2015, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
28 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
29 ;;; Copyright © 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
30 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
31 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
32 ;;; Copyright © 2019 Chris Marusich <cmmarusich@gmail.com>
33 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
34 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
35 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
36 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
37 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
38 ;;;
39 ;;; This file is part of GNU Guix.
40 ;;;
41 ;;; GNU Guix is free software; you can redistribute it and/or modify it
42 ;;; under the terms of the GNU General Public License as published by
43 ;;; the Free Software Foundation; either version 3 of the License, or (at
44 ;;; your option) any later version.
45 ;;;
46 ;;; GNU Guix is distributed in the hope that it will be useful, but
47 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
48 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49 ;;; GNU General Public License for more details.
50 ;;;
51 ;;; You should have received a copy of the GNU General Public License
52 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
53
54 (define-module (gnu packages check)
55 #:use-module (gnu packages)
56 #:use-module (gnu packages autotools)
57 #:use-module (gnu packages base)
58 #:use-module (gnu packages bash)
59 #:use-module (gnu packages compression)
60 #:use-module (gnu packages linux)
61 #:use-module (gnu packages llvm)
62 #:use-module (gnu packages glib)
63 #:use-module (gnu packages gnome)
64 #:use-module (gnu packages golang)
65 #:use-module (gnu packages gtk)
66 #:use-module (gnu packages perl)
67 #:use-module (gnu packages pkg-config)
68 #:use-module (gnu packages python)
69 #:use-module (gnu packages python-web)
70 #:use-module (gnu packages python-xyz)
71 #:use-module (gnu packages time)
72 #:use-module (gnu packages xml)
73 #:use-module (guix utils)
74 #:use-module ((guix licenses) #:prefix license:)
75 #:use-module (guix packages)
76 #:use-module (guix download)
77 #:use-module (guix git-download)
78 #:use-module (guix build-system cmake)
79 #:use-module (guix build-system gnu)
80 #:use-module (guix build-system go)
81 #:use-module (guix build-system python)
82 #:use-module (guix build-system trivial))
83
84 (define-public check
85 (package
86 (name "check")
87 (version "0.14.0")
88 (source
89 (origin
90 (method url-fetch)
91 (uri (string-append "https://github.com/libcheck/check/releases/download/"
92 version "/check-" version ".tar.gz"))
93 (sha256
94 (base32
95 "02zkfiyklckmivrfvdsrlzvzphkdsgjrz3igncw05dv5pshhq3xx"))))
96 (build-system gnu-build-system)
97 (home-page "https://libcheck.github.io/check/")
98 (synopsis "Unit test framework for C")
99 (description
100 "Check is a unit testing framework for C. It features a simple
101 interface for defining unit tests, putting little in the way of the
102 developer. Tests are run in a separate address space, so Check can
103 catch both assertion failures and code errors that cause segmentation
104 faults or other signals. The output from unit tests can be used within
105 source code editors and IDEs.")
106 (license license:lgpl2.1+)))
107
108 ;; Some packages require this older version. Removed once no longer needed.
109 (define-public check-0.12
110 (package
111 (inherit check)
112 (version "0.12.0")
113 (source (origin
114 (method url-fetch)
115 (uri (string-append "https://github.com/libcheck/check/releases"
116 "/download/" version "/check-" version ".tar.gz"))
117 (sha256
118 (base32
119 "0d22h8xshmbpl9hba9ch3xj8vb9ybm5akpsbbh7yj07fic4h2hj6"))))))
120
121 (define-public clitest
122 (package
123 (name "clitest")
124 (version "0.3.0")
125 (home-page "https://github.com/aureliojargas/clitest")
126 (source (origin
127 (method git-fetch)
128 (uri (git-reference
129 (url home-page)
130 (commit (string-append "v" version))))
131 (file-name (git-file-name name version))
132 (sha256
133 (base32
134 "0zw5wra9hc717srmcar1wm4i34kyj8c49ny4bb7y3nrvkjp2pdb5"))))
135 (build-system gnu-build-system)
136 (arguments
137 `(#:phases
138 (modify-phases %standard-phases
139 ;; This package is distributed as a single shell script and comes
140 ;; without a proper build system.
141 (delete 'configure)
142 (delete 'build)
143 (replace 'check
144 (lambda _
145 (substitute* "test.md"
146 ;; One test looks for an error from grep in the form "grep: foo",
147 ;; but our grep returns the absolute file name on errors. Adjust
148 ;; the test to cope with that.
149 (("sed 's/\\^e\\*grep: \\.\\*/")
150 "sed 's/.*e*grep: .*/"))
151
152 (setenv "HOME" "/tmp")
153 (invoke "./clitest" "test.md")))
154 (replace 'install
155 (lambda* (#:key outputs #:allow-other-keys)
156 (let ((out (assoc-ref outputs "out")))
157 (install-file "clitest" (string-append out "/bin"))
158 (install-file "README.md"
159 (string-append out "/share/doc/clitest-" ,version))
160 #t))))))
161 (native-inputs
162 `(("perl" ,perl))) ;for tests
163 (synopsis "Command line test tool")
164 (description
165 "@command{clitest} is a portable shell script that performs automatic
166 testing of Unix command lines.")
167 (license license:expat)))
168
169 (define-public cunit
170 (package
171 (name "cunit")
172 (version "2.1-3")
173 (source
174 (origin
175 (method url-fetch)
176 (uri (string-append "mirror://sourceforge/cunit/CUnit/"
177 version "/CUnit-" version ".tar.bz2"))
178 (sha256
179 (base32
180 "057j82da9vv4li4z5ri3227ybd18nzyq81f6gsvhifs5z0vr3cpm"))))
181 (build-system gnu-build-system)
182 (arguments '(#:phases
183 (modify-phases %standard-phases
184 ;; XXX: The "bootstrap" phase detects the "bootstrap"
185 ;; script, but fails to execute it, so we bootstrap
186 ;; manually.
187 (replace 'bootstrap
188 (lambda _ (invoke "autoreconf" "-vfi"))))))
189 (native-inputs
190 `(("automake" ,automake)
191 ("autoconf" ,autoconf)
192 ("libtool" ,libtool)))
193 (home-page "http://cunit.sourceforge.net/")
194 (synopsis "Automated testing framework for C")
195 (description
196 "CUnit is a lightweight system for writing, administering, and running
197 unit tests in C. It provides C programmers with basic testing functionality
198 with a flexible variety of user interfaces.")
199 (license license:gpl2+)))
200
201 (define-public cppunit
202 (package
203 (name "cppunit")
204 (version "1.14.0")
205 (source (origin
206 (method url-fetch)
207 (uri (string-append "http://dev-www.libreoffice.org/src/"
208 name "-" version ".tar.gz"))
209 (sha256
210 (base32
211 "1027cyfx5gsjkdkaf6c2wnjh68882grw8n672018cj3vs9lrhmix"))))
212 ;; Explicitly link with libdl. This is expected to be done by packages
213 ;; relying on cppunit for their tests. However, not all of them do.
214 ;; If we added the linker flag to such packages, we would pollute all
215 ;; binaries, not only those used for testing.
216 (arguments
217 `(#:make-flags '("LDFLAGS=-ldl")))
218 (build-system gnu-build-system)
219 (home-page "https://wiki.freedesktop.org/www/Software/cppunit/")
220 (synopsis "Unit testing framework for C++")
221 (description "CppUnit is the C++ port of the famous JUnit framework for
222 unit testing. Test output is in XML for automatic testing and GUI based for
223 supervised tests.")
224 (license license:lgpl2.1))) ; no copyright notices. LGPL2.1 is in the tarball
225
226 ;; When dependent packages upgraded to use newer version of catch, this one should
227 ;; be removed.
228 (define-public catch-framework
229 (package
230 (name "catch")
231 (version "1.3.5") ;Sub-minor is the build number
232 (source (origin
233 (method git-fetch)
234 (uri (git-reference
235 (url "https://github.com/philsquared/Catch")
236 ;; Semi-arbitrary.
237 (commit "ae5ee2cf63d6d67bd1369b512d2a7b60b571c907")))
238 (file-name (string-append name "-" version))
239 (sha256
240 (base32
241 "1yfb3lxv929szqy1nw9xw3d45wzkppziqshkjxvrb1fdmf46x564"))))
242 (build-system trivial-build-system)
243 (arguments
244 `(#:modules ((guix build utils))
245 #:builder (begin
246 (use-modules (guix build utils))
247 (let* ((source (assoc-ref %build-inputs "source"))
248 (output (assoc-ref %outputs "out"))
249 (incdir (string-append output "/include"))
250 (docdir (string-append output "/share/doc/catch-"
251 ,version)))
252 (for-each mkdir-p (list incdir docdir))
253 (install-file (string-append source
254 "/single_include/catch.hpp")
255 incdir)
256 (copy-recursively (string-append source "/docs")
257 docdir)
258 #t))))
259 (home-page "http://catch-lib.net/")
260 (synopsis "Automated test framework for C++ and Objective-C")
261 (description
262 "Catch stands for C++ Automated Test Cases in Headers and is a
263 multi-paradigm automated test framework for C++ and Objective-C.")
264 (license license:boost1.0)))
265
266 (define-public catch-framework2-1
267 (package
268 (name "catch2")
269 (version "1.12.2")
270 (home-page "https://github.com/catchorg/Catch2")
271 (source (origin
272 (method git-fetch)
273 (uri (git-reference
274 (url "https://github.com/catchorg/Catch2")
275 (commit (string-append "v" version))))
276 (file-name (git-file-name name version))
277 (sha256
278 (base32
279 "1gdp5wm8khn02g2miz381llw3191k7309qj8s3jd6sasj01rhf23"))))
280 (build-system cmake-build-system)
281 (synopsis "Automated test framework for C++ and Objective-C")
282 (description "Catch2 stands for C++ Automated Test Cases in Headers and is
283 a multi-paradigm automated test framework for C++ and Objective-C.")
284 (license license:boost1.0)))
285
286 (define-public catch-framework2
287 (package
288 (name "catch2")
289 (version "2.13.0")
290 (home-page "https://github.com/catchorg/Catch2")
291 (source (origin
292 (method git-fetch)
293 (uri (git-reference
294 (url "https://github.com/catchorg/Catch2")
295 (commit (string-append "v" version))))
296 (file-name (git-file-name name version))
297 (sha256
298 (base32
299 "0i4w0c9280a5fyi00mvvf13wlnfzyifr487n1iyr30zvvj5s5f1h"))))
300 (build-system cmake-build-system)
301 (inputs
302 `(("python" ,python-wrapper)))
303 (synopsis "Automated test framework for C++ and Objective-C")
304 (description "Catch2 stands for C++ Automated Test Cases in Headers and is
305 a multi-paradigm automated test framework for C++ and Objective-C.")
306 (license license:boost1.0)))
307
308 (define-public cmdtest
309 (package
310 (name "cmdtest")
311 (version "0.32")
312 (source (origin
313 (method url-fetch)
314 (uri (string-append "http://git.liw.fi/cmdtest/snapshot/"
315 name "-" version ".tar.gz"))
316 (sha256
317 (base32
318 "1jmfiyrrqmpvwdb273bkb8hjaf4rwx9njblx29pmr7giyahskwi5"))))
319 (build-system python-build-system)
320 (arguments
321 `(#:python ,python-2
322 #:phases
323 (modify-phases %standard-phases
324 ;; check phase needs to be run before the build phase. If not, the
325 ;; coverage test runner looks for tests for the built source files,
326 ;; and fails.
327 (delete 'check)
328 (add-before 'build 'check
329 (lambda _
330 (substitute* "yarn"
331 (("/bin/sh") (which "sh")))
332 ;; yarn uses python2-ttystatus to print messages.
333 ;; python2-ttystatus requires /dev/tty which is not present in
334 ;; the build environment. Hence assuming-failure test fails.
335 (delete-file "yarn.tests/assuming-failure.script")
336 (delete-file "yarn.tests/assuming-failure.stdout")
337 (invoke "python" "setup.py" "check"))))))
338 (native-inputs
339 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)))
340 (propagated-inputs
341 `(("python2-cliapp" ,python2-cliapp)
342 ("python2-markdown" ,python2-markdown)
343 ("python2-ttystatus" ,python2-ttystatus)))
344 (home-page "https://liw.fi/cmdtest/")
345 (synopsis "Black box Unix program tester")
346 (description
347 "@code{cmdtest} black box tests Unix command line tools. Roughly, it is
348 given a command line and input files, and the expected output, and it verifies
349 that the command line produces the expected output. If not, it reports a
350 problem, and shows the differences.")
351 (license license:gpl3+)))
352
353 (define-public cmocka
354 (package
355 (name "cmocka")
356 (version "1.1.5")
357 (source (origin
358 (method url-fetch)
359 (uri (string-append "https://cmocka.org/files/"
360 (version-major+minor version) "/cmocka-"
361 version ".tar.xz"))
362 (sha256
363 (base32
364 "1dm8pdvkyfa8dsbz9bpq7wwgixjij4sii9bbn5sgvqjm5ljdik7h"))))
365 (build-system cmake-build-system)
366 (arguments
367 `(#:tests? #f)) ; no test target
368 (home-page "https://cmocka.org/")
369 (synopsis "Unit testing framework for C")
370 (description "Cmocka is a unit testing framework for C with support for
371 mock objects. It only requires the standard C library, and works with
372 different compilers. Cmocka supports several different message output formats
373 like Test Anything Protocol, Subunit, xUnit XML or the original cmockery output
374 format.")
375 (license license:asl2.0)))
376
377 (define-public cppcheck
378 (package
379 (name "cppcheck")
380 (version "1.90")
381 (source (origin
382 (method git-fetch)
383 (uri (git-reference
384 (url "https://github.com/danmar/cppcheck")
385 (commit version)))
386 (file-name (git-file-name name version))
387 (sha256
388 (base32 "0h7ir2x0k005fm586dxmaphgv5cyz25k3k4sh02p7zb78gzx398h"))))
389 (build-system cmake-build-system)
390 (arguments
391 '(#:configure-flags '("-DBUILD_TESTS=ON")))
392 (home-page "http://cppcheck.sourceforge.net")
393 (synopsis "Static C/C++ code analyzer")
394 (description "Cppcheck is a static code analyzer for C and C++. Unlike
395 C/C++ compilers and many other analysis tools it does not detect syntax errors
396 in the code. Cppcheck primarily detects the types of bugs that the compilers
397 normally do not detect. The goal is to detect only real errors in the code
398 (i.e. have zero false positives).")
399 (license license:gpl3+)))
400
401 (define-public cxxtest
402 (package
403 (name "cxxtest")
404 (version "4.4")
405 (source (origin
406 (method url-fetch)
407 (uri (string-append "mirror://sourceforge/cxxtest/cxxtest/"
408 version "/cxxtest-" version ".tar.gz"))
409 (sha256
410 (base32
411 "1n7pbj4z9ivx005hqvivj9ddhq8awynzg6jishfbypf6j7ply58w"))))
412 (build-system python-build-system)
413 (arguments
414 '(#:phases
415 (modify-phases %standard-phases
416 (add-after 'unpack 'chdir-to-source
417 (lambda _
418 (chdir "python")
419 #t))
420 (add-after 'install 'install-headers
421 (lambda* (#:key outputs #:allow-other-keys)
422 (let* ((out (assoc-ref outputs "out"))
423 (include-dir (string-append out "/include/cxxtest")))
424 (for-each (lambda (header-file)
425 (install-file header-file include-dir))
426 (find-files "../cxxtest"))
427 #t)))
428 (add-after 'install 'install-doc
429 (lambda* (#:key outputs #:allow-other-keys)
430 (let* ((out (assoc-ref outputs "out"))
431 (doc-dir (string-append out "/share/doc/cxxtest")))
432 (install-file "../README" doc-dir)
433 (install-file "../doc/guide.txt" doc-dir)
434 (copy-recursively "../sample" (string-append doc-dir "/sample"))
435 #t))))))
436 (propagated-inputs
437 `(("python-ply" ,python-ply)))
438 (home-page "https://cxxtest.com/")
439 (synopsis "Unit testing framework for C++")
440 (description "CxxTest is a unit testing framework for C++ that is similar
441 in spirit to JUnit, CppUnit, and xUnit. CxxTest does not require precompiling
442 a CxxTest testing library, it employs no advanced features of C++ (e.g. RTTI)
443 and it supports a very flexible form of test discovery.")
444 (license license:lgpl3+)))
445
446 (define-public doctest
447 (package
448 (name "doctest")
449 (version "2.4.0")
450 (home-page "https://github.com/onqtam/doctest")
451 (source (origin
452 (method git-fetch)
453 (uri (git-reference (url home-page) (commit version)))
454 (file-name (git-file-name name version))
455 (sha256
456 (base32
457 "1yi95saqv8qb3ix6w8d7ffvs7qbwvqmq6wblckhxhicxxdxk85cd"))))
458 (build-system cmake-build-system)
459 (synopsis "C++ test framework")
460 (description
461 "doctest is a single-header testing framework for C++11 and later. It
462 has been designed to be fast, light and unintrusive.")
463 (license license:expat)))
464
465 (define-public go-gopkg.in-check.v1
466 (let ((commit "788fd78401277ebd861206a03c884797c6ec5541")
467 (revision "1"))
468 (package
469 (name "go-gopkg.in-check.v1")
470 (version (git-version "0.0.0" revision commit))
471 (source (origin
472 (method git-fetch)
473 (uri (git-reference
474 (url "https://github.com/go-check/check")
475 (commit commit)))
476 (file-name (git-file-name name version))
477 (sha256
478 (base32
479 "0v3bim0j375z81zrpr5qv42knqs0y2qv2vkjiqi5axvb78slki1a"))))
480 (build-system go-build-system)
481 (arguments
482 '(#:import-path "gopkg.in/check.v1"))
483 (propagated-inputs
484 `(("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
485 (synopsis "Rich testing extension for Go's testing package")
486 (description
487 "@code{check} is a rich testing extension for Go's testing package.")
488 (home-page "https://github.com/go-check/check")
489 (license license:bsd-2))))
490
491 (define-public go-github.com-smartystreets-gunit
492 (package
493 (name "go-github.com-smartystreets-gunit")
494 (version "1.0.0")
495 (source (origin
496 (method git-fetch)
497 (uri (git-reference
498 (url "https://github.com/smartystreets/gunit")
499 (commit version)))
500 (file-name (git-file-name name version))
501 (sha256
502 (base32
503 "00m4zg0kdj49mnpmf9klb44ba71p966xsk6zknrzqgfc8119f35z"))))
504 (build-system go-build-system)
505 (arguments
506 '(;; TODO: This package depends on go-github.com-smartystreets-assertions
507 ;; for running the tests, but go-github.com-smartystreets-assertions
508 ;; depends on this package, so break this loop by not running the tests
509 ;; for this package.
510 #:tests? #f
511 #:import-path "github.com/smartystreets/gunit"))
512 (synopsis "Testing tool for Go, in the style of xUnit")
513 (description
514 "@code{gunit} allows the test author to use a struct as the scope for a
515 group of related test cases, in the style of xUnit fixtures. This makes
516 extraction of setup/teardown behavior (as well as invoking the system under
517 test) much simpler.")
518 (home-page "https://github.com/smartystreets/gunit")
519 (license license:expat)))
520
521 (define-public go-github.com-smartystreets-assertions
522 (package
523 (name "go-github.com-smartystreets-assertions")
524 (version "1.8.1")
525 (source (origin
526 (method git-fetch)
527 (uri (git-reference
528 (url "https://github.com/smartystreets/assertions")
529 (commit version)))
530 (file-name (git-file-name name version))
531 (sha256
532 (base32
533 "1j0adgbykl55rf2945g0n5bmqdsnjcqlx5dcmpfh4chki43hiwg9"))))
534 (build-system go-build-system)
535 (arguments
536 '(#:import-path "github.com/smartystreets/assertions"))
537 (native-inputs
538 `(("go-github.com-smartystreets-gunit" ,go-github.com-smartystreets-gunit)))
539 (synopsis "Assertions for testing with Go")
540 (description
541 "The @code{assertions} package provides convenient assertion functions
542 for writing tests in Go.")
543 (home-page "https://github.com/smartystreets/assertions")
544 (license license:expat)))
545
546 (define-public go-github.com-smartystreets-goconvey
547 (package
548 (name "go-github.com-smartystreets-goconvey")
549 (version "1.6.3")
550 (source (origin
551 (method git-fetch)
552 (uri (git-reference
553 (url "https://github.com/smartystreets/goconvey")
554 (commit version)))
555 (file-name (git-file-name name version))
556 (sha256
557 (base32
558 "1ph18rkl3ns3fgin5i4j54w5a69grrmf3apcsmnpdn1wlrbs3dxh"))))
559 (build-system go-build-system)
560 (arguments
561 '(#:import-path "github.com/smartystreets/goconvey"))
562 (propagated-inputs
563 `(("go-github.com-jtolds-gls" ,go-github.com-jtolds-gls)
564 ("go-github.com-smartystreets-assertions" ,go-github.com-smartystreets-assertions)))
565 (synopsis "Go testing tool with both a web and terminal user interface")
566 (description
567 "GoConvey is a testing tool for Go. It integrates with go test, can show
568 test coverage and has a web user interface that will refresh automatically.")
569 (home-page "https://github.com/smartystreets/goconvey")
570 (license license:expat)))
571
572 (define-public googletest
573 (package
574 (name "googletest")
575 (version "1.10.0")
576 (source
577 (origin
578 (method git-fetch)
579 (uri (git-reference
580 (url "https://github.com/google/googletest")
581 (commit (string-append "release-" version))))
582 (file-name (git-file-name name version))
583 (sha256
584 (base32 "1zbmab9295scgg4z2vclgfgjchfjailjnvzc6f5x9jvlsdi3dpwz"))))
585 (build-system cmake-build-system)
586 (arguments
587 `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
588 (native-inputs
589 `(("python" ,python-wrapper)))
590 (home-page "https://github.com/google/googletest/")
591 (synopsis "Test discovery and XUnit test framework")
592 (description "Google Test features an XUnit test framework, automated test
593 discovery, death tests, assertions, parameterized tests and XML test report
594 generation.")
595 (license license:bsd-3)))
596
597 (define-public googletest-1.8
598 (package/inherit
599 googletest
600 (version "1.8.1")
601 (source (origin
602 (method git-fetch)
603 (uri (git-reference
604 (url "https://github.com/google/googletest")
605 (commit (string-append "release-" version))))
606 (file-name (git-file-name "googletest" version))
607 (sha256
608 (base32
609 "0270msj6n7mggh4xqqjp54kswbl7mkcc8px1p5dqdpmw5ngh9fzk"))))))
610
611 (define-public cpputest
612 (package
613 (name "cpputest")
614 (version "3.8")
615 (source
616 (origin
617 (method url-fetch)
618 (uri (string-append "https://github.com/cpputest/cpputest/releases/download/v"
619 version "/cpputest-" version ".tar.gz"))
620 (sha256
621 (base32
622 "0mk48xd3klyqi7wf3f4wn4zqxxzmvrhhl32r25jzrixzl72wq7f8"))))
623 (build-system gnu-build-system)
624 (native-inputs
625 `(("googletest" ,googletest)))
626 (home-page "https://cpputest.github.io/")
627 (synopsis "Unit testing and mocking framework for C/C++")
628 (description
629 "CppUTest is a C/C++ based unit xUnit test framework. It is written in
630 C++ but is used in C and C++ projects and frequently used in embedded systems
631 but it works for any C/C++ project.")
632 (license license:bsd-3)))
633
634 (define-public python-parameterized
635 (package
636 (name "python-parameterized")
637 (version "0.7.4")
638 (source
639 (origin
640 (method url-fetch)
641 (uri (pypi-uri "parameterized" version))
642 (sha256
643 (base32 "1444fdz5bj0k10nmhxv0bv2gfrfisi7hfzqdndb0pvhf4g3qq3qr"))))
644 (build-system python-build-system)
645 (arguments
646 '(#:phases (modify-phases %standard-phases
647 (replace 'check
648 (lambda* (#:key tests? #:allow-other-keys)
649 (if tests?
650 (invoke "nosetests" "-v")
651 (format #t "test suite not run~%"))
652 #t)))))
653 (native-inputs
654 `(("python-mock" ,python-mock)
655 ("python-nose" ,python-nose)))
656 (home-page "https://github.com/wolever/parameterized")
657 (synopsis "Parameterized testing with any Python test framework")
658 (description
659 "Parameterized is a Python library that aims to fix parameterized testing
660 for every Python test framework. It supports nose, py.test, and unittest.")
661 (properties `((python2-variant . ,(delay python2-parameterized))))
662 (license license:bsd-2)))
663
664 (define-public python2-parameterized
665 (let ((base (package-with-python2 (strip-python2-variant
666 python-parameterized))))
667 (package/inherit
668 base
669 (source
670 (origin
671 (inherit (package-source base))
672 (patches (search-patches "python2-parameterized-docstring-test.patch")))))))
673
674 (define-public python-minimock
675 (package
676 (name "python-minimock")
677 (version "1.2.8")
678 (source
679 (origin
680 (method url-fetch)
681 (uri (pypi-uri "MiniMock" version))
682 (sha256
683 (base32
684 "0k2sxb1ibnyg05iblz7zhbv825f1zk9906rab7883iqgvzmdzpsz"))))
685 (build-system python-build-system)
686 (home-page "https://pypi.org/project/MiniMock")
687 (synopsis "Simple Python library for using mock objects")
688 (description "MiniMock is a simple library for building mock objects with
689 doctest.")
690 (license license:expat)))
691
692 (define-public python2-minimock
693 (package-with-python2 python-minimock))
694
695 (define-public python-mock
696 (package
697 (name "python-mock")
698 (version "3.0.5")
699 (source
700 (origin
701 (method url-fetch)
702 (uri (pypi-uri "mock" version))
703 (sha256
704 (base32
705 "1hrp6j0yrx2xzylfv02qa8kph661m6yq4p0mc8fnimch9j4psrc3"))))
706 (propagated-inputs
707 `(("python-six" ,python-six)))
708 (build-system python-build-system)
709 (arguments
710 ;; FIXME: Tests require "pytest", which depends on this package.
711 '(#:tests? #f))
712 (home-page "https://github.com/testing-cabal/mock")
713 (synopsis "Python mocking and patching library for testing")
714 (description
715 "Mock is a library for testing in Python. It allows you to replace parts
716 of your system under test with mock objects and make assertions about how they
717 have been used.")
718 (properties `((python2-variant . ,(delay python2-mock))))
719 (license license:expat)))
720
721 (define-public python2-mock
722 (let ((base (package-with-python2
723 (strip-python2-variant python-mock))))
724 (package (inherit base)
725 (propagated-inputs
726 `(("python2-functools32" ,python2-functools32)
727 ("python2-funcsigs" ,python2-funcsigs)
728 ,@(package-propagated-inputs base))))))
729
730 (define-public python-nose
731 (package
732 (name "python-nose")
733 (version "1.3.7")
734 (source
735 (origin
736 (method url-fetch)
737 (uri (pypi-uri "nose" version))
738 (sha256
739 (base32
740 "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))
741 (build-system python-build-system)
742 (arguments
743 '(#:tests? #f)) ; FIXME: test suite fails
744 (home-page "http://readthedocs.org/docs/nose/")
745 (synopsis "Python testing library")
746 (description
747 "Nose extends the unittest library to make testing easier.")
748 (license license:lgpl2.0+)))
749
750 (define-public python2-nose
751 (package-with-python2 python-nose))
752
753 (define-public python-nose2
754 (package
755 (name "python-nose2")
756 (version "0.9.2")
757 (source
758 (origin
759 (method url-fetch)
760 (uri (pypi-uri "nose2" version))
761 (sha256
762 (base32
763 "0pmbb6nk31yhgh4zkcblzxsznml7f7pf5q1ihgrwvbxv4mwzfql7"))))
764 (build-system python-build-system)
765 (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
766 (propagated-inputs
767 `(("python-cov-core" ,python-cov-core)
768 ("python-pytest-cov" ,python-pytest-cov)
769 ("python-six" ,python-six)))
770 (home-page "https://github.com/nose-devs/nose2")
771 (synopsis "Next generation of nicer testing for Python")
772 (description
773 "Nose2 is the next generation of nicer testing for Python, based on the
774 plugins branch of unittest2. Nose2 aims to improve on nose by providing a
775 better plugin api, being easier for users to configure, and simplifying internal
776 interfaces and processes.")
777 (license license:bsd-2)))
778
779 (define-public python2-nose2
780 (package-with-python2 python-nose2))
781
782 (define-public python-unittest2
783 (package
784 (name "python-unittest2")
785 (version "1.1.0")
786 (source
787 (origin
788 (method url-fetch)
789 (uri (pypi-uri "unittest2" version))
790 (patches
791 (search-patches "python-unittest2-python3-compat.patch"
792 "python-unittest2-remove-argparse.patch"))
793 (sha256
794 (base32
795 "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212"))))
796 (build-system python-build-system)
797 (arguments
798 '(#:phases
799 (modify-phases %standard-phases
800 (replace 'check
801 (lambda _
802 (zero? (system* "python" "-m" "unittest2" "discover" "--verbose")))))))
803 (propagated-inputs
804 `(("python-six" ,python-six)
805 ("python-traceback2" ,python-traceback2)))
806 (home-page "https://pypi.org/project/unittest2/")
807 (synopsis "Python unit testing library")
808 (description
809 "Unittest2 is a replacement for the unittest module in the Python
810 standard library.")
811 (license license:psfl)))
812
813 (define-public python2-unittest2
814 (package-with-python2 python-unittest2))
815
816 (define-public python-pytest
817 (package
818 (name "python-pytest")
819 (version "5.3.5")
820 (source
821 (origin
822 (method url-fetch)
823 (uri (pypi-uri "pytest" version))
824 (sha256
825 (base32
826 "139i9cjhrv5aici3skq8iihvfb3lq0d8xb5j7qycr2hlk8cfjpqd"))))
827 (build-system python-build-system)
828 (arguments
829 `(#:phases
830 (modify-phases %standard-phases
831 (replace 'check
832 (lambda* (#:key (tests? #t) #:allow-other-keys)
833 (if tests?
834 (invoke "pytest" "-vv" "-k"
835 (string-append
836 ;; These tests involve the /usr directory, and fails.
837 "not test_remove_dir_prefix"
838 " and not test_argcomplete"
839 ;; This test tries to override PYTHONPATH, and
840 ;; subsequently fails to locate the test libraries.
841 " and not test_collection"))
842 (format #t "test suite not run~%"))
843 #t)))))
844 (propagated-inputs
845 `(("python-atomicwrites" ,python-atomicwrites)
846 ("python-attrs" ,python-attrs-bootstrap)
847 ("python-more-itertools" ,python-more-itertools)
848 ("python-packaging" ,python-packaging-bootstrap)
849 ("python-pluggy" ,python-pluggy)
850 ("python-py" ,python-py)
851 ("python-six" ,python-six-bootstrap)
852 ("python-wcwidth" ,python-wcwidth)))
853 (native-inputs
854 `(;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
855 ("bash" ,bash)
856 ("python-hypothesis" ,python-hypothesis)
857 ("python-nose" ,python-nose)
858 ("python-mock" ,python-mock)
859 ("python-pytest" ,python-pytest-bootstrap)
860 ("python-setuptools-scm" ,python-setuptools-scm)
861 ("python-xmlschema" ,python-xmlschema)))
862 (home-page "https://docs.pytest.org/en/latest/")
863 (synopsis "Python testing library")
864 (description
865 "Pytest is a testing tool that provides auto-discovery of test modules
866 and functions, detailed info on failing assert statements, modular fixtures,
867 and many external plugins.")
868 (license license:expat)
869 (properties `((python2-variant . ,(delay python2-pytest))))))
870
871 ;; Pytest 4.x are the last versions that support Python 2.
872 (define-public python2-pytest
873 (package
874 (inherit (strip-python2-variant python-pytest))
875 (name "python2-pytest")
876 (version "4.6.9")
877 (source (origin
878 (method url-fetch)
879 (uri (pypi-uri "pytest" version))
880 (sha256
881 (base32
882 "0fgkmpc31nzy97fxfrkqbzycigdwxwwmninx3qhkzp81migggs0r"))))
883 (build-system python-build-system)
884 (arguments
885 `(#:python ,python-2
886 ,@(package-arguments python-pytest)))
887 (propagated-inputs
888 `(("python-atomicwrites" ,python2-atomicwrites)
889 ("python-attrs" ,python2-attrs-bootstrap)
890 ("python-funcsigs" ,python2-funcsigs)
891 ("python-importlib-metadata" ,python2-importlib-metadata-bootstrap)
892 ("python-more-itertools" ,python2-more-itertools)
893 ("python-packaging" ,python2-packaging-bootstrap)
894 ("python-pathlib2" ,python2-pathlib2)
895 ("python-pluggy" ,python2-pluggy)
896 ("python-py" ,python2-py)
897 ("python-six" ,python2-six-bootstrap)
898 ("python-wcwidth" ,python2-wcwidth)))
899 (native-inputs
900 `(("bash" ,bash) ;tests require 'compgen'
901 ("python-hypothesis" ,python2-hypothesis)
902 ("python-nose" ,python2-nose)
903 ("python-mock" ,python2-mock)
904 ("python-pytest" ,python2-pytest-bootstrap)
905 ("python-setuptools-scm" ,python2-setuptools-scm)))))
906
907 (define-public python-pytest-bootstrap
908 (package
909 (inherit (strip-python2-variant python-pytest))
910 (name "python-pytest-bootstrap")
911 (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm)))
912 (arguments `(#:tests? #f))
913 (properties `((python2-variant . ,(delay python2-pytest-bootstrap))))))
914
915 (define-public python2-pytest-bootstrap
916 (hidden-package
917 (package/inherit
918 python2-pytest
919 (name "python2-pytest-bootstrap")
920 (arguments
921 (substitute-keyword-arguments (package-arguments python2-pytest)
922 ((#:tests? _ #f) #f)))
923 (native-inputs
924 `(("python-setuptools-scm" ,python2-setuptools-scm)))
925 (propagated-inputs
926 `(("python-atomicwrites" ,python2-atomicwrites)
927 ("python-attrs" ,python2-attrs-bootstrap)
928 ("python-funcsigs" ,python2-funcsigs-bootstrap)
929 ("python-importlib-metadata" ,python2-importlib-metadata-bootstrap)
930 ("python-more-itertools" ,python2-more-itertools)
931 ("python-packaging" ,python2-packaging-bootstrap)
932 ("python-pathlib2" ,python2-pathlib2-bootstrap)
933 ("python-pluggy" ,python2-pluggy-bootstrap)
934 ("python-py" ,python2-py)
935 ("python-wcwidth" ,python2-wcwidth))))))
936
937 (define-public python-pytest-cov
938 (package
939 (name "python-pytest-cov")
940 (version "2.8.1")
941 (source
942 (origin
943 (method url-fetch)
944 (uri (pypi-uri "pytest-cov" version))
945 (sha256
946 (base32 "0avzlk9p4nc44k7lpx9109dybq71xqnggxb9f4hp0l64pbc44ryc"))))
947 (build-system python-build-system)
948 (arguments
949 `(#:phases
950 (modify-phases %standard-phases
951 (replace 'check
952 (lambda _
953 ;; Options taken from tox.ini.
954 ;; TODO: make "--restructuredtext" tests pass. They currently fail
955 ;; with "Duplicate implicit target name".
956 (invoke "python" "./setup.py" "check"
957 "--strict" "--metadata"))))))
958 (propagated-inputs
959 `(("python-coverage" ,python-coverage)
960 ("python-pytest" ,python-pytest)))
961 (home-page "https://github.com/pytest-dev/pytest-cov")
962 (synopsis "Pytest plugin for measuring coverage")
963 (description
964 "Pytest-cov produces coverage reports. It supports centralised testing and
965 distributed testing in both @code{load} and @code{each} modes. It also
966 supports coverage of subprocesses.")
967 (license license:expat)))
968
969 (define-public python2-pytest-cov
970 (package-with-python2 python-pytest-cov))
971
972 (define-public python-pytest-runner
973 (package
974 (name "python-pytest-runner")
975 (version "5.2")
976 (source
977 (origin
978 (method url-fetch)
979 (uri (pypi-uri "pytest-runner" version))
980 (sha256
981 (base32
982 "0awll1bva5zy8cspsxcpv7pjcrdf5c6pf56nqn4f74vvmlzfgiwn"))))
983 (build-system python-build-system)
984 (arguments
985 '(;; FIXME: The test suite requires 'python-flake8' and 'python-black',
986 ;; but that introduces a circular dependency.
987 #:tests? #f
988 #:phases (modify-phases %standard-phases
989 (replace 'check
990 (lambda* (#:key tests? #:allow-other-keys)
991 (if tests?
992 (invoke "pytest" "-vv")
993 (format #t "test suite not run~%"))
994 #t)))))
995 (native-inputs
996 `(("python-setuptools-scm" ,python-setuptools-scm)))
997 (home-page "https://github.com/pytest-dev/pytest-runner")
998 (synopsis "Invoke py.test as a distutils command")
999 (description
1000 "This package provides a @command{pytest-runner} command that
1001 @file{setup.py} files can use to run tests.")
1002 (license license:expat)))
1003
1004 (define-public python2-pytest-runner
1005 (package-with-python2 python-pytest-runner))
1006
1007 ;; python-bleach 3.1.0 requires this ancient version of pytest-runner.
1008 ;; Remove once no longer needed.
1009 (define-public python-pytest-runner-2
1010 (package/inherit
1011 python-pytest-runner
1012 (version "2.12.2")
1013 (source (origin
1014 (method url-fetch)
1015 (uri (pypi-uri "pytest-runner" version))
1016 (sha256
1017 (base32
1018 "11ivjj9hfphkv4yfb2g74av4yy86y8gcbf7gbif0p1hcdfnxg3w6"))))))
1019
1020 (define-public python2-pytest-runner-2
1021 (package-with-python2 python-pytest-runner-2))
1022
1023 (define-public python-pytest-lazy-fixture
1024 (package
1025 (name "python-pytest-lazy-fixture")
1026 (version "0.6.3")
1027 (source
1028 (origin
1029 (method url-fetch)
1030 (uri (pypi-uri "pytest-lazy-fixture" version))
1031 (sha256
1032 (base32 "1b0hmnsxw4s2wf9pks8dg6dfy5cx3zcbzs8517lfccxsfizhqz8f"))))
1033 (build-system python-build-system)
1034 (arguments
1035 '(#:phases
1036 (modify-phases %standard-phases
1037 (replace 'check
1038 (lambda* (#:key inputs outputs #:allow-other-keys)
1039 ;; Make the installed plugin discoverable by Pytest.
1040 (add-installed-pythonpath inputs outputs)
1041 (invoke "pytest" "-vv"))))))
1042 (propagated-inputs
1043 `(("python-pytest" ,python-pytest)))
1044 (home-page "https://github.com/tvorog/pytest-lazy-fixture")
1045 (synopsis "Use fixtures in @code{pytest.mark.parametrize}")
1046 (description "This plugin helps to use fixtures in
1047 @code{pytest.mark.parametrize}.")
1048 (license license:expat)))
1049
1050 (define-public python-pytest-mock
1051 (package
1052 (name "python-pytest-mock")
1053 (version "1.10.1")
1054 (source
1055 (origin
1056 (method url-fetch)
1057 (uri (pypi-uri "pytest-mock" version))
1058 (sha256
1059 (base32
1060 "1i5mg3ff1qk0wqfcxfz60hwy3q5dskdp36i10ckigkzffg8hc3ad"))))
1061 (build-system python-build-system)
1062 (native-inputs
1063 `(("python-setuptools-scm" ,python-setuptools-scm)))
1064 (propagated-inputs
1065 `(("python-pytest" ,python-pytest)))
1066 (home-page "https://github.com/pytest-dev/pytest-mock/")
1067 (synopsis "Thin-wrapper around the mock package for easier use with py.test")
1068 (description
1069 "This plugin installs a @code{mocker} fixture which is a thin-wrapper
1070 around the patching API provided by the @code{mock} package, but with the
1071 benefit of not having to worry about undoing patches at the end of a test.
1072 The mocker fixture has the same API as @code{mock.patch}, supporting the
1073 same arguments.")
1074 (properties `((python2-variant . ,(delay python2-pytest-mock))))
1075 (license license:expat)))
1076
1077 (define-public python2-pytest-mock
1078 (let ((base (package-with-python2
1079 (strip-python2-variant python-pytest-mock))))
1080 (package (inherit base)
1081 (propagated-inputs
1082 `(("python2-mock" ,python2-mock)
1083 ,@(package-propagated-inputs base))))))
1084
1085 (define-public python-pytest-xdist
1086 (package
1087 (name "python-pytest-xdist")
1088 (version "1.25.0")
1089 (source
1090 (origin
1091 (method url-fetch)
1092 (uri (pypi-uri "pytest-xdist" version))
1093 (sha256
1094 (base32
1095 "1d812apvcmshh2l8f38spqwb3bpp0x43yy7lyfpxxzc99h4r7y4n"))
1096 (modules '((guix build utils)))
1097 (snippet
1098 '(begin
1099 ;; Remove pre-compiled .pyc files from source.
1100 (for-each delete-file-recursively
1101 (find-files "." "__pycache__" #:directories? #t))
1102 (for-each delete-file (find-files "." "\\.pyc$"))
1103 #t))))
1104 (build-system python-build-system)
1105 (arguments
1106 '(#:tests? #f)) ;FIXME: Some tests are failing.
1107 ;; #:phases
1108 ;; (modify-phases %standard-phases
1109 ;; (delete 'check)
1110 ;; (add-after 'install 'check
1111 ;; (lambda* (#:key inputs outputs #:allow-other-keys)
1112 ;; (add-installed-pythonpath inputs outputs)
1113 ;; (zero? (system* "py.test" "-v")))))
1114 (native-inputs
1115 `(("python-setuptools-scm" ,python-setuptools-scm)))
1116 (propagated-inputs
1117 `(("python-execnet" ,python-execnet)
1118 ("python-pytest" ,python-pytest)
1119 ("python-py" ,python-py)))
1120 (home-page
1121 "https://github.com/pytest-dev/pytest-xdist")
1122 (synopsis
1123 "Plugin for py.test with distributed testing and loop-on-failing modes")
1124 (description
1125 "The pytest-xdist plugin extends py.test with some unique test execution
1126 modes: parallelization, running tests in boxed subprocesses, the ability
1127 to run tests repeatedly when failed, and the ability to run tests on multiple
1128 Python interpreters or platforms. It uses rsync to copy the existing
1129 program code to a remote location, executes there, and then syncs the
1130 result back.")
1131 (license license:expat)))
1132
1133 (define-public python2-pytest-xdist
1134 (package-with-python2 python-pytest-xdist))
1135
1136 (define-public python-pytest-timeout
1137 (package
1138 (name "python-pytest-timeout")
1139 (version "1.3.4")
1140 (source
1141 (origin
1142 (method url-fetch)
1143 (uri (pypi-uri "pytest-timeout" version))
1144 (sha256
1145 (base32
1146 "13n42azbvs5slvy2n1a9nw17r4qdq10dd68nln3jp925safa3yl0"))))
1147 (build-system python-build-system)
1148 (arguments
1149 '(#:phases (modify-phases %standard-phases
1150 (replace 'check
1151 (lambda* (#:key inputs outputs #:allow-other-keys)
1152 ;; Make the installed plugin discoverable by Pytest.
1153 (add-installed-pythonpath inputs outputs)
1154 (invoke "pytest" "-vv"))))))
1155 (propagated-inputs
1156 `(("python-pytest" ,python-pytest)))
1157 (native-inputs
1158 `(("python-pexpect" ,python-pexpect)))
1159 (home-page "http://bitbucket.org/pytest-dev/pytest-timeout/")
1160 (synopsis "Plugin for py.test to abort hanging tests")
1161 (description
1162 "This package provides a py.test plugin that aborts hanging tests after a
1163 timeout has been exceeded.")
1164 (license license:expat)))
1165
1166 (define-public python-pytest-forked
1167 (package
1168 (name "python-pytest-forked")
1169 (version "1.1.3")
1170 (source
1171 (origin
1172 (method url-fetch)
1173 (uri (pypi-uri "pytest-forked" version))
1174 (sha256
1175 (base32
1176 "000i4q7my2fq4l49n8idx2c812dql97qv6qpm2vhrrn9v6g6j18q"))))
1177 (build-system python-build-system)
1178 (propagated-inputs
1179 `(("python-pytest" ,python-pytest)))
1180 (native-inputs
1181 `(("python-setuptools-scm" ,python-setuptools-scm)))
1182 (home-page
1183 "https://github.com/pytest-dev/pytest-forked")
1184 (synopsis
1185 "Run tests in isolated forked subprocesses")
1186 (description
1187 "Pytest plugin which will run each test in a subprocess and will report if
1188 a test crashed the process.")
1189 (license license:expat)))
1190
1191 (define-public python-scripttest
1192 (package
1193 (name "python-scripttest")
1194 (version "1.3")
1195 (source
1196 (origin
1197 (method url-fetch)
1198 (uri (pypi-uri "scripttest" version))
1199 (sha256
1200 (base32
1201 "0f4w84k8ck82syys7yg9maz93mqzc8p5ymis941x034v44jzq74m"))))
1202 (build-system python-build-system)
1203 (native-inputs
1204 `(("python-pytest" ,python-pytest)))
1205 (home-page (string-append "https://web.archive.org/web/20161029233413/"
1206 "http://pythonpaste.org/scripttest/"))
1207 (synopsis "Python library to test command-line scripts")
1208 (description "Scripttest is a Python helper library for testing
1209 interactive command-line applications. With it you can run a script in a
1210 subprocess and see the output as well as any file modifications.")
1211 (license license:expat)))
1212
1213 (define-public python2-scripttest
1214 (package-with-python2 python-scripttest))
1215
1216 (define-public python-testtools-bootstrap
1217 (package
1218 (name "python-testtools-bootstrap")
1219 (version "2.3.0")
1220 (source
1221 (origin
1222 (method url-fetch)
1223 (uri (pypi-uri "testtools" version))
1224 (sha256
1225 (base32
1226 "0n8519lk8aaa91vymz842831181wf7fss98hyllhygi3z1nfq9sq"))
1227 (patches (search-patches "python-testtools.patch"))))
1228 (build-system python-build-system)
1229 (arguments '(#:tests? #f))
1230 (propagated-inputs
1231 `(("python-extras" ,python-extras)
1232 ("python-fixtures" ,python-fixtures-bootstrap)
1233 ("python-mimeparse" ,python-mimeparse)
1234 ("python-pbr" ,python-pbr-minimal)
1235 ("python-six" ,python-six)
1236 ("python-traceback2" ,python-traceback2)
1237 ("python-unittest2" ,python-unittest2)))
1238 (home-page "https://github.com/testing-cabal/testtools")
1239 (synopsis
1240 "Extensions to the Python standard library unit testing framework")
1241 (description
1242 "This package is only for bootstrapping. Do not use this.")
1243 (license license:psfl)))
1244
1245 (define-public python2-testtools-bootstrap
1246 (package-with-python2 python-testtools-bootstrap))
1247
1248 (define-public python-testtools
1249 (package
1250 (inherit python-testtools-bootstrap)
1251 (name "python-testtools")
1252 (arguments
1253 `(#:phases (modify-phases %standard-phases
1254 (replace 'check
1255 (lambda _
1256 (invoke "python" "-m" "testtools.run"
1257 "testtools.tests.test_suite"))))))
1258 (propagated-inputs
1259 `(("python-extras" ,python-extras)
1260 ("python-fixtures" ,python-fixtures)
1261 ("python-mimeparse" ,python-mimeparse)
1262 ("python-pbr" ,python-pbr)
1263 ("python-six" ,python-six)
1264 ("python-traceback2" ,python-traceback2)
1265 ("python-unittest2" ,python-unittest2)))
1266 (native-inputs
1267 `(("python-testscenarios" ,python-testscenarios-bootstrap)))
1268 (description
1269 "Testtools extends the Python standard library unit testing framework to
1270 provide matchers, more debugging information, and cross-Python
1271 compatibility.")))
1272
1273 (define-public python2-testtools
1274 (package-with-python2 python-testtools))
1275
1276 (define-public python-testscenarios-bootstrap
1277 (package
1278 (name "python-testscenarios-bootstrap")
1279 (version "0.5.0")
1280 (source
1281 (origin
1282 (method url-fetch)
1283 (uri (pypi-uri "testscenarios" version))
1284 (sha256
1285 (base32
1286 "1dm2aydqpv76vnsk1pw7k8n42hq58cfi4n1ixy7nyzpaj1mwnmy2"))))
1287 (build-system python-build-system)
1288 (arguments
1289 `(#:phases (modify-phases %standard-phases
1290 (replace 'check
1291 (lambda _
1292 (invoke "python" "-m" "testtools.run"
1293 "testscenarios.test_suite"))))))
1294 (propagated-inputs
1295 `(("python-pbr" ,python-pbr-minimal)
1296 ("python-testtools" ,python-testtools-bootstrap)))
1297 (home-page "https://launchpad.net/testscenarios")
1298 (synopsis "Pyunit extension for dependency injection")
1299 (description
1300 "This package is only for bootstrapping. Don't use this.")
1301 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
1302
1303 (define-public python2-testscenarios-bootstrap
1304 (package-with-python2 python-testscenarios-bootstrap))
1305
1306 (define-public python-testscenarios
1307 (package
1308 (inherit python-testscenarios-bootstrap)
1309 (name "python-testscenarios")
1310 (propagated-inputs
1311 `(("python-pbr" ,python-pbr)
1312 ("python-testtools" ,python-testtools)))
1313 (description
1314 "Testscenarios provides clean dependency injection for Python unittest
1315 style tests.")))
1316
1317 (define-public python2-testscenarios
1318 (package-with-python2 python-testscenarios))
1319
1320 ;; Testresources requires python-pbr at runtime, but pbr needs it for its
1321 ;; own tests. Hence this bootstrap variant.
1322 (define-public python-testresources-bootstrap
1323 (package
1324 (name "python-testresources-bootstrap")
1325 (version "2.0.1")
1326 (source (origin
1327 (method url-fetch)
1328 (uri (pypi-uri "testresources" version))
1329 (sha256
1330 (base32
1331 "05s4dsli9g17m1r3b1gvwicbbgq011hnpb2b9qnj27ja2n11k7gf"))))
1332 (build-system python-build-system)
1333 (arguments '(#:tests? #f))
1334 (propagated-inputs
1335 `(("python-pbr" ,python-pbr-minimal)))
1336 (home-page "https://launchpad.net/testresources")
1337 (synopsis
1338 "Pyunit extension for managing test resources")
1339 (description
1340 "This package is only here for bootstrapping purposes. Use the regular
1341 testresources package instead.")
1342 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
1343
1344 (define-public python2-testresources-bootstrap
1345 (package-with-python2 python-testresources-bootstrap))
1346
1347 (define-public python-testresources
1348 (package
1349 (inherit python-testresources-bootstrap)
1350 (name "python-testresources")
1351 (propagated-inputs
1352 `(("python-pbr" ,python-pbr)))
1353 (arguments '())
1354 (native-inputs
1355 `(("python-fixtures" ,python-fixtures)
1356 ("python-testtols" ,python-testtools)))
1357 (description
1358 "Testresources is an extension to Python's unittest to allow declarative
1359 use of resources by test cases.")))
1360
1361 (define-public python2-testresources
1362 (package-with-python2 python-testresources))
1363
1364 (define-public python-subunit-bootstrap
1365 (package
1366 (name "python-subunit-bootstrap")
1367 (version "1.3.0")
1368 (source
1369 (origin
1370 (method url-fetch)
1371 (uri (pypi-uri "python-subunit" version))
1372 (sha256
1373 (base32
1374 "1fsw8rsn1s3nklx06mayrg5rn2zbky6wwjc5z07s7rf1wjzfs1wn"))))
1375 (build-system python-build-system)
1376 (propagated-inputs
1377 `(("python-extras" ,python-extras)
1378 ("python-testtools" ,python-testtools-bootstrap)))
1379 (native-inputs
1380 `(("python-fixtures" ,python-fixtures-bootstrap)
1381 ("python-hypothesis" ,python-hypothesis)
1382 ("python-testscenarios" ,python-testscenarios-bootstrap)))
1383 (home-page "https://launchpad.net/subunit")
1384 (synopsis "Python implementation of the subunit protocol")
1385 (description
1386 "This package is here for bootstrapping purposes only. Use the regular
1387 python-subunit package instead.")
1388 (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
1389
1390 (define-public python2-subunit-bootstrap
1391 (package-with-python2 python-subunit-bootstrap))
1392
1393 (define-public python-subunit
1394 (package
1395 (inherit python-subunit-bootstrap)
1396 (name "python-subunit")
1397 (propagated-inputs
1398 `(("python-extras" ,python-extras)
1399 ("python-testtools" ,python-testtools)))
1400 (native-inputs
1401 `(("python-fixtures" ,python-fixtures)
1402 ("python-hypothesis" ,python-hypothesis)
1403 ("python-testscenarios" ,python-testscenarios)))
1404 (description
1405 "Python-subunit is a Python implementation of the subunit test streaming
1406 protocol.")))
1407
1408 (define-public python2-subunit
1409 (package-with-python2 python-subunit))
1410
1411 ;; Fixtures requires python-pbr at runtime, but pbr uses fixtures for its
1412 ;; own tests. Hence this bootstrap variant.
1413 (define-public python-fixtures-bootstrap
1414 (package
1415 (name "python-fixtures-bootstrap")
1416 (version "3.0.0")
1417 (source (origin
1418 (method url-fetch)
1419 (uri (pypi-uri "fixtures" version))
1420 (sha256
1421 (base32
1422 "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))))
1423 (build-system python-build-system)
1424 (arguments `(#:tests? #f))
1425 (propagated-inputs
1426 `(("python-pbr-minimal" ,python-pbr-minimal)
1427 ("python-six" ,python-six)))
1428 (home-page "https://launchpad.net/python-fixtures")
1429 (synopsis "Python test fixture library")
1430 (description
1431 "This package is only used for bootstrapping. Use the regular
1432 python-fixtures package instead.")
1433 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
1434
1435 (define-public python2-fixtures-bootstrap
1436 (package-with-python2 python-fixtures-bootstrap))
1437
1438 (define-public python-fixtures
1439 (package
1440 (inherit python-fixtures-bootstrap)
1441 (name "python-fixtures")
1442 (arguments
1443 '(#:phases
1444 (modify-phases %standard-phases
1445 (replace 'check
1446 (lambda _
1447 (invoke "python" "-m" "testtools.run"
1448 "fixtures.test_suite"))))))
1449 (propagated-inputs
1450 ;; Fixtures uses pbr at runtime to check versions, etc.
1451 `(("python-pbr" ,python-pbr)
1452 ("python-six" ,python-six)))
1453 (native-inputs
1454 `(("python-mock" ,python-mock)
1455 ("python-testtools" ,python-testtools-bootstrap)))
1456 (description
1457 "Fixtures provides a way to create reusable state, useful when writing
1458 Python tests.")))
1459
1460 (define-public python2-fixtures
1461 (package-with-python2 python-fixtures))
1462
1463 (define-public python-testrepository-bootstrap
1464 (package
1465 (name "python-testrepository-bootstrap")
1466 (version "0.0.20")
1467 (source
1468 (origin
1469 (method url-fetch)
1470 (uri (pypi-uri "testrepository" version))
1471 (sha256
1472 (base32
1473 "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
1474 (build-system python-build-system)
1475 (arguments '(#:tests? #f))
1476 (propagated-inputs
1477 `(("python-fixtures" ,python-fixtures-bootstrap)
1478 ("python-subunit" ,python-subunit-bootstrap)
1479 ("python-testtools" ,python-testtools-bootstrap)))
1480 (native-inputs
1481 `(("python-mimeparse" ,python-mimeparse)))
1482 (home-page "https://launchpad.net/testrepository")
1483 (synopsis "Database for Python test results")
1484 (description
1485 "Bootstrap package for python-testrepository. Don't use this.")
1486 (license (list license:bsd-3 license:asl2.0)))) ; at user's option
1487
1488 (define-public python2-testrepository-bootstrap
1489 (package-with-python2 python-testrepository-bootstrap))
1490
1491 (define-public python-testrepository
1492 (package
1493 (inherit python-testrepository-bootstrap)
1494 (name "python-testrepository")
1495 (arguments
1496 ;; FIXME: Many tests are failing.
1497 '(#:tests? #f))
1498 (propagated-inputs
1499 `(("python-fixtures" ,python-fixtures)
1500 ("python-subunit" ,python-subunit)
1501 ("python-testtools" ,python-testtools)))
1502 (native-inputs
1503 `(("python-mimeparse" ,python-mimeparse)))
1504 (description "Testrepository provides a database of test results which can
1505 be used as part of a developer's workflow to check things such as what tests
1506 have failed since the last commit or what tests are currently failing.")))
1507
1508 (define-public python2-testrepository
1509 (package-with-python2 python-testrepository))
1510
1511 (define-public python-coverage
1512 (package
1513 (name "python-coverage")
1514 (version "5.0.3")
1515 (source
1516 (origin
1517 (method url-fetch)
1518 (uri (pypi-uri "coverage" version))
1519 (sha256
1520 (base32
1521 "1vrg8panqw79pswg52ygbrff3wdnxarrd9qz6c64ah0c4h2cmbvp"))))
1522 (build-system python-build-system)
1523 (arguments
1524 ;; FIXME: 95 tests failed, 539 passed, 6 skipped, 2 errors.
1525 '(#:tests? #f))
1526 (home-page "https://coverage.readthedocs.io")
1527 (synopsis "Code coverage measurement for Python")
1528 (description
1529 "Coverage measures code coverage, typically during test execution. It
1530 uses the code analysis tools and tracing hooks provided in the Python standard
1531 library to determine which lines are executable, and which have been
1532 executed.")
1533 (license license:bsd-3)))
1534
1535 (define-public python2-coverage
1536 (package-with-python2 python-coverage))
1537
1538 (define-public python-pytest-asyncio
1539 (package
1540 (name "python-pytest-asyncio")
1541 (version "0.10.0")
1542 (source
1543 (origin
1544 (method url-fetch)
1545 (uri (pypi-uri "pytest-asyncio" version))
1546 (sha256
1547 (base32 "1bysy4nii13bm7h345wxf8fxcjhab7l374pqdv7vwv3izl053b4z"))))
1548 (build-system python-build-system)
1549 (native-inputs
1550 `(("python-coverage" ,python-coverage)
1551 ("python-async-generator" ,python-async-generator)
1552 ("python-hypothesis" ,python-hypothesis)
1553 ("python-pytest" ,python-pytest)))
1554 (home-page "https://github.com/pytest-dev/pytest-asyncio")
1555 (synopsis "Pytest support for asyncio")
1556 (description "Python asyncio code is usually written in the form of
1557 coroutines, which makes it slightly more difficult to test using normal
1558 testing tools. @code{pytest-asyncio} provides useful fixtures and markers
1559 to make testing async code easier.")
1560 (license license:asl2.0)))
1561
1562 (define-public python-cov-core
1563 (package
1564 (name "python-cov-core")
1565 (version "1.15.0")
1566 (source
1567 (origin
1568 (method url-fetch)
1569 (uri (pypi-uri "cov-core" version))
1570 (sha256
1571 (base32
1572 "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
1573 (build-system python-build-system)
1574 (propagated-inputs
1575 `(("python-coverage" ,python-coverage)))
1576 (home-page "https://github.com/schlamar/cov-core")
1577 (synopsis "Coverage plugin core for pytest-cov, nose-cov and nose2-cov")
1578 (description
1579 "This is a library package for use by @code{pytest-cov}, @code{nose-cov}
1580 and @code{nose2-cov}. It is useful for developing coverage plugins for these
1581 testing frameworks.")
1582 (license license:expat)))
1583
1584 (define-public python2-cov-core
1585 (package-with-python2 python-cov-core))
1586
1587 (define-public python-codecov
1588 (package
1589 (name "python-codecov")
1590 (version "2.0.15")
1591 (source
1592 (origin
1593 (method url-fetch)
1594 (uri (pypi-uri "codecov" version))
1595 (sha256
1596 (base32
1597 "1217c0vqf7ii65635gvl27a5pfhv0r7zhrpdp9cx640hg73bgn4f"))))
1598 (build-system python-build-system)
1599 (native-inputs
1600 `(("python-unittest2" ,python-unittest2)))
1601 (propagated-inputs
1602 `(("python-coverage" ,python-coverage)
1603 ("python-requests" ,python-requests)))
1604 (home-page "https://github.com/codecov/codecov-python")
1605 (synopsis "Upload code coverage reports to @code{codecov.io}")
1606 (description
1607 "Codecov collects code coverage reports from code written in Python, Java,
1608 C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
1609 (license license:asl2.0)))
1610
1611 (define-public python-testpath
1612 (package
1613 (name "python-testpath")
1614 (version "0.2")
1615 (source
1616 (origin
1617 (method git-fetch)
1618 (uri (git-reference
1619 (url "https://github.com/jupyter/testpath")
1620 (commit version)))
1621 (file-name (git-file-name name version))
1622 (sha256
1623 (base32
1624 "0r4iiizjql6ny1ln7ciw7rrbjadz1s9zrf2hl0xkgnh3ypd8936f"))))
1625 (build-system python-build-system)
1626 (arguments
1627 `(#:tests? #f ; this package does not even have a setup.py
1628 #:modules ((guix build python-build-system)
1629 (guix build utils)
1630 (srfi srfi-1))
1631 #:phases
1632 (modify-phases %standard-phases
1633 (delete 'install)
1634 (replace 'build
1635 (lambda* (#:key inputs outputs #:allow-other-keys)
1636 (let* ((version (last
1637 (string-split (assoc-ref inputs "python") #\-)))
1638 (x.y (string-join (take (string-split version #\.) 2)
1639 "."))
1640 (dir (string-append
1641 (assoc-ref outputs "out")
1642 "/lib/python" x.y "/site-packages/testpath")))
1643 (mkdir-p dir)
1644 (copy-recursively "testpath" dir))
1645 #t)))))
1646 (home-page "https://github.com/takluyver/testpath")
1647 (synopsis "Test utilities for code working with files and commands")
1648 (description
1649 "Testpath is a collection of utilities for Python code working with files
1650 and commands. It contains functions to check things on the file system, and
1651 tools for mocking system commands and recording calls to those.")
1652 (license license:expat)))
1653
1654 (define-public python2-testpath
1655 (package-with-python2 python-testpath))
1656
1657 (define-public python-testlib
1658 (package
1659 (name "python-testlib")
1660 (version "0.6.5")
1661 (source
1662 (origin
1663 (method url-fetch)
1664 (uri (pypi-uri "testlib" version ".zip"))
1665 (sha256
1666 (base32 "1mz26cxn4x8bbgv0rn0mvj2z05y31rkc8009nvdlb3lam5b4mj3y"))))
1667 (build-system python-build-system)
1668 (native-inputs
1669 `(("unzip" ,unzip))) ; for unpacking the source
1670 (synopsis "Python micro test suite harness")
1671 (description "A micro unittest suite harness for Python.")
1672 (home-page "https://github.com/trentm/testlib")
1673 (license license:expat)))
1674
1675 (define-public python2-testlib
1676 (package-with-python2 python-testlib))
1677
1678 ;;; The software provided by this package was integrated into pytest 2.8.
1679 (define-public python-pytest-cache
1680 (package
1681 (name "python-pytest-cache")
1682 (version "1.0")
1683 (source (origin
1684 (method url-fetch)
1685 (uri (pypi-uri "pytest-cache" version))
1686 (sha256
1687 (base32
1688 "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
1689 (build-system python-build-system)
1690 (propagated-inputs
1691 `(("python-apipkg" ,python-apipkg)
1692 ("python-execnet" ,python-execnet)
1693 ("python-py" ,python-py)
1694 ("python-pytest" ,python-pytest)))
1695 (synopsis "Py.test plugin with mechanisms for caching across test runs")
1696 (description "The pytest-cache plugin provides tools to rerun failures from
1697 the last py.test invocation.")
1698 (home-page "https://bitbucket.org/hpk42/pytest-cache/")
1699 (license license:expat)))
1700
1701 (define-public python2-pytest-cache
1702 (package-with-python2 python-pytest-cache))
1703
1704 (define-public python-pytest-localserver
1705 (package
1706 (name "python-pytest-localserver")
1707 (version "0.5.0")
1708 (source (origin
1709 (method url-fetch)
1710 (uri (pypi-uri "pytest-localserver" version))
1711 (sha256
1712 (base32
1713 "1hpgpxrpfq5c731ndnsay2lc0y9nh2wy9fn1f83s3z8xkn82fm1s"))))
1714 (build-system python-build-system)
1715 (arguments
1716 '(#:phases
1717 (modify-phases %standard-phases
1718 (replace 'check
1719 (lambda _
1720 (invoke "py.test" "-v"))))))
1721 (native-inputs
1722 `(("python-pytest" ,python-pytest)
1723 ("python-requests" ,python-requests)
1724 ("python-six" ,python-six)))
1725 (propagated-inputs
1726 `(("python-werkzeug" ,python-werkzeug)))
1727 (synopsis "Py.test plugin to test server connections locally")
1728 (description "Pytest-localserver is a plugin for the pytest testing
1729 framework which enables you to test server connections locally.")
1730 (home-page "https://pypi.org/project/pytest-localserver/")
1731 (license license:expat)))
1732
1733 (define-public python-pytest-xprocess
1734 (package
1735 (name "python-pytest-xprocess")
1736 (version "0.9.1")
1737 (source (origin
1738 (method url-fetch)
1739 (uri (pypi-uri "pytest-xprocess" version))
1740 (sha256
1741 (base32
1742 "17zlql1xqw3ywcgwwbqmw633aly99lab12hm02asr8awvg5603pp"))))
1743 (build-system python-build-system)
1744 (propagated-inputs
1745 `(("python-pytest" ,python-pytest)
1746 ("python-pytest-cache" ,python-pytest-cache)
1747 ("python-psutil" ,python-psutil)))
1748 (synopsis "Pytest plugin to manage external processes across test runs")
1749 (description "Pytest-xprocess is an experimental py.test plugin for managing
1750 processes across test runs.")
1751 (home-page "https://bitbucket.org/pytest-dev/pytest-xprocess")
1752 (license license:expat)))
1753
1754 (define-public python-pytest-subtesthack
1755 (package
1756 (name "python-pytest-subtesthack")
1757 (version "0.1.1")
1758 (source (origin
1759 (method url-fetch)
1760 (uri (pypi-uri "pytest-subtesthack" version))
1761 (sha256
1762 (base32
1763 "15kzcr5pchf3id4ikdvlv752rc0j4d912n589l4rifp8qsj19l1x"))))
1764 (build-system python-build-system)
1765 (propagated-inputs
1766 `(("python-pytest" ,python-pytest)))
1767 (synopsis "Set-up and tear-down fixtures for unit tests")
1768 (description "This plugin allows you to set up and tear down fixtures within
1769 unit test functions that use @code{py.test}. This is useful for using
1770 @command{hypothesis} inside py.test, as @command{hypothesis} will call the test
1771 function multiple times, without setting up or tearing down fixture state as is
1772 normally the case.")
1773 (home-page "https://github.com/untitaker/pytest-subtesthack/")
1774 (license license:unlicense)))
1775
1776 (define-public python2-pytest-subtesthack
1777 (package-with-python2 python-pytest-subtesthack))
1778
1779 (define-public python-pytest-sugar
1780 (package
1781 (name "python-pytest-sugar")
1782 (version "0.9.3")
1783 (source
1784 (origin
1785 (method url-fetch)
1786 (uri (pypi-uri "pytest-sugar" version))
1787 (sha256
1788 (base32 "1i0hv3h49zvl62jbiyjag84carbrp3zprqzxffdr291nxavvac0n"))))
1789 (build-system python-build-system)
1790 (propagated-inputs
1791 `(("python-packaging" ,python-packaging)
1792 ("python-pytest" ,python-pytest)
1793 ("python-termcolor" ,python-termcolor)))
1794 (home-page "https://pivotfinland.com/pytest-sugar/")
1795 (synopsis "Plugin for pytest that changes the default look and feel")
1796 (description
1797 "@code{pytest-sugar} is a plugin for py.test that changes the default
1798 look and feel of py.test, using a progress bar and showing failures and errors
1799 instantly.")
1800 (license license:bsd-3)))
1801
1802 (define-public python-hypothesis
1803 (package
1804 (name "python-hypothesis")
1805 (version "5.4.1")
1806 (source (origin
1807 (method url-fetch)
1808 (uri (pypi-uri "hypothesis" version))
1809 (sha256
1810 (base32
1811 "0zn09bn6hadk4vxl6jy8bkjr5fz8mrhin3z46w7pq5qgbaycr89p"))))
1812 (build-system python-build-system)
1813 (arguments
1814 ;; XXX: Tests are not distributed with the PyPI archive.
1815 '(#:tests? #f))
1816 (propagated-inputs
1817 `(("python-attrs" ,python-attrs-bootstrap)
1818 ("python-sortedcontainers" ,python-sortedcontainers)))
1819 (synopsis "Library for property based testing")
1820 (description "Hypothesis is a library for testing your Python code against a
1821 much larger range of examples than you would ever want to write by hand. It’s
1822 based on the Haskell library, Quickcheck, and is designed to integrate
1823 seamlessly into your existing Python unit testing work flow.")
1824 (home-page "https://github.com/HypothesisWorks/hypothesis-python")
1825 (license license:mpl2.0)
1826 (properties `((python2-variant . ,(delay python2-hypothesis))))))
1827
1828 (define-public python-hypothesis-5.23
1829 (package
1830 (inherit python-hypothesis)
1831 (version "5.23.0")
1832 (source (origin
1833 (method url-fetch)
1834 (uri (pypi-uri "hypothesis" version))
1835 (sha256
1836 (base32
1837 "0sy1v6nyxg4rjcf3rlr8nalb7wqd9nccpb2lzkchbj5an13ysf1h"))))
1838 (home-page "https://github.com/HypothesisWorks/hypothesis")))
1839
1840 ;; This is the last version of Hypothesis that supports Python 2.
1841 (define-public python2-hypothesis
1842 (let ((hypothesis (package-with-python2
1843 (strip-python2-variant python-hypothesis))))
1844 (package (inherit hypothesis)
1845 (version "4.57.1")
1846 (source (origin
1847 (method url-fetch)
1848 (uri (pypi-uri "hypothesis" version))
1849 (sha256
1850 (base32
1851 "183gpxbfcdhdqzlahkji5a71n6lmvgqsbkcb0ihqad51n2j6jhrw"))))
1852 (propagated-inputs
1853 `(("python2-enum34" ,python2-enum34)
1854 ,@(package-propagated-inputs hypothesis))))))
1855
1856 (define-public python-hypothesmith
1857 (package
1858 (name "python-hypothesmith")
1859 (version "0.1.2")
1860 (source
1861 (origin
1862 (method url-fetch)
1863 (uri (pypi-uri "hypothesmith" version))
1864 (sha256
1865 (base32
1866 "09331sspknv459xcyn1k0lx5flqlc6gmnwp9370pfvg4kg1zmss6"))))
1867 (build-system python-build-system)
1868 (propagated-inputs
1869 `(("python-hypothesis" ,python-hypothesis-5.23)
1870 ("python-lark-parser" ,python-lark-parser)
1871 ("python-libcst" ,python-libcst)))
1872 (home-page "https://github.com/Zac-HD/hypothesmith")
1873 (synopsis "Strategies for generating Python programs")
1874 (description
1875 "This package contains hypothesis strategies for generating Python
1876 programs, something like CSmith, a random generator of C programs.")
1877 (license license:mpl2.0)))
1878
1879 (define-public python-lit
1880 (package
1881 (name "python-lit")
1882 (version "0.5.1")
1883 (source
1884 (origin
1885 (method url-fetch)
1886 (uri (pypi-uri "lit" version))
1887 (sha256
1888 (base32
1889 "0z651m3vkbk85y41larnsjxrszkbi58x9gzml3lb6ga7qwcrsg97"))))
1890 (build-system python-build-system)
1891 (arguments
1892 `(#:phases
1893 (modify-phases %standard-phases
1894 (replace 'check
1895 (lambda _
1896 (invoke "python" "lit.py" "tests"))))))
1897 (native-inputs
1898 `(("llvm" ,llvm)))
1899 (home-page "https://llvm.org/")
1900 (synopsis "LLVM Software Testing Tool")
1901 (description "@code{lit} is a portable tool for executing LLVM and Clang
1902 style test suites, summarizing their results, and providing indication of
1903 failures.")
1904 (license license:ncsa)))
1905
1906 (define-public python2-lit
1907 (package-with-python2 python-lit))
1908
1909 (define-public python-pytest-pep8
1910 (package
1911 (name "python-pytest-pep8")
1912 (version "1.0.6")
1913 (source (origin
1914 (method url-fetch)
1915 (uri (pypi-uri "pytest-pep8" version))
1916 (sha256
1917 (base32
1918 "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
1919 (build-system python-build-system)
1920 (arguments
1921 `(#:tests? #f)) ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
1922 (native-inputs
1923 `(("python-pytest" ,python-pytest)))
1924 (propagated-inputs
1925 `(("python-pep8" ,python-pep8)))
1926 (home-page "https://bitbucket.org/pytest-dev/pytest-pep8")
1927 (synopsis "Py.test plugin to check PEP8 requirements")
1928 (description "Pytest plugin for checking PEP8 compliance.")
1929 (license license:expat)))
1930
1931 (define-public python2-pytest-pep8
1932 (package-with-python2 python-pytest-pep8))
1933
1934 (define-public python-pytest-flakes
1935 (package
1936 (name "python-pytest-flakes")
1937 (version "4.0.1")
1938 (source (origin
1939 (method url-fetch)
1940 (uri (pypi-uri "pytest-flakes" version))
1941 (sha256
1942 (base32
1943 "0045h3hnrkn2jwr42jgy2j98npx4amwr6wxzi9j0nppaqz33l49p"))))
1944 (build-system python-build-system)
1945 (arguments
1946 `(#:phases
1947 (modify-phases %standard-phases
1948 (delete 'check)
1949 (add-after 'install 'check
1950 (lambda* (#:key outputs inputs #:allow-other-keys)
1951 ;; It's easier to run tests after install.
1952 ;; Make installed package available for running the tests
1953 (add-installed-pythonpath inputs outputs)
1954 (invoke "py.test" "-vv" "-k" "not test_syntax_error"))))))
1955 (native-inputs
1956 `(("python-coverage" ,python-coverage)
1957 ("python-pytest" ,python-pytest)
1958 ("python-pytest-cache" ,python-pytest-cache)
1959 ("python-pytest-pep8" ,python-pytest-pep8)))
1960 (propagated-inputs
1961 `(("python-pyflakes" ,python-pyflakes)))
1962 (home-page "https://github.com/fschulze/pytest-flakes")
1963 (synopsis "Py.test plugin to check source code with pyflakes")
1964 (description "Pytest plugin for checking Python source code with pyflakes.")
1965 (license license:expat)))
1966
1967 (define-public python2-pytest-flakes
1968 (package-with-python2 python-pytest-flakes))
1969
1970 (define-public python2-coverage-test-runner
1971 (package
1972 (name "python2-coverage-test-runner")
1973 (version "1.15")
1974 (source
1975 (origin
1976 (method url-fetch)
1977 (uri (string-append
1978 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/"
1979 "coverage-test-runner/snapshot/coverage-test-runner-"
1980 version ".tar.gz"))
1981 (sha256
1982 (base32
1983 "1kjjb9llckycnfxag8zcvqsn4z1s3dwyw6b1n0avxydihgf30rny"))))
1984 (build-system python-build-system)
1985 (arguments
1986 `(#:python ,python-2
1987 #:phases
1988 (modify-phases %standard-phases
1989 (replace 'check
1990 (lambda _
1991 (invoke "./testrun"))))))
1992 (propagated-inputs
1993 `(("python2-coverage" ,python2-coverage)))
1994 (home-page "https://liw.fi/coverage-test-runner/")
1995 (synopsis "Python module for running unit tests")
1996 (description "@code{CoverageTestRunner} is a python module for running
1997 unit tests and failing them if the unit test module does not exercise all
1998 statements in the module it tests.")
1999 (license license:gpl3+)))
2000
2001 (define-public python-pylint
2002 (package
2003 (name "python-pylint")
2004 (version "2.5.3")
2005 (source
2006 (origin
2007 (method git-fetch)
2008 (uri (git-reference
2009 (url "https://github.com/PyCQA/pylint")
2010 (commit (string-append "pylint-" version))))
2011 (file-name (git-file-name name version))
2012 (sha256
2013 (base32 "04cgbh2z1mygar63plzziyz34yg6bdr4i0g63jp256fgnqwb1bi3"))))
2014 (build-system python-build-system)
2015 ;; FIXME: Tests are failing since version 2.4.3, see:
2016 ;; https://github.com/PyCQA/pylint/issues/3198.
2017 (arguments '(#:tests? #f))
2018 (native-inputs
2019 `(("python-pytest" ,python-pytest)
2020 ("python-pytest-runner" ,python-pytest-runner)
2021 ("python-tox" ,python-tox)))
2022 (propagated-inputs
2023 `(("python-astroid" ,python-astroid)
2024 ("python-isort" ,python-isort)
2025 ("python-mccabe" ,python-mccabe)
2026 ("python-six" ,python-six)
2027 ("python-toml" ,python-toml)))
2028 (home-page "https://github.com/PyCQA/pylint")
2029 (synopsis "Python source code analyzer which looks for coding standard
2030 errors")
2031 (description "Pylint is a Python source code analyzer which looks
2032 for programming errors, helps enforcing a coding standard and sniffs
2033 for some code smells (as defined in Martin Fowler's Refactoring book).
2034
2035 Pylint has many rules enabled by default, way too much to silence them
2036 all on a minimally sized program. It's highly configurable and handle
2037 pragmas to control it from within your code. Additionally, it is
2038 possible to write plugins to add your own checks.")
2039 (properties `((python2-variant . ,(delay python2-pylint))))
2040 (license license:gpl2+)))
2041
2042 ;; Python2 is not supported anymore by Pylint. See:
2043 ;; https://github.com/PyCQA/pylint/issues/1763.
2044 (define-public python2-pylint
2045 (let ((pylint (package-with-python2
2046 (strip-python2-variant python-pylint))))
2047 (package (inherit pylint)
2048 (version "1.9.5")
2049 (source
2050 (origin
2051 (method git-fetch)
2052 (uri (git-reference
2053 (url "https://github.com/PyCQA/pylint")
2054 (commit (string-append "pylint-" version))))
2055 (file-name (git-file-name (package-name pylint) version))
2056 (sha256
2057 (base32
2058 "02a89d8a47s7nfiv1ady3j0sg2sbyja3np145brarfp5x9qxz9x2"))))
2059 (arguments
2060 `(,@(strip-keyword-arguments '(#:tests?) (package-arguments pylint))
2061 #:phases
2062 (modify-phases %standard-phases
2063 (replace 'check
2064 (lambda _
2065 ;; Somehow, tests fail if run from the build directory.
2066 (let ((work "/tmp/work"))
2067 (mkdir-p work)
2068 (setenv "PYTHONPATH"
2069 (string-append (getenv "PYTHONPATH") ":" work))
2070 (copy-recursively "." work)
2071 (with-directory-excursion "/tmp"
2072 (invoke "python" "-m" "unittest" "discover"
2073 "-s" (string-append work "/pylint/test")
2074 "-p" "*test_*.py"))))))))
2075 (native-inputs
2076 `(("python2-futures" ,python2-futures)
2077 ,@(package-native-inputs pylint)))
2078 (propagated-inputs
2079 `(("python2-backports-functools-lru-cache"
2080 ,python2-backports-functools-lru-cache)
2081 ("python2-configparser" ,python2-configparser)
2082 ,@(package-propagated-inputs pylint))))))
2083
2084 (define-public python-paramunittest
2085 (package
2086 (name "python-paramunittest")
2087 (version "0.2")
2088 (source
2089 (origin
2090 (method url-fetch)
2091 (uri (pypi-uri "ParamUnittest" version))
2092 (sha256
2093 (base32
2094 "0kp793hws5xv1wvycxq7jw2pwy36f35k39jg8hx5qikij5a0jid1"))))
2095 (build-system python-build-system)
2096 (home-page
2097 "https://github.com/rik0/ParamUnittest")
2098 (synopsis
2099 "Simple extension to have parametrized unit tests")
2100 (description
2101 "This package creates parameterized unit-tests that work with the standard
2102 unittest package. A parameterized test case is automatically converted to multiple test
2103 cases. Since they are TestCase subclasses, they work with other test suites that
2104 recognize TestCases.")
2105 (license license:bsd-2)))
2106
2107 (define-public python2-python-paramunittest
2108 (package-with-python2 python-paramunittest))
2109
2110 (define-public python-pytest-warnings
2111 (package
2112 (name "python-pytest-warnings")
2113 (version "0.2.0")
2114 (source
2115 (origin
2116 (method url-fetch)
2117 (uri (pypi-uri "pytest-warnings" version))
2118 (sha256
2119 (base32
2120 "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
2121 (build-system python-build-system)
2122 (propagated-inputs
2123 `(("pytest" ,python-pytest)))
2124 (home-page "https://github.com/fschulze/pytest-warnings")
2125 (synopsis "Pytest plugin to list Python warnings in pytest report")
2126 (description
2127 "Python-pytest-warnings is a pytest plugin to list Python warnings in
2128 pytest report.")
2129 (license license:expat)
2130 (properties `((python2-variant . ,(delay python2-pytest-warnings))
2131 ;; This package is part of pytest as of version 3.1.0.
2132 (superseded . ,python-pytest)))))
2133
2134 (define-public python2-pytest-warnings
2135 (package (inherit (package-with-python2
2136 (strip-python2-variant python-pytest-warnings)))
2137 (properties `((superseded . ,python2-pytest)))))
2138
2139 (define-public python-pytest-capturelog
2140 (package
2141 (name "python-pytest-capturelog")
2142 (version "0.7")
2143 (source
2144 (origin
2145 (method url-fetch)
2146 (uri (pypi-uri "pytest-capturelog" version ".tar.gz"))
2147 (sha256
2148 (base32
2149 "038049nyjl7di59ycnxvc9nydivc5m8np3hqq84j2iirkccdbs5n"))))
2150 (build-system python-build-system)
2151 (propagated-inputs
2152 `(("pytest" ,python-pytest)))
2153 (home-page "https://bitbucket.org/memedough/pytest-capturelog/overview")
2154 (synopsis "Pytest plugin to catch log messages")
2155 (description
2156 "Python-pytest-catchlog is a pytest plugin to catch log messages.")
2157 (license license:expat)))
2158
2159 (define-public python2-pytest-capturelog
2160 (package-with-python2 python-pytest-capturelog))
2161
2162 (define-public python-pytest-catchlog
2163 (package
2164 (name "python-pytest-catchlog")
2165 (version "1.2.2")
2166 (source
2167 (origin
2168 (method url-fetch)
2169 (uri (pypi-uri "pytest-catchlog" version ".zip"))
2170 (sha256
2171 (base32
2172 "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
2173 (build-system python-build-system)
2174 (native-inputs
2175 `(("unzip" ,unzip)))
2176 (propagated-inputs
2177 `(("pytest" ,python-pytest)))
2178 (home-page "https://github.com/eisensheng/pytest-catchlog")
2179 (synopsis "Pytest plugin to catch log messages")
2180 (description
2181 "Python-pytest-catchlog is a pytest plugin to catch log messages. This is
2182 a fork of pytest-capturelog.")
2183 (license license:expat)))
2184
2185 (define-public python2-pytest-catchlog
2186 (package-with-python2 python-pytest-catchlog))
2187
2188 (define-public python-nosexcover
2189 (package
2190 (name "python-nosexcover")
2191 (version "1.0.11")
2192 (source (origin
2193 (method url-fetch)
2194 (uri (pypi-uri "nosexcover" version))
2195 (sha256
2196 (base32
2197 "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
2198 (build-system python-build-system)
2199 (propagated-inputs
2200 `(("python-coverage" ,python-coverage)
2201 ("python-nose" ,python-nose)))
2202 (home-page "https://github.com/cmheisel/nose-xcover")
2203 (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
2204 (description "Nose-xcover is a companion to the built-in
2205 @code{nose.plugins.cover}. This plugin will write out an XML coverage report
2206 to a file named coverage.xml.
2207
2208 It will honor all the options you pass to the Nose coverage plugin,
2209 especially -cover-package.")
2210 (license license:expat)))
2211
2212 (define-public python2-nosexcover
2213 (package-with-python2 python-nosexcover))
2214
2215 (define-public python-discover
2216 (package
2217 (name "python-discover")
2218 (version "0.4.0")
2219 (source
2220 (origin
2221 (method url-fetch)
2222 (uri (pypi-uri "discover" version))
2223 (sha256
2224 (base32
2225 "0y8d0zwiqar51kxj8lzmkvwc3b8kazb04gk5zcb4nzg5k68zmhq5"))))
2226 (build-system python-build-system)
2227 (home-page "https://pypi.org/project/discover/")
2228 (synopsis
2229 "Python test discovery for unittest")
2230 (description
2231 "Discover provides test discovery for unittest, a feature that has been
2232 backported from Python 2.7 for Python 2.4+.")
2233 (license license:bsd-3)))
2234
2235 (define-public python2-discover
2236 (package-with-python2 python-discover))
2237
2238 (define-public behave
2239 (package
2240 (name "behave")
2241 (version "1.2.6")
2242 (source (origin
2243 (method url-fetch)
2244 (uri (pypi-uri "behave" version))
2245 (sha256
2246 (base32
2247 "11hsz365qglvpp1m1w16239c3kiw15lw7adha49lqaakm8kj6rmr"))
2248 (patches (search-patches
2249 "behave-skip-a-couple-of-tests.patch"))))
2250 (build-system python-build-system)
2251 (native-inputs
2252 `(("python-mock" ,python-mock)
2253 ("python-nose" ,python-nose)
2254 ("python-pathpy" ,python-pathpy)
2255 ("python-pyhamcrest" ,python-pyhamcrest)
2256 ("python-pytest" ,python-pytest)))
2257 (propagated-inputs
2258 `(("python-importlib-metadata" ,python-importlib-metadata)
2259 ("python-six" ,python-six)
2260 ("python-parse" ,python-parse)
2261 ("python-parse-type" ,python-parse-type)))
2262 (arguments
2263 '(#:test-target "behave_test"
2264 #:phases
2265 (modify-phases %standard-phases
2266 (add-before 'check 'fix-library-loading
2267 (lambda _
2268 ;; Otherwise, tests fail with no module named 'path'
2269 (setenv "PYTHONPATH" (string-append (getenv "PYTHONPATH") ":"
2270 (getcwd) "/tasks/_vendor"))
2271 #t)))))
2272 (home-page "https://github.com/behave/behave")
2273 (synopsis "Python behavior-driven development")
2274 (description
2275 "Behave is a tool for behavior-driven development in python.
2276 Behavior-driven development (or BDD) is an agile software development
2277 technique that encourages collaboration between developers, QA and
2278 non-technical or business participants in a software project. Behave uses
2279 tests written in a natural language style, backed up by Python code.")
2280 (license license:x11)))
2281
2282 (define-public python-behave-web-api
2283 (package
2284 (name "python-behave-web-api")
2285 (version "1.0.6")
2286 (source
2287 (origin
2288 (method url-fetch)
2289 (uri (pypi-uri "behave-web-api" version))
2290 (sha256
2291 (base32
2292 "03kpq2xsy1gab3jy0dccbxlsg7vwfy4lagss0qldwmx3xz6b3i19"))))
2293 (build-system python-build-system)
2294 (arguments
2295 `(#:phases
2296 (modify-phases %standard-phases
2297 (add-after 'unpack 'fix-dependencies
2298 (lambda _
2299 (substitute* "setup.py"
2300 (("'wheel'") "") ; We don't use it.
2301 (("'ordereddict==1.1'") "")) ; Python >= 2.7 has it built-in.
2302 #t)))))
2303 (propagated-inputs
2304 `(("behave" ,behave)
2305 ("python-requests" ,python-requests)))
2306 (home-page "https://github.com/jefersondaniel/behave-web-api")
2307 (synopsis "Provides testing for JSON APIs with Behave for Python")
2308 (description "This package provides testing utility modules for testing
2309 JSON APIs with Behave.")
2310 (license license:expat)))
2311
2312 (define-public python2-behave-web-api
2313 (package-with-python2 python-behave-web-api))
2314
2315 (define-public python-rednose
2316 (package
2317 (name "python-rednose")
2318 (version "1.2.3")
2319 (source
2320 (origin
2321 (method url-fetch)
2322 (uri (pypi-uri "rednose" version))
2323 (sha256
2324 (base32
2325 "11x5nx5b4wdq04s7vj1gcdl07jvvkfb37p0r5lg773gr5rr8mj6h"))))
2326 (build-system python-build-system)
2327 (arguments
2328 `(#:phases (modify-phases %standard-phases
2329 (add-after 'unpack 'patch-setup.py
2330 (lambda _
2331 ;; Six is only required for tests and later versions
2332 ;; work fine.
2333 (substitute* "setup.py"
2334 (("six==1.10.0") "six"))
2335 #t)))))
2336 (propagated-inputs
2337 `(("python-colorama" ,python-colorama)
2338 ("python-termstyle" ,python-termstyle)))
2339 (native-inputs
2340 `(("python-six" ,python-six)
2341 ("python-nose" ,python-nose)))
2342 (home-page "https://github.com/JBKahn/rednose")
2343 (synopsis "Colored output for Python nosetests")
2344 (description "This package provides colored output for the
2345 @command{nosetests} command of the Python Nose unit test framework.")
2346 (license license:bsd-3)))
2347
2348 (define-public python2-rednose
2349 (package-with-python2 python-rednose))
2350
2351 (define-public python-nose-random
2352 (package
2353 (name "python-nose-random")
2354 (version "1.0.0")
2355 (source
2356 (origin
2357 (method git-fetch)
2358 (uri (git-reference
2359 (url "https://github.com/fzumstein/nose-random")
2360 (commit version)))
2361 (file-name (git-file-name name version))
2362 (sha256
2363 (base32
2364 "1dvip61r2frjv35mv6mmfjc07402z73pjbndfp3mhxyjn2zhksw2"))))
2365 (build-system python-build-system)
2366 (native-inputs
2367 `(("python-nose" ,python-nose)))
2368 (home-page "https://github.com/fzumstein/nose-random")
2369 (synopsis "Nose plugin to facilitate randomized unit testing with
2370 Python")
2371 (description "Python nose-random is designed to facilitate
2372 Monte-Carlo style unit testing. The idea is to improve testing by
2373 running your code against a large number of randomly generated input
2374 scenarios.")
2375 (license license:expat)))
2376
2377 (define-public python-nose-randomly
2378 (package
2379 (name "python-nose-randomly")
2380 (version "1.2.6")
2381 (source
2382 (origin
2383 (method url-fetch)
2384 (uri (pypi-uri "nose-randomly" version))
2385 (sha256
2386 (base32 "0z662rqhfk4bjmg806mn4frb8nz4gbh7mrddsrhfffp1g4yklj3y"))))
2387 (build-system python-build-system)
2388 (native-inputs
2389 `(("python-nose" ,python-nose)
2390 ("python-numpy" ,python-numpy)))
2391 (home-page "https://github.com/adamchainz/nose-randomly")
2392 (synopsis
2393 "Nose plugin to randomly order tests and control random.seed")
2394 (description
2395 "This is a @code{Nose} plugin to randomly order tests which can be quite
2396 powerful in discovering hidden flaws in the tests themselves, while helping to
2397 reduce inter-test dependencies. It also helps in controlling @code{random.seed},
2398 by resetting it to a repeatable number for each test, enabling the tests to
2399 create data based on random numbers and yet remain repeatable.")
2400 (license license:bsd-3)))
2401
2402 (define-public python2-nose-randomly
2403 (package-with-python2 python-nose-randomly))
2404
2405 (define-public python-nose-timer
2406 (package
2407 (name "python-nose-timer")
2408 (version "0.7.5")
2409 (source
2410 (origin
2411 (method url-fetch)
2412 (uri (pypi-uri "nose-timer" version))
2413 (sha256
2414 (base32 "05wzkc88vbzw62pqkvhl33211b90kns0lny70b7qw62rcg4flzk4"))))
2415 (build-system python-build-system)
2416 (propagated-inputs
2417 `(("python-nose" ,python-nose)
2418 ("python-termcolor" ,python-termcolor)))
2419 (home-page "https://github.com/mahmoudimus/nose-timer")
2420 (synopsis "Timer plugin for nosetests")
2421 (description "Shows how much time was needed to run individual tests.")
2422 (license license:expat)))
2423
2424 (define-public python2-nose-timer
2425 (package-with-python2 python-nose-timer))
2426
2427 (define-public python-freezegun
2428 (package
2429 (name "python-freezegun")
2430 (version "0.3.14")
2431 (source
2432 (origin
2433 (method url-fetch)
2434 (uri (pypi-uri "freezegun" version))
2435 (sha256
2436 (base32 "0al75mk829j1izxi760b7yjnknjihyfhp2mvi5qiyrxb9cpxwqk2"))))
2437 (build-system python-build-system)
2438 (native-inputs
2439 `(("python-mock" ,python-mock)
2440 ("python-pytest" ,python-pytest)))
2441 (propagated-inputs
2442 `(("python-six" ,python-six)
2443 ("python-dateutil" ,python-dateutil)))
2444 (arguments
2445 `(#:phases
2446 (modify-phases %standard-phases
2447 ;; The tests are normally executed via `make test`, but the PyPi
2448 ;; package does not include the Makefile.
2449 (replace 'check
2450 (lambda _
2451 (invoke "pytest" "-vv"))))))
2452 (home-page "https://github.com/spulec/freezegun")
2453 (synopsis "Test utility for mocking the datetime module")
2454 (description
2455 "FreezeGun is a library that allows your python tests to travel through
2456 time by mocking the datetime module.")
2457 (license license:asl2.0)))
2458
2459 (define-public python2-freezegun
2460 (package-with-python2 python-freezegun))
2461
2462 (define-public python-flexmock
2463 (package
2464 (name "python-flexmock")
2465 (version "0.10.4")
2466 (source (origin
2467 (method url-fetch)
2468 (uri (pypi-uri "flexmock" version))
2469 (sha256
2470 (base32
2471 "0b6qw3grhgx58kxlkj7mdma7xdvlj02zabvcf7w2qifnfjwwwcsh"))))
2472 (build-system python-build-system)
2473 (home-page "https://flexmock.readthedocs.org")
2474 (synopsis "Testing library for Python")
2475 (description
2476 "flexmock is a testing library for Python that makes it easy to create
2477 mocks, stubs and fakes.")
2478 (license license:bsd-3)))
2479
2480 (define-public python2-flexmock
2481 (package-with-python2 python-flexmock))
2482
2483 (define-public python-flaky
2484 (package
2485 (name "python-flaky")
2486 (version "3.5.3")
2487 (source (origin
2488 (method url-fetch)
2489 (uri (pypi-uri "flaky" version))
2490 (sha256
2491 (base32
2492 "1nm1kjf857z5aw7v642ffsy1vwf255c6wjvmil71kckjyd0mxg8j"))))
2493 (build-system python-build-system)
2494 (arguments
2495 ;; TODO: Tests require 'coveralls' and 'genty' which are not in Guix yet.
2496 '(#:tests? #f))
2497 (home-page "https://github.com/box/flaky")
2498 (synopsis "Automatically rerun flaky tests")
2499 (description
2500 "Flaky is a plugin for @code{nose} or @code{py.test} that automatically
2501 reruns flaky tests.
2502
2503 Ideally, tests reliably pass or fail, but sometimes test fixtures must rely
2504 on components that aren't 100% reliable. With flaky, instead of removing
2505 those tests or marking them to @code{@@skip}, they can be automatically
2506 retried.")
2507 (license license:asl2.0)))
2508
2509 (define-public python2-flaky
2510 (package-with-python2 python-flaky))
2511
2512 (define-public python-pyhamcrest
2513 ;; The latest release was in 2016 and its test suite does not work with recent
2514 ;; versions of Pytest. Just take the master branch for now, which seems stable.
2515 (let ((commit "25fdc5f00bdf3084335353bc9247253098ec4cf2")
2516 (revision "0"))
2517 (package
2518 (name "python-pyhamcrest")
2519 (version (git-version "1.9.0" revision commit))
2520 (source (origin
2521 ;; Tests not distributed from pypi release.
2522 (method git-fetch)
2523 (uri (git-reference
2524 (url "https://github.com/hamcrest/PyHamcrest")
2525 (commit commit)))
2526 (file-name (git-file-name name version))
2527 (sha256
2528 (base32
2529 "1miqmhhi68vaix8sqc1lvpvbm27bacffxh5anm5cbfsvk7g9n6f3"))))
2530 (native-inputs ;all native inputs are for tests
2531 `(("python-pytest-cov" ,python-pytest-cov)
2532 ("python-mock" ,python-mock)
2533 ("python-pytest" ,python-pytest)
2534 ("python-hypothesis" ,python-hypothesis)))
2535 (propagated-inputs
2536 `(("python-six" ,python-six)))
2537 (build-system python-build-system)
2538 (arguments
2539 `(#:phases (modify-phases %standard-phases
2540 (replace 'check
2541 (lambda _
2542 (setenv "PYTHONPATH"
2543 (string-append "build/lib:"
2544 (getenv "PYTHONPATH")))
2545 (invoke "pytest" "-vv"))))))
2546 (home-page "http://hamcrest.org/")
2547 (synopsis "Hamcrest matchers for Python")
2548 (description
2549 "PyHamcrest is a framework for writing matcher objects,
2550 allowing you to declaratively define \"match\" rules.")
2551 (license license:bsd-3))))
2552
2553 (define-public python2-pyhamcrest
2554 (package-with-python2 python-pyhamcrest))
2555
2556 (define-public unittest-cpp
2557 (package
2558 (name "unittest-cpp")
2559 (version "2.0.0")
2560 (source (origin
2561 (method git-fetch)
2562 (uri (git-reference
2563 (url "https://github.com/unittest-cpp/unittest-cpp")
2564 (commit (string-append "v" version))))
2565 (file-name (git-file-name name version))
2566 (sha256
2567 (base32 "0sxb3835nly1jxn071f59fwbdzmqi74j040r81fanxyw3s1azw0i"))))
2568 (arguments
2569 `(#:tests? #f)) ; It's run after build automatically.
2570 (build-system cmake-build-system)
2571 (home-page "https://github.com/unittest-cpp/unittest-cpp")
2572 (synopsis "Lightweight unit testing framework for C++")
2573 (description "UnitTest++ is a lightweight unit testing framework for C++.
2574 It was designed to do test-driven development on a wide variety of platforms.
2575 Simplicity, portability, speed, and small footprint are all very important
2576 aspects of UnitTest++. UnitTest++ is mostly standard C++ and makes minimal use
2577 of advanced library and language features, which means it should be easily
2578 portable to just about any platform.")
2579 (license license:expat)))
2580
2581 (define-public libfaketime
2582 (package
2583 (name "libfaketime")
2584 (version "0.9.8")
2585 (home-page "https://github.com/wolfcw/libfaketime")
2586 (source (origin
2587 (method git-fetch)
2588 (uri (git-reference
2589 (url home-page)
2590 (commit (string-append "v" version))))
2591 (sha256
2592 (base32
2593 "1mfdl82ppgbdvy1ny8mb7xii7p0g7awvn4bn36jb8v4r545slmjc"))
2594 (file-name (git-file-name name version))))
2595 (build-system gnu-build-system)
2596 (arguments
2597 '(#:phases (modify-phases %standard-phases
2598 (replace 'configure
2599 (lambda* (#:key outputs #:allow-other-keys)
2600 (let ((out (assoc-ref outputs "out")))
2601 (setenv "CC" "gcc")
2602 (setenv "PREFIX" out)
2603
2604 ;; XXX: Without this flag, the CLOCK_REALTIME test hangs
2605 ;; indefinitely. See README.packagers for more information.
2606 ;; Try removing this for future versions of libfaketime.
2607 (setenv "FAKETIME_COMPILE_CFLAGS" "-DFORCE_MONOTONIC_FIX")
2608
2609 #t)))
2610 (add-before 'check 'pre-check
2611 (lambda _
2612 (substitute* "test/functests/test_exclude_mono.sh"
2613 (("/bin/bash") (which "bash")))
2614
2615 ;; Do not fail due to use of 'ftime', which was deprecated in
2616 ;; glibc 2.31. Remove this for later versions of libfaketime.
2617 (setenv "FAKETIME_COMPILE_CFLAGS" "-Wno-deprecated-declarations")
2618 #t)))
2619 #:test-target "test"))
2620 (native-inputs
2621 `(("perl" ,perl))) ;for tests
2622 (synopsis "Fake the system time for single applications")
2623 (description
2624 "The libfaketime library allows users to modify the system time that an
2625 application \"sees\". It is meant to be loaded using the dynamic linker's
2626 @code{LD_PRELOAD} environment variable. The @command{faketime} command
2627 provides a simple way to achieve this.")
2628 (license license:gpl2)))
2629
2630 (define-public umockdev
2631 (package
2632 (name "umockdev")
2633 (version "0.14.2")
2634 (source (origin
2635 (method url-fetch)
2636 (uri (string-append "https://github.com/martinpitt/umockdev/"
2637 "releases/download/" version "/"
2638 "umockdev-" version ".tar.xz"))
2639 (sha256
2640 (base32
2641 "1nh6xsssmssmk0lxp9c9dmq3wzlpbpkg77nmmd09csbpybibgxfp"))))
2642 (build-system gnu-build-system)
2643 (arguments
2644 `(#:phases
2645 (modify-phases %standard-phases
2646 (add-after 'unpack 'fix-test
2647 (lambda _
2648 (substitute* "tests/test-umockdev.c"
2649 (("/run") "/tmp"))
2650 #t)))))
2651 (native-inputs
2652 `(("vala" ,vala)
2653 ("gobject-introspection" ,gobject-introspection)
2654 ("gtk-doc" ,gtk-doc)
2655 ("pkg-config" ,pkg-config)
2656
2657 ;; For tests.
2658 ("python" ,python)
2659 ("which" ,which)))
2660 (inputs
2661 `(("glib" ,glib)
2662 ("eudev" ,eudev)
2663 ("libgudev" ,libgudev)))
2664 (home-page "https://github.com/martinpitt/umockdev/")
2665 (synopsis "Mock hardware devices for creating unit tests")
2666 (description "umockdev mocks hardware devices for creating integration
2667 tests for hardware related libraries and programs. It also provides tools to
2668 record the properties and behaviour of particular devices, and to run a
2669 program or test suite under a test bed with the previously recorded devices
2670 loaded.")
2671 (license license:lgpl2.1+)))
2672
2673 (define-public virtest
2674 ;; No releases yet, so we take the commit that "vc" expects.
2675 (let ((commit "f7d03ef39fceba168745bd29e1b20af6e7971e04")
2676 (revision "0"))
2677 (package
2678 (name "virtest")
2679 (version (git-version "0.0" revision commit))
2680 (home-page "https://github.com/mattkretz/virtest")
2681 (source (origin
2682 (method git-fetch)
2683 (uri (git-reference (url home-page) (commit commit)))
2684 (file-name (git-file-name name version))
2685 (sha256
2686 (base32
2687 "07pjyb0mk7y2w1dg1bhl26nb7416xa1mw16ifj6mmps5y6aq054l"))))
2688 (build-system cmake-build-system)
2689 (arguments
2690 `(#:phases (modify-phases %standard-phases
2691 (add-after 'unpack 'adjust-install-directory
2692 (lambda _
2693 ;; Vc is the only consumer of this library, and expects
2694 ;; to find it in "virtest/vir/" instead of "vir/vir/".
2695 (substitute* "CMakeLists.txt"
2696 (("DESTINATION include/vir")
2697 "DESTINATION include/virtest"))
2698 #t)))))
2699 (synopsis "Header-only test framework")
2700 (description
2701 "@code{virtest} is a small header-only test framework for C++. It
2702 grew out of the @dfn{Vc} project.")
2703 (license license:bsd-3))))
2704
2705 (define-public python-pyfakefs
2706 (package
2707 (name "python-pyfakefs")
2708 (version "3.7.1")
2709 (source (origin
2710 (method url-fetch)
2711 ;; We use the PyPI URL because there is no proper release
2712 ;; available from GitHub. The GitHub project only provides
2713 ;; autogenerated tarballs, which are known to change in place.
2714 (uri (pypi-uri "pyfakefs" version))
2715 (sha256
2716 (base32
2717 "1cp2yw96fa2qkgi39xa3nlr3inf8wb5rgh9kdq53256ca2r8pdhy"))
2718 (patches (search-patches
2719 "python-pyfakefs-remove-bad-test.patch"))
2720 (file-name (string-append name "-" version ".tar.gz"))))
2721 (arguments
2722 `(#:phases
2723 (modify-phases %standard-phases
2724 ;; The default test suite does not run these extra tests.
2725 (add-after 'check 'check-pytest-plugin
2726 (lambda _
2727 (invoke
2728 "python" "-m" "pytest"
2729 "pyfakefs/pytest_tests/pytest_plugin_test.py")
2730 #t)))))
2731 (native-inputs
2732 `(("python-pytest" ,python-pytest)))
2733 (build-system python-build-system)
2734 ;; Guix lint doesn't like that this is a permanent redirect to the GitHub
2735 ;; page, but the pyfakefs documentation asks us to use this specific URL
2736 ;; when linking to the project. Honor their request.
2737 (home-page "http://pyfakefs.org/")
2738 ;; TRANSLATORS: In the synopsis, "Mock" is a verb.
2739 (synopsis "Mock file system interactions in tests")
2740 (description
2741 "This package provides a Python library intended for use in automated
2742 tests. One difficulty when testing software is that the code under test might
2743 need to read or write to files in the local file system. If the file system
2744 is not set up in just the right way, it might cause a spurious error during
2745 the test. The pyfakefs library provides a solution to problems like this by
2746 mocking file system interactions. In other words, it arranges for the code
2747 under test to interact with a fake file system instead of the real file
2748 system. The code under test requires no modification to work with pyfakefs.")
2749 (license license:asl2.0)))
2750
2751 (define-public python2-pyfakefs
2752 (package-with-python2 python-pyfakefs))
2753
2754 ;; This minimal variant is used to avoid a circular dependency between
2755 ;; python2-importlib-metadata, which requires pyfakefs for its tests, and
2756 ;; python2-pytest, which requires python2-importlib-metadata.
2757 (define-public python2-pyfakefs-bootstrap
2758 (hidden-package
2759 (package
2760 (inherit python2-pyfakefs)
2761 (name "python2-pyfakefs-bootstrap")
2762 (native-inputs '())
2763 (arguments
2764 `(#:python ,python-2
2765 #:tests? #f)))))
2766
2767 (define-public python-aiounittest
2768 (package
2769 (name "python-aiounittest")
2770 (version "1.3.1")
2771 (source
2772 (origin
2773 (method url-fetch)
2774 (uri (pypi-uri "aiounittest" version))
2775 (sha256
2776 (base32
2777 "1q4bhmi80smaa1lknvdna0sx3915naczlfna1fp435nf6cjyrjl1"))))
2778 (build-system python-build-system)
2779 (native-inputs
2780 `(("python-coverage" ,python-coverage)
2781 ("python-nose" ,python-nose)))
2782 (home-page
2783 "https://github.com/kwarunek/aiounittest")
2784 (synopsis "Test asyncio code more easily")
2785 (description "Aiounittest is a library that helps write tests using
2786 asynchronous code in Python (asyncio).")
2787 (license license:expat)))