From 45c7dda6154ef64d73c70656e85e8d6b314ddb68 Mon Sep 17 00:00:00 2001
From: Arun Isaac
Date: Tue, 8 Oct 2024 01:41:44 +0100
Subject: javascript: Do not serialize JSON if not interpolating string.

* ravanan/javascript.scm (evaluate-parameter-reference): Do not
serialize JSON tree if not interpolating parameter reference.
* tests/javascript.scm ("evaluate parameter reference to JSON object",
"evaluate parameter reference to JSON object using node"): New tests.
("evaluate parameter reference with node", "evaluate parameter
reference (without context)", "evaluate parameter reference with
node (without context)"): Update tests.
---
 tests/javascript.scm | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

(limited to 'tests')

diff --git a/tests/javascript.scm b/tests/javascript.scm
index c766ac3..75936c0 100644
--- a/tests/javascript.scm
+++ b/tests/javascript.scm
@@ -40,6 +40,14 @@
   (evaluate-parameter-reference "$(inputs.message['bar'][\"foo\"][2])"
                                 '(("inputs" ("message" ("bar" ("foo" . #("a" "b" "c" "d"))))))))
 
+(test-equal "evaluate parameter reference to JSON object"
+  '(("class" . "File")
+    ("path" . "/foo/bar"))
+  (evaluate-parameter-reference "$(inputs.fasta)"
+                                '(("inputs" ("fasta"
+                                             ("class" . "File")
+                                             ("path" . "/foo/bar"))))))
+
 (test-equal "evaluate parameter reference with string interpolation"
   "24foo12foobar"
   (evaluate-parameter-reference "$(runtime.cores)foo$(inputs.threads)$(inputs.output_filename)"
@@ -58,10 +66,15 @@
                                    ("vector" . #(0 1 2 3))))))
 
 (test-equal "evaluate parameter reference with node"
-  "3"
+  3
   (evaluate-parameter-reference "$(inputs.n + 1)"
                                 '(("inputs" ("n" . 2)))))
 
+(test-equal "evaluate parameter reference to JSON object using node"
+  '(json-ref inputs "fasta")
+  (gexp->sexp-rec
+   (evaluate-parameter-reference "$(inputs.fasta)")))
+
 (test-equal "evaluate parameter reference with string interpolation using node"
   "24foo24foobar"
   (evaluate-parameter-reference "$(runtime.cores)foo$(inputs.threads*2)$(inputs.output_filename)"
@@ -80,11 +93,7 @@
                                    ("vector" . #(0 1 2 3))))))
 
 (test-equal "evaluate parameter reference (without context)"
-  '(string-join
-    (map (lambda (token)
-           (if (string? token) token (scm->json-string (canonicalize-json token))))
-         (list (json-ref inputs "message" "bar" "foo" 2)))
-    "")
+  '(json-ref inputs "message" "bar" "foo" 2)
   (gexp->sexp-rec
    (evaluate-parameter-reference "$(inputs.message['bar'][\"foo\"][2])")))
 
@@ -110,11 +119,7 @@
    (evaluate-parameter-reference "foo$(inputs.vector)$(inputs.object)")))
 
 (test-equal "evaluate parameter reference with node (without context)"
-  '(string-join
-    (map (lambda (token)
-           (if (string? token) token (scm->json-string (canonicalize-json token))))
-         (list (evaluate-javascript (*approximate*) "(inputs.n + 1)" "")))
-    "")
+  '(evaluate-javascript (*approximate*) "(inputs.n + 1)" "")
   (gexp->sexp-rec
    (evaluate-parameter-reference "$(inputs.n + 1)")))
 
-- 
cgit v1.2.3