summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/ccwl.scm367
1 files changed, 161 insertions, 206 deletions
diff --git a/tests/ccwl.scm b/tests/ccwl.scm
index 6890017..d325e57 100644
--- a/tests/ccwl.scm
+++ b/tests/ccwl.scm
@@ -37,6 +37,19 @@
        ((@@ (ccwl ccwl) construct-type-syntax)
         #'type-spec)))))
 
+(define-syntax-rule (test-condition test-name condition-predicate test-expression)
+  (test-assert test-name
+    (guard (condition
+            (else (condition-predicate condition)))
+      (begin test-expression
+             #f))))
+
+(define (ccwl-violation-with-message? message)
+  (lambda (condition)
+    (and (ccwl-violation? condition)
+         (string=? (formatted-message-format condition)
+                   message))))
+
 (test-begin "ccwl")
 
 (test-assert "stdin input should not have inputBinding"
@@ -65,70 +78,52 @@
                        (output-type output)))
                (cwl-workflow-outputs cwl-workflow)))))
 
-(test-assert "input, when passed more than one positional argument, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (input #'(message string))
-           #f)))
-
-(test-assert "input, when passed an unrecognized keyword, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (input #'(message #:foo string))
-           #f)))
-
-(test-assert "input, when passed multiple arguments to a unary keyword, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (input #'(message #:type int string))
-           #f)))
-
-(test-assert "output, when passed more than one positional argument, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (output #'(message string))
-           #f)))
-
-(test-assert "output, when passed an unrecognized keyword, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (output #'(message #:foo string))
-           #f)))
-
-(test-assert "output, when passed multiple arguments to a unary keyword, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (output #'(message #:type int string))
-           #f)))
-
-(test-assert "command, when passed positional arguments, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (macroexpand
-            '(command foo
-                      #:inputs (message #:type string)
-                      #:run "echo" message
-                      #:outputs (stdout #:type stdout)))
-           #f)))
-
-(test-assert "command, when passed an unrecognized keyword, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (macroexpand
-            '(command #:foo (message #:type string)
-                      #:run "echo" message
-                      #:outputs (stdout #:type stdout)))
-           #f)))
-
-(test-assert "command, when passed multiple arguments to a unary keyword, must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (macroexpand
-            '(command #:inputs (message #:type string)
-                      #:run "echo" message
-                      #:outputs (stdout #:type stdout)
-                      #:stdin "foo" "bar"))
-           #f)))
+(test-condition "input, when passed more than one positional argument, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (input #'(message string)))
+
+(test-condition "input, when passed an unrecognized keyword, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (input #'(message #:foo string)))
+
+(test-condition "input, when passed multiple arguments to a unary keyword, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (input #'(message #:type int string)))
+
+(test-condition "output, when passed more than one positional argument, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (output #'(message string)))
+
+(test-condition "output, when passed an unrecognized keyword, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (output #'(message #:foo string)))
+
+(test-condition "output, when passed multiple arguments to a unary keyword, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (output #'(message #:type int string)))
+
+(test-condition "command, when passed positional arguments, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (macroexpand
+   '(command foo
+             #:inputs (message #:type string)
+             #:run "echo" message
+             #:outputs (stdout #:type stdout))))
+
+(test-condition "command, when passed an unrecognized keyword, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (macroexpand
+   '(command #:foo (message #:type string)
+             #:run "echo" message
+             #:outputs (stdout #:type stdout))))
+
+(test-condition "command, when passed multiple arguments to a unary keyword, must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (macroexpand
+   '(command #:inputs (message #:type string)
+             #:run "echo" message
+             #:outputs (stdout #:type stdout)
+             #:stdin "foo" "bar")))
 
 ;; TODO: Define this in the lexical scope of the test that requires
 ;; it.
@@ -164,14 +159,12 @@
      (print)
      #:message message)))
 
-(test-assert "step with expression that evaluates to a command but without a step identifier must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (macroexpand
-            '(workflow ((message #:type string))
-               ((and #t print)
-                #:message message)))
-           #f)))
+(test-condition "step with expression that evaluates to a command but without a step identifier must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (macroexpand
+   '(workflow ((message #:type string))
+      ((and #t print)
+       #:message message))))
 
 (test-assert "allow literal strings as arguments"
   (workflow ()
@@ -188,144 +181,106 @@
   (workflow ()
     (print-int #:number 42)))
 
-(test-assert "step supplied with an unknown key must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (ccwl-violation? exception)))
-    (begin (macroexpand
-            '(workflow ((message #:type string))
-               (print #:message mess)))
-           #f)))
-
-(test-assert "unrecognized workflow syntaxes must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Unrecognized workflow syntax [expected (workflow (input ...) tree)]"))))
-    (begin (macroexpand
-            '(workflow foo ((message #:type string))
-                       (print #:message message)))
-           #f)))
-
-(test-assert "multiple expressions in workflow body must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "More than one expression ~a in workflow body. Perhaps you need to combine them with a pipe or a tee?"))))
-    (begin (macroexpand
-            '(workflow ((message1 #:type string)
-                        (message2 #:type string))
-               (print (print1) #:message message1)
-               (print (print2) #:message message2)))
-           #f)))
-
-(test-assert "commands with non-string #:stderr parameters must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Invalid #:stderr parameter ~a. #:stderr parameter must be a string"))))
-    (begin (macroexpand
-            '(command #:inputs (message #:type string)
-                      #:run "echo" message
-                      #:outputs (printed #:type stderr)
-                      #:stderr captured-stderr))
-           #f)))
-
-(test-assert "commands with non-string #:stdout parameters must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Invalid #:stdout parameter ~a. #:stdout parameter must be a string"))))
-    (begin (macroexpand
-            '(command #:inputs (message #:type string)
-                      #:run "echo" message
-                      #:outputs (printed #:type stdout)
-                      #:stdout captured-stdout))
-           #f)))
-
-(test-assert "command definitions with undefined inputs in their #:run arguments must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Undefined input ~a"))))
-    (begin (macroexpand
-            '(command #:inputs (number #:type int)
-                      #:run "echo" n))
-           #f)))
-
-(test-assert "command definitions with undefined prefix inputs in their #:run arguments must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Undefined input ~a"))))
-    (begin (macroexpand
-            '(command #:inputs (number #:type int)
-                      #:run "echo" ("-x" n)))
-           #f)))
-
-(test-assert "command definitions with invalid #:run arguments must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Invalid command element ~a. Command elements must either be input identifiers or literal strings."))))
-    (begin (macroexpand
-            '(command #:run "echo" 42))
-           #f)))
+(test-condition "step supplied with an unknown key must raise a &ccwl-violation condition"
+  ccwl-violation?
+  (macroexpand
+   '(workflow ((message #:type string))
+      (print #:message mess))))
+
+(test-condition "unrecognized workflow syntaxes must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Unrecognized workflow syntax [expected (workflow (input ...) tree)]")
+  (macroexpand
+   '(workflow foo ((message #:type string))
+              (print #:message message))))
+
+(test-condition "multiple expressions in workflow body must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "More than one expression ~a in workflow body. Perhaps you need to combine them with a pipe or a tee?")
+  (macroexpand
+   '(workflow ((message1 #:type string)
+               (message2 #:type string))
+      (print (print1) #:message message1)
+      (print (print2) #:message message2))))
+
+(test-condition "commands with non-string #:stderr parameters must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Invalid #:stderr parameter ~a. #:stderr parameter must be a string")
+  (macroexpand
+   '(command #:inputs (message #:type string)
+             #:run "echo" message
+             #:outputs (printed #:type stderr)
+             #:stderr captured-stderr)))
+
+(test-condition "commands with non-string #:stdout parameters must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Invalid #:stdout parameter ~a. #:stdout parameter must be a string")
+  (macroexpand
+   '(command #:inputs (message #:type string)
+             #:run "echo" message
+             #:outputs (printed #:type stdout)
+             #:stdout captured-stdout)))
+
+(test-condition "command definitions with undefined inputs in their #:run arguments must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Undefined input ~a")
+  (macroexpand
+   '(command #:inputs (number #:type int)
+             #:run "echo" n)))
+
+(test-condition "command definitions with undefined prefix inputs in their #:run arguments must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Undefined input ~a")
+  (macroexpand
+   '(command #:inputs (number #:type int)
+             #:run "echo" ("-x" n))))
+
+(test-condition "command definitions with invalid #:run arguments must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Invalid command element ~a. Command elements must either be input identifiers or literal strings.")
+  (macroexpand
+   '(command #:run "echo" 42)))
 
 (test-assert "tolerate prefixed string arguments in command definitions"
   (command #:run "echo" ("-x" "foo")))
 
-(test-assert "command definitions with non-string prefixes in prefixed inputs must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Invalid prefix ~a. Prefixes must be strings."))))
-    (begin (macroexpand
-            '(command #:inputs (number #:type int)
-                      #:run "echo" (-x number)))
-           #f)))
-
-(test-assert "inputs with an invalid #:stage? parameter must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "Invalid #:stage? parameter ~a. #:stage? must either be #t or #f."))))
-    (begin (macroexpand
-            '(command #:inputs (file #:type File
-                                     #:stage? 42)
-                      #:run "cat" file))
-           #f)))
-
-(test-assert "inputs with #:other parameters that fail to evaluate must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "#:other parameter not serializable to YAML"))))
-    (begin (macroexpand
-            '(command #:inputs (file #:type File
-                                     #:other '((secondaryFiles . ".fai")))
-                      #:run "cat" file))
-           #f)))
-
-(test-assert "outputs with #:other parameters that fail to evaluate must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "#:other parameter not serializable to YAML"))))
-    (begin (macroexpand
-            '(command #:outputs (file #:type File
-                                      #:other '((secondaryFiles . ".fai")))
-                      #:run "cat" file))
-           #f)))
-
-(test-assert "commands with #:other parameters that fail to evaluate must raise a &ccwl-violation condition"
-  (guard (exception
-          (else (and (ccwl-violation? exception)
-                     (string=? (formatted-message-format exception)
-                               "#:other parameter not serializable to YAML"))))
-    (begin (macroexpand
-            '(command #:run "cat" file
-                      #:other '((secondaryFiles . ".fai"))))
-           #f)))
+(test-condition "command definitions with non-string prefixes in prefixed inputs must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Invalid prefix ~a. Prefixes must be strings.")
+  (macroexpand
+   '(command #:inputs (number #:type int)
+             #:run "echo" (-x number))))
+
+(test-condition "inputs with an invalid #:stage? parameter must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "Invalid #:stage? parameter ~a. #:stage? must either be #t or #f.")
+  (macroexpand
+   '(command #:inputs (file #:type File
+                            #:stage? 42)
+             #:run "cat" file)))
+
+(test-condition "inputs with #:other parameters that fail to evaluate must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "#:other parameter not serializable to YAML")
+  (macroexpand
+   '(command #:inputs (file #:type File
+                            #:other '((secondaryFiles . ".fai")))
+             #:run "cat" file)))
+
+(test-condition "outputs with #:other parameters that fail to evaluate must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "#:other parameter not serializable to YAML")
+  (macroexpand
+   '(command #:outputs (file #:type File
+                             #:other '((secondaryFiles . ".fai")))
+             #:run "cat" file)))
+
+(test-condition "commands with #:other parameters that fail to evaluate must raise a &ccwl-violation condition"
+  (ccwl-violation-with-message?
+   "#:other parameter not serializable to YAML")
+  (macroexpand
+   '(command #:run "cat" file
+             #:other '((secondaryFiles . ".fai")))))
 
 (test-eq "construct-type-syntax on primitive types"
   'File