Index: net/base/sdch_dictionary_unittest.cc |
diff --git a/net/base/sdch_dictionary_unittest.cc b/net/base/sdch_dictionary_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d9fd92e7db41ba8e77791f8ed1287607cd219702 |
--- /dev/null |
+++ b/net/base/sdch_dictionary_unittest.cc |
@@ -0,0 +1,132 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "net/base/sdch_dictionary.h" |
+ |
+#include <set> |
+#include <string> |
+ |
+#include "net/base/sdch_problem_codes.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace net { |
+ |
+TEST(SdchDictionaryTest, CanSet) { |
+ SdchProblemCode (*CanSet)(const std::string& domain, const std::string& path, |
+ const std::set<int>& ports, |
+ const GURL& dictionary_url) = |
+ SdchDictionary::CanSet; |
+ |
+ std::set<int> single_port; |
+ single_port.insert(1); |
+ |
+ std::set<int> dual_port; |
+ dual_port.insert(2); |
+ dual_port.insert(3); |
+ |
+ // Not testing specific error codes; that's implementation, not behavior. |
+ EXPECT_EQ(SDCH_OK, CanSet("www.google.com", "", std::set<int>(), |
+ GURL("http://www.google.com/dictionary"))); |
+ EXPECT_NE(SDCH_OK, CanSet("", "", std::set<int>(), |
+ GURL("http://www.google.com/dictionary"))); |
+ EXPECT_NE(SDCH_OK, |
+ CanSet("com", "", std::set<int>(), GURL("http://com/dictionary"))); |
+ EXPECT_NE(SDCH_OK, CanSet("www.google.com", "", std::set<int>(), |
+ GURL("http://www.simple.com/dictionary"))); |
+ EXPECT_EQ(SDCH_OK, CanSet(".google.com", "", std::set<int>(), |
+ GURL("http://www.google.com/dictionary"))); |
+ EXPECT_NE(SDCH_OK, CanSet("google.com", "", std::set<int>(), |
+ GURL("http://www.google.com/dictionary"))); |
+ EXPECT_EQ(SDCH_OK, CanSet("www.google.com", "", single_port, |
+ GURL("http://www.google.com:1/dictionary"))); |
+ EXPECT_EQ(SDCH_OK, CanSet("www.google.com", "", dual_port, |
+ GURL("http://www.google.com:2/dictionary"))); |
+ EXPECT_NE(SDCH_OK, CanSet("www.google.com", "", single_port, |
+ GURL("http://www.google.com:10/dictionary"))); |
+ EXPECT_NE(SDCH_OK, CanSet("www.google.com", "", dual_port, |
+ GURL("http://www.google.com:10/dictionary"))); |
+} |
+ |
+TEST(SdchDictionaryTest, CanUse) { |
+ std::set<int> dual_port; |
+ dual_port.insert(2); |
+ dual_port.insert(3); |
+ |
+ SdchDictionary test_dictionary_1( |
+ "xyzzy", 0u, // text, offset |
+ "ch", "sh", // client hash, server hash |
+ GURL("http://www.example.com"), "www.example.com", |
+ "/url", // domain, path |
+ base::Time::Now() + base::TimeDelta::FromSeconds(1), // expiration |
+ dual_port); // ports |
+ |
+ // Not testing specific error codes; that's implementation, not behavior. |
+ EXPECT_EQ(SDCH_OK, |
+ test_dictionary_1.CanUse(GURL("http://www.example.com:2/url"))); |
+ EXPECT_NE(SDCH_OK, |
+ test_dictionary_1.CanUse(GURL("http://www.google.com:2/url"))); |
+ EXPECT_NE(SDCH_OK, |
+ test_dictionary_1.CanUse(GURL("http://www.example.com:4/url"))); |
+ EXPECT_NE(SDCH_OK, |
+ test_dictionary_1.CanUse(GURL("http://www.example.com:2/wurl"))); |
+ EXPECT_NE(SDCH_OK, |
+ test_dictionary_1.CanUse(GURL("https://www.example.com:2/url"))); |
+ EXPECT_NE(SDCH_OK, |
+ test_dictionary_1.CanUse(GURL("ws://www.example.com:2/url"))); |
+} |
+ |
+TEST(SdchDictionaryTest, PathMatch) { |
+ bool (*PathMatch)(const std::string& path, const std::string& restriction) = |
+ SdchDictionary::PathMatch; |
+ // Perfect match is supported. |
+ EXPECT_TRUE(PathMatch("/search", "/search")); |
+ EXPECT_TRUE(PathMatch("/search/", "/search/")); |
+ |
+ // Prefix only works if last character of restriction is a slash, or first |
+ // character in path after a match is a slash. Validate each case separately. |
+ |
+ // Rely on the slash in the path (not at the end of the restriction). |
+ EXPECT_TRUE(PathMatch("/search/something", "/search")); |
+ EXPECT_TRUE(PathMatch("/search/s", "/search")); |
+ EXPECT_TRUE(PathMatch("/search/other", "/search")); |
+ EXPECT_TRUE(PathMatch("/search/something", "/search")); |
+ |
+ // Rely on the slash at the end of the restriction. |
+ EXPECT_TRUE(PathMatch("/search/something", "/search/")); |
+ EXPECT_TRUE(PathMatch("/search/s", "/search/")); |
+ EXPECT_TRUE(PathMatch("/search/other", "/search/")); |
+ EXPECT_TRUE(PathMatch("/search/something", "/search/")); |
+ |
+ // Make sure less that sufficient prefix match is false. |
+ EXPECT_FALSE(PathMatch("/sear", "/search")); |
+ EXPECT_FALSE(PathMatch("/", "/search")); |
+ EXPECT_FALSE(PathMatch(std::string(), "/search")); |
+ |
+ // Add examples with several levels of direcories in the restriction. |
+ EXPECT_FALSE(PathMatch("/search/something", "search/s")); |
+ EXPECT_FALSE(PathMatch("/search/", "/search/s")); |
+ |
+ // Make sure adding characters to path will also fail. |
+ EXPECT_FALSE(PathMatch("/searching", "/search/")); |
+ EXPECT_FALSE(PathMatch("/searching", "/search")); |
+ |
+ // Make sure we're case sensitive. |
+ EXPECT_FALSE(PathMatch("/ABC", "/abc")); |
+ EXPECT_FALSE(PathMatch("/abc", "/ABC")); |
+} |
+ |
+TEST(SdchDictionaryTest, Expired) { |
+ EXPECT_TRUE( |
+ SdchDictionary("xyzzy", 0u, "ch", "sh", GURL("http://www.example.com"), |
+ "www.example.com", "/url", |
+ base::Time::Now() - base::TimeDelta::FromSeconds(1), |
+ std::set<int>()).Expired()); |
+ EXPECT_FALSE( |
+ SdchDictionary("xyzzy", 0u, "ch", "sh", GURL("http://www.example.com"), |
+ "www.example.com", "/url", |
+ base::Time::Now() + base::TimeDelta::FromSeconds(1), |
+ std::set<int>()).Expired()); |
+} |
+ |
+} // namespace net |