1-module(mochiweb_request_tests). 2 3-ifdef(TEST). 4-include_lib("eunit/include/eunit.hrl"). 5 6accepts_content_type_test() -> 7 Req1 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 8 mochiweb_headers:make([{"Accept", "multipart/related"}])), 9 ?assertEqual(true, Req1:accepts_content_type("multipart/related")), 10 ?assertEqual(true, Req1:accepts_content_type(<<"multipart/related">>)), 11 12 Req2 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 13 mochiweb_headers:make([{"Accept", "text/html"}])), 14 ?assertEqual(false, Req2:accepts_content_type("multipart/related")), 15 16 Req3 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 17 mochiweb_headers:make([{"Accept", "text/html, multipart/*"}])), 18 ?assertEqual(true, Req3:accepts_content_type("multipart/related")), 19 20 Req4 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 21 mochiweb_headers:make([{"Accept", "text/html, multipart/*; q=0.0"}])), 22 ?assertEqual(false, Req4:accepts_content_type("multipart/related")), 23 24 Req5 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 25 mochiweb_headers:make([{"Accept", "text/html, multipart/*; q=0"}])), 26 ?assertEqual(false, Req5:accepts_content_type("multipart/related")), 27 28 Req6 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 29 mochiweb_headers:make([{"Accept", "text/html, */*; q=0.0"}])), 30 ?assertEqual(false, Req6:accepts_content_type("multipart/related")), 31 32 Req7 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 33 mochiweb_headers:make([{"Accept", "multipart/*; q=0.0, */*"}])), 34 ?assertEqual(false, Req7:accepts_content_type("multipart/related")), 35 36 Req8 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 37 mochiweb_headers:make([{"Accept", "*/*; q=0.0, multipart/*"}])), 38 ?assertEqual(true, Req8:accepts_content_type("multipart/related")), 39 40 Req9 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 41 mochiweb_headers:make([{"Accept", "*/*; q=0.0, multipart/related"}])), 42 ?assertEqual(true, Req9:accepts_content_type("multipart/related")), 43 44 Req10 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 45 mochiweb_headers:make([{"Accept", "text/html; level=1"}])), 46 ?assertEqual(true, Req10:accepts_content_type("text/html;level=1")), 47 48 Req11 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 49 mochiweb_headers:make([{"Accept", "text/html; level=1, text/html"}])), 50 ?assertEqual(true, Req11:accepts_content_type("text/html")), 51 52 Req12 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 53 mochiweb_headers:make([{"Accept", "text/html; level=1; q=0.0, text/html"}])), 54 ?assertEqual(false, Req12:accepts_content_type("text/html;level=1")), 55 56 Req13 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 57 mochiweb_headers:make([{"Accept", "text/html; level=1; q=0.0, text/html"}])), 58 ?assertEqual(false, Req13:accepts_content_type("text/html; level=1")), 59 60 Req14 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 61 mochiweb_headers:make([{"Accept", "text/html;level=1;q=0.1, text/html"}])), 62 ?assertEqual(true, Req14:accepts_content_type("text/html; level=1")). 63 64accepted_encodings_test() -> 65 Req1 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 66 mochiweb_headers:make([])), 67 ?assertEqual(["identity"], 68 Req1:accepted_encodings(["gzip", "identity"])), 69 70 Req2 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 71 mochiweb_headers:make([{"Accept-Encoding", "gzip, deflate"}])), 72 ?assertEqual(["gzip", "identity"], 73 Req2:accepted_encodings(["gzip", "identity"])), 74 75 Req3 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 76 mochiweb_headers:make([{"Accept-Encoding", "gzip;q=0.5, deflate"}])), 77 ?assertEqual(["deflate", "gzip", "identity"], 78 Req3:accepted_encodings(["gzip", "deflate", "identity"])), 79 80 Req4 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 81 mochiweb_headers:make([{"Accept-Encoding", "identity, *;q=0"}])), 82 ?assertEqual(["identity"], 83 Req4:accepted_encodings(["gzip", "deflate", "identity"])), 84 85 Req5 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 86 mochiweb_headers:make([{"Accept-Encoding", "gzip; q=0.1, *;q=0"}])), 87 ?assertEqual(["gzip"], 88 Req5:accepted_encodings(["gzip", "deflate", "identity"])), 89 90 Req6 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 91 mochiweb_headers:make([{"Accept-Encoding", "gzip; q=, *;q=0"}])), 92 ?assertEqual(bad_accept_encoding_value, 93 Req6:accepted_encodings(["gzip", "deflate", "identity"])), 94 95 Req7 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 96 mochiweb_headers:make([{"Accept-Encoding", "gzip;q=2.0, *;q=0"}])), 97 ?assertEqual(bad_accept_encoding_value, 98 Req7:accepted_encodings(["gzip", "identity"])), 99 100 Req8 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 101 mochiweb_headers:make([{"Accept-Encoding", "deflate, *;q=0.0"}])), 102 ?assertEqual([], 103 Req8:accepted_encodings(["gzip", "identity"])). 104 105accepted_content_types_test() -> 106 Req1 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 107 mochiweb_headers:make([{"Accept", "text/html"}])), 108 ?assertEqual(["text/html"], 109 Req1:accepted_content_types(["text/html", "application/json"])), 110 111 Req2 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 112 mochiweb_headers:make([{"Accept", "text/html, */*;q=0"}])), 113 ?assertEqual(["text/html"], 114 Req2:accepted_content_types(["text/html", "application/json"])), 115 116 Req3 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 117 mochiweb_headers:make([{"Accept", "text/*, */*;q=0"}])), 118 ?assertEqual(["text/html"], 119 Req3:accepted_content_types(["text/html", "application/json"])), 120 121 Req4 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 122 mochiweb_headers:make([{"Accept", "text/*;q=0.8, */*;q=0.5"}])), 123 ?assertEqual(["text/html", "application/json"], 124 Req4:accepted_content_types(["application/json", "text/html"])), 125 126 Req5 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 127 mochiweb_headers:make([{"Accept", "text/*;q=0.8, */*;q=0.5"}])), 128 ?assertEqual(["text/html", "application/json"], 129 Req5:accepted_content_types(["text/html", "application/json"])), 130 131 Req6 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 132 mochiweb_headers:make([{"Accept", "text/*;q=0.5, */*;q=0.5"}])), 133 ?assertEqual(["application/json", "text/html"], 134 Req6:accepted_content_types(["application/json", "text/html"])), 135 136 Req7 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 137 mochiweb_headers:make( 138 [{"Accept", "text/html;q=0.5, application/json;q=0.5"}])), 139 ?assertEqual(["application/json", "text/html"], 140 Req7:accepted_content_types(["application/json", "text/html"])), 141 142 Req8 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 143 mochiweb_headers:make([{"Accept", "text/html"}])), 144 ?assertEqual([], 145 Req8:accepted_content_types(["application/json"])), 146 147 Req9 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1}, 148 mochiweb_headers:make([{"Accept", "text/*;q=0.9, text/html;q=0.5, */*;q=0.7"}])), 149 ?assertEqual(["application/json", "text/html"], 150 Req9:accepted_content_types(["text/html", "application/json"])). 151 152should_close_test() -> 153 F = fun (V, H) -> 154 (mochiweb_request:new( 155 nil, 'GET', "/", V, 156 mochiweb_headers:make(H) 157 )):should_close() 158 end, 159 ?assertEqual( 160 true, 161 F({1, 1}, [{"Connection", "close"}])), 162 ?assertEqual( 163 true, 164 F({1, 0}, [{"Connection", "close"}])), 165 ?assertEqual( 166 true, 167 F({1, 1}, [{"Connection", "ClOSe"}])), 168 ?assertEqual( 169 false, 170 F({1, 1}, [{"Connection", "closer"}])), 171 ?assertEqual( 172 false, 173 F({1, 1}, [])), 174 ?assertEqual( 175 true, 176 F({1, 0}, [])), 177 ?assertEqual( 178 false, 179 F({1, 0}, [{"Connection", "Keep-Alive"}])), 180 ok. 181 182-endif. 183