diff options
author | kaliamoorthi@chromium.org <kaliamoorthi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-11 13:45:02 +0000 |
---|---|---|
committer | kaliamoorthi@chromium.org <kaliamoorthi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-11 13:45:02 +0000 |
commit | c967c001a8dd63a6c43d82ffc8463be31a86ca32 (patch) | |
tree | 5d0edcda1bb36d66d31028c80e0a8ae82389cbed /components/url_matcher/url_matcher_unittest.cc | |
parent | 8b8634f3c1867205622fae02b69a1a8a80c71573 (diff) | |
download | chromium_src-c967c001a8dd63a6c43d82ffc8463be31a86ca32.zip chromium_src-c967c001a8dd63a6c43d82ffc8463be31a86ca32.tar.gz chromium_src-c967c001a8dd63a6c43d82ffc8463be31a86ca32.tar.bz2 |
Add support for matching query parameters in URLMatcher
This CL modifies the url_matcher to support matching query key=value pattern.
BUG=349997
Review URL: https://codereview.chromium.org/219613002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263230 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/url_matcher/url_matcher_unittest.cc')
-rw-r--r-- | components/url_matcher/url_matcher_unittest.cc | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/components/url_matcher/url_matcher_unittest.cc b/components/url_matcher/url_matcher_unittest.cc index 748d310..1278f62 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( + const std::string& url_query, + const std::string& key, + URLQueryElementMatcherCondition::QueryElementType query_element_type, + const 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 |