gpgscm: Improve test framework.
authorJustus Winter <justus@g10code.com>
Tue, 21 Jun 2016 10:21:10 +0000 (12:21 +0200)
committerJustus Winter <justus@g10code.com>
Tue, 21 Jun 2016 14:22:03 +0000 (16:22 +0200)
* tests/gpgscm/lib.scm (echo): Move...
* tests/gpgscm/tests.scm (echo): ... here.
(info, error, skip): And use echo here.
(file-exists?): New function.
(tr:spawn): Check that source exists and if the sink has been created.
(tr:call-with-content): Hand in optional arguments.

Signed-off-by: Justus Winter <justus@g10code.com>
tests/gpgscm/lib.scm
tests/gpgscm/tests.scm

index 48f53ea..e23977a 100644 (file)
 (assert (string-contains? "Hallo" "llo"))
 (assert (not (string-contains? "Hallo" "olla")))
 
-(define (echo . msg)
-  (for-each (lambda (x) (display x) (display " ")) msg)
-  (newline))
-
 ;; Read a word from port P.
 (define (read-word . p)
   (list->string
index 7e20c34..6d70dca 100644 (file)
     (get-output-string p)))
 
 ;; Reporting.
-(define (info msg)
-  (display msg)
-  (newline)
+(define (echo . msg)
+  (for-each (lambda (x) (display x) (display " ")) msg)
+  (newline))
+
+(define (info . msg)
+  (apply echo msg)
   (flush-stdio))
 
-(define (error msg)
-  (info msg)
+(define (error msg)
+  (apply info msg)
   (exit 1))
 
-(define (skip msg)
-  (info msg)
+(define (skip msg)
+  (apply info msg)
   (exit 77))
 
 (define (make-counter)
 ;;
 ;; File management.
 ;;
+(define (file-exists? name)
+  (call-with-input-file name (lambda (port) #t)))
+
 (define (file=? a b)
   (file-equal a b #t))
 
 
 (define (tr:spawn input command)
   (lambda (tmpfiles source)
+    (if (and (member '**in** command) (not source))
+       (error (string-append (stringify cmd) " needs an input")))
     (let* ((t (make-temporary-file))
           (cmd (map (lambda (x)
                       (cond
                        ((equal? '**out** x) t)
                        (else x))) command)))
       (call-popen cmd input)
+      (if (and (member '**out** command) (not (file-exists? t)))
+         (error (string-append (stringify cmd) " did not produce '" t "'.")))
       (list (cons t tmpfiles) t))))
 
 (define (tr:write-to pathname)
        (error "mismatch"))
     (list tmpfiles source)))
 
-(define (tr:call-with-content function)
+(define (tr:call-with-content function . args)
   (lambda (tmpfiles source)
-    (function (call-with-input-file source read-all))
+    (apply function `(,(call-with-input-file source read-all) ,@args))
     (list tmpfiles source)))