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

Side by Side Diff: chrome/common/extensions/url_pattern_set_unittest.cc

Issue 11312228: Move extension_error_utils.* and url_pattern_set.* into (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: hate Created 8 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « chrome/common/extensions/url_pattern_set.cc ('k') | chrome/common/extensions/user_script.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/extension.h"
6
7 #include "base/values.h"
8 #include "googleurl/src/gurl.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace {
12
13 void AddPattern(URLPatternSet* set, const std::string& pattern) {
14 int schemes = URLPattern::SCHEME_ALL;
15 set->AddPattern(URLPattern(schemes, pattern));
16 }
17
18 URLPatternSet Patterns(const std::string& pattern) {
19 URLPatternSet set;
20 AddPattern(&set, pattern);
21 return set;
22 }
23
24 URLPatternSet Patterns(const std::string& pattern1,
25 const std::string& pattern2) {
26 URLPatternSet set;
27 AddPattern(&set, pattern1);
28 AddPattern(&set, pattern2);
29 return set;
30 }
31
32 }
33
34 TEST(URLPatternSetTest, Empty) {
35 URLPatternSet set;
36 EXPECT_FALSE(set.MatchesURL(GURL("http://www.foo.com/bar")));
37 EXPECT_FALSE(set.MatchesURL(GURL()));
38 EXPECT_FALSE(set.MatchesURL(GURL("invalid")));
39 }
40
41 TEST(URLPatternSetTest, One) {
42 URLPatternSet set;
43 AddPattern(&set, "http://www.google.com/*");
44
45 EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/")));
46 EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey")));
47 EXPECT_FALSE(set.MatchesURL(GURL("https://www.google.com/")));
48 EXPECT_FALSE(set.MatchesURL(GURL("https://www.microsoft.com/")));
49 }
50
51 TEST(URLPatternSetTest, Two) {
52 URLPatternSet set;
53 AddPattern(&set, "http://www.google.com/*");
54 AddPattern(&set, "http://www.yahoo.com/*");
55
56 EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey")));
57 EXPECT_TRUE(set.MatchesURL(GURL("http://www.yahoo.com/monkey")));
58 EXPECT_FALSE(set.MatchesURL(GURL("https://www.apple.com/monkey")));
59 }
60
61 TEST(URLPatternSetTest, OverlapsWith) {
62 URLPatternSet set1;
63 AddPattern(&set1, "http://www.google.com/f*");
64 AddPattern(&set1, "http://www.yahoo.com/b*");
65
66 URLPatternSet set2;
67 AddPattern(&set2, "http://www.reddit.com/f*");
68 AddPattern(&set2, "http://www.yahoo.com/z*");
69
70 URLPatternSet set3;
71 AddPattern(&set3, "http://www.google.com/q/*");
72 AddPattern(&set3, "http://www.yahoo.com/b/*");
73
74 EXPECT_FALSE(set1.OverlapsWith(set2));
75 EXPECT_FALSE(set2.OverlapsWith(set1));
76
77 EXPECT_TRUE(set1.OverlapsWith(set3));
78 EXPECT_TRUE(set3.OverlapsWith(set1));
79 }
80
81 TEST(URLPatternSetTest, CreateDifference) {
82 URLPatternSet expected;
83 URLPatternSet set1;
84 URLPatternSet set2;
85 AddPattern(&set1, "http://www.google.com/f*");
86 AddPattern(&set1, "http://www.yahoo.com/b*");
87
88 // Subtract an empty set.
89 URLPatternSet result;
90 URLPatternSet::CreateDifference(set1, set2, &result);
91 EXPECT_EQ(set1, result);
92
93 // Subtract a real set.
94 AddPattern(&set2, "http://www.reddit.com/f*");
95 AddPattern(&set2, "http://www.yahoo.com/z*");
96 AddPattern(&set2, "http://www.google.com/f*");
97
98 AddPattern(&expected, "http://www.yahoo.com/b*");
99
100 result.ClearPatterns();
101 URLPatternSet::CreateDifference(set1, set2, &result);
102 EXPECT_EQ(expected, result);
103 EXPECT_FALSE(result.is_empty());
104 EXPECT_TRUE(set1.Contains(result));
105 EXPECT_FALSE(result.Contains(set2));
106 EXPECT_FALSE(set2.Contains(result));
107
108 URLPatternSet intersection;
109 URLPatternSet::CreateIntersection(result, set2, &intersection);
110 EXPECT_TRUE(intersection.is_empty());
111 }
112
113 TEST(URLPatternSetTest, CreateIntersection) {
114 URLPatternSet empty_set;
115 URLPatternSet expected;
116 URLPatternSet set1;
117 AddPattern(&set1, "http://www.google.com/f*");
118 AddPattern(&set1, "http://www.yahoo.com/b*");
119
120 // Intersection with an empty set.
121 URLPatternSet result;
122 URLPatternSet::CreateIntersection(set1, empty_set, &result);
123 EXPECT_EQ(expected, result);
124 EXPECT_TRUE(result.is_empty());
125 EXPECT_TRUE(empty_set.Contains(result));
126 EXPECT_TRUE(result.Contains(empty_set));
127 EXPECT_TRUE(set1.Contains(result));
128
129 // Intersection with a real set.
130 URLPatternSet set2;
131 AddPattern(&set2, "http://www.reddit.com/f*");
132 AddPattern(&set2, "http://www.yahoo.com/z*");
133 AddPattern(&set2, "http://www.google.com/f*");
134
135 AddPattern(&expected, "http://www.google.com/f*");
136
137 result.ClearPatterns();
138 URLPatternSet::CreateIntersection(set1, set2, &result);
139 EXPECT_EQ(expected, result);
140 EXPECT_FALSE(result.is_empty());
141 EXPECT_TRUE(set1.Contains(result));
142 EXPECT_TRUE(set2.Contains(result));
143 }
144
145 TEST(URLPatternSetTest, CreateUnion) {
146 URLPatternSet empty_set;
147
148 URLPatternSet set1;
149 AddPattern(&set1, "http://www.google.com/f*");
150 AddPattern(&set1, "http://www.yahoo.com/b*");
151
152 URLPatternSet expected;
153 AddPattern(&expected, "http://www.google.com/f*");
154 AddPattern(&expected, "http://www.yahoo.com/b*");
155
156 // Union with an empty set.
157 URLPatternSet result;
158 URLPatternSet::CreateUnion(set1, empty_set, &result);
159 EXPECT_EQ(expected, result);
160
161 // Union with a real set.
162 URLPatternSet set2;
163 AddPattern(&set2, "http://www.reddit.com/f*");
164 AddPattern(&set2, "http://www.yahoo.com/z*");
165 AddPattern(&set2, "http://www.google.com/f*");
166
167 AddPattern(&expected, "http://www.reddit.com/f*");
168 AddPattern(&expected, "http://www.yahoo.com/z*");
169
170 result.ClearPatterns();
171 URLPatternSet::CreateUnion(set1, set2, &result);
172 EXPECT_EQ(expected, result);
173 }
174
175 TEST(URLPatternSetTest, Contains) {
176 URLPatternSet set1;
177 URLPatternSet set2;
178 URLPatternSet empty_set;
179
180 AddPattern(&set1, "http://www.google.com/*");
181 AddPattern(&set1, "http://www.yahoo.com/*");
182
183 AddPattern(&set2, "http://www.reddit.com/*");
184
185 EXPECT_FALSE(set1.Contains(set2));
186 EXPECT_TRUE(set1.Contains(empty_set));
187 EXPECT_FALSE(empty_set.Contains(set1));
188
189 AddPattern(&set2, "http://www.yahoo.com/*");
190
191 EXPECT_FALSE(set1.Contains(set2));
192 EXPECT_FALSE(set2.Contains(set1));
193
194 AddPattern(&set2, "http://www.google.com/*");
195
196 EXPECT_FALSE(set1.Contains(set2));
197 EXPECT_TRUE(set2.Contains(set1));
198
199 // Note that this just checks pattern equality, and not if individual patterns
200 // contain other patterns. For example:
201 AddPattern(&set1, "http://*.reddit.com/*");
202 EXPECT_FALSE(set1.Contains(set2));
203 EXPECT_FALSE(set2.Contains(set1));
204 }
205
206 TEST(URLPatternSetTest, Duplicates) {
207 URLPatternSet set1;
208 URLPatternSet set2;
209
210 AddPattern(&set1, "http://www.google.com/*");
211 AddPattern(&set2, "http://www.google.com/*");
212
213 AddPattern(&set1, "http://www.google.com/*");
214
215 // The sets should still be equal after adding a duplicate.
216 EXPECT_EQ(set2, set1);
217 }
218
219 TEST(URLPatternSetTest, ToValueAndPopulate) {
220 URLPatternSet set1;
221 URLPatternSet set2;
222
223 std::vector<std::string> patterns;
224 patterns.push_back("http://www.google.com/*");
225 patterns.push_back("http://www.yahoo.com/*");
226
227 for (size_t i = 0; i < patterns.size(); ++i)
228 AddPattern(&set1, patterns[i]);
229
230 std::string error;
231 bool allow_file_access = false;
232 scoped_ptr<base::ListValue> value(set1.ToValue());
233 set2.Populate(*value, URLPattern::SCHEME_ALL, allow_file_access, &error);
234 EXPECT_EQ(set1, set2);
235
236 set2.ClearPatterns();
237 set2.Populate(patterns, URLPattern::SCHEME_ALL, allow_file_access, &error);
238 EXPECT_EQ(set1, set2);
239 }
240
241 TEST(URLPatternSetTest, NwayUnion) {
242 std::string google_a = "http://www.google.com/a*";
243 std::string google_b = "http://www.google.com/b*";
244 std::string google_c = "http://www.google.com/c*";
245 std::string yahoo_a = "http://www.yahoo.com/a*";
246 std::string yahoo_b = "http://www.yahoo.com/b*";
247 std::string yahoo_c = "http://www.yahoo.com/c*";
248 std::string reddit_a = "http://www.reddit.com/a*";
249 std::string reddit_b = "http://www.reddit.com/b*";
250 std::string reddit_c = "http://www.reddit.com/c*";
251
252 // Empty list.
253 {
254 std::vector<URLPatternSet> empty;
255
256 URLPatternSet result;
257 URLPatternSet::CreateUnion(empty, &result);
258
259 URLPatternSet expected;
260 EXPECT_EQ(expected, result);
261 }
262
263 // Singleton list.
264 {
265 std::vector<URLPatternSet> test;
266 test.push_back(Patterns(google_a));
267
268 URLPatternSet result;
269 URLPatternSet::CreateUnion(test, &result);
270
271 URLPatternSet expected = Patterns(google_a);
272 EXPECT_EQ(expected, result);
273 }
274
275 // List with 2 elements.
276 {
277
278 std::vector<URLPatternSet> test;
279 test.push_back(Patterns(google_a, google_b));
280 test.push_back(Patterns(google_b, google_c));
281
282 URLPatternSet result;
283 URLPatternSet::CreateUnion(test, &result);
284
285 URLPatternSet expected;
286 AddPattern(&expected, google_a);
287 AddPattern(&expected, google_b);
288 AddPattern(&expected, google_c);
289 EXPECT_EQ(expected, result);
290 }
291
292 // List with 3 elements.
293 {
294 std::vector<URLPatternSet> test;
295 test.push_back(Patterns(google_a, google_b));
296 test.push_back(Patterns(google_b, google_c));
297 test.push_back(Patterns(yahoo_a, yahoo_b));
298
299 URLPatternSet result;
300 URLPatternSet::CreateUnion(test, &result);
301
302 URLPatternSet expected;
303 AddPattern(&expected, google_a);
304 AddPattern(&expected, google_b);
305 AddPattern(&expected, google_c);
306 AddPattern(&expected, yahoo_a);
307 AddPattern(&expected, yahoo_b);
308 EXPECT_EQ(expected, result);
309 }
310
311 // List with 7 elements.
312 {
313 std::vector<URLPatternSet> test;
314 test.push_back(Patterns(google_a));
315 test.push_back(Patterns(google_b));
316 test.push_back(Patterns(google_c));
317 test.push_back(Patterns(yahoo_a));
318 test.push_back(Patterns(yahoo_b));
319 test.push_back(Patterns(yahoo_c));
320 test.push_back(Patterns(reddit_a));
321
322 URLPatternSet result;
323 URLPatternSet::CreateUnion(test, &result);
324
325 URLPatternSet expected;
326 AddPattern(&expected, google_a);
327 AddPattern(&expected, google_b);
328 AddPattern(&expected, google_c);
329 AddPattern(&expected, yahoo_a);
330 AddPattern(&expected, yahoo_b);
331 AddPattern(&expected, yahoo_c);
332 AddPattern(&expected, reddit_a);
333 EXPECT_EQ(expected, result);
334 }
335
336 // List with 8 elements.
337 {
338 std::vector<URLPatternSet> test;
339 test.push_back(Patterns(google_a));
340 test.push_back(Patterns(google_b));
341 test.push_back(Patterns(google_c));
342 test.push_back(Patterns(yahoo_a));
343 test.push_back(Patterns(yahoo_b));
344 test.push_back(Patterns(yahoo_c));
345 test.push_back(Patterns(reddit_a));
346 test.push_back(Patterns(reddit_b));
347
348 URLPatternSet result;
349 URLPatternSet::CreateUnion(test, &result);
350
351 URLPatternSet expected;
352 AddPattern(&expected, google_a);
353 AddPattern(&expected, google_b);
354 AddPattern(&expected, google_c);
355 AddPattern(&expected, yahoo_a);
356 AddPattern(&expected, yahoo_b);
357 AddPattern(&expected, yahoo_c);
358 AddPattern(&expected, reddit_a);
359 AddPattern(&expected, reddit_b);
360 EXPECT_EQ(expected, result);
361 }
362
363 // List with 9 elements.
364 {
365
366 std::vector<URLPatternSet> test;
367 test.push_back(Patterns(google_a));
368 test.push_back(Patterns(google_b));
369 test.push_back(Patterns(google_c));
370 test.push_back(Patterns(yahoo_a));
371 test.push_back(Patterns(yahoo_b));
372 test.push_back(Patterns(yahoo_c));
373 test.push_back(Patterns(reddit_a));
374 test.push_back(Patterns(reddit_b));
375 test.push_back(Patterns(reddit_c));
376
377 URLPatternSet result;
378 URLPatternSet::CreateUnion(test, &result);
379
380 URLPatternSet expected;
381 AddPattern(&expected, google_a);
382 AddPattern(&expected, google_b);
383 AddPattern(&expected, google_c);
384 AddPattern(&expected, yahoo_a);
385 AddPattern(&expected, yahoo_b);
386 AddPattern(&expected, yahoo_c);
387 AddPattern(&expected, reddit_a);
388 AddPattern(&expected, reddit_b);
389 AddPattern(&expected, reddit_c);
390 EXPECT_EQ(expected, result);
391 }
392 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/url_pattern_set.cc ('k') | chrome/common/extensions/user_script.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698