|
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