about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ravanan/reader.scm6
-rw-r--r--test-data/empty.yaml1
-rw-r--r--test-data/workflow-with-default-inputs.cwl23
-rw-r--r--tests/reader.scm19
4 files changed, 46 insertions, 3 deletions
diff --git a/ravanan/reader.scm b/ravanan/reader.scm
index e7b0598..bb825ed 100644
--- a/ravanan/reader.scm
+++ b/ravanan/reader.scm
@@ -160,8 +160,10 @@ the @code{required} field when it is not specified."
   "Normalize formal @var{input}."
   (maybe-assoc-set input
     (cons "default"
-          (maybe-bind (maybe-assoc-ref (just input) "default")
-                      (compose just normalize-input)))
+          (maybe-let* ((default (maybe-assoc-ref (just input) "default")))
+            (just (normalize-input
+                   (coerce-type default
+                                (formal-parameter-type (assoc-ref input "type")))))))
     (cons "secondaryFiles"
           (maybe-bind (maybe-assoc-ref (just input) "secondaryFiles")
                       (compose just
diff --git a/test-data/empty.yaml b/test-data/empty.yaml
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/test-data/empty.yaml
@@ -0,0 +1 @@
+{}
diff --git a/test-data/workflow-with-default-inputs.cwl b/test-data/workflow-with-default-inputs.cwl
new file mode 100644
index 0000000..abc8817
--- /dev/null
+++ b/test-data/workflow-with-default-inputs.cwl
@@ -0,0 +1,23 @@
+class: Workflow
+inputs:
+  number:
+    type: int
+    default: 13
+  flag:
+    type: boolean
+    default: true
+  reverseflag:
+    type: boolean
+    default: false
+  foo:
+    type: string
+    default: bar
+  arr:
+    type:
+      type: array
+      items: int
+    default:
+      - 1
+      - 2
+      - 3
+outputs: []
diff --git a/tests/reader.scm b/tests/reader.scm
index 77d6034..8a2d0bc 100644
--- a/tests/reader.scm
+++ b/tests/reader.scm
@@ -24,7 +24,8 @@
              (ravanan reader)
              (ravanan work command-line-tool)
              (ravanan work types)
-             (ravanan work utils))
+             (ravanan work utils)
+             (ravanan work vectors))
 
 (define normalize-formal-input
   (@@ (ravanan reader) normalize-formal-input))
@@ -231,4 +232,20 @@
     (lambda (workflow inputs)
       inputs)))
 
+(test-equal "Resolve type ambiguities in workflow default inputs"
+  '(("number" . 13)
+    ("flag" . #t)
+    ("reverseflag" . #f)
+    ("foo" . "bar")
+    ("arr" . #(1 2 3)))
+  (call-with-values
+      (cut read-workflow+inputs
+           "test-data/workflow-with-default-inputs.cwl"
+           "test-data/empty.yaml")
+    (lambda (workflow inputs)
+      (vector-map->list (lambda (input)
+                          (cons (assoc-ref input "id")
+                                (assoc-ref input "default")))
+                        (assoc-ref workflow "inputs")))))
+
 (test-end "reader")