Index: chrome/common/extensions/matcher/url_matcher_unittest.cc |
diff --git a/chrome/common/extensions/matcher/url_matcher_unittest.cc b/chrome/common/extensions/matcher/url_matcher_unittest.cc |
index acf414fc6ce19ebb7a937d06d2918c6c3f8ceffb..661dc50668ca4401f46ad8a152d8274fc4ee0234 100644 |
--- a/chrome/common/extensions/matcher/url_matcher_unittest.cc |
+++ b/chrome/common/extensions/matcher/url_matcher_unittest.cc |
@@ -15,19 +15,19 @@ namespace extensions { |
// |
TEST(URLMatcherConditionTest, Constructors) { |
- SubstringPattern pattern("example.com", 1); |
+ StringPattern pattern("example.com", 1); |
URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern); |
EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m1.criterion()); |
- EXPECT_EQ(&pattern, m1.substring_pattern()); |
+ EXPECT_EQ(&pattern, m1.string_pattern()); |
URLMatcherCondition m2; |
m2 = m1; |
EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m2.criterion()); |
- EXPECT_EQ(&pattern, m2.substring_pattern()); |
+ EXPECT_EQ(&pattern, m2.string_pattern()); |
URLMatcherCondition m3(m1); |
EXPECT_EQ(URLMatcherCondition::HOST_SUFFIX, m3.criterion()); |
- EXPECT_EQ(&pattern, m3.substring_pattern()); |
+ EXPECT_EQ(&pattern, m3.string_pattern()); |
} |
TEST(URLMatcherSchemeFilter, TestMatching) { |
@@ -61,7 +61,7 @@ TEST(URLMatcherPortFilter, TestMatching) { |
} |
TEST(URLMatcherConditionTest, IsFullURLCondition) { |
- SubstringPattern pattern("example.com", 1); |
+ StringPattern pattern("example.com", 1); |
EXPECT_FALSE(URLMatcherCondition(URLMatcherCondition::HOST_SUFFIX, |
&pattern).IsFullURLCondition()); |
@@ -86,30 +86,30 @@ TEST(URLMatcherConditionTest, IsMatch) { |
GURL url1("http://www.example.com/www.foobar.com/index.html"); |
GURL url2("http://www.foobar.com/example.com/index.html"); |
- SubstringPattern pattern("example.com", 1); |
+ StringPattern pattern("example.com", 1); |
URLMatcherCondition m1(URLMatcherCondition::HOST_SUFFIX, &pattern); |
- std::set<SubstringPattern::ID> matching_substring_patterns; |
+ std::set<StringPattern::ID> matching_patterns; |
// matches = {0} --> matcher did not indicate that m1 was a match. |
- matching_substring_patterns.insert(0); |
- EXPECT_FALSE(m1.IsMatch(matching_substring_patterns, url1)); |
+ matching_patterns.insert(0); |
+ EXPECT_FALSE(m1.IsMatch(matching_patterns, url1)); |
// matches = {0, 1} --> matcher did indicate that m1 was a match. |
- matching_substring_patterns.insert(1); |
- EXPECT_TRUE(m1.IsMatch(matching_substring_patterns, url1)); |
+ matching_patterns.insert(1); |
+ EXPECT_TRUE(m1.IsMatch(matching_patterns, url1)); |
// For m2 we use a HOST_CONTAINS test, which requires a post-validation |
// whether the match reported by the SubstringSetMatcher occurs really |
// in the correct url component. |
URLMatcherCondition m2(URLMatcherCondition::HOST_CONTAINS, &pattern); |
- EXPECT_TRUE(m2.IsMatch(matching_substring_patterns, url1)); |
- EXPECT_FALSE(m2.IsMatch(matching_substring_patterns, url2)); |
+ EXPECT_TRUE(m2.IsMatch(matching_patterns, url1)); |
+ EXPECT_FALSE(m2.IsMatch(matching_patterns, url2)); |
} |
TEST(URLMatcherConditionTest, Comparison) { |
- SubstringPattern p1("foobar.com", 1); |
- SubstringPattern p2("foobar.com", 2); |
+ StringPattern p1("foobar.com", 1); |
+ StringPattern p2("foobar.com", 2); |
// The first component of each test is expected to be < than the second. |
URLMatcherCondition test_smaller[][2] = { |
{URLMatcherCondition(URLMatcherCondition::HOST_PREFIX, &p1), |
@@ -148,7 +148,7 @@ TEST(URLMatcherConditionTest, Comparison) { |
namespace { |
bool Matches(const URLMatcherCondition& condition, std::string text) { |
- return text.find(condition.substring_pattern()->pattern()) != |
+ return text.find(condition.string_pattern()->pattern()) != |
std::string::npos; |
} |
@@ -205,6 +205,8 @@ TEST(URLMatcherConditionFactoryTest, Criteria) { |
factory.CreateURLContainsCondition("foo").criterion()); |
EXPECT_EQ(URLMatcherCondition::URL_EQUALS, |
factory.CreateURLEqualsCondition("foo").criterion()); |
+ EXPECT_EQ(URLMatcherCondition::URL_MATCHES, |
+ factory.CreateURLMatchesCondition("foo").criterion()); |
} |
TEST(URLMatcherConditionFactoryTest, TestSingletonProperty) { |
@@ -212,21 +214,30 @@ TEST(URLMatcherConditionFactoryTest, TestSingletonProperty) { |
URLMatcherCondition c1 = factory.CreateHostEqualsCondition("www.google.com"); |
URLMatcherCondition c2 = factory.CreateHostEqualsCondition("www.google.com"); |
EXPECT_EQ(c1.criterion(), c2.criterion()); |
- EXPECT_EQ(c1.substring_pattern(), c2.substring_pattern()); |
+ EXPECT_EQ(c1.string_pattern(), c2.string_pattern()); |
URLMatcherCondition c3 = factory.CreateHostEqualsCondition("www.google.de"); |
EXPECT_EQ(c2.criterion(), c3.criterion()); |
- EXPECT_NE(c2.substring_pattern(), c3.substring_pattern()); |
- EXPECT_NE(c2.substring_pattern()->id(), c3.substring_pattern()->id()); |
- EXPECT_NE(c2.substring_pattern()->pattern(), |
- c3.substring_pattern()->pattern()); |
- |
- // Check that all SubstringPattern singletons are freed if we call |
+ EXPECT_NE(c2.string_pattern(), c3.string_pattern()); |
+ EXPECT_NE(c2.string_pattern()->id(), c3.string_pattern()->id()); |
+ EXPECT_NE(c2.string_pattern()->pattern(), |
+ c3.string_pattern()->pattern()); |
+ URLMatcherCondition c4 = factory.CreateURLMatchesCondition("www.google.com"); |
+ URLMatcherCondition c5 = factory.CreateURLContainsCondition("www.google.com"); |
+ // Regex patterns and substring patterns do not share IDs. |
+ EXPECT_EQ(c5.string_pattern()->pattern(), c4.string_pattern()->pattern()); |
+ EXPECT_NE(c5.string_pattern(), c4.string_pattern()); |
+ EXPECT_NE(c5.string_pattern()->id(), c4.string_pattern()->id()); |
+ |
+ // Check that all StringPattern singletons are freed if we call |
// ForgetUnusedPatterns. |
- SubstringPattern::ID old_id_1 = c1.substring_pattern()->id(); |
- factory.ForgetUnusedPatterns(std::set<SubstringPattern::ID>()); |
+ StringPattern::ID old_id_1 = c1.string_pattern()->id(); |
+ StringPattern::ID old_id_4 = c4.string_pattern()->id(); |
+ factory.ForgetUnusedPatterns(std::set<StringPattern::ID>()); |
EXPECT_TRUE(factory.IsEmpty()); |
- URLMatcherCondition c4 = factory.CreateHostEqualsCondition("www.google.com"); |
- EXPECT_NE(old_id_1, c4.substring_pattern()->id()); |
+ URLMatcherCondition c6 = factory.CreateHostEqualsCondition("www.google.com"); |
+ EXPECT_NE(old_id_1, c6.string_pattern()->id()); |
+ URLMatcherCondition c7 = factory.CreateURLMatchesCondition("www.google.com"); |
+ EXPECT_NE(old_id_4, c7.string_pattern()->id()); |
} |
TEST(URLMatcherConditionFactoryTest, TestComponentSearches) { |
@@ -374,7 +385,6 @@ TEST(URLMatcherConditionFactoryTest, TestFullSearches) { |
EXPECT_TRUE(Matches(factory.CreateURLContainsCondition(":1234"), url)); |
} |
- |
// |
// URLMatcherConditionSet |
// |
@@ -413,13 +423,13 @@ TEST(URLMatcherConditionSetTest, Matching) { |
EXPECT_EQ(1, condition_set->id()); |
EXPECT_EQ(2u, condition_set->conditions().size()); |
- std::set<SubstringPattern::ID> matching_substring_patterns; |
- matching_substring_patterns.insert(m1.substring_pattern()->id()); |
- EXPECT_FALSE(condition_set->IsMatch(matching_substring_patterns, url1)); |
+ std::set<StringPattern::ID> matching_patterns; |
+ matching_patterns.insert(m1.string_pattern()->id()); |
+ EXPECT_FALSE(condition_set->IsMatch(matching_patterns, url1)); |
- matching_substring_patterns.insert(m2.substring_pattern()->id()); |
- EXPECT_TRUE(condition_set->IsMatch(matching_substring_patterns, url1)); |
- EXPECT_FALSE(condition_set->IsMatch(matching_substring_patterns, url2)); |
+ matching_patterns.insert(m2.string_pattern()->id()); |
+ EXPECT_TRUE(condition_set->IsMatch(matching_patterns, url1)); |
+ EXPECT_FALSE(condition_set->IsMatch(matching_patterns, url2)); |
// Test scheme filters. |
scoped_refptr<URLMatcherConditionSet> condition_set2( |
@@ -427,13 +437,13 @@ TEST(URLMatcherConditionSetTest, Matching) { |
scoped_ptr<URLMatcherSchemeFilter>( |
new URLMatcherSchemeFilter("https")), |
scoped_ptr<URLMatcherPortFilter>(NULL))); |
- EXPECT_FALSE(condition_set2->IsMatch(matching_substring_patterns, url1)); |
+ EXPECT_FALSE(condition_set2->IsMatch(matching_patterns, url1)); |
scoped_refptr<URLMatcherConditionSet> condition_set3( |
new URLMatcherConditionSet(1, conditions, |
scoped_ptr<URLMatcherSchemeFilter>( |
new URLMatcherSchemeFilter("http")), |
scoped_ptr<URLMatcherPortFilter>(NULL))); |
- EXPECT_TRUE(condition_set3->IsMatch(matching_substring_patterns, url1)); |
+ EXPECT_TRUE(condition_set3->IsMatch(matching_patterns, url1)); |
// Test port filters. |
std::vector<URLMatcherPortFilter::Range> ranges; |
@@ -442,9 +452,27 @@ TEST(URLMatcherConditionSetTest, Matching) { |
scoped_refptr<URLMatcherConditionSet> condition_set4( |
new URLMatcherConditionSet(1, conditions, |
scoped_ptr<URLMatcherSchemeFilter>(NULL), filter.Pass())); |
- EXPECT_TRUE(condition_set4->IsMatch(matching_substring_patterns, url1)); |
- EXPECT_TRUE(condition_set4->IsMatch(matching_substring_patterns, url3)); |
- EXPECT_FALSE(condition_set4->IsMatch(matching_substring_patterns, url4)); |
+ EXPECT_TRUE(condition_set4->IsMatch(matching_patterns, url1)); |
+ EXPECT_TRUE(condition_set4->IsMatch(matching_patterns, url3)); |
+ EXPECT_FALSE(condition_set4->IsMatch(matching_patterns, url4)); |
+ |
+ // Test regex patterns. |
+ matching_patterns.clear(); |
+ URLMatcherCondition r1 = factory.CreateURLMatchesCondition("/fo?oo"); |
+ std::set<URLMatcherCondition> regex_conditions; |
+ regex_conditions.insert(r1); |
+ scoped_refptr<URLMatcherConditionSet> condition_set5( |
+ new URLMatcherConditionSet(1, regex_conditions)); |
+ EXPECT_FALSE(condition_set5->IsMatch(matching_patterns, url1)); |
+ matching_patterns.insert(r1.string_pattern()->id()); |
+ EXPECT_TRUE(condition_set5->IsMatch(matching_patterns, url1)); |
+ |
+ regex_conditions.insert(m1); |
+ scoped_refptr<URLMatcherConditionSet> condition_set6( |
+ new URLMatcherConditionSet(1, regex_conditions)); |
+ EXPECT_FALSE(condition_set6->IsMatch(matching_patterns, url1)); |
+ matching_patterns.insert(m1.string_pattern()->id()); |
+ EXPECT_TRUE(condition_set6->IsMatch(matching_patterns, url1)); |
} |
@@ -486,9 +514,29 @@ TEST(URLMatcherTest, FullTest) { |
// This should be the cached singleton. |
int patternId1 = factory->CreateHostSuffixCondition( |
- "example.com").substring_pattern()->id(); |
+ "example.com").string_pattern()->id(); |
+ |
+ // Third insert. |
+ URLMatcherConditionSet::Conditions conditions3; |
+ conditions3.insert(factory->CreateHostSuffixCondition("example.com")); |
+ conditions3.insert(factory->CreateURLMatchesCondition("x.*[0-9]")); |
+ |
+ const int kConditionSetId3 = 3; |
+ URLMatcherConditionSet::Vector insert3; |
+ insert3.push_back(make_scoped_refptr( |
+ new URLMatcherConditionSet(kConditionSetId3, conditions3))); |
+ matcher.AddConditionSets(insert3); |
+ EXPECT_EQ(3u, matcher.MatchURL(url1).size()); |
+ EXPECT_EQ(1u, matcher.MatchURL(url2).size()); |
+ |
+ // Removal of third insert. |
+ std::vector<URLMatcherConditionSet::ID> remove3; |
+ remove3.push_back(kConditionSetId3); |
+ matcher.RemoveConditionSets(remove3); |
+ EXPECT_EQ(2u, matcher.MatchURL(url1).size()); |
+ EXPECT_EQ(1u, matcher.MatchURL(url2).size()); |
- // Removal of last insert. |
+ // Removal of second insert. |
std::vector<URLMatcherConditionSet::ID> remove2; |
remove2.push_back(kConditionSetId2); |
matcher.RemoveConditionSets(remove2); |
@@ -507,9 +555,10 @@ TEST(URLMatcherTest, FullTest) { |
// The cached singleton in matcher.condition_factory_ should be destroyed to |
// free memory. |
int patternId2 = factory->CreateHostSuffixCondition( |
- "example.com").substring_pattern()->id(); |
+ "example.com").string_pattern()->id(); |
// If patternId1 and patternId2 are different that indicates that |
- // matcher.condition_factory_ does not leak memory. |
+ // matcher.condition_factory_ does not leak memory by holding onto |
+ // unused patterns. |
EXPECT_NE(patternId1, patternId2); |
} |