OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
8 #include "net/http/http_util.h" | 8 #include "net/http/http_util.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 | 242 |
243 // Act as identity function on unquoted inputs. | 243 // Act as identity function on unquoted inputs. |
244 EXPECT_STREQ("X", HttpUtil::Unquote("X").c_str()); | 244 EXPECT_STREQ("X", HttpUtil::Unquote("X").c_str()); |
245 EXPECT_STREQ("\"", HttpUtil::Unquote("\"").c_str()); | 245 EXPECT_STREQ("\"", HttpUtil::Unquote("\"").c_str()); |
246 | 246 |
247 // Allow single quotes to act as quote marks. | 247 // Allow single quotes to act as quote marks. |
248 // Not part of RFC 2616. | 248 // Not part of RFC 2616. |
249 EXPECT_STREQ("x\"", HttpUtil::Unquote("'x\"'").c_str()); | 249 EXPECT_STREQ("x\"", HttpUtil::Unquote("'x\"'").c_str()); |
250 } | 250 } |
251 | 251 |
| 252 TEST(HttpUtilTest, StrictUnquote) { |
| 253 std::string out; |
| 254 |
| 255 // Replace <backslash> " with ". |
| 256 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\"abc\"", &out)); |
| 257 EXPECT_STREQ("xyz\"abc", out.c_str()); |
| 258 |
| 259 // Replace <backslash> <backslash> with <backslash> |
| 260 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\\abc\"", &out)); |
| 261 EXPECT_STREQ("xyz\\abc", out.c_str()); |
| 262 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\\\\\\\\\\abc\"", &out)); |
| 263 EXPECT_STREQ("xyz\\\\\\abc", out.c_str()); |
| 264 |
| 265 // Replace <backslash> X with X |
| 266 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\Xabc\"", &out)); |
| 267 EXPECT_STREQ("xyzXabc", out.c_str()); |
| 268 |
| 269 // Return false on unquoted inputs. |
| 270 EXPECT_FALSE(HttpUtil::StrictUnquote("X", &out)); |
| 271 |
| 272 // Return false on mismatched quotes. |
| 273 EXPECT_FALSE(HttpUtil::StrictUnquote("\"", &out)); |
| 274 EXPECT_FALSE(HttpUtil::StrictUnquote("\"xyz", &out)); |
| 275 EXPECT_FALSE(HttpUtil::StrictUnquote("\"abc'", &out)); |
| 276 |
| 277 // Return false on escaped terminal quote. |
| 278 EXPECT_FALSE(HttpUtil::StrictUnquote("\"abc\\\"", &out)); |
| 279 |
| 280 // Allow single quotes to act as quote marks. |
| 281 // Not part of RFC 2616. |
| 282 EXPECT_TRUE(HttpUtil::StrictUnquote("'x\"'", &out)); |
| 283 EXPECT_STREQ("x\"", out.c_str()); |
| 284 } |
| 285 |
252 TEST(HttpUtilTest, Quote) { | 286 TEST(HttpUtilTest, Quote) { |
253 EXPECT_STREQ("\"xyz\\\"abc\"", HttpUtil::Quote("xyz\"abc").c_str()); | 287 EXPECT_STREQ("\"xyz\\\"abc\"", HttpUtil::Quote("xyz\"abc").c_str()); |
254 | 288 |
255 // Replace <backslash> <backslash> with <backslash> | 289 // Replace <backslash> <backslash> with <backslash> |
256 EXPECT_STREQ("\"xyz\\\\abc\"", HttpUtil::Quote("xyz\\abc").c_str()); | 290 EXPECT_STREQ("\"xyz\\\\abc\"", HttpUtil::Quote("xyz\\abc").c_str()); |
257 | 291 |
258 // Replace <backslash> X with X | 292 // Replace <backslash> X with X |
259 EXPECT_STREQ("\"xyzXabc\"", HttpUtil::Quote("xyzXabc").c_str()); | 293 EXPECT_STREQ("\"xyzXabc\"", HttpUtil::Quote("xyzXabc").c_str()); |
260 } | 294 } |
261 | 295 |
(...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 std::string data = "name='value"; | 1204 std::string data = "name='value"; |
1171 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); | 1205 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); |
1172 EXPECT_TRUE(parser.valid()); | 1206 EXPECT_TRUE(parser.valid()); |
1173 | 1207 |
1174 ASSERT_NO_FATAL_FAILURE( | 1208 ASSERT_NO_FATAL_FAILURE( |
1175 CheckNextNameValuePair(&parser, true, true, "name", "value")); | 1209 CheckNextNameValuePair(&parser, true, true, "name", "value")); |
1176 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( | 1210 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( |
1177 &parser, false, true, std::string(), std::string())); | 1211 &parser, false, true, std::string(), std::string())); |
1178 } | 1212 } |
1179 | 1213 |
| 1214 TEST(HttpUtilTest, NameValuePairsIteratorStrictQuotes) { |
| 1215 std::string data = "foo=\"bar\"; name='value"; |
| 1216 HttpUtil::NameValuePairsIterator parser( |
| 1217 data.begin(), data.end(), ';', |
| 1218 HttpUtil::NameValuePairsIterator::VALUES_NOT_OPTIONAL, |
| 1219 HttpUtil::NameValuePairsIterator::STRICT_QUOTES); |
| 1220 EXPECT_TRUE(parser.valid()); |
| 1221 |
| 1222 ASSERT_NO_FATAL_FAILURE( |
| 1223 CheckNextNameValuePair(&parser, true, true, "foo", "bar")); |
| 1224 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&parser, false, false, |
| 1225 std::string(), std::string())); |
| 1226 } |
| 1227 |
1180 TEST(HttpUtilTest, IsValidHeaderValueRFC7230) { | 1228 TEST(HttpUtilTest, IsValidHeaderValueRFC7230) { |
1181 EXPECT_TRUE(HttpUtil::IsValidHeaderValueRFC7230("")); | 1229 EXPECT_TRUE(HttpUtil::IsValidHeaderValueRFC7230("")); |
1182 | 1230 |
1183 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" ")); | 1231 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" ")); |
1184 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" q")); | 1232 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" q")); |
1185 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q ")); | 1233 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q ")); |
1186 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\t")); | 1234 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\t")); |
1187 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\tq")); | 1235 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\tq")); |
1188 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q\t")); | 1236 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q\t")); |
1189 | 1237 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1253 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModified)); | 1301 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModified)); |
1254 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModified)); | 1302 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModified)); |
1255 | 1303 |
1256 EXPECT_FALSE(HttpUtil::HasValidators(v1_1, kMissing, kLastModifiedInvalid)); | 1304 EXPECT_FALSE(HttpUtil::HasValidators(v1_1, kMissing, kLastModifiedInvalid)); |
1257 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagStrong, kLastModifiedInvalid)); | 1305 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagStrong, kLastModifiedInvalid)); |
1258 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModifiedInvalid)); | 1306 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModifiedInvalid)); |
1259 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModifiedInvalid)); | 1307 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModifiedInvalid)); |
1260 } | 1308 } |
1261 | 1309 |
1262 } // namespace net | 1310 } // namespace net |
OLD | NEW |