2021-03-28 15:30:44 +00:00
|
|
|
(ns babashka.bb-edn-test
|
|
|
|
|
(:require
|
|
|
|
|
[babashka.fs :as fs]
|
|
|
|
|
[babashka.test-utils :as test-utils]
|
|
|
|
|
[clojure.edn :as edn]
|
|
|
|
|
[clojure.string :as str]
|
|
|
|
|
[clojure.test :as test :refer [deftest is]]))
|
|
|
|
|
|
|
|
|
|
(defn bb [& args]
|
|
|
|
|
(edn/read-string
|
|
|
|
|
{:readers *data-readers*
|
|
|
|
|
:eof nil}
|
|
|
|
|
(apply test-utils/bb nil (map str args))))
|
|
|
|
|
|
|
|
|
|
(defmacro with-config [cfg & body]
|
|
|
|
|
`(let [temp-dir# (fs/create-temp-dir)
|
|
|
|
|
bb-edn-file# (fs/file temp-dir# "bb.edn")]
|
|
|
|
|
(binding [*print-meta* true]
|
|
|
|
|
(spit bb-edn-file# ~cfg))
|
|
|
|
|
(binding [test-utils/*bb-edn-path* (str bb-edn-file#)]
|
|
|
|
|
~@body)))
|
|
|
|
|
|
|
|
|
|
(deftest doc-test
|
|
|
|
|
(with-config {:paths ["test-resources/task_scripts"]}
|
|
|
|
|
(is (str/includes? (apply test-utils/bb nil
|
|
|
|
|
(map str ["doc" "tasks"]))
|
|
|
|
|
"This is task ns docstring."))
|
|
|
|
|
(is (str/includes? (apply test-utils/bb nil
|
|
|
|
|
(map str ["doc" "tasks/foo"]))
|
|
|
|
|
"Foo docstring"))
|
|
|
|
|
(is (str/includes? (apply test-utils/bb nil
|
|
|
|
|
(map str ["doc" "tasks/-main"]))
|
|
|
|
|
"Main docstring"))))
|
|
|
|
|
|
|
|
|
|
(deftest deps-test
|
|
|
|
|
(with-config '{:deps {medley/medley {:mvn/version "1.3.0"}}}
|
|
|
|
|
(is (= '{1 {:id 1}, 2 {:id 2}}
|
|
|
|
|
(bb "-e" "(require 'medley.core)" "-e" "(medley.core/index-by :id [{:id 1} {:id 2}])")))))
|
2021-03-29 21:57:13 +00:00
|
|
|
|
|
|
|
|
;; TODO:
|
|
|
|
|
;; Do we want to support the same parsing as the clj CLI?
|
|
|
|
|
;; Or do we want `--aliases :foo:bar`
|
|
|
|
|
;; Let's wait for a good use case
|
|
|
|
|
#_(deftest alias-deps-test
|
|
|
|
|
(with-config '{:aliases {:medley {:deps {medley/medley {:mvn/version "1.3.0"}}}}}
|
|
|
|
|
(is (= '{1 {:id 1}, 2 {:id 2}}
|
|
|
|
|
(bb "-A:medley" "-e" "(require 'medley.core)" "-e" "(medley.core/index-by :id [{:id 1} {:id 2}])")))))
|