babashka/test/babashka/namespace_test.clj
2023-08-16 20:19:20 +02:00

31 lines
1.3 KiB
Clojure

(ns babashka.namespace-test
(:require [babashka.test-utils :as tu]
[clojure.edn :as edn]
[clojure.test :refer [deftest is testing]]))
(defn bb [input & args]
(edn/read-string
{:readers *data-readers*
:eof nil}
(apply tu/bb (when (some? input) (str input)) (map str args))))
(deftest publics-namespace-test
(testing "all namespace publics (except for those in clojure.lang and user namespaces)
have ns metadata that matches the namespace it's in"
(comment "results seq contains vars whose ns meta doesn't match the ns they're in")
(is (empty? (bb nil "
(let [excluded-namespaces #{'user}]
(for [nspace (remove #(excluded-namespaces (ns-name %)) (all-ns))
[var-symbol ns-var] (ns-publics nspace)
:let [ns-ns-name (ns-name nspace)
var-ns-name (some-> ns-var meta :ns ns-name)]
:when (not= ns-ns-name var-ns-name)]
{:containing-ns ns-ns-name
:ns-on-var var-ns-name
:var-name var-symbol}))")))))
(deftest reload-existing-ns-test
(is (bb nil "(require '[clojure.java.io] :reload) true")))
(deftest file-not-found-exception-non-existing-ns-test
(is (= :user/dude (bb nil "(try (require '[foo-dude.bar]) (catch java.io.FileNotFoundException _ ::dude))"))))