blob: 119fc819c54260732a623681e55848d227d84bfe [file] [log] [blame]
-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.