@@ -109,9 +109,66 @@ TEST_CASE("http_check_accept_header_parsing", "[http]") {
109
109
CHECK (header.is_acceptable (mime::type::text_plain) == true );
110
110
}
111
111
112
+ SECTION (" test: wildcard header" ) {
113
+ AcceptHeader header{" */*" };
114
+ CHECK (header.is_acceptable (mime::type::any_type) == true );
115
+ CHECK (header.is_acceptable (mime::type::application_json) == true );
116
+ CHECK (header.is_acceptable (mime::type::application_xml) == true );
117
+ CHECK (header.is_acceptable (mime::type::text_plain) == true );
118
+ }
119
+
120
+ SECTION (" test: bug-compatible wildcard header " ) {
121
+ AcceptHeader header{" *" };
122
+ CHECK (header.is_acceptable (mime::type::any_type) == true );
123
+ CHECK (header.is_acceptable (mime::type::application_json) == true );
124
+ CHECK (header.is_acceptable (mime::type::application_xml) == true );
125
+ CHECK (header.is_acceptable (mime::type::text_plain) == true );
126
+ }
127
+
112
128
SECTION (" test: not supported mime types" ) {
113
- REQUIRE_THROWS_AS (AcceptHeader{" audio/*; q=0.2, audio/basic" }, http::bad_request);
114
- REQUIRE_THROWS_AS (AcceptHeader{" text, text/html" }, http::bad_request);
129
+ CHECK_NOTHROW (AcceptHeader{" audio/*; q=0.2, audio/basic" });
130
+ CHECK_NOTHROW (AcceptHeader{" text/html" });
131
+ }
132
+
133
+ SECTION (" test: invalid accept header format" ) {
134
+ CHECK_THROWS_AS (AcceptHeader{" " }, http::bad_request);
135
+ CHECK_THROWS_AS (AcceptHeader{" /" }, http::bad_request);
136
+ CHECK_THROWS_AS (AcceptHeader{" */" }, http::bad_request);
137
+ CHECK_THROWS_AS (AcceptHeader{" foo/" }, http::bad_request);
138
+ CHECK_THROWS_AS (AcceptHeader{" /*" }, http::bad_request);
139
+ CHECK_THROWS_AS (AcceptHeader{" /foo" }, http::bad_request);
140
+ CHECK_THROWS_AS (AcceptHeader{" */foo" }, http::bad_request);
141
+ CHECK_THROWS_AS (AcceptHeader{" text" }, http::bad_request);
142
+ }
143
+
144
+ SECTION (" test: accept header params" ) {
145
+ CHECK_NOTHROW (AcceptHeader{" application/xml;q=0.5" });
146
+ CHECK_NOTHROW (AcceptHeader{" application/xml;baz=abc;bat=123" });
147
+ CHECK_NOTHROW (AcceptHeader{" application/xml;baz=abc;bat=123, application/json; param1=1; param2=2" });
148
+ CHECK_NOTHROW (AcceptHeader{" foo/bar;q=0.5; accept-extension-param1=abcd123; exptaram=%653" });
149
+ CHECK_NOTHROW (AcceptHeader{" text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8" });
150
+ CHECK_NOTHROW (AcceptHeader{" text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" });
151
+ CHECK_NOTHROW (AcceptHeader{" text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8" });
152
+ }
153
+
154
+ SECTION (" test: invalid accept header q value" ) {
155
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=foobar" }, http::bad_request);
156
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=" }, http::bad_request);
157
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=123456" }, http::bad_request);
158
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=-123456" }, http::bad_request);
159
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=1.1" }, http::bad_request);
160
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=-0.1" }, http::bad_request);
161
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=NAN" }, http::bad_request);
162
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=-NAN" }, http::bad_request);
163
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=INF" }, http::bad_request);
164
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=INFINITY" }, http::bad_request);
165
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=-INF" }, http::bad_request);
166
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=-INFINITY" }, http::bad_request);
167
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=0x1" }, http::bad_request);
168
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=0x0" }, http::bad_request);
169
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=0b1" }, http::bad_request);
170
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=0.5abc" }, http::bad_request);
171
+ CHECK_THROWS_AS (AcceptHeader{" application/xml;q=abc0.5" }, http::bad_request);
115
172
}
116
173
117
174
SECTION (" test: application/json" ) {
0 commit comments