File: middleware_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 (80 lines) | stat: -rw-r--r-- 2,887 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
79
80
(ns nrepl.middleware-test
  (:require
   [clojure.test :refer [deftest is are]]
   [nrepl.middleware :as middleware :refer [linearize-middleware-stack]]
   [nrepl.server :refer [default-middleware]]))

(defn- wonky-resolve [s] (if (symbol? s) (resolve s) s))

(defn- indexed-stack
  [x]
  (->> x
       (map wonky-resolve)
       shuffle
       linearize-middleware-stack
       (map-indexed #(vector (if (var? %2)
                               (-> (#'middleware/var-name %2) symbol name symbol)
                               %2)
                             %))
       (into {})))

(deftest sanity
  (let [stack (indexed-stack default-middleware)]
    (is (stack 'wrap-print))
    (are [before after] (< (stack before) (stack after))
      'interruptible-eval 'wrap-load-file
      'interruptible-eval 'session
      'wrap-describe 'wrap-print
      'interruptible-eval 'wrap-print))

  (let [n ^{::middleware/descriptor
            {:expects #{"clone"} :requires #{}}} {:dummy :middleware2}
        m ^{::middleware/descriptor
            {:expects #{"eval"} :requires #{n #'nrepl.middleware.print/wrap-print}}}
        {:dummy :middleware}
        q ^{::middleware/descriptor
            {:expects #{} :requires #{"describe" "eval"}}} {:dummy :middleware3}
        stack (indexed-stack (concat default-middleware [m q n]))]
    ;(->> stack clojure.set/map-invert (into (sorted-map)) vals println)
    (are [before after] (< (stack before) (stack after))
      'interruptible-eval m
      m 'wrap-print
      'session n
      q 'wrap-describe
      m n

      'interruptible-eval 'wrap-load-file
      'interruptible-eval 'session
      'wrap-describe 'wrap-print
      'interruptible-eval 'wrap-print)))

(deftest append-dependency-free-middleware
  (let [m ^{::middleware/descriptor
            {:expects #{} :requires #{}}} {:dummy :middleware}
        n {:dummy "This not-middleware is supposed to be sans-descriptor, don't panic!"}
        stack (->> (concat default-middleware [m n])
                   shuffle
                   linearize-middleware-stack)]
    (is (= #{n m} (set (take-last 2 stack))))))

(deftest no-descriptor-warning
  (let [^String s (with-out-str
                    (binding [*err* *out*]
                      (indexed-stack (conj default-middleware {:dummy :middleware}))))]
    (is (.contains s "No nREPL middleware descriptor in metadata of {:dummy :middleware}"))))

(deftest NREPL-53-regression
  (is (= [0 1 2]
         (map :id
              (linearize-middleware-stack
               [^{::middleware/descriptor
                  {:expects #{} :requires #{"1"}}}
                {:id 0}

                ^{::middleware/descriptor
                  {:expects #{} :requires #{} :handles {"1" {}}}}
                {:id 1}

                ^{::middleware/descriptor
                  {:expects #{"1"} :requires #{}}}
                {:id 2}])))))