Permalink
Browse files

Merge branch 'master' into 0.3-beta

  • Loading branch information...
2 parents 0961cbd + a09f810 commit 8b8f34eaa88e62df1275706e7e55df9d156ba0ec @weavejester weavejester committed Aug 25, 2010
View
6 ring-core/src/ring/middleware/keyword_params.clj
@@ -3,16 +3,16 @@
(defn- keyify-params [target]
(cond
- (string? target)
- target
(map? target)
(reduce
(fn [m [k v]]
(assoc m (keyword k) (keyify-params v)))
{}
target)
(vector? target)
- (vec (map keyify-params target))))
+ (vec (map keyify-params target))
+ :else
+ target))
(defn wrap-keyword-params
"Middleware that converts the string-keyed :params map to one with keyword
View
4 ring-core/test/ring/middleware/keyword_params_test.clj
@@ -9,4 +9,6 @@
{"foo" "bar" "biz" "bat"}
{:foo "bar" :biz "bat"}
{"foo" "bar" "biz" [{"bat" "one"} {"bat" "two"}]}
- {:foo "bar" :biz [{:bat "one"} {:bat "two"}]}))
+ {:foo "bar" :biz [{:bat "one"} {:bat "two"}]}
+ {"foo" 1}
+ {:foo 1}))
View
89 ring-servlet/test/ring/util/servlet_test.clj
@@ -0,0 +1,89 @@
+(ns ring.util.servlet-test
+ (:use clojure.test
+ ring.util.servlet))
+
+(defn- enumeration [coll]
+ (let [e (atom coll)]
+ (proxy [java.util.Enumeration] []
+ (hasMoreElements [] (not (empty? @e)))
+ (nextElement [] (let [f (first @e)] (swap! e rest) f)))))
+
+(defn- servlet-request [request]
+ (proxy [javax.servlet.http.HttpServletRequest] []
+ (getServerPort [] (request :server-port))
+ (getServerName [] (request :server-name))
+ (getRemoteAddr [] (request :remote-addr))
+ (getRequestURI [] (request :uri))
+ (getQueryString [] (request :query-string))
+ (getScheme [] (name (request :scheme)))
+ (getMethod [] (-> request :request-method name .toUpperCase))
+ (getHeaderNames [] (enumeration (keys (request :headers))))
+ (getHeader [name] (get-in request [:headers name]))
+ (getContentType [] (request :content-type))
+ (getContentLength [] (or (request :content-length) -1))
+ (getCharacterEncoding [] (request :character-encoding))
+ (getInputStream [] (request :body))))
+
+(defn- servlet-response [response]
+ (proxy [javax.servlet.http.HttpServletResponse] []
+ (setStatus [status]
+ (swap! response assoc :status status))
+ (setHeader [name value]
+ (swap! response assoc-in [:headers name] value))
+ (setCharacterEncoding [value]
+ (swap! response assoc :character-encoding value))
+ (setContentType [value]
+ (swap! response assoc :content-type value))))
+
+(defn- servlet-config []
+ (proxy [javax.servlet.ServletConfig] []
+ (getServletContext [] nil)))
+
+(defn- run-servlet [handler request response]
+ (doto (servlet handler)
+ (.init (servlet-config))
+ (.service (servlet-request request)
+ (servlet-response response))))
+
+(deftest servlet-test
+ (let [body (proxy [javax.servlet.ServletInputStream] [])
+ request {:server-port 8080
+ :server-name "foobar"
+ :remote-addr "127.0.0.1"
+ :uri "/foo"
+ :query-string "a=b"
+ :scheme :http
+ :request-method :get
+ :headers {"X-Client" "Foo"}
+ :content-type "text/plain"
+ :content-length 10
+ :character-encoding "UTF-8"
+ :body body}
+ response (atom {})]
+ (testing "request"
+ (letfn [(handler [r]
+ (are [k v] (= (r k) v)
+ :server-port 8080
+ :server-name "foobar"
+ :remote-addr "127.0.0.1"
+ :uri "/foo"
+ :query-string "a=b"
+ :scheme :http
+ :request-method :get
+ :headers {"x-client" "Foo"}
+ :content-type "text/plain"
+ :content-length 10
+ :character-encoding "UTF-8"
+ :body body)
+ {:status 200, :headers {}})]
+ (run-servlet handler request response)))
+ (testing "response"
+ (letfn [(handler [r]
+ {:status 200
+ :headers {"Content-Type" "text/plain"
+ "X-Server" "Bar"}
+ :body nil})]
+ (run-servlet handler request response)
+ (is (= (@response :status) 200))
+ (is (= (@response :content-type) "text/plain"))
+ (is (= (get-in @response [:headers "X-Server"]) "Bar"))))))

0 comments on commit 8b8f34e

Please sign in to comment.