| -module(mochiweb_request_tests). |
| |
| -ifdef(TEST). |
| |
| -include_lib("eunit/include/eunit.hrl"). |
| |
| accepts_content_type_test() -> |
| Req1 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "multipart/related"}])), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req1))), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type(<<"multipart/related">>, |
| Req1))), |
| Req2 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html"}])), |
| ?assertEqual(false, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req2))), |
| Req3 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html, multipart/*"}])), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req3))), |
| Req4 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html, multipart/*; q=0.0"}])), |
| ?assertEqual(false, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req4))), |
| Req5 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html, multipart/*; q=0"}])), |
| ?assertEqual(false, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req5))), |
| Req6 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html, */*; q=0.0"}])), |
| ?assertEqual(false, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req6))), |
| Req7 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "multipart/*; q=0.0, */*"}])), |
| ?assertEqual(false, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req7))), |
| Req8 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "*/*; q=0.0, multipart/*"}])), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req8))), |
| Req9 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "*/*; q=0.0, multipart/related"}])), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type("multipart/related", |
| Req9))), |
| Req10 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html; level=1"}])), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type("text/html;level=1", |
| Req10))), |
| Req11 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html; level=1, text/html"}])), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type("text/html", |
| Req11))), |
| Req12 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html; level=1; q=0.0, text/html"}])), |
| ?assertEqual(false, |
| (mochiweb_request:accepts_content_type("text/html;level=1", |
| Req12))), |
| Req13 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html; level=1; q=0.0, text/html"}])), |
| ?assertEqual(false, |
| (mochiweb_request:accepts_content_type("text/html; level=1", |
| Req13))), |
| Req14 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html;level=1;q=0.1, text/html"}])), |
| ?assertEqual(true, |
| (mochiweb_request:accepts_content_type("text/html; level=1", |
| Req14))). |
| |
| accepted_encodings_test() -> |
| Req1 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([])), |
| ?assertEqual(["identity"], |
| (mochiweb_request:accepted_encodings(["gzip", |
| "identity"], |
| Req1))), |
| Req2 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept-Encoding", |
| "gzip, deflate"}])), |
| ?assertEqual(["gzip", "identity"], |
| (mochiweb_request:accepted_encodings(["gzip", |
| "identity"], |
| Req2))), |
| Req3 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept-Encoding", |
| "gzip;q=0.5, deflate"}])), |
| ?assertEqual(["deflate", "gzip", "identity"], |
| (mochiweb_request:accepted_encodings(["gzip", "deflate", |
| "identity"], |
| Req3))), |
| Req4 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept-Encoding", |
| "identity, *;q=0"}])), |
| ?assertEqual(["identity"], |
| (mochiweb_request:accepted_encodings(["gzip", "deflate", |
| "identity"], |
| Req4))), |
| Req5 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept-Encoding", |
| "gzip; q=0.1, *;q=0"}])), |
| ?assertEqual(["gzip"], |
| (mochiweb_request:accepted_encodings(["gzip", "deflate", |
| "identity"], |
| Req5))), |
| Req6 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept-Encoding", |
| "gzip; q=, *;q=0"}])), |
| ?assertEqual(bad_accept_encoding_value, |
| (mochiweb_request:accepted_encodings(["gzip", "deflate", |
| "identity"], |
| Req6))), |
| Req7 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept-Encoding", |
| "gzip;q=2.0, *;q=0"}])), |
| ?assertEqual(bad_accept_encoding_value, |
| (mochiweb_request:accepted_encodings(["gzip", |
| "identity"], |
| Req7))), |
| Req8 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept-Encoding", |
| "deflate, *;q=0.0"}])), |
| ?assertEqual([], |
| (mochiweb_request:accepted_encodings(["gzip", |
| "identity"], |
| Req8))). |
| |
| accepted_content_types_test() -> |
| Req1 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html"}])), |
| ?assertEqual(["text/html"], |
| (mochiweb_request:accepted_content_types(["text/html", |
| "application/json"], |
| Req1))), |
| Req2 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html, */*;q=0"}])), |
| ?assertEqual(["text/html"], |
| (mochiweb_request:accepted_content_types(["text/html", |
| "application/json"], |
| Req2))), |
| Req3 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/*, */*;q=0"}])), |
| ?assertEqual(["text/html"], |
| (mochiweb_request:accepted_content_types(["text/html", |
| "application/json"], |
| Req3))), |
| Req4 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/*;q=0.8, */*;q=0.5"}])), |
| ?assertEqual(["text/html", "application/json"], |
| (mochiweb_request:accepted_content_types(["application/json", |
| "text/html"], |
| Req4))), |
| Req5 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/*;q=0.8, */*;q=0.5"}])), |
| ?assertEqual(["text/html", "application/json"], |
| (mochiweb_request:accepted_content_types(["text/html", |
| "application/json"], |
| Req5))), |
| Req6 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/*;q=0.5, */*;q=0.5"}])), |
| ?assertEqual(["application/json", "text/html"], |
| (mochiweb_request:accepted_content_types(["application/json", |
| "text/html"], |
| Req6))), |
| Req7 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html;q=0.5, application/json;q=0.5"}])), |
| ?assertEqual(["application/json", "text/html"], |
| (mochiweb_request:accepted_content_types(["application/json", |
| "text/html"], |
| Req7))), |
| Req8 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/html"}])), |
| ?assertEqual([], |
| (mochiweb_request:accepted_content_types(["application/json"], |
| Req8))), |
| Req9 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, |
| mochiweb_headers:make([{"Accept", |
| "text/*;q=0.9, text/html;q=0.5, */*;q=0.7"}])), |
| ?assertEqual(["application/json", "text/html"], |
| (mochiweb_request:accepted_content_types(["text/html", |
| "application/json"], |
| Req9))). |
| |
| should_close_test() -> |
| F = fun (V, H) -> |
| mochiweb_request:should_close(mochiweb_request:new(nil, |
| 'GET', "/", |
| V, |
| mochiweb_headers:make(H))) |
| end, |
| ?assertEqual(true, |
| (F({1, 1}, [{"Connection", "close"}]))), |
| ?assertEqual(true, |
| (F({1, 0}, [{"Connection", "close"}]))), |
| ?assertEqual(true, |
| (F({1, 1}, [{"Connection", "ClOSe"}]))), |
| ?assertEqual(false, |
| (F({1, 1}, [{"Connection", "closer"}]))), |
| ?assertEqual(false, (F({1, 1}, []))), |
| ?assertEqual(true, (F({1, 0}, []))), |
| ?assertEqual(false, |
| (F({1, 0}, [{"Connection", "Keep-Alive"}]))), |
| ok. |
| |
| -endif. |