|
2 | 2 | (:require
|
3 | 3 | [cider.nrepl.middleware.complete :as c]
|
4 | 4 | [cider.nrepl.test-session :as session]
|
5 |
| - [clojure.test :refer :all])) |
| 5 | + [cider.test-helpers :refer :all] |
| 6 | + [clojure.test :refer :all] |
| 7 | + [matcher-combinators.matchers :as matchers])) |
6 | 8 |
|
7 | 9 | (use-fixtures :each session/session-fixture)
|
8 | 10 |
|
9 | 11 | (deftest complete
|
10 | 12 | (testing "blank"
|
11 |
| - (let [response (session/message {:op "complete" |
12 |
| - :ns "user" |
13 |
| - :prefix ""})] |
14 |
| - (is (= #{"done"} (:status response))) |
15 |
| - (is (sequential? (:completions response))) |
16 |
| - (is (every? map? (:completions response))))) |
| 13 | + (is+ {:status #{"done"} |
| 14 | + :completions (matchers/seq-of map?)} |
| 15 | + (session/message {:op "complete" |
| 16 | + :ns "user" |
| 17 | + :prefix ""}))) |
17 | 18 |
|
18 | 19 | (testing "basic usage"
|
19 |
| - (let [response (session/message {:op "complete" |
20 |
| - :ns "user" |
21 |
| - :prefix "filt"})] |
22 |
| - (is (= #{"filter" "filterv"} (->> response |
23 |
| - :completions |
24 |
| - (map :candidate) |
25 |
| - set))) |
26 |
| - |
27 |
| - (is (= #{"clojure.core"} (->> response |
28 |
| - :completions |
29 |
| - (map :ns) |
30 |
| - set))) |
31 |
| - |
32 |
| - (is (= #{"done"} (:status response))))) |
| 20 | + (is+ {:status #{"done"} |
| 21 | + :completions [{:candidate "filter" :ns "clojure.core" :priority 31} |
| 22 | + {:candidate "filterv" :ns "clojure.core" :priority 31}]} |
| 23 | + (session/message {:op "complete" |
| 24 | + :ns "user" |
| 25 | + :prefix "filt"}))) |
33 | 26 |
|
34 | 27 | (testing "function arglists"
|
35 |
| - (let [response (session/message {:op "complete" |
36 |
| - :ns "user" |
37 |
| - :prefix "unchecked-a" |
38 |
| - :extra-metadata ["arglists"]})] |
39 |
| - (is (= {:arglists '("[x y]") :ns "clojure.core", :candidate "unchecked-add", :type "function"} |
40 |
| - (first (:completions response)))))) |
| 28 | + (is+ {:arglists '("[x y]") :ns "clojure.core", :candidate "unchecked-add", :type "function"} |
| 29 | + (-> (session/message {:op "complete" |
| 30 | + :ns "user" |
| 31 | + :prefix "unchecked-a" |
| 32 | + :extra-metadata ["arglists"]}) |
| 33 | + :completions first))) |
41 | 34 |
|
42 | 35 | (testing "function metadata"
|
43 |
| - (let [response (session/message {:op "complete" |
44 |
| - :ns "user" |
45 |
| - :prefix "assoc" |
46 |
| - :extra-metadata ["arglists" "doc"]}) |
47 |
| - candidate (first (:completions response))] |
48 |
| - (is (= '("[map key val]" "[map key val & kvs]") (:arglists candidate))) |
49 |
| - (is (string? (:doc candidate))))) |
| 36 | + (is+ {:arglists ["[map key val]" "[map key val & kvs]"] |
| 37 | + :doc string?} |
| 38 | + (first (:completions (session/message {:op "complete" |
| 39 | + :ns "user" |
| 40 | + :prefix "assoc" |
| 41 | + :extra-metadata ["arglists" "doc"]}))))) |
50 | 42 |
|
51 | 43 | (testing "macro metadata"
|
52 |
| - (let [response (session/message {:op "complete" |
53 |
| - :ns "user" |
54 |
| - :prefix "defprot" |
55 |
| - :extra-metadata ["arglists" "doc"]}) |
56 |
| - candidate (first (:completions response))] |
57 |
| - (is (= '("[name & opts+sigs]") (:arglists candidate))) |
58 |
| - (is (string? (:doc candidate))))) |
| 44 | + (is+ {:arglists ["[name & opts+sigs]"] |
| 45 | + :doc string?} |
| 46 | + (first (:completions (session/message {:op "complete" |
| 47 | + :ns "user" |
| 48 | + :prefix "defprot" |
| 49 | + :extra-metadata ["arglists" "doc"]}))))) |
59 | 50 |
|
60 | 51 | (testing "Clojure 1.12 qualified methods"
|
61 | 52 | (when (or (> (:major *clojure-version*) 1)
|
62 | 53 | (>= (:minor *clojure-version*) 12))
|
63 |
| - (let [response (session/message {:op "complete" |
64 |
| - :ns "user" |
65 |
| - :prefix "Thread/.int"})] |
66 |
| - (is (= {:candidate "Thread/.interrupt", :type "method"} |
67 |
| - (first (:completions response)))))))) |
| 54 | + (is+ {:candidate "Thread/.interrupt", :type "method"} |
| 55 | + (first (:completions (session/message {:op "complete" |
| 56 | + :ns "user" |
| 57 | + :prefix "Thread/.int"}))))))) |
68 | 58 |
|
69 | 59 | (deftest complete-doc-test
|
70 | 60 | (testing "blank"
|
71 |
| - (let [response (session/message {:op "complete-doc" :sym ""})] |
72 |
| - (is (= #{"done"} (:status response))) |
73 |
| - (is (empty? (:completion-doc response))))) |
| 61 | + (is+ {:status #{"done"} |
| 62 | + :completion-doc empty?} |
| 63 | + (session/message {:op "complete-doc" :sym ""}))) |
74 | 64 |
|
75 | 65 | (testing "basic usage"
|
76 |
| - (let [response (session/message {:op "complete-doc" :sym "true?"})] |
77 |
| - (is (= (:status response) #{"done"})) |
78 |
| - (is (-> response ^String (:completion-doc) (.startsWith "clojure.core/true?\n([x")))))) |
| 66 | + (is+ {:status #{"done"} |
| 67 | + :completion-doc #"^clojure.core/true\?"} |
| 68 | + (session/message {:op "complete-doc" :sym "true?"})))) |
79 | 69 |
|
80 | 70 | (deftest complete-flush-caches-test
|
81 | 71 | (testing "basic usage"
|
|
85 | 75 | (deftest error-handling-test
|
86 | 76 | (testing "complete op error handling"
|
87 | 77 | (with-redefs [c/complete (fn [& _] (throw (Exception. "complete-exc")))]
|
88 |
| - (let [response (session/message {:op "complete" :ns "doesn't matter" :prefix "fake"})] |
89 |
| - (is (= (:ex response) "class java.lang.Exception")) |
90 |
| - (is (= (:status response) #{"complete-error" "done"})) |
91 |
| - (is (-> response ^String (:err) (.startsWith "java.lang.Exception: complete-exc"))) |
92 |
| - (is (:pp-stacktrace response))))) |
| 78 | + (is+ {:ex "class java.lang.Exception" |
| 79 | + :status #{"complete-error" "done"} |
| 80 | + :err #"^java.lang.Exception: complete-exc" |
| 81 | + :pp-stacktrace some?} |
| 82 | + (session/message {:op "complete" :ns "doesn't matter" :prefix "fake"})))) |
93 | 83 |
|
94 | 84 | (testing "complete-doc op error handling"
|
95 | 85 | (with-redefs [c/completion-doc (fn [& _] (throw (Exception. "complete-doc-exc")))]
|
96 |
| - (let [response (session/message {:op "complete-doc" :sym "doesn't matter"})] |
97 |
| - (is (= (:ex response) "class java.lang.Exception")) |
98 |
| - (is (= (:status response) #{"complete-doc-error" "done"})) |
99 |
| - (is (-> response ^String (:err) (.startsWith "java.lang.Exception: complete-doc-exc"))) |
100 |
| - (is (:pp-stacktrace response)))))) |
| 86 | + (is+ {:ex "class java.lang.Exception" |
| 87 | + :status #{"complete-doc-error" "done"} |
| 88 | + :err #"^java.lang.Exception: complete-doc-exc" |
| 89 | + :pp-stacktrace some?} |
| 90 | + (session/message {:op "complete-doc" :sym "doesn't matter"}))))) |
0 commit comments