[#346] nrepl: fix close

This commit is contained in:
Michiel Borkent 2020-04-12 14:25:36 +02:00
parent f1c1a3db8e
commit 4318fc0192
2 changed files with 26 additions and 17 deletions

View file

@ -101,8 +101,9 @@
(send o (response-for msg {"completions" [] (send o (response-for msg {"completions" []
"status" #{"done"}}))))) "status" #{"done"}})))))
(defn close-session [ctx msg _is os id] (defn close-session [ctx msg _is os]
(swap! (:sessions ctx) disj id) (let [session (:session msg)]
(swap! (:sessions ctx) disj session))
(send os (response-for msg {"status" #{"done" "session-closed"}}))) (send os (response-for msg {"status" #{"done" "session-closed"}})))
(defn ls-sessions [ctx msg os] (defn ls-sessions [ctx msg os]
@ -146,7 +147,7 @@
"ops" (zipmap #{"clone" "eval" "load-file" "complete" "describe"} "ops" (zipmap #{"clone" "eval" "load-file" "complete" "describe"}
(repeat {}))})) (repeat {}))}))
(recur ctx is os id)) (recur ctx is os id))
:close (do (close-session ctx msg is os id) :close (do (close-session ctx msg is os)
(recur ctx is os id)) (recur ctx is os id))
:ls-sessions (do (ls-sessions ctx msg os) :ls-sessions (do (ls-sessions ctx msg os)
(recur ctx is os id)) (recur ctx is os id))

View file

@ -137,28 +137,36 @@
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 ["clojure.test" "test/deftest"]))))) (is (contains? completions ["clojure.test" "test/deftest"])))))
(testing "ls-sessions" (testing "close + ls-sessions"
(bencode/write-bencode os {"op" "ls-sessions" "session" session "id" (new-id!)}) (bencode/write-bencode os {"op" "ls-sessions" "session" session "id" (new-id!)})
(let [reply (read-reply in session @id) (let [reply (read-reply in session @id)
sessions (set (:sessions reply))] sessions (set (:sessions reply))]
(is (contains? sessions session)) (is (contains? sessions session))
(bencode/write-bencode os {"op" "clone" "session" session "id" (new-id!)}) (let [new-sessions (loop [i 0
(let [new-session (:new-session (read-reply in session @id))] sessions #{}]
(bencode/write-bencode os {"op" "clone" "session" session "id" (new-id!)})
(let [new-session (:new-session (read-reply in session @id))
sessions (conj sessions new-session)]
(if (= i 4)
sessions
(recur (inc i) sessions))))]
(bencode/write-bencode os {"op" "ls-sessions" "session" session "id" (new-id!)}) (bencode/write-bencode os {"op" "ls-sessions" "session" session "id" (new-id!)})
(let [reply (read-reply in session @id) (let [reply (read-reply in session @id)
sessions (set (:sessions reply))] sessions (set (:sessions reply))]
(is (= 6 (count sessions)))
(is (contains? sessions session)) (is (contains? sessions session))
(is (contains? sessions new-session))) (is (= new-sessions (disj sessions session)))
(testing "close" (testing "close"
(bencode/write-bencode os {"op" "close" "session" new-session "id" (new-id!)}) (doseq [close-session (disj sessions session)]
(let [reply (read-reply in new-session @id)] (bencode/write-bencode os {"op" "close" "session" close-session "id" (new-id!)})
(is (contains? (set (:status reply)) "session-closed")))) (let [reply (read-reply in close-session @id)]
(testing "session not listen in ls-sessions after close" (is (contains? (set (:status reply)) "session-closed")))))
(bencode/write-bencode os {"op" "ls-sessions" "session" session "id" (new-id!)}) (testing "session not listen in ls-sessions after close"
(let [reply (read-reply in session @id) (bencode/write-bencode os {"op" "ls-sessions" "session" session "id" (new-id!)})
sessions (set (:sessions reply))] (let [reply (read-reply in session @id)
(is (contains? sessions session)) sessions (set (:sessions reply))]
(is (not (contains? sessions new-session)))))))) (is (contains? sessions session))
(is (not (some #(contains? sessions %) new-sessions)))))))))
(testing "output" (testing "output"
(bencode/write-bencode os {"op" "eval" "code" "(dotimes [i 3] (println \"Hello\"))" (bencode/write-bencode os {"op" "eval" "code" "(dotimes [i 3] (println \"Hello\"))"
"session" session "id" (new-id!)}) "session" session "id" (new-id!)})