summaryrefslogtreecommitdiff
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")