Chromium Code Reviews| Index: net/cookies/cookie_util_unittest.cc |
| diff --git a/net/cookies/cookie_util_unittest.cc b/net/cookies/cookie_util_unittest.cc |
| index f297afdd076672b33e28b1951dc1928048bdcf55..47a6db32664c3b4fa545bd6d29ba6a6fbaa98a3c 100644 |
| --- a/net/cookies/cookie_util_unittest.cc |
| +++ b/net/cookies/cookie_util_unittest.cc |
| @@ -2,10 +2,49 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include <string> |
| +#include <utility> |
| +#include <vector> |
| + |
| #include "base/basictypes.h" |
| #include "net/cookies/cookie_util.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| +namespace { |
| + |
| +struct RequestCookieParsingTest { |
| + std::string str; |
| + std::vector<std::pair<std::string, std::string> > parsed; |
| +}; |
| + |
| +net::cookie_util::ParsedRequestCookies MakeParsedRequestCookies( |
| + const std::vector<std::pair<std::string, std::string> >& data) { |
| + net::cookie_util::ParsedRequestCookies parsed; |
| + for (size_t i = 0; i < data.size(); i++) { |
| + parsed.push_back(std::make_pair(base::StringPiece(data[i].first), |
| + base::StringPiece(data[i].second))); |
| + } |
| + return parsed; |
| +} |
| + |
| +void CheckParse( |
| + const std::string& str, |
| + const std::vector<std::pair<std::string, std::string> >& parsed_expected) { |
| + net::cookie_util::ParsedRequestCookies parsed; |
| + net::cookie_util::ParseRequestCookieLine(str, &parsed); |
| + EXPECT_EQ(MakeParsedRequestCookies(parsed_expected), parsed); |
| +} |
| + |
| +void CheckSerialize( |
| + const std::vector<std::pair<std::string, std::string> >& parsed, |
| + const std::string& str_expected) { |
| + net::cookie_util::ParsedRequestCookies prc = |
| + MakeParsedRequestCookies(parsed); |
| + EXPECT_EQ(str_expected, net::cookie_util::SerializeRequestCookieLine(prc)); |
| +} |
| + |
| +} // namespace |
| + |
| TEST(CookieUtilTest, TestDomainIsHostOnly) { |
| const struct { |
| const char* str; |
| @@ -109,3 +148,48 @@ TEST(CookieUtilTest, TestCookieDateParsing) { |
| EXPECT_EQ(tests[i].epoch, parsed_time.ToTimeT()) << tests[i].str; |
| } |
| } |
| + |
| +TEST(CookieUtilTest, TestRequestCookieParsing) { |
| + std::vector<RequestCookieParsingTest> tests; |
| + |
| + // Simple case. |
| + tests.push_back(RequestCookieParsingTest()); |
| + tests.back().str = "key=value"; |
| + tests.back().parsed.push_back(std::make_pair(std::string("key"), |
| + std::string("value"))); |
| + // Multiple key/value pairs. |
| + tests.push_back(RequestCookieParsingTest()); |
| + tests.back().str = "key1=value1; key2=value2"; |
| + tests.back().parsed.push_back(std::make_pair(std::string("key1"), |
| + std::string("value1"))); |
| + tests.back().parsed.push_back(std::make_pair(std::string("key2"), |
| + std::string("value2"))); |
| + // Empty value. |
| + tests.push_back(RequestCookieParsingTest()); |
| + tests.back().str = "key=; otherkey=1234"; |
| + tests.back().parsed.push_back(std::make_pair(std::string("key"), |
| + std::string())); |
| + tests.back().parsed.push_back(std::make_pair(std::string("otherkey"), |
| + std::string("1234"))); |
| + // Special characters (including equals signs) in value. |
| + tests.push_back(RequestCookieParsingTest()); |
| + tests.back().str = "key=; a2=s=(./&t=:&u=a#$; a3=+~"; |
| + tests.back().parsed.push_back(std::make_pair(std::string("key"), |
| + std::string())); |
| + tests.back().parsed.push_back(std::make_pair(std::string("a2"), |
| + std::string("s=(./&t=:&u=a#$"))); |
| + tests.back().parsed.push_back(std::make_pair(std::string("a3"), |
| + std::string("+~"))); |
| + // Quoted value. |
| + tests.push_back(RequestCookieParsingTest()); |
| + tests.back().str = "key=\"abcdef\"; otherkey=1234"; |
|
battre
2014/07/10 10:02:56
can you change this to "key=\"ab;cdef\"; otherkey=
Marc Treib
2014/07/10 11:35:45
Semicolons are not allowed in cookie values, even
|
| + tests.back().parsed.push_back(std::make_pair(std::string("key"), |
| + std::string("\"abcdef\""))); |
| + tests.back().parsed.push_back(std::make_pair(std::string("otherkey"), |
| + std::string("1234"))); |
| + |
| + for (size_t i = 0; i < tests.size(); i++) { |
|
battre
2014/07/10 10:02:56
How about adding
SCOPED_TRACE(testing::Message() <
Marc Treib
2014/07/10 11:35:45
Done. Didn't know about that!
|
| + CheckParse(tests[i].str, tests[i].parsed); |
| + CheckSerialize(tests[i].parsed, tests[i].str); |
| + } |
| +} |