diff options
| author | Arun Isaac | 2025-11-27 16:27:21 +0000 |
|---|---|---|
| committer | Arun Isaac | 2025-11-27 17:04:05 +0000 |
| commit | 4ccc9cf0a0f56f931c79b42df078ac313bd0b5b7 (patch) | |
| tree | b7507cb5b0131772269398c55a4cf52a0d3f59c5 /tests/reader.scm | |
| parent | ced597ee47dc03c9c44c883e5670090ec3bfb0ab (diff) | |
| download | ravanan-4ccc9cf0a0f56f931c79b42df078ac313bd0b5b7.tar.gz ravanan-4ccc9cf0a0f56f931c79b42df078ac313bd0b5b7.tar.lz ravanan-4ccc9cf0a0f56f931c79b42df078ac313bd0b5b7.zip | |
tests: Test reader end-to-end, don't test specific functions.
This makes the tests less fragile—that is, less subject to breakage due to code refactoring. And, we can be more confident that the reader actually works end-to-end.
Diffstat (limited to 'tests/reader.scm')
| -rw-r--r-- | tests/reader.scm | 227 |
1 files changed, 88 insertions, 139 deletions
diff --git a/tests/reader.scm b/tests/reader.scm index 8a2d0bc..d55e396 100644 --- a/tests/reader.scm +++ b/tests/reader.scm @@ -27,15 +27,6 @@ (ravanan work utils) (ravanan work vectors)) -(define normalize-formal-input - (@@ (ravanan reader) normalize-formal-input)) - -(define normalize-formal-output - (@@ (ravanan reader) normalize-formal-output)) - -(define normalize-input - (@@ (ravanan reader) normalize-input)) - (test-begin "reader") (test-equal "Coerce to boolean (true)" @@ -88,136 +79,47 @@ 37 (coerce-type 37 'int)) -(test-equal "Normalize File type formal input" - (canonicalize-json '(("type" . "File") - ("id" . "foo") - ("secondaryFiles" . #((("pattern" . ".bai") - ("required" . #t)))))) - (canonicalize-json (normalize-formal-input - '(("type" . "File") - ("id" . "foo") - ("secondaryFiles" . #(".bai")))))) - -(test-equal "Normalize File array type formal input" - (canonicalize-json '(("type" - ("type" . "array") - ("items" . "File")) - ("id" . "foo") - ("secondaryFiles" . #((("pattern" . ".bai") - ("required" . #t)))))) - (canonicalize-json (normalize-formal-input - '(("type" - ("type" . "array") - ("items" . "File")) - ("id" . "foo") - ("secondaryFiles" . #(".bai")))))) - -(test-equal "Normalize array of File arrays type formal input" - (canonicalize-json '(("type" - ("type" . "array") - ("items" . (("type" . "array") - ("items" . "File")))) - ("id" . "foo") - ("secondaryFiles" . #((("pattern" . ".bai") - ("required" . #t)))))) - (canonicalize-json (normalize-formal-input - '(("type" - ("type" . "array") - ("items" . (("type" . "array") - ("items" . "File")))) - ("id" . "foo") - ("secondaryFiles" . #(".bai")))))) - -(test-equal "Normalize File type formal output" - (canonicalize-json '(("type" . "File") - ("id" . "foo") - ("secondaryFiles" . #((("pattern" . ".bai") - ("required" . #f)))))) - (canonicalize-json (normalize-formal-output - '(("type" . "File") - ("id" . "foo") - ("secondaryFiles" . #(".bai")))))) - -(test-equal "Normalize File array type formal output" - (canonicalize-json '(("type" - ("type" . "array") - ("items" . "File")) - ("id" . "foo") - ("secondaryFiles" . #((("pattern" . ".bai") - ("required" . #f)))))) - (canonicalize-json (normalize-formal-output - '(("type" - ("type" . "array") - ("items" . "File")) - ("id" . "foo") - ("secondaryFiles" . #(".bai")))))) - -(test-equal "Normalize array of File arrays type formal output" - (canonicalize-json '(("type" - ("type" . "array") - ("items" . (("type" . "array") - ("items" . "File")))) - ("id" . "foo") - ("secondaryFiles" . #((("pattern" . ".bai") - ("required" . #f)))))) - (canonicalize-json (normalize-formal-output - '(("type" - ("type" . "array") - ("items" . (("type" . "array") - ("items" . "File")))) - ("id" . "foo") - ("secondaryFiles" . #(".bai")))))) - -(call-with-temporary-directory - (lambda (dir) - (test-equal "Normalize inputs with only location" - (canonicalize-json - (let ((path (expand-file-name "foo" dir))) - `(("class" . "File") - ("location" . ,(uri->string (build-uri 'file - #:host "" - #:path path - #:validate? #f))) - ("path" . ,path) - ("basename" . "foo") - ("nameroot" . "foo") - ("nameext" . "") - ("size" . 0) - ("checksum" . "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709")))) - (canonicalize-json - (call-with-current-directory dir - (lambda () - ;; Create an actual file called "foo" so that canonicalize-path works. - (call-with-output-file "foo" - (const #t)) - (normalize-input '(("class" . "File") - ("location" . "foo"))))))))) - -(call-with-temporary-directory - (lambda (dir) - (test-equal "Normalize inputs with only path" - (canonicalize-json - (let ((path (expand-file-name "foo" dir))) - `(("class" . "File") - ("location" . ,(uri->string (build-uri 'file - #:host "" - #:path path - #:validate? #f))) - ("path" . ,path) - ("basename" . "foo") - ("nameroot" . "foo") - ("nameext" . "") - ("size" . 0) - ("checksum" . "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709")))) - (canonicalize-json - (call-with-current-directory dir - (lambda () - ;; Create an actual file called "foo" so that canonicalize-path - ;; works. - (call-with-output-file "foo" - (const #t)) - (normalize-input '(("class" . "File") - ("path" . "foo"))))))))) +(test-equal "Normalize inputs with only location" + (canonicalize-json + (let ((path (canonicalize-path "test-data/foo"))) + `(("class" . "File") + ("location" . ,(uri->string (build-uri 'file + #:host "" + #:path path + #:validate? #f))) + ("path" . ,path) + ("basename" . "foo") + ("nameroot" . "foo") + ("nameext" . "") + ("size" . 0) + ("checksum" . "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709")))) + (call-with-values + (cut read-workflow+inputs + "test-data/workflow-with-a-file-input.cwl" + "test-data/input-file-with-location-only.yaml") + (lambda (workflow inputs) + (canonicalize-json (assoc-ref inputs "foo"))))) + +(test-equal "Normalize inputs with only path" + (canonicalize-json + (let ((path (canonicalize-path "test-data/foo"))) + `(("class" . "File") + ("location" . ,(uri->string (build-uri 'file + #:host "" + #:path path + #:validate? #f))) + ("path" . ,path) + ("basename" . "foo") + ("nameroot" . "foo") + ("nameext" . "") + ("size" . 0) + ("checksum" . "sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709")))) + (call-with-values + (cut read-workflow+inputs + "test-data/workflow-with-a-file-input.cwl" + "test-data/input-file-with-path-only.yaml") + (lambda (workflow inputs) + (canonicalize-json (assoc-ref inputs "foo"))))) (test-equal "Read YAML inputs file with type ambiguities" '(("number" . 13) @@ -248,4 +150,51 @@ (assoc-ref input "default"))) (assoc-ref workflow "inputs"))))) +(test-equal "Normalize File type formals" + (list (vector-map canonicalize-json + #((("id" . "infoo") + ("type" . "File") + ("secondaryFiles" . #((("pattern" . ".bai") + ("required" . #t))))) + (("id" . "inbar") + ("type" + ("type" . "array") + ("items" . "File")) + ("secondaryFiles" . #((("pattern" . ".bai") + ("required" . #t))))) + (("id" . "infoobar") + ("type" + ("type" . "array") + ("items" . (("type" . "array") + ("items" . "File")))) + ("secondaryFiles" . #((("pattern" . ".bai") + ("required" . #t))))))) + (vector-map canonicalize-json + #((("id" . "outfoo") + ("type" . "File") + ("secondaryFiles" . #((("pattern" . ".bai") + ("required" . #f))))) + (("id" . "outbar") + ("type" + ("type" . "array") + ("items" . "File")) + ("secondaryFiles" . #((("pattern" . ".bai") + ("required" . #f))))) + (("id" . "outfoobar") + ("type" + ("type" . "array") + ("items" . (("type" . "array") + ("items" . "File")))) + ("secondaryFiles" . #((("pattern" . ".bai") + ("required" . #f)))))))) + (call-with-values + (cut read-workflow+inputs + "test-data/workflow-with-various-file-type-formals.cwl" + "test-data/empty.yaml") + (lambda (workflow inputs) + (list (vector-map canonicalize-json + (assoc-ref workflow "inputs")) + (vector-map canonicalize-json + (assoc-ref workflow "outputs")))))) + (test-end "reader") |
