Skip to content

Commit

Permalink
Partial fix for #1456 (nREPL issue) (#1460)
Browse files Browse the repository at this point in the history
Co-authored-by: axks <alexander.kaiser@blockinfinity.com>
  • Loading branch information
borkdude and axks committed Jan 4, 2023
1 parent 5965e32 commit 3aca505
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 40 deletions.
3 changes: 2 additions & 1 deletion src/babashka/impl/nrepl_server.clj
Expand Up @@ -13,7 +13,8 @@
(let [dev? (= "true" (System/getenv "BABASHKA_DEV"))
opts (merge {:debug dev?
:describe {"versions" {"babashka" common/version}}
:thread-bind [babashka.impl.clojure.core/warn-on-reflection]}
:thread-bind [babashka.impl.clojure.core/warn-on-reflection
babashka.impl.clojure.core/unchecked-math]}
opts)]
(server/start-server! (common/ctx) opts))))

Expand Down
6 changes: 2 additions & 4 deletions src/babashka/main.clj
Expand Up @@ -357,6 +357,7 @@ Use bb run --help to show this help output.
sci-types/Eval
(eval [_ _ctx _bindings]
(force @input-var)))}
'clojure.core core-extras
'clojure.tools.cli tools-cli-namespace
'clojure.java.shell shell-namespace
'babashka.core bbcore/core-namespace
Expand Down Expand Up @@ -875,10 +876,7 @@ Use bb run --help to show this help output.
main)
;; TODO: pull more of these values to compile time
opts {:aliases aliases
:namespaces (-> namespaces
(assoc 'clojure.core
(assoc core-extras
'load-file (sci-copy-vars/new-var 'load-file load-file*))))
:namespaces (assoc-in namespaces ['clojure.core 'load-file] (sci-copy-vars/new-var 'load-file load-file*))
:env env
:features #{:bb :clj}
:classes @classes/class-map
Expand Down
78 changes: 43 additions & 35 deletions test/babashka/impl/nrepl_server_test.clj
@@ -1,13 +1,16 @@
(ns babashka.impl.nrepl-server-test
(:require
[babashka.impl.nrepl-server :refer [start-server!]]
[babashka.nrepl.server :refer [parse-opt stop-server!]]
[babashka.main :as main]
[babashka.nrepl.server :refer [start-server! stop-server! parse-opt]]
[babashka.test-utils :as tu]
[babashka.wait :as wait]
[bencode.core :as bencode]
[clojure.test :as t :refer [deftest is testing]]
[sci.impl.opts :refer [init]])
(:import [java.lang ProcessBuilder$Redirect]))
[sci.core :as sci]
[sci.ctx-store :as ctx-store])
(:import
[java.lang ProcessBuilder$Redirect]))

(def debug? false)

Expand Down Expand Up @@ -87,13 +90,13 @@
(is (= ":foo0" (:value (read-reply in session @id)))))
;; TODO: I don't remember why we created a new ns
#_(testing "providing an ns value of a non-existing namespace creates the namespace"
(bencode/write-bencode os {"op" "eval"
"code" "(ns-name *ns*)"
"session" session
"id" (new-id!)
"ns" "unicorn"})
(let [reply (read-reply in session @id)]
(is (= "unicorn" (:value reply))))))
(bencode/write-bencode os {"op" "eval"
"code" "(ns-name *ns*)"
"session" session
"id" (new-id!)
"ns" "unicorn"})
(let [reply (read-reply in session @id)]
(is (= "unicorn" (:value reply))))))
(testing "multiple top level expressions results in two value replies"
(bencode/write-bencode os {"op" "eval"
"code" "(+ 1 2 3) (+ 1 2 3)"
Expand Down Expand Up @@ -181,35 +184,40 @@
"session" session "id" (new-id!)})
(dotimes [_ 3]
(let [reply (read-reply in session @id)]
(is (= "Hello\n" (tu/normalize (:out reply))))))))))
(is (= "Hello\n" (tu/normalize (:out reply)))))))
(testing "dynamic var can be set!, test unchecked-math"
(bencode/write-bencode os {"op" "eval" "code" "(set! *unchecked-math* true)"
"session" session "id" (new-id!)})
(let [reply (read-reply in session @id)]
(is (= "true" (:value reply))))))))

(deftest ^:skip-windows nrepl-server-test
(let [proc-state (atom nil)
server-state (atom nil)]
(try
(if tu/jvm?
(let [nrepl-opts (parse-opt "0.0.0.0:1668")
nrepl-opts (assoc nrepl-opts
:describe {"versions" {"babashka" main/version}})
server (start-server!
(init {:namespaces main/namespaces
:features #{:bb}})
nrepl-opts)]
(reset! server-state server))
(let [pb (ProcessBuilder. ["./bb" "nrepl-server" "0.0.0.0:1668"])
_ (.redirectError pb ProcessBuilder$Redirect/INHERIT)
;; _ (.redirectOutput pb ProcessBuilder$Redirect/INHERIT)
;; env (.environment pb)
;; _ (.put env "BABASHKA_DEV" "true")
proc (.start pb)]
(reset! proc-state proc)))
(babashka.wait/wait-for-port "localhost" 1668)
(nrepl-test)
(finally
server-state (atom nil)
ctx (sci/init {:namespaces main/namespaces
:features #{:bb}})]
(sci.ctx-store/with-ctx ctx
(try
(if tu/jvm?
(stop-server! @server-state)
(when-let [proc @proc-state]
(.destroy ^Process proc)))))))
(let [nrepl-opts (parse-opt "0.0.0.0:1668")
nrepl-opts (assoc nrepl-opts
:describe {"versions" {"babashka" main/version}})
server (start-server! nrepl-opts)]
(reset! server-state server))
(let [pb (ProcessBuilder. ["./bb" "nrepl-server" "0.0.0.0:1668"])
_ (.redirectError pb ProcessBuilder$Redirect/INHERIT)
;; _ (.redirectOutput pb ProcessBuilder$Redirect/INHERIT)
;; env (.environment pb)
;; _ (.put env "BABASHKA_DEV" "true")
proc (.start pb)]
(reset! proc-state proc)))
(babashka.wait/wait-for-port "localhost" 1668)
(nrepl-test)
(finally
(if tu/jvm?
(stop-server! @server-state)
(when-let [proc @proc-state]
(.destroy ^Process proc))))))))

;;;; Scratch

Expand Down

0 comments on commit 3aca505

Please sign in to comment.