[#328] completions for clojure.test do not work
This commit is contained in:
parent
62014c0e74
commit
3bf27445f3
2 changed files with 33 additions and 21 deletions
|
|
@ -88,10 +88,10 @@
|
||||||
(or (when (and (identical? :unqualified qualifier) (re-find pat sym-name))
|
(or (when (and (identical? :unqualified qualifier) (re-find pat sym-name))
|
||||||
[sym-ns sym-name])
|
[sym-ns sym-name])
|
||||||
(when sym-ns
|
(when sym-ns
|
||||||
(or (when (re-find pat (str sym-ns "/" sym-name))
|
(or (when (re-find pat (str (get ns->alias (symbol sym-ns)) "/" sym-name))
|
||||||
[sym-ns (str sym-ns "/" sym-name)])
|
[sym-ns (str (get ns->alias (symbol sym-ns)) "/" sym-name)])
|
||||||
(when (re-find pat (str (get ns->alias (symbol sym-ns)) "/" sym-name))
|
(when (re-find pat (str sym-ns "/" sym-name))
|
||||||
[sym-ns (str (get ns->alias (symbol sym-ns)) "/" sym-name)]))))))
|
[sym-ns (str sym-ns "/" sym-name)]))))))
|
||||||
|
|
||||||
(defn complete [ctx o msg]
|
(defn complete [ctx o msg]
|
||||||
(try
|
(try
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@
|
||||||
(:require
|
(:require
|
||||||
[babashka.impl.bencode.core :as bencode]
|
[babashka.impl.bencode.core :as bencode]
|
||||||
[babashka.impl.nrepl-server :refer [start-server! stop-server!]]
|
[babashka.impl.nrepl-server :refer [start-server! stop-server!]]
|
||||||
|
[babashka.main :as main]
|
||||||
[babashka.test-utils :as tu]
|
[babashka.test-utils :as tu]
|
||||||
[babashka.wait :as wait]
|
[babashka.wait :as wait]
|
||||||
[cheshire.core :as cheshire]
|
[cheshire.core :as cheshire]
|
||||||
[clojure.java.shell :refer [sh]]
|
|
||||||
[clojure.test :as t :refer [deftest is testing]]
|
[clojure.test :as t :refer [deftest is testing]]
|
||||||
[sci.impl.opts :refer [init]])
|
[sci.impl.opts :refer [init]])
|
||||||
(:import [java.lang ProcessBuilder$Redirect]))
|
(:import [java.lang ProcessBuilder$Redirect]))
|
||||||
|
|
@ -41,29 +41,31 @@
|
||||||
in (java.io.PushbackInputStream. in)
|
in (java.io.PushbackInputStream. in)
|
||||||
os (.getOutputStream socket)]
|
os (.getOutputStream socket)]
|
||||||
(bencode/write-bencode os {"op" "clone"})
|
(bencode/write-bencode os {"op" "clone"})
|
||||||
(let [session (:new-session (read-msg (bencode/read-bencode in)))]
|
(let [session (:new-session (read-msg (bencode/read-bencode in)))
|
||||||
|
id (atom 0)
|
||||||
|
new-id! #(swap! id inc)]
|
||||||
(testing "session"
|
(testing "session"
|
||||||
(is session))
|
(is session))
|
||||||
(testing "eval"
|
(testing "eval"
|
||||||
(bencode/write-bencode os {"op" "eval" "code" "(+ 1 2 3)" "session" session "id" 1})
|
(bencode/write-bencode os {"op" "eval" "code" "(+ 1 2 3)" "session" session "id" (new-id!)})
|
||||||
(let [msg (read-reply in session 1)
|
(let [msg (read-reply in session @id)
|
||||||
id (:id msg)
|
id (:id msg)
|
||||||
value (:value msg)]
|
value (:value msg)]
|
||||||
(is (= 1 id))
|
(is (= 1 id))
|
||||||
(is (= value "6"))))
|
(is (= value "6"))))
|
||||||
(testing "load-file"
|
(testing "load-file"
|
||||||
(bencode/write-bencode os {"op" "load-file" "file" "(ns foo) (defn foo [] :foo)" "session" session "id" 2})
|
(bencode/write-bencode os {"op" "load-file" "file" "(ns foo) (defn foo [] :foo)" "session" session "id" (new-id!)})
|
||||||
(read-reply in session 2)
|
(read-reply in session @id)
|
||||||
(bencode/write-bencode os {"op" "eval" "code" "(foo)" "ns" "foo" "session" session "id" 3})
|
(bencode/write-bencode os {"op" "eval" "code" "(foo)" "ns" "foo" "session" session "id" (new-id!)})
|
||||||
(is (= ":foo" (:value (read-reply in session 3)))))
|
(is (= ":foo" (:value (read-reply in session @id)))))
|
||||||
(testing "complete"
|
(testing "complete"
|
||||||
(testing "completions for fo"
|
(testing "completions for fo"
|
||||||
(bencode/write-bencode os {"op" "complete"
|
(bencode/write-bencode os {"op" "complete"
|
||||||
"symbol" "fo"
|
"symbol" "fo"
|
||||||
"session" session
|
"session" session
|
||||||
"id" 4
|
"id" (new-id!)
|
||||||
"ns" "foo"})
|
"ns" "foo"})
|
||||||
(let [reply (read-reply in session 4)
|
(let [reply (read-reply in session @id)
|
||||||
completions (:completions reply)
|
completions (:completions reply)
|
||||||
completions (mapv read-msg completions)
|
completions (mapv read-msg completions)
|
||||||
completions (into #{} (map (juxt :ns :candidate)) completions)]
|
completions (into #{} (map (juxt :ns :candidate)) completions)]
|
||||||
|
|
@ -72,19 +74,29 @@
|
||||||
(testing "completions for quux should be empty"
|
(testing "completions for quux should be empty"
|
||||||
(bencode/write-bencode os {"op" "complete"
|
(bencode/write-bencode os {"op" "complete"
|
||||||
"symbol" "quux"
|
"symbol" "quux"
|
||||||
"session" session "id" 6
|
"session" session "id" (new-id!)
|
||||||
"ns" "foo"})
|
"ns" "foo"})
|
||||||
(let [reply (read-reply in session 6)
|
(let [reply (read-reply in session @id)
|
||||||
completions (:completions reply)]
|
completions (:completions reply)]
|
||||||
(is (empty? completions)))
|
(is (empty? completions)))
|
||||||
(testing "unless quux is an alias"
|
(testing "unless quux is an alias"
|
||||||
(bencode/write-bencode os {"op" "eval" "code" "(require '[cheshire.core :as quux])" "session" session "id" 7})
|
(bencode/write-bencode os {"op" "eval" "code" "(require '[cheshire.core :as quux])" "session" session "id" (new-id!)})
|
||||||
(bencode/write-bencode os {"op" "complete" "symbol" "quux" "session" session "id" 8})
|
(read-reply in session @id)
|
||||||
(let [reply (read-reply in session 8)
|
(bencode/write-bencode os {"op" "complete" "symbol" "quux" "session" session "id" (new-id!)})
|
||||||
|
(let [reply (read-reply in session @id)
|
||||||
completions (:completions reply)
|
completions (:completions reply)
|
||||||
completions (mapv read-msg completions)
|
completions (mapv read-msg completions)
|
||||||
completions (into #{} (map (juxt :ns :candidate)) completions)]
|
completions (into #{} (map (juxt :ns :candidate)) completions)]
|
||||||
(is (contains? completions ["cheshire.core" "quux/generate-string"]))))))
|
(is (contains? completions ["cheshire.core" "quux/generate-string"])))))
|
||||||
|
(testing "completions for clojure.test"
|
||||||
|
(bencode/write-bencode os {"op" "eval" "code" "(require '[clojure.test :as test])" "session" session "id" (new-id!)})
|
||||||
|
(read-reply in session @id)
|
||||||
|
(bencode/write-bencode os {"op" "complete" "symbol" "test" "session" session "id" (new-id!)})
|
||||||
|
(let [reply (read-reply in session @id)
|
||||||
|
completions (:completions reply)
|
||||||
|
completions (mapv read-msg completions)
|
||||||
|
completions (into #{} (map (juxt :ns :candidate)) completions)]
|
||||||
|
(is (contains? completions ["clojure.test" "test/deftest"])))))
|
||||||
#_(testing "interrupt" ;; .stop doesn't work on Thread in GraalVM, this is why we can't have this yet
|
#_(testing "interrupt" ;; .stop doesn't work on Thread in GraalVM, this is why we can't have this yet
|
||||||
(bencode/write-bencode os {"op" "eval" "code" "(range)" "session" session "id" 9})
|
(bencode/write-bencode os {"op" "eval" "code" "(range)" "session" session "id" 9})
|
||||||
(Thread/sleep 1000)
|
(Thread/sleep 1000)
|
||||||
|
|
@ -97,7 +109,7 @@
|
||||||
(if tu/jvm?
|
(if tu/jvm?
|
||||||
(future
|
(future
|
||||||
(start-server!
|
(start-server!
|
||||||
(init {:namespaces {'cheshire.core {'generate-string cheshire/generate-string}}
|
(init {:namespaces main/namespaces
|
||||||
:features #{:bb}}) "0.0.0.0:1667"))
|
:features #{:bb}}) "0.0.0.0:1667"))
|
||||||
(let [pb (ProcessBuilder. ["./bb" "--nrepl-server" "0.0.0.0:1667"])
|
(let [pb (ProcessBuilder. ["./bb" "--nrepl-server" "0.0.0.0:1667"])
|
||||||
_ (.redirectError pb ProcessBuilder$Redirect/INHERIT)
|
_ (.redirectError pb ProcessBuilder$Redirect/INHERIT)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue