Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
            }))
Exemple #5
0
    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())
Exemple #6
0
 def test_character(self):
     self.buffer.write("\\newline")
     self.buffer.flush()
     self.assertEqual("\n", edn.read(self.buffer.read(8)))