Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: components/url_matcher/url_matcher_unittest.cc

Issue 219613002: Add support for matching query parameters in URLMatcher (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes nits from joao, and some changes for performance improvement. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« components/url_matcher/url_matcher.cc ('K') | « components/url_matcher/url_matcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698