fennel-ls/test/json-rpc-test.fnl

39 lines
1.3 KiB
Fennel

(import-macros {: is-matching : describe : it} :test)
(local is (require :test.is))
(local stringio (require :test.pl.stringio))
(local json-rpc (require :fennel-ls.json-rpc))
(describe "json-rpc"
(describe "read"
(it "parses incoming messages"
(let [out (stringio.open
"Content-Length: 29\r\n\r\n{\"my json content\":\"is cool\"}")]
(is.same
{"my json content" "is cool"}
(json-rpc.read out))))
(it "can read multiple incoming messages"
(let [out (stringio.open
"Content-Length: 29\r\n\r\n{\"my json content\":\"is cool\"}Content-Length: 29\r\n\r\n{\"my json content\":\"is neat\"}")]
(is.same
{"my json content" "is cool"}
(json-rpc.read out))
(is.same
{"my json content" "is neat"}
(json-rpc.read out))
(is.same
nil
(json-rpc.read out))))
(it "can report compiler errors"
(let [out (stringio.open "Content-Length: 9\r\n\r\n{{{{{}}}}")]
(is (= (type (json-rpc.read out)) :string)))))
(describe "write"
(it "serializes outgoing messages"
(let [in (stringio.create)]
(json-rpc.write in {"my json content" "is cool"})
(is.same "Content-Length: 29\r\n\r\n{\"my json content\":\"is cool\"}"
(in:value))))))