Index: chrome/common/extensions/url_pattern_set_unittest.cc |
diff --git a/chrome/common/extensions/url_pattern_set_unittest.cc b/chrome/common/extensions/url_pattern_set_unittest.cc |
index f9717ef36d572e85e9e9d53d7aeb41b313e57181..ff78d900aaa55dcc60ce597de8b00cad204ebcc3 100644 |
--- a/chrome/common/extensions/url_pattern_set_unittest.cc |
+++ b/chrome/common/extensions/url_pattern_set_unittest.cc |
@@ -7,88 +7,195 @@ |
#include "googleurl/src/gurl.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-static const int kAllSchemes = |
- URLPattern::SCHEME_HTTP | |
- URLPattern::SCHEME_HTTPS | |
- URLPattern::SCHEME_FILE | |
- URLPattern::SCHEME_FTP | |
- URLPattern::SCHEME_CHROMEUI; |
+namespace { |
+static void AddPattern(URLPatternSet* set, const std::string& pattern) { |
+ int schemes = URLPattern::SCHEME_ALL; |
+ set->AddPattern(URLPattern(schemes, pattern)); |
+} |
+ |
+} |
TEST(URLPatternSetTest, Empty) { |
- URLPatternSet extent; |
- EXPECT_FALSE(extent.MatchesURL(GURL("http://www.foo.com/bar"))); |
- EXPECT_FALSE(extent.MatchesURL(GURL())); |
- EXPECT_FALSE(extent.MatchesURL(GURL("invalid"))); |
+ URLPatternSet set; |
+ EXPECT_FALSE(set.MatchesURL(GURL("http://www.foo.com/bar"))); |
+ EXPECT_FALSE(set.MatchesURL(GURL())); |
+ EXPECT_FALSE(set.MatchesURL(GURL("invalid"))); |
} |
TEST(URLPatternSetTest, One) { |
- URLPatternSet extent; |
- extent.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/*")); |
+ URLPatternSet set; |
+ AddPattern(&set, "http://www.google.com/*"); |
- EXPECT_TRUE(extent.MatchesURL(GURL("http://www.google.com/"))); |
- EXPECT_TRUE(extent.MatchesURL(GURL("http://www.google.com/monkey"))); |
- EXPECT_FALSE(extent.MatchesURL(GURL("https://www.google.com/"))); |
- EXPECT_FALSE(extent.MatchesURL(GURL("https://www.microsoft.com/"))); |
+ EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/"))); |
+ EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey"))); |
+ EXPECT_FALSE(set.MatchesURL(GURL("https://www.google.com/"))); |
+ EXPECT_FALSE(set.MatchesURL(GURL("https://www.microsoft.com/"))); |
} |
TEST(URLPatternSetTest, Two) { |
- URLPatternSet extent; |
- extent.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/*")); |
- extent.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/*")); |
+ URLPatternSet set; |
+ AddPattern(&set, "http://www.google.com/*"); |
+ AddPattern(&set, "http://www.yahoo.com/*"); |
- EXPECT_TRUE(extent.MatchesURL(GURL("http://www.google.com/monkey"))); |
- EXPECT_TRUE(extent.MatchesURL(GURL("http://www.yahoo.com/monkey"))); |
- EXPECT_FALSE(extent.MatchesURL(GURL("https://www.apple.com/monkey"))); |
+ EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey"))); |
+ EXPECT_TRUE(set.MatchesURL(GURL("http://www.yahoo.com/monkey"))); |
+ EXPECT_FALSE(set.MatchesURL(GURL("https://www.apple.com/monkey"))); |
} |
TEST(URLPatternSetTest, OverlapsWith) { |
- URLPatternSet extent1; |
- extent1.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); |
- extent1.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b*")); |
+ URLPatternSet set1; |
+ AddPattern(&set1, "http://www.google.com/f*"); |
+ AddPattern(&set1, "http://www.yahoo.com/b*"); |
+ |
+ URLPatternSet set2; |
+ AddPattern(&set2, "http://www.reddit.com/f*"); |
+ AddPattern(&set2, "http://www.yahoo.com/z*"); |
+ |
+ URLPatternSet set3; |
+ AddPattern(&set3, "http://www.google.com/q/*"); |
+ AddPattern(&set3, "http://www.yahoo.com/b/*"); |
+ |
+ EXPECT_FALSE(set1.OverlapsWith(set2)); |
+ EXPECT_FALSE(set2.OverlapsWith(set1)); |
+ |
+ EXPECT_TRUE(set1.OverlapsWith(set3)); |
+ EXPECT_TRUE(set3.OverlapsWith(set1)); |
+} |
+ |
+TEST(URLPatternSetTest, CreateDifference) { |
+ URLPatternSet expected; |
+ URLPatternSet set1; |
+ URLPatternSet set2; |
+ AddPattern(&set1, "http://www.google.com/f*"); |
+ AddPattern(&set1, "http://www.yahoo.com/b*"); |
- URLPatternSet extent2; |
- extent2.AddPattern(URLPattern(kAllSchemes, "http://www.reddit.com/f*")); |
- extent2.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/z*")); |
+ // Subtract an empty set. |
+ URLPatternSet result; |
+ URLPatternSet::CreateDifference(set1, set2, &result); |
+ EXPECT_EQ(set1, result); |
- URLPatternSet extent3; |
- extent3.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/q/*")); |
- extent3.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b/*")); |
+ // Subtract a real set. |
+ AddPattern(&set2, "http://www.reddit.com/f*"); |
+ AddPattern(&set2, "http://www.yahoo.com/z*"); |
+ AddPattern(&set2, "http://www.google.com/f*"); |
- EXPECT_FALSE(extent1.OverlapsWith(extent2)); |
- EXPECT_FALSE(extent2.OverlapsWith(extent1)); |
+ AddPattern(&expected, "http://www.yahoo.com/b*"); |
- EXPECT_TRUE(extent1.OverlapsWith(extent3)); |
- EXPECT_TRUE(extent3.OverlapsWith(extent1)); |
+ result.ClearPatterns(); |
+ URLPatternSet::CreateDifference(set1, set2, &result); |
+ EXPECT_EQ(expected, result); |
+ EXPECT_FALSE(result.is_empty()); |
+ EXPECT_TRUE(set1.Contains(result)); |
+ EXPECT_FALSE(result.Contains(set2)); |
+ EXPECT_FALSE(set2.Contains(result)); |
+ |
+ URLPatternSet intersection; |
+ URLPatternSet::CreateIntersection(result, set2, &intersection); |
+ EXPECT_TRUE(intersection.is_empty()); |
+} |
+ |
+TEST(URLPatternSetTest, CreateIntersection) { |
+ URLPatternSet empty_set; |
+ URLPatternSet expected; |
+ URLPatternSet set1; |
+ AddPattern(&set1, "http://www.google.com/f*"); |
+ AddPattern(&set1, "http://www.yahoo.com/b*"); |
+ |
+ // Intersection with an empty set. |
+ URLPatternSet result; |
+ URLPatternSet::CreateIntersection(set1, empty_set, &result); |
+ EXPECT_EQ(expected, result); |
+ EXPECT_TRUE(result.is_empty()); |
+ EXPECT_TRUE(empty_set.Contains(result)); |
+ EXPECT_TRUE(result.Contains(empty_set)); |
+ EXPECT_TRUE(set1.Contains(result)); |
+ |
+ // Intersection with a real set. |
+ URLPatternSet set2; |
+ AddPattern(&set2, "http://www.reddit.com/f*"); |
+ AddPattern(&set2, "http://www.yahoo.com/z*"); |
+ AddPattern(&set2, "http://www.google.com/f*"); |
+ |
+ AddPattern(&expected, "http://www.google.com/f*"); |
+ |
+ result.ClearPatterns(); |
+ URLPatternSet::CreateIntersection(set1, set2, &result); |
+ EXPECT_EQ(expected, result); |
+ EXPECT_FALSE(result.is_empty()); |
+ EXPECT_TRUE(set1.Contains(result)); |
+ EXPECT_TRUE(set2.Contains(result)); |
} |
TEST(URLPatternSetTest, CreateUnion) { |
- URLPatternSet empty_extent; |
+ URLPatternSet empty_set; |
- URLPatternSet extent1; |
- extent1.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); |
- extent1.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b*")); |
+ URLPatternSet set1; |
+ AddPattern(&set1, "http://www.google.com/f*"); |
+ AddPattern(&set1, "http://www.yahoo.com/b*"); |
URLPatternSet expected; |
- expected.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); |
- expected.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b*")); |
+ AddPattern(&expected, "http://www.google.com/f*"); |
+ AddPattern(&expected, "http://www.yahoo.com/b*"); |
// Union with an empty set. |
URLPatternSet result; |
- URLPatternSet::CreateUnion(extent1, empty_extent, &result); |
+ URLPatternSet::CreateUnion(set1, empty_set, &result); |
EXPECT_EQ(expected, result); |
- // Union with a real set (including a duplicate). |
- URLPatternSet extent2; |
- extent2.AddPattern(URLPattern(kAllSchemes, "http://www.reddit.com/f*")); |
- extent2.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/z*")); |
- extent2.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); |
+ // Union with a real set. |
+ URLPatternSet set2; |
+ AddPattern(&set2, "http://www.reddit.com/f*"); |
+ AddPattern(&set2, "http://www.yahoo.com/z*"); |
+ AddPattern(&set2, "http://www.google.com/f*"); |
- expected.AddPattern(URLPattern(kAllSchemes, "http://www.reddit.com/f*")); |
- expected.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/z*")); |
- // CreateUnion does not filter out duplicates right now. |
- expected.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); |
+ AddPattern(&expected, "http://www.reddit.com/f*"); |
+ AddPattern(&expected, "http://www.yahoo.com/z*"); |
result.ClearPatterns(); |
- URLPatternSet::CreateUnion(extent1, extent2, &result); |
+ URLPatternSet::CreateUnion(set1, set2, &result); |
EXPECT_EQ(expected, result); |
} |
+ |
+TEST(URLPatternSetTest, Contains) { |
+ URLPatternSet set1; |
+ URLPatternSet set2; |
+ URLPatternSet empty_set; |
+ |
+ AddPattern(&set1, "http://www.google.com/*"); |
+ AddPattern(&set1, "http://www.yahoo.com/*"); |
+ |
+ AddPattern(&set2, "http://www.reddit.com/*"); |
+ |
+ EXPECT_FALSE(set1.Contains(set2)); |
+ EXPECT_TRUE(set1.Contains(empty_set)); |
+ EXPECT_FALSE(empty_set.Contains(set1)); |
+ |
+ AddPattern(&set2, "http://www.yahoo.com/*"); |
+ |
+ EXPECT_FALSE(set1.Contains(set2)); |
+ EXPECT_FALSE(set2.Contains(set1)); |
+ |
+ AddPattern(&set2, "http://www.google.com/*"); |
+ |
+ EXPECT_FALSE(set1.Contains(set2)); |
+ EXPECT_TRUE(set2.Contains(set1)); |
+ |
+ // Note that this just checks pattern equality, and not if individual patterns |
+ // contain other patterns. For example: |
+ AddPattern(&set1, "http://*.reddit.com/*"); |
+ EXPECT_FALSE(set1.Contains(set2)); |
+ EXPECT_FALSE(set2.Contains(set1)); |
+} |
+ |
+TEST(URLPatternSetTest, Duplicates) { |
+ URLPatternSet set1; |
+ URLPatternSet set2; |
+ |
+ AddPattern(&set1, "http://www.google.com/*"); |
+ AddPattern(&set2, "http://www.google.com/*"); |
+ |
+ AddPattern(&set1, "http://www.google.com/*"); |
+ |
+ // The sets should still be equal after adding a duplicate. |
+ EXPECT_EQ(set2, set1); |
+} |