test that var metadata matches containing ns (#967)

* - change namespace on 'quick-check' to match clojure version
- add test for var meta->namespace alignment

* - add ns to with-transaction macro
This commit is contained in:
Bob 2021-08-08 15:23:58 -04:00 committed by GitHub
parent 116d73f0b0
commit bb57d220d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 4 deletions

View file

@ -2,7 +2,7 @@
{:no-doc true} {:no-doc true}
(:require [next.jdbc :as njdbc] (:require [next.jdbc :as njdbc]
[next.jdbc.sql :as sql] [next.jdbc.sql :as sql]
[sci.impl.namespaces :refer [copy-var]] [sci.impl.namespaces :refer [copy-var macrofy]]
[sci.impl.vars :as vars])) [sci.impl.vars :as vars]))
(def next-ns (vars/->SciNamespace 'next.jdbc nil)) (def next-ns (vars/->SciNamespace 'next.jdbc nil))
@ -28,8 +28,7 @@
'plan (copy-var njdbc/plan next-ns) 'plan (copy-var njdbc/plan next-ns)
'prepare (copy-var njdbc/prepare next-ns) 'prepare (copy-var njdbc/prepare next-ns)
'transact (copy-var njdbc/transact next-ns) 'transact (copy-var njdbc/transact next-ns)
'with-transaction (with-meta with-transaction 'with-transaction (macrofy 'with-transaction with-transaction next-ns)})
{:sci/macro true})})
(def sns (vars/->SciNamespace 'next.jdbc.sql nil)) (def sns (vars/->SciNamespace 'next.jdbc.sql nil))

View file

@ -174,4 +174,4 @@
(println (str "'" k) (format "(sci/copy-var tc/%s p-ns)" k))) (println (str "'" k) (format "(sci/copy-var tc/%s p-ns)" k)))
(def test-check-namespace (def test-check-namespace
{'quick-check (sci/copy-var tc/quick-check p-ns)}) {'quick-check (sci/copy-var tc/quick-check tc-ns)})

View file

@ -0,0 +1,25 @@
(ns babashka.namespace-test
(:require [babashka.test-utils :as tu]
[clojure.edn :as edn]
[clojure.test :refer :all]))
(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 #{'clojure.lang '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}))")))))