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

Side by Side Diff: chrome/common/extensions/matcher/substring_set_matcher_unittest.cc

Issue 12092096: Move c/c/extensions/matcher/ to top level extension dir (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: TOT Created 7 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
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 "chrome/common/extensions/matcher/substring_set_matcher.h"
6
7 #include <set>
8 #include <string>
9 #include <vector>
10
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 using extensions::StringPattern;
14 using extensions::SubstringSetMatcher;
15
16 namespace {
17 void TestOnePattern(const std::string& test_string,
18 const std::string& pattern,
19 bool is_match) {
20 std::string test =
21 "TestOnePattern(" + test_string + ", " + pattern + ", " +
22 (is_match ? "1" : "0") + ")";
23 std::vector<const StringPattern*> patterns;
24 StringPattern substring_pattern(pattern, 1);
25 patterns.push_back(&substring_pattern);
26 SubstringSetMatcher matcher;
27 matcher.RegisterPatterns(patterns);
28 std::set<int> matches;
29 matcher.Match(test_string, &matches);
30
31 size_t expected_matches = (is_match ? 1 : 0);
32 EXPECT_EQ(expected_matches, matches.size()) << test;
33 EXPECT_EQ(is_match, matches.find(1) != matches.end()) << test;
34 }
35
36 void TestTwoPatterns(const std::string& test_string,
37 const std::string& pattern_1,
38 const std::string& pattern_2,
39 bool is_match_1,
40 bool is_match_2) {
41 std::string test =
42 "TestTwoPatterns(" + test_string + ", " + pattern_1 + ", " + pattern_2 +
43 ", " + (is_match_1 ? "1" : "0") + ", " + (is_match_2 ? "1" : "0") + ")";
44 StringPattern substring_pattern_1(pattern_1, 1);
45 StringPattern substring_pattern_2(pattern_2, 2);
46 // In order to make sure that the order in which patterns are registered
47 // does not make any difference we try both permutations.
48 for (int permutation = 0; permutation < 2; ++permutation) {
49 std::vector<const StringPattern*> patterns;
50 if (permutation == 0) {
51 patterns.push_back(&substring_pattern_1);
52 patterns.push_back(&substring_pattern_2);
53 } else {
54 patterns.push_back(&substring_pattern_2);
55 patterns.push_back(&substring_pattern_1);
56 }
57 SubstringSetMatcher matcher;
58 matcher.RegisterPatterns(patterns);
59 std::set<int> matches;
60 matcher.Match(test_string, &matches);
61
62 size_t expected_matches = (is_match_1 ? 1 : 0) + (is_match_2 ? 1 : 0);
63 EXPECT_EQ(expected_matches, matches.size()) << test;
64 EXPECT_EQ(is_match_1, matches.find(1) != matches.end()) << test;
65 EXPECT_EQ(is_match_2, matches.find(2) != matches.end()) << test;
66 }
67 }
68 }
69
70 TEST(SubstringSetMatcherTest, TestMatcher) {
71 // Test overlapping patterns
72 // String abcde
73 // Pattern 1 bc
74 // Pattern 2 cd
75 TestTwoPatterns("abcde", "bc", "cd", true, true);
76
77 // Test subpatterns - part 1
78 // String abcde
79 // Pattern 1 bc
80 // Pattern 2 b
81 TestTwoPatterns("abcde", "bc", "b", true, true);
82
83 // Test subpatterns - part 2
84 // String abcde
85 // Pattern 1 bc
86 // Pattern 2 c
87 TestTwoPatterns("abcde", "bc", "c", true, true);
88
89 // Test identical matches
90 // String abcde
91 // Pattern 1 abcde
92 TestOnePattern("abcde", "abcde", true);
93
94 // Test multiple matches
95 // String aaaaa
96 // Pattern 1 a
97 TestOnePattern("abcde", "a", true);
98
99 // Test matches at beginning and end
100 // String abcde
101 // Pattern 1 ab
102 // Pattern 2 de
103 TestTwoPatterns("abcde", "ab", "de", true, true);
104
105 // Test duplicate patterns with different IDs
106 // String abcde
107 // Pattern 1 bc
108 // Pattern 2 bc
109 TestTwoPatterns("abcde", "bc", "bc", true, true);
110
111 // Test non-match
112 // String abcde
113 // Pattern 1 fg
114 TestOnePattern("abcde", "fg", false);
115
116 // Test empty pattern and too long pattern
117 // String abcde
118 // Pattern 1
119 // Pattern 2 abcdef
120 TestTwoPatterns("abcde", "", "abcdef", true, false);
121 }
122
123 TEST(SubstringSetMatcherTest, RegisterAndRemove) {
124 SubstringSetMatcher matcher;
125
126 StringPattern pattern_1("a", 1);
127 StringPattern pattern_2("b", 2);
128 StringPattern pattern_3("c", 3);
129
130 std::vector<const StringPattern*> patterns;
131 patterns.push_back(&pattern_1);
132 matcher.RegisterPatterns(patterns);
133
134 patterns.clear();
135 patterns.push_back(&pattern_2);
136 patterns.push_back(&pattern_3);
137 matcher.RegisterPatterns(patterns);
138
139 std::set<int> matches;
140 matcher.Match("abd", &matches);
141 EXPECT_EQ(2u, matches.size());
142 EXPECT_TRUE(matches.end() != matches.find(1));
143 EXPECT_TRUE(matches.end() != matches.find(2));
144
145 patterns.clear();
146 patterns.push_back(&pattern_2);
147 matcher.UnregisterPatterns(patterns);
148
149 matches.clear();
150 matcher.Match("abd", &matches);
151 EXPECT_EQ(1u, matches.size());
152 EXPECT_TRUE(matches.end() != matches.find(1));
153 EXPECT_TRUE(matches.end() == matches.find(2));
154
155 patterns.clear();
156 patterns.push_back(&pattern_1);
157 patterns.push_back(&pattern_3);
158 matcher.UnregisterPatterns(patterns);
159 EXPECT_TRUE(matcher.IsEmpty());
160 }
161
162 TEST(SubstringSetMatcherTest, TestEmptyMatcher) {
163 SubstringSetMatcher matcher;
164 std::set<int> matches;
165 matcher.Match("abd", &matches);
166 EXPECT_TRUE(matches.empty());
167 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/matcher/substring_set_matcher.cc ('k') | chrome/common/extensions/matcher/url_matcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698