Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: net/http/http_util_unittest.cc

Issue 1811163002: Share link header parsing code between blink and content. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@base-optional
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698