Re: [PATCH 3/6] gnu: Add python-cram.

2017-01-17 Thread Ludovic Courtès
Marius Bakke  skribis:

> * gnu/packages/python.scm (python-cram, python2-cram): New variables.

LGTM!

> + (substitute* "cram/_test.py"
> +   ;; This hack works around a bug triggered by substituting
> +   ;; the /bin/sh paths. "tests/usage.t" compares the output of
> +   ;; "cram -h", which breaks the output at 80 characters. This
> +   ;; causes the line showing the default shell to break into two
> +   ;; lines, but the test expects a single line...
> +   (("env\\['COLUMNS'\\] = '80'")
> +"env['COLUMNS'] = '160'"))

Woow, good catch.

Ludo’.



[PATCH 3/6] gnu: Add python-cram.

2017-01-15 Thread Marius Bakke
* gnu/packages/python.scm (python-cram, python2-cram): New variables.
---
 gnu/packages/python.scm | 64 -
 1 file changed, 63 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index ddf276de0..e61d7d1fb 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -26,7 +26,7 @@
 ;;; Copyright © 2016 ng0 
 ;;; Copyright © 2016 Dylan Jeffers 
 ;;; Copyright © 2016 David Craven 
-;;; Copyright © 2016 Marius Bakke 
+;;; Copyright © 2016, 2017 Marius Bakke 
 ;;; Copyright © 2016 Stefan Reichoer 
 ;;; Copyright © 2016 Dylan Jeffers 
 ;;; Copyright © 2016 Alex Vong 
@@ -6057,6 +6057,68 @@ pseudo terminal (pty), and interact with both the 
process and its pty.")
 (define-public python2-ptyprocess
   (package-with-python2 python-ptyprocess))
 
+(define-public python-cram
+  (package
+(name "python-cram")
+(version "0.7")
+(home-page "https://bitheap.org/cram/";)
+(source (origin
+  (method url-fetch)
+  (uri (list (string-append home-page "cram-"
+version ".tar.gz")
+ (pypi-uri "cram" version)))
+  (sha256
+   (base32
+"0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"
+(arguments
+ '(#:phases
+   (modify-phases %standard-phases
+ (add-after 'unpack 'patch-source
+   (lambda _
+ (substitute* (find-files "cram" ".*\\.py")
+   ;; Replace default shell path. This is necessary for tests,
+   ;; and convenient for programs using the main "cram" binary
+   ;; in environments lacking /bin/sh (e.g. if this program is
+   ;; used in other builds).
+   (("/bin/sh") (which "sh")))
+ (substitute* (find-files "tests" ".*\\.t")
+   (("md5") "md5sum")
+   (("/bin/bash") (which "bash"))
+   (("/bin/sh") (which "sh")))
+ (substitute* "cram/_test.py"
+   ;; This hack works around a bug triggered by substituting
+   ;; the /bin/sh paths. "tests/usage.t" compares the output of
+   ;; "cram -h", which breaks the output at 80 characters. This
+   ;; causes the line showing the default shell to break into two
+   ;; lines, but the test expects a single line...
+   (("env\\['COLUMNS'\\] = '80'")
+"env['COLUMNS'] = '160'"))
+ #t))
+ (delete 'check)
+ (add-after 'install 'check
+   ;; The test phase uses the built binary and library.
+   ;; It's easier to run it after install since the build
+   ;; directory contains version-specific PATH.
+   (lambda* (#:key inputs outputs #:allow-other-keys)
+ (add-installed-pythonpath inputs outputs)
+ (setenv "PATH" (string-append (getenv "PATH") ":"
+   (assoc-ref outputs "out") "/bin"))
+ (zero? (system* "make" "test")))
+(build-system python-build-system)
+(native-inputs
+ `(("python-coverage" ,python-coverage)
+   ("which" ,which)))
+(synopsis "Simple testing framework for command line applications")
+(description
+ "Cram is a functional testing framework for command line applications.
+Cram tests look like snippets of interactive shell sessions.  Cram runs each
+command and compares the command output in the test with the command’s actual
+output.")
+(license license:gpl2+)))
+
+(define-public python2-cram
+  (package-with-python2 python-cram))
+
 (define-public python-terminado
   (package
 (name "python-terminado")
-- 
2.11.0