File: dynamic_loader_test.clj

package info (click to toggle)
nrepl-clojure 1.0.0-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,996 kB
  • sloc: makefile: 50; java: 19; sh: 15; xml: 10
file content (78 lines) | stat: -rw-r--r-- 3,783 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
(ns nrepl.middleware.dynamic-loader-test
  (:require [clojure.test :refer [deftest is testing]]
            [nrepl.core :refer [combine-responses]]
            [nrepl.middleware.dynamic-loader :as sut]
            [nrepl.transport :as t]))

(defn test-transport [queue]
  (t/fn-transport
   nil
   #(swap! queue conj %)))

(defmacro testing-dynamic
  "Macro useful for defining tests for the dynamic-loader"
  {:style/indent 1}
  [doc & body]
  `(testing ~doc
     (let [state#   (atom {:handler (sut/wrap-dynamic-loader sut/unknown-op)
                           :stack   ["#'nrepl.middleware.dynamic-loader/wrap-dynamic-loader"]})
           ~'handle (fn [msg#]
                      (let [resps#          (atom [])
                            resp-transport# (test-transport resps#)]
                        (binding [sut/*state* state#]
                          ((:handler @state#) (assoc msg# :transport
                                                     resp-transport#)))
                        (combine-responses @resps#)))]
       ~@body)))

(deftest wrap-dynamic-loader-test
  (testing-dynamic "Booting with no middleware"
    (is (= ["#'nrepl.middleware.dynamic-loader/wrap-dynamic-loader"]
           (:middleware (handle {:op "ls-middleware"}))))
    (is (contains? (:status (handle {:op "describe"}))
                   :unknown-op)))
  (testing-dynamic "Adding a middleware works"
    (handle {:op          "add-middleware"
             :middleware ["nrepl.middleware.session/session"]})
    (is (= ["#'nrepl.middleware.dynamic-loader/wrap-dynamic-loader"
            "#'nrepl.middleware.session/session"]
           (:middleware (handle {:op "ls-middleware"}))))
    (is (contains? (:status (handle {:op "ls-sessions"}))
                   :done)))
  (testing-dynamic "Adding a middleware is cumulative"
    (handle {:op          "add-middleware"
             :middleware ["nrepl.middleware.session/session"]})
    (is (= ["#'nrepl.middleware.dynamic-loader/wrap-dynamic-loader"
            "#'nrepl.middleware.session/session"] ;; with session
           (:middleware (handle {:op "ls-middleware"}))))
    (handle {:op          "add-middleware"
             :middleware ["nrepl.middleware.interruptible-eval/interruptible-eval"]})
    (is (= 5 ;; now we have all these: session eval print caught dynamic
           (count (:middleware (handle {:op "ls-middleware"}))))))
  (testing-dynamic "Swap removes existing middleware"
    (handle {:op          "add-middleware"
             :middleware ["nrepl.middleware.session/session"
                          "nrepl.middleware/wrap-describe"]})
    (is (= 3 ;; now we have all these: session eval print caught dynamic
           (count (:middleware (handle {:op "ls-middleware"})))))
    (handle {:op          "swap-middleware"
             :middleware ["nrepl.middleware.dynamic-loader/wrap-dynamic-loader"]})
    (let [ls-result (:middleware (handle {:op "ls-middleware"}))]
      (is (= 2 (count ls-result)))
      (is (not (contains? (set ls-result)
                          "#'nrepl.middleware/wrap-describe"))))))

(deftest wrap-dynamic-loader-error
  (testing-dynamic "Adding an unknown middleware returns an error"
    (handle {:op         "add-middleware"
             :middleware ["nrepl.middleware/wrap-describe"]})
    ;; Sanity test the describe works
    (is (some? (:versions (handle {:op "describe"}))))
    (let [resp (handle {:op         "add-middleware"
                        :middleware ["unknown-middleware/wrap-wot?"]})]
      (is (contains? (:status resp)
                     :error))
      (is (contains? (set (:unresolved-middleware resp))
                     "unknown-middleware/wrap-wot?"))
      ;; The handler still works
      (is (some? (:versions (handle {:op "describe"})))))))