diff options
-rw-r--r-- | ccwl/ccwl.scm | 20 | ||||
-rw-r--r-- | tests/ccwl.scm | 11 |
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") |