diff --git a/test/cider/nrepl/middleware/undef_test.clj b/test/cider/nrepl/middleware/undef_test.clj index 5b65a1e8c..0c303cfb2 100644 --- a/test/cider/nrepl/middleware/undef_test.clj +++ b/test/cider/nrepl/middleware/undef_test.clj @@ -1,14 +1,60 @@ (ns cider.nrepl.middleware.undef-test - (:require - [clojure.test :refer :all] - [cider.nrepl.middleware.test-transport :refer [messages test-transport]] - [cider.nrepl.middleware.undef :refer [undef-reply]])) - -(def x 1) - -(deftest test-toogle-undef-op - (let [transport (test-transport)] - (is (ns-resolve 'cider.nrepl.middleware.undef-test 'x)) - (undef-reply {:transport transport :ns "cider.nrepl.middleware.undef-test" :symbol "x"}) - (is (= [{:status #{:done}}] (messages transport))) - (is (nil? (ns-resolve 'cider.nrepl.middleware.undef-test 'x))))) + (:require [cider.nrepl.middleware.test-session :as session] + [clojure.test :refer :all])) + +(use-fixtures :each session/session-fixture) + +(deftest undef-var + (testing "undef undefines vars" + (is (= ["#'user/x"] + (:value (session/message {:op "eval" + :code "(def x 1)"})))) + (is (= ["#'user/x"] + (:value (session/message {:op "eval" + :code "(ns-resolve 'user 'x)"})))) + (is (= #{"done"} + (:status (session/message {:op "undef" + :ns "user" + :symbol "x"})))) + (is (= ["nil"] + (:value (session/message {:op "eval" + :code "(ns-resolve 'user 'x)"})))))) + +(deftest undef-alias + (testing "undef undefines aliases" + (is (= ["#'clojure.walk/postwalk"] + (:value (do + (session/message {:op "eval" + :code "(require '[clojure.walk :refer [postwalk]])"}) + (session/message {:op "eval" + :code "(ns-resolve 'user 'postwalk)"}))))) + (is (= #{"done"} + (:status (session/message {:op "undef" + :ns "user" + :symbol "postwalk"})))) + (is (= ["nil"] + (:value (session/message {:op "eval" + :code "(ns-resolve 'user 'postwalk)"})))))) + +(deftest undef-undefined + (testing "undef does not throw for aliases or vars that are not defined" + (is (= ["nil"] + (:value (session/message {:op "eval" + :code "(ns-resolve 'user 'x)"})))) + (is (= #{"done"} + (:status (session/message {:op "undef" + :ns "user" + :symbol "x"})))))) + +(deftest undef-exceptions + (testing "undef throws for non-existent namespaces" + (is (= #{"done" "undef-error"} + (:status (session/message {:op "undef" + :ns "abc" + :symbol "x"}))))) + + (testing "undef throws with missing arguments" + (is (= #{"done" "undef-error"} + (:status (session/message {:op "undef"})) + (:status (session/message {:op "undef" :ns "user"})) + (:status (session/message {:op "undef" :symbol "x"}))))))