diff --git a/src/babashka/impl/clojure/core.clj b/src/babashka/impl/clojure/core.clj index 4405e501..26a6aaa8 100644 --- a/src/babashka/impl/clojure/core.clj +++ b/src/babashka/impl/clojure/core.clj @@ -26,7 +26,7 @@ ([sym] (core-dynamic-var sym nil)) ([sym init-val] (sci/new-dynamic-var sym init-val {:ns clojure-core-ns}))) -(def data-readers (core-dynamic-var '*data-readers*)) +(def data-readers (core-dynamic-var '*data-readers* {})) (def command-line-args (core-dynamic-var '*command-line-args*)) (def warn-on-reflection (core-dynamic-var '*warn-on-reflection* false)) (def math-context (core-dynamic-var '*math-context*)) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 8a264054..0ecffe22 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -425,7 +425,13 @@ Use bb run --help to show this help output. (def edn-readers (cond-> {} features/yaml? - (assoc 'ordered/map @(resolve 'flatland.ordered.map/ordered-map)))) + (assoc 'ordered/map @(resolve 'flatland.ordered.map/ordered-map)) + features/xml? + (assoc 'xml/ns @(resolve 'clojure.data.xml.name/uri-symbol) + 'xml/element @(resolve 'clojure.data.xml.node/tagged-element)))) + +;; also put the edn readers into *data-readers* +(sci/alter-var-root core/data-readers into edn-readers) (defn edn-seq* [^java.io.BufferedReader rdr] diff --git a/test/babashka/xml_test.clj b/test/babashka/xml_test.clj new file mode 100644 index 00000000..b3fde386 --- /dev/null +++ b/test/babashka/xml_test.clj @@ -0,0 +1,17 @@ +(ns babashka.xml-test + (:require [babashka.test-utils :as test-utils] + [clojure.string :as str] + [clojure.test :refer [deftest is testing]])) + +(def simple-xml-str "data") + +(deftest xml-edn-read-test + (let [parsed-edn (test-utils/bb nil (str "(xml/parse-str \"" simple-xml-str "\")")) + emitted-xml (test-utils/bb parsed-edn "(xml/emit-str *input*)")] + (is (str/includes? emitted-xml simple-xml-str)))) + +(def round-trip-prog + (str "(xml/emit-str (read-string (pr-str (xml/parse-str \"" simple-xml-str "\"))))")) + +(deftest xml-data-readers-test + (is (str/includes? (test-utils/bb nil round-trip-prog) simple-xml-str))) diff --git a/test/babashka/yaml_test.clj b/test/babashka/yaml_test.clj new file mode 100644 index 00000000..cc566812 --- /dev/null +++ b/test/babashka/yaml_test.clj @@ -0,0 +1,18 @@ +(ns babashka.yaml-test + (:require [babashka.test-utils :as test-utils] + [clojure.string :as str] + [clojure.test :refer [deftest is testing]])) + +(def simple-yaml-str "topic: [point 1, point 2]") + +(deftest yaml-edn-read-test + (let [parsed-edn (test-utils/bb nil (str "(yaml/parse-string \"" simple-yaml-str "\")")) + emitted-yaml (test-utils/bb parsed-edn "(yaml/generate-string *input*)")] + (is (every? #(str/includes? emitted-yaml %) ["topic:" "point 1" "point 2"])))) + +(def round-trip-prog + (str "(yaml/generate-string (read-string (pr-str (yaml/parse-string \"" simple-yaml-str "\"))))")) + +(deftest yaml-data-readers-test + (let [emitted-yaml (test-utils/bb nil round-trip-prog)] + (is (every? #(str/includes? emitted-yaml %) ["topic:" "point 1" "point 2"]))))