Index: components/url_matcher/url_matcher_unittest.cc |
diff --git a/components/url_matcher/url_matcher_unittest.cc b/components/url_matcher/url_matcher_unittest.cc |
index 748d3101352d9e86d1bd5009811028eb22233c37..01a7c5f40cfb1186cd2c914a80d08d2c4e2ce45e 100644 |
--- a/components/url_matcher/url_matcher_unittest.cc |
+++ b/components/url_matcher/url_matcher_unittest.cc |
@@ -503,6 +503,283 @@ TEST(URLMatcherConditionSetTest, Matching) { |
EXPECT_TRUE(condition_set7->IsMatch(matching_patterns, url1)); |
} |
+namespace { |
+ |
+bool IsQueryMatch( |
+ std::string url_query, |
battre
2014/04/08 11:20:20
please pass by const ref. Also below.
kaliamoorthi
2014/04/08 12:14:24
Done.
|
+ std::string key, |
+ URLQueryElementMatcherCondition::QueryElementType query_element_type, |
+ std::string value, |
+ URLQueryElementMatcherCondition::QueryValueMatchType query_value_match_type, |
+ URLQueryElementMatcherCondition::Type match_type) { |
+ URLMatcherConditionFactory factory; |
+ |
+ URLMatcherCondition m1 = factory.CreateHostSuffixCondition("example.com"); |
+ URLMatcherCondition m2 = factory.CreatePathContainsCondition("foo"); |
+ URLMatcherConditionSet::Conditions conditions; |
+ conditions.insert(m1); |
+ conditions.insert(m2); |
+ |
+ URLQueryElementMatcherCondition q1(key, |
+ value, |
+ query_value_match_type, |
+ query_element_type, |
+ match_type, |
+ &factory); |
+ URLMatcherConditionSet::QueryConditions query_conditions; |
+ query_conditions.insert(q1); |
+ |
+ scoped_ptr<URLMatcherSchemeFilter> scheme_filter; |
+ scoped_ptr<URLMatcherPortFilter> port_filter; |
+ |
+ scoped_refptr<URLMatcherConditionSet> condition_set( |
+ new URLMatcherConditionSet(1, |
+ conditions, |
+ query_conditions, |
+ scheme_filter.Pass(), |
+ port_filter.Pass())); |
+ |
+ GURL url("http://www.example.com/foo?" + url_query); |
+ |
+ URLMatcher matcher; |
+ URLMatcherConditionSet::Vector vector; |
+ vector.push_back(condition_set); |
+ matcher.AddConditionSets(vector); |
+ |
+ return matcher.MatchURL(url).size() == 1; |
+} |
+ |
+} // namespace |
+ |
+TEST(URLMatcherConditionSetTest, QueryMatching) { |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=foo&b=foo&a=barr", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ANY)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo&b=foo&a=barr", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ANY)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=foo&b=foo&a=barr", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ANY)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo&b=foo&a=barr", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ANY)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a&b=foo&a=barr", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ANY)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo&b=foo&a=barr", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ANY)); |
+ |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=bar&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=bar&b=foo&a=bar", |
+ "b", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=bar&b=foo&a=bar", |
+ "b", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "goo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=bar&b=foo&a=bar", |
+ "c", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "goo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=foo1&b=foo&a=foo2", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo1&b=foo&a=fo02", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a&b=foo&a", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("alt&b=foo", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("b=foo&a", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("b=foo", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("b=foo&a", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_ALL)); |
+ |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=foo&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_FIRST)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_FIRST)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=foo1&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_FIRST)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo1&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_FIRST)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_FIRST)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("alt&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_FIRST)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("alt&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_FIRST)); |
+ |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_LAST)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=foo&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_LAST)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a=foo1&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_LAST)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("a=foo1&b=foo&a=bar1", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY_VALUE, |
+ "bar", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_LAST)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("a&b=foo&a=bar", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_LAST)); |
+ EXPECT_TRUE( |
+ IsQueryMatch("b=foo&alt", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_PREFIX, |
+ URLQueryElementMatcherCondition::MATCH_LAST)); |
+ EXPECT_FALSE( |
+ IsQueryMatch("b=foo&alt", |
+ "a", |
+ URLQueryElementMatcherCondition::ELEMENT_TYPE_KEY, |
+ "foo", |
+ URLQueryElementMatcherCondition::QUERY_VALUE_MATCH_EXACT, |
+ URLQueryElementMatcherCondition::MATCH_LAST)); |
+} |
// |
// URLMatcher |