1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "extensions/common/matcher/regex_set_matcher.h" 6 7 #include <set> 8 9 #include "base/stl_util.h" 10 #include "url/gurl.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 13 using extensions::StringPattern; 14 using extensions::RegexSetMatcher; 15 16 TEST(RegexSetMatcherTest, MatchRegexes) { 17 StringPattern pattern_1("ab.*c", 42); 18 StringPattern pattern_2("f*f", 17); 19 StringPattern pattern_3("c(ar|ra)b|brac", 239); 20 std::vector<const StringPattern*> regexes; 21 regexes.push_back(&pattern_1); 22 regexes.push_back(&pattern_2); 23 regexes.push_back(&pattern_3); 24 RegexSetMatcher matcher; 25 matcher.AddPatterns(regexes); 26 27 std::set<StringPattern::ID> result1; 28 matcher.Match("http://abracadabra.com", &result1); 29 EXPECT_EQ(2U, result1.size()); 30 EXPECT_TRUE(ContainsKey(result1, 42)); 31 EXPECT_TRUE(ContainsKey(result1, 239)); 32 33 std::set<StringPattern::ID> result2; 34 matcher.Match("https://abfffffffffffffffffffffffffffffff.fi/cf", &result2); 35 EXPECT_EQ(2U, result2.size()); 36 EXPECT_TRUE(ContainsKey(result2, 17)); 37 EXPECT_TRUE(ContainsKey(result2, 42)); 38 39 std::set<StringPattern::ID> result3; 40 matcher.Match("http://nothing.com/", &result3); 41 EXPECT_EQ(0U, result3.size()); 42 } 43 44 TEST(RegexSetMatcherTest, CaseSensitivity) { 45 StringPattern pattern_1("AAA", 51); 46 StringPattern pattern_2("aaA", 57); 47 std::vector<const StringPattern*> regexes; 48 regexes.push_back(&pattern_1); 49 regexes.push_back(&pattern_2); 50 RegexSetMatcher matcher; 51 matcher.AddPatterns(regexes); 52 53 std::set<StringPattern::ID> result1; 54 matcher.Match("http://aaa.net/", &result1); 55 EXPECT_EQ(0U, result1.size()); 56 57 std::set<StringPattern::ID> result2; 58 matcher.Match("http://aaa.net/quaaACK", &result2); 59 EXPECT_EQ(1U, result2.size()); 60 EXPECT_TRUE(ContainsKey(result2, 57)); 61 } 62