about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ccwl/ccwl.scm20
-rw-r--r--tests/ccwl.scm11
2 files changed, 25 insertions, 6 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm
index f380485..174b040 100644
--- a/ccwl/ccwl.scm
+++ b/ccwl/ccwl.scm
@@ -372,15 +372,20 @@ RUN-ARGS. If such an input is not present in RUN-ARGS, return #f."
   (eq? (input-id input1)
        (input-id input2)))
 
+(define (function-inputs function)
+  "Return the list of inputs accepted by @var{function}, a
+@code{<command>} or @code{<cwl-workflow>} object."
+  ((cond
+    ((command? function) command-inputs)
+    ((cwl-workflow? function) cwl-workflow-inputs)
+    (else (error "Unrecognized ccwl function" function)))
+   function))
+
 (define (function-input-keys function)
   "Return the list of input keys accepted by FUNCTION, a <command>
 object or a <cwl-workflow> object."
   (map input-id
-       ((cond
-         ((command? function) command-inputs)
-         ((cwl-workflow? function) cwl-workflow-inputs)
-         (else (error "Unrecognized ccwl function" function)))
-        function)))
+       (function-inputs function)))
 
 (define-immutable-record-type <key>
   (make-key name cwl-id step)
@@ -474,7 +479,10 @@ represented by <step> objects."
        ;; TODO: Filter out optional parameters.
        (match (lset-difference
                eq?
-               (function-input-keys function-object)
+               (filter-map (lambda (input)
+                             (and (unspecified-default? (input-default input))
+                                  (input-id input)))
+                           (function-inputs function-object))
                (map (match-lambda
                       ((key . _) (keyword->symbol key)))
                     (syntax->datum (pairify #'(args ...)))))
diff --git a/tests/ccwl.scm b/tests/ccwl.scm
index f55ef0d..9aa00f3 100644
--- a/tests/ccwl.scm
+++ b/tests/ccwl.scm
@@ -128,4 +128,15 @@
                (print (print2) #:message message2)))))
   (list 'out1 'printed-message))
 
+;; TODO: Define this in the lexical scope of the test that requires
+;; it.
+(define print-with-default
+  (command #:inputs (message #:type string #:default "Hello")
+           #:run "echo" message
+           #:outputs (printed-message #:type stdout)))
+
+(test-assert "allow steps with unspecified default arguments"
+  (workflow ()
+    (print-with-default)))
+
 (test-end "ccwl")