From f2091091a90fc25d21e0191df88cf10c6e9890dd Mon Sep 17 00:00:00 2001 From: Chris Marusich Date: Thu, 18 Apr 2019 00:40:21 -0700 Subject: [PATCH] gnu: Add python-pyfakefs and python2-pyfakefs. * gnu/packages/patches/python-pyfakefs-remove-bad-test.patch: New file. * gnu/local.mk (dist_patch_DATA): Add the patch. * gnu/packages/check.scm (python-pyfakefs, python2-pyfakefs): New variables. --- gnu/local.mk | 1 + gnu/packages/check.scm | 50 +++++++++++++++++++ .../python-pyfakefs-remove-bad-test.patch | 23 +++++++++ 3 files changed, 74 insertions(+) create mode 100644 gnu/packages/patches/python-pyfakefs-remove-bad-test.patch diff --git a/gnu/local.mk b/gnu/local.mk index 41924a7de5..3953e5b789 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1201,6 +1201,7 @@ dist_patch_DATA = \ %D%/packages/patches/python2-larch-coverage-4.0a6-compatibility.patch \ %D%/packages/patches/python-configobj-setuptools.patch \ %D%/packages/patches/python-faker-fix-build-32bit.patch \ + %D%/packages/patches/python-pyfakefs-remove-bad-test.patch \ %D%/packages/patches/python-flint-includes.patch \ %D%/packages/patches/python-mox3-python3.6-compat.patch \ %D%/packages/patches/python-testtools.patch \ diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm index a38abf0b5b..0be1102683 100644 --- a/gnu/packages/check.scm +++ b/gnu/packages/check.scm @@ -29,6 +29,7 @@ ;;; Copyright © 2017, 2018 Ludovic Courtès ;;; Copyright © 2018 Fis Trivial ;;; Copyright © 2019 Pierre Langlois +;;; Copyright © 2019 Chris Marusich ;;; ;;; This file is part of GNU Guix. ;;; @@ -2262,3 +2263,52 @@ record the properties and behaviour of particular devices, and to run a program or test suite under a test bed with the previously recorded devices loaded.") (license license:lgpl2.1+))) + +(define-public python-pyfakefs + (package + (name "python-pyfakefs") + (version "3.5.8") + (source (origin + (method url-fetch) + ;; We use the PyPI URL because there is no proper release + ;; available from GitHub. The GitHub project only provides + ;; autogenerated tarballs, which are known to change in place. + (uri (pypi-uri "pyfakefs" version)) + (sha256 + (base32 + "0qb9jp0bqhc0dv0rn805fv99029fvx135f3bvka6scfkcl6jgllc")) + (patches (search-patches + "python-pyfakefs-remove-bad-test.patch")) + (file-name (string-append name "-" version ".tar.gz")))) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; The default test suite does not run these extra tests. + (add-after 'check 'check-pytest-plugin + (lambda _ + (invoke + "python" "-m" "pytest" + "pyfakefs/pytest_tests/pytest_plugin_test.py") + #t))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (build-system python-build-system) + ;; Guix lint doesn't like that this is a permanent redirect to the GitHub + ;; page, but the pyfakefs documentation asks us to use this specific URL + ;; when linking to the project. Honor their request. + (home-page "http://pyfakefs.org/") + ;; TRANSLATORS: In the synopsis, "Mock" is a verb. + (synopsis "Mock file system interactions in tests") + (description + "This package provides a Python library intended for use in automated +tests. One difficulty when testing software is that the code under test might +need to read or write to files in the local file system. If the file system +is not set up in just the right way, it might cause a spurious error during +the test. The pyfakefs library provides a solution to problems like this by +mocking file system interactions. In other words, it arranges for the code +under test to interact with a fake file system instead of the real file +system. The code under test requires no modification to work with pyfakefs.") + (license license:asl2.0))) + +(define-public python2-pyfakefs + (package-with-python2 python-pyfakefs)) diff --git a/gnu/packages/patches/python-pyfakefs-remove-bad-test.patch b/gnu/packages/patches/python-pyfakefs-remove-bad-test.patch new file mode 100644 index 0000000000..a9488bbe43 --- /dev/null +++ b/gnu/packages/patches/python-pyfakefs-remove-bad-test.patch @@ -0,0 +1,23 @@ +This test incorrectly assumes that the root user is always available. +However, in the build environment, the root user is not available. +Note that because the original file distributed in the release on PyPi +has lines ending in CRLF, those are retained in the diff below. + +--- a/pyfakefs/tests/fake_filesystem_test.py 1969-12-31 16:00:00.000000000 -0800 ++++ b/pyfakefs/tests/fake_filesystem_test.py 1969-12-31 16:00:00.000000000 -0800 +@@ -1021,15 +1021,6 @@ + self.assertEqual(self.path.expanduser('~'), + self.os.environ['HOME'].replace('/', '!')) + +- @unittest.skipIf(TestCase.is_windows or TestCase.is_cygwin, +- 'only tested on unix systems') +- def test_expand_root(self): +- if sys.platform == 'darwin': +- roothome = '!var!root' +- else: +- roothome = '!root' +- self.assertEqual(self.path.expanduser('~root'), roothome) +- + def test_getsize_path_nonexistent(self): + file_path = 'foo!bar!baz' + self.assertRaises(os.error, self.path.getsize, file_path) -- 2.20.1