Вот пример кода для того, что я в итоге сделал. Идея заключается в простой серверной функции чтения / печати, которая принимает входной и выходной поток. Моя проблема заключалась в том, как генерировать потоки тестирования для такой функции, и я думал, что подойдет строковая функция. Вместо этого это то, что мне было нужно:
(ns test
(:use [clojure.java.io :only [reader writer]]))
(def prompt ">")
(defn test-client [in out]
(binding [*in* (reader in)
*out* (writer out)]
(print prompt) (flush)
(loop [input (read-line)]
(when input
(println (str "OUT:" input))
(print prompt) (flush)
(if (not= input "exit\n") (recur (read-line)) )
))))
(def client-stream (java.io.PipedWriter.))
(def r (java.io.BufferedReader. (java.io.PipedReader. client-stream)))
(doto (Thread. #(do (test-client r *out*))) .start)
(.write client-stream "test\n")