Skip to content

Commit 72c43d3

Browse files
committed
add tests for adapter
1 parent 8565a5a commit 72c43d3

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

src/mobdap/adapter.clj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
Reader
1111
Writer]))
1212

13-
(defn- parse-content-length! [^Reader reader]
14-
(assert (some? reader))
13+
(defn- parse-content-length! [^BufferedReader reader]
14+
(assert (and (some? reader) (instance? BufferedReader reader)))
1515
(let [length (loop [line (.readLine reader)]
1616
(if line
1717
(let [values (re-find #"content-length\s*:\s*([0-9]+)" (string/trim (string/lower-case line)))
@@ -27,7 +27,7 @@
2727
(defn read-message! [adapter]
2828
(let [reader (:reader adapter)
2929
length (parse-content-length! reader)]
30-
(assert (some? reader))
30+
(assert (and (some? reader) (instance? BufferedReader reader)))
3131
(when length
3232
(let [buffer (char-array length)]
3333
(.read reader buffer 0 length)
@@ -39,7 +39,7 @@
3939
(let [writer (:writer adapter)
4040
json-str (json/generate-string message)
4141
length (count json-str)]
42-
(assert (some? writer))
42+
(assert (and (some? writer) (instance? BufferedWriter writer)))
4343
(log/info "Send Message:" message)
4444
(doto writer
4545
(.write (str "Content-Length: " length "\r\n\r\n" json-str))

test/mobdap/adapter_test.clj

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
(ns mobdap.adapter-test
2+
(:require
3+
[clojure.test :refer [deftest is testing]]
4+
[matcher-combinators.test :refer [match?]]
5+
[mobdap.adapter :as adapter])
6+
(:import
7+
[java.io BufferedReader StringReader StringWriter]))
8+
9+
(deftest test-parse-content-length!
10+
(let [parse-content-length! #'adapter/parse-content-length!]
11+
(testing "parses content length from valid input"
12+
(let [input "Content-Length: 17\r\n\r\n{\"hello\":\"World\"}"
13+
reader (BufferedReader/new (StringReader/new input))]
14+
(is (= 17 (parse-content-length! reader)))))
15+
(testing "parses content length case insensitively"
16+
(let [input "content-length: 1337\r\n\r\n"
17+
reader (BufferedReader/new (StringReader/new input))]
18+
(is (= 1337 (parse-content-length! reader)))))
19+
(testing "handles multiple lines before content length"
20+
(let [input "some-key: some-value\r\nsome-other-key: some-other-value\r\ncontent-length: 1234\r\n\r\n"
21+
reader (BufferedReader/new (StringReader/new input))]
22+
(is (= 1234 (parse-content-length! reader)))))
23+
(testing "skips empty line"
24+
(let [input "Content-Length: 21\r\n\r\n{\"hello\":\"World\"}"
25+
reader (BufferedReader/new (StringReader/new input))]
26+
(parse-content-length! reader)
27+
(is (= (.readLine reader) "{\"hello\":\"World\"}"))))))
28+
29+
(deftest test-read-message!
30+
(testing "reads valid json data"
31+
(let [input "Content-Length: 17\r\n\r\n{\"hello\":\"World\"}"
32+
r (StringReader/new input)
33+
adapter (adapter/create-adapter r (StringWriter/new))]
34+
(is (match? {:hello "World"} (adapter/read-message! adapter))))))
35+
36+
(deftest test-send-message!
37+
(testing "sends valid json"
38+
(let [message {:hello "World"}
39+
w (StringWriter/new)
40+
adapter (adapter/create-adapter (StringReader/new "") w)]
41+
(adapter/send-message! adapter message)
42+
(let [output (str w)]
43+
(is (= "Content-Length: 17\r\n\r\n{\"hello\":\"World\"}" output))))))
44+

0 commit comments

Comments
 (0)