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 ff78d900aaa55dcc60ce597de8b00cad204ebcc3..b5974e5743279c5e8a46773ab9d042efdcf33e10 100644 |
--- a/chrome/common/extensions/url_pattern_set_unittest.cc |
+++ b/chrome/common/extensions/url_pattern_set_unittest.cc |
@@ -9,12 +9,27 @@ |
namespace { |
-static void AddPattern(URLPatternSet* set, const std::string& pattern) { |
+void AddPattern(URLPatternSet* set, const std::string& pattern) { |
int schemes = URLPattern::SCHEME_ALL; |
set->AddPattern(URLPattern(schemes, pattern)); |
} |
+URLPatternSet Patterns(const std::string& pattern) { |
+ URLPatternSet set; |
+ AddPattern(&set, pattern); |
+ return set; |
} |
+ |
+URLPatternSet Patterns(const std::string& pattern1, |
+ const std::string& pattern2) { |
+ URLPatternSet set; |
+ AddPattern(&set, pattern1); |
+ AddPattern(&set, pattern2); |
+ return set; |
+} |
+ |
+} |
+ |
TEST(URLPatternSetTest, Empty) { |
URLPatternSet set; |
EXPECT_FALSE(set.MatchesURL(GURL("http://www.foo.com/bar"))); |
@@ -199,3 +214,156 @@ TEST(URLPatternSetTest, Duplicates) { |
// The sets should still be equal after adding a duplicate. |
EXPECT_EQ(set2, set1); |
} |
+ |
+TEST(URLPatternSetTest, NwayUnion) { |
+ std::string google_a = "http://www.google.com/a*"; |
+ std::string google_b = "http://www.google.com/b*"; |
+ std::string google_c = "http://www.google.com/c*"; |
+ std::string yahoo_a = "http://www.yahoo.com/a*"; |
+ std::string yahoo_b = "http://www.yahoo.com/b*"; |
+ std::string yahoo_c = "http://www.yahoo.com/c*"; |
+ std::string reddit_a = "http://www.reddit.com/a*"; |
+ std::string reddit_b = "http://www.reddit.com/b*"; |
+ std::string reddit_c = "http://www.reddit.com/c*"; |
+ |
+ // Empty list. |
+ { |
+ std::vector<URLPatternSet> empty; |
+ |
+ URLPatternSet result; |
+ URLPatternSet::CreateUnion(empty, &result); |
+ |
+ URLPatternSet expected; |
+ EXPECT_EQ(expected, result); |
+ } |
+ |
+ // Singleton list. |
+ { |
+ std::vector<URLPatternSet> test; |
+ test.push_back(Patterns(google_a)); |
+ |
+ URLPatternSet result; |
+ URLPatternSet::CreateUnion(test, &result); |
+ |
+ URLPatternSet expected = Patterns(google_a); |
+ EXPECT_EQ(expected, result); |
+ } |
+ |
+ // List with 2 elements. |
+ { |
+ |
+ std::vector<URLPatternSet> test; |
+ test.push_back(Patterns(google_a, google_b)); |
+ test.push_back(Patterns(google_b, google_c)); |
+ |
+ URLPatternSet result; |
+ URLPatternSet::CreateUnion(test, &result); |
+ |
+ URLPatternSet expected; |
+ AddPattern(&expected, google_a); |
+ AddPattern(&expected, google_b); |
+ AddPattern(&expected, google_c); |
+ EXPECT_EQ(expected, result); |
+ } |
+ |
+ // List with 3 elements. |
+ { |
+ std::vector<URLPatternSet> test; |
+ test.push_back(Patterns(google_a, google_b)); |
+ test.push_back(Patterns(google_b, google_c)); |
+ test.push_back(Patterns(yahoo_a, yahoo_b)); |
+ |
+ URLPatternSet result; |
+ URLPatternSet::CreateUnion(test, &result); |
+ |
+ URLPatternSet expected; |
+ AddPattern(&expected, google_a); |
+ AddPattern(&expected, google_b); |
+ AddPattern(&expected, google_c); |
+ AddPattern(&expected, yahoo_a); |
+ AddPattern(&expected, yahoo_b); |
+ EXPECT_EQ(expected, result); |
+ } |
+ |
+ // List with 7 elements. |
+ { |
+ std::vector<URLPatternSet> test; |
+ test.push_back(Patterns(google_a)); |
+ test.push_back(Patterns(google_b)); |
+ test.push_back(Patterns(google_c)); |
+ test.push_back(Patterns(yahoo_a)); |
+ test.push_back(Patterns(yahoo_b)); |
+ test.push_back(Patterns(yahoo_c)); |
+ test.push_back(Patterns(reddit_a)); |
+ |
+ URLPatternSet result; |
+ URLPatternSet::CreateUnion(test, &result); |
+ |
+ URLPatternSet expected; |
+ AddPattern(&expected, google_a); |
+ AddPattern(&expected, google_b); |
+ AddPattern(&expected, google_c); |
+ AddPattern(&expected, yahoo_a); |
+ AddPattern(&expected, yahoo_b); |
+ AddPattern(&expected, yahoo_c); |
+ AddPattern(&expected, reddit_a); |
+ EXPECT_EQ(expected, result); |
+ } |
+ |
+ // List with 8 elements. |
+ { |
+ std::vector<URLPatternSet> test; |
+ test.push_back(Patterns(google_a)); |
+ test.push_back(Patterns(google_b)); |
+ test.push_back(Patterns(google_c)); |
+ test.push_back(Patterns(yahoo_a)); |
+ test.push_back(Patterns(yahoo_b)); |
+ test.push_back(Patterns(yahoo_c)); |
+ test.push_back(Patterns(reddit_a)); |
+ test.push_back(Patterns(reddit_b)); |
+ |
+ URLPatternSet result; |
+ URLPatternSet::CreateUnion(test, &result); |
+ |
+ URLPatternSet expected; |
+ AddPattern(&expected, google_a); |
+ AddPattern(&expected, google_b); |
+ AddPattern(&expected, google_c); |
+ AddPattern(&expected, yahoo_a); |
+ AddPattern(&expected, yahoo_b); |
+ AddPattern(&expected, yahoo_c); |
+ AddPattern(&expected, reddit_a); |
+ AddPattern(&expected, reddit_b); |
+ EXPECT_EQ(expected, result); |
+ } |
+ |
+ // List with 9 elements. |
+ { |
+ |
+ std::vector<URLPatternSet> test; |
+ test.push_back(Patterns(google_a)); |
+ test.push_back(Patterns(google_b)); |
+ test.push_back(Patterns(google_c)); |
+ test.push_back(Patterns(yahoo_a)); |
+ test.push_back(Patterns(yahoo_b)); |
+ test.push_back(Patterns(yahoo_c)); |
+ test.push_back(Patterns(reddit_a)); |
+ test.push_back(Patterns(reddit_b)); |
+ test.push_back(Patterns(reddit_c)); |
+ |
+ URLPatternSet result; |
+ URLPatternSet::CreateUnion(test, &result); |
+ |
+ URLPatternSet expected; |
+ AddPattern(&expected, google_a); |
+ AddPattern(&expected, google_b); |
+ AddPattern(&expected, google_c); |
+ AddPattern(&expected, yahoo_a); |
+ AddPattern(&expected, yahoo_b); |
+ AddPattern(&expected, yahoo_c); |
+ AddPattern(&expected, reddit_a); |
+ AddPattern(&expected, reddit_b); |
+ AddPattern(&expected, reddit_c); |
+ EXPECT_EQ(expected, result); |
+ } |
+} |