def test_view(self): self.set_view_content("(ns foo.bar) (defn x [y] y)") self.set_selections((0, 0)) self.view.run_command("tutkain_evaluate", {"scope": "view"}) response = edn.read(self.backchannel.recv()) self.assertEquals( { edn.Keyword("op"): edn.Keyword("load"), edn.Keyword("code"): "(ns foo.bar) (defn x [y] y)", edn.Keyword("file"): None, edn.Keyword("id"): response.get(edn.Keyword("id")) }, response)
def test_lookup_head(self): self.set_view_content("(map inc )") self.set_selections((9, 9)) self.view.run_command("tutkain_show_information", { "selector": "variable.function", "seek_backward": True }) response = edn.read(self.backchannel.recv()) self.assertEquals( { edn.Keyword("op"): edn.Keyword("lookup"), edn.Keyword("named"): "map", edn.Keyword("ns"): None, edn.Keyword("id"): response.get(edn.Keyword("id")) }, response)
def test_lookup(self): self.set_view_content("(rand)") for n in range(1, 5): self.set_selections((n, n)) self.view.run_command("tutkain_show_information", {"selector": "variable.function"}) response = edn.read(self.backchannel.recv()) self.assertEquals( { edn.Keyword("op"): edn.Keyword("lookup"), edn.Keyword("named"): "rand", edn.Keyword("ns"): None, edn.Keyword("id"): response.get(edn.Keyword("id")) }, response)
def eval_context(self, ns="user", file="NO_SOURCE_FILE", line=1, column=1): actual = edn.read(self.backchannel.recv()) id = actual.get(edn.Keyword("id")) response = edn.kwmap({ "id": id, "op": edn.Keyword("set-eval-context"), "file": file, "line": line, "column": column, }) self.assertEquals(response, actual) self.backchannel.send( edn.kwmap({ "id": id, "file": file, "ns": edn.Symbol(ns) }))
def test_smoke(self): def write_greeting(buf): buf.write("user=> ") buf.flush() with Server(greeting=write_greeting) as server: client = JVMClient(source_root(), server.host, server.port) server.executor.submit(client.connect) # Client starts clojure.main/repl server.recv() # Client switches into the bootstrap namespace server.recv() server.send("nil\n") # Client defines load-base64 function server.recv() server.send("#'tutkain.bootstrap/load-base64\n") # Client loads modules server.recv() server.send("#'tutkain.format/pp-str") server.recv() server.send("#'tutkain.backchannel/open") server.recv() server.send("#'tutkain.repl/repl") server.recv() with Server() as backchannel: server.send( edn.kwmap({ "tag": edn.Keyword("ret"), "val": f"""{{:host "localhost", :port {backchannel.port}}}""", })) for filename in [ "lookup.clj", "completions.clj", "load_blob.clj", "test.clj" ]: response = edn.read(backchannel.recv()) self.assertEquals(edn.Keyword("load-base64"), response.get(edn.Keyword("op"))) self.assertEquals(filename, response.get(edn.Keyword("filename"))) self.assertEquals("""(println "Clojure" (clojure-version))""", server.recv().rstrip()) server.send({ edn.Keyword("tag"): edn.Keyword("out"), edn.Keyword("val"): "Clojure 1.11.0-alpha1" }) server.send({ edn.Keyword("tag"): edn.Keyword("ret"), edn.Keyword("val"): "nil", edn.Keyword("ns"): "user", edn.Keyword("ms"): 0, edn.Keyword("form"): """(println "Clojure" (clojure-version))""" }) self.assertEquals( { "printable": "Clojure 1.11.0-alpha1", "response": { edn.Keyword("tag"): edn.Keyword("out"), edn.Keyword("val"): "Clojure 1.11.0-alpha1" } }, client.printq.get(timeout=1)) client.eval("(inc 1)") response = edn.read(backchannel.recv()) id = response.get(edn.Keyword("id")) self.assertEquals( edn.kwmap({ "op": edn.Keyword("set-eval-context"), "id": id, "file": "NO_SOURCE_FILE", "line": 1, "column": 1 }), response) backchannel.send( edn.kwmap({ "id": id, "file": None, "ns": edn.Symbol("user"), "dialect": edn.Keyword("clj") })) self.assertEquals("(inc 1)\n", server.recv()) response = edn.kwmap({ "tag": edn.Keyword("ret"), "val": "2", "ns": "user", "ms": 1, "form": "(inc 1)" }) server.send(response) self.assertEquals({ "printable": "2", "response": response }, client.printq.get(timeout=1)) client.halt() self.assertEquals(":repl/quit\n", server.recv())
def test_character(self): self.buffer.write("\\newline") self.buffer.flush() self.assertEqual("\n", edn.read(self.buffer.read(8)))