diff --git a/.github/workflows/tests_babashka.yml b/.github/workflows/tests_babashka.yml new file mode 100644 index 0000000..4aa7d4d --- /dev/null +++ b/.github/workflows/tests_babashka.yml @@ -0,0 +1,23 @@ +name: Babashka +on: [push, pull_request] +jobs: + babashka: + runs-on: [ubuntu-latest] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Prepare java + uses: actions/setup-java@v1 + with: + java-version: 1.8 + + - name: Install clojure tools + uses: DeLaGuardo/setup-clojure@10.1 + with: + cli: 1.10.1.727 + bb: latest + + - name: Run tests + run: bb test:bb + diff --git a/bb.edn b/bb.edn new file mode 100644 index 0000000..b8402f1 --- /dev/null +++ b/bb.edn @@ -0,0 +1,4 @@ +{:paths ["bb" "src"] + :tasks {test:bb {:extra-paths ["test"] + :extra-deps {nubank/matcher-combinators {:mvn/version "3.5.1"}} + :task (exec 'runner/run-tests)}}} diff --git a/bb/runner.clj b/bb/runner.clj new file mode 100644 index 0000000..856a835 --- /dev/null +++ b/bb/runner.clj @@ -0,0 +1,19 @@ +(ns runner + (:require + [clojure.test :as test] + [hyperfiddle.rcf :as rcf])) + +(defn run-tests [_] + (alter-var-root (var rcf/*generate-tests*) (constantly true)) + (let [test-nses '[hyperfiddle.rcf-test + hyperfiddle.rcf.analyzer-test + ;; needs missionary, doesn't work due to missing reactive streams Java lib: + #_hyperfiddle.rcf.unify-test + ;; needs missionary: + #_hyperfiddle.rcf.example-test + ]] + (apply require test-nses) + (let [{:keys [fail error]} + (apply test/run-tests test-nses)] + (when (and fail error (pos? (+ fail error))) + (throw (ex-info "Tests failed" {:babasha/exit 1})))))) diff --git a/src/hyperfiddle/rcf/analyzer.clj b/src/hyperfiddle/rcf/analyzer.clj index 96766a6..1c4df30 100644 --- a/src/hyperfiddle/rcf/analyzer.clj +++ b/src/hyperfiddle/rcf/analyzer.clj @@ -425,6 +425,8 @@ [m f] (reduce-kv (fn [m k v] (assoc m k (f v))) {} (or m {}))) +(defmacro if-bb [then else] (if (System/getProperty "babashka.version") then else)) + (defn create-var "Creates a Var for sym and returns it. The Var gets interned in the env namespace." @@ -433,9 +435,10 @@ (if (some? v) (cond (class? v) v - (and (var? v) (= ns (ns-name (.ns ^clojure.lang.Var v)))) (do (when-some [m (meta sym)] - (.setMeta v (update-vals m unquote'))) - v) + (and (var? v) (= ns (ns-name (if-bb (:ns (meta v)) (.ns ^clojure.lang.Var v))))) + (do (when-some [m (meta sym)] + (if-bb (alter-meta! v (constantly (update-vals m unquote'))) + (.setMeta v (update-vals m unquote')))) v) :else (throw (ex-info (str "(def " sym " ...) resolved to an existing mapping of an unexpected type.") {:sym sym :ns ns