OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/common/url_pattern_set.h" | 5 #include "extensions/common/url_pattern_set.h" |
6 | 6 |
7 #include "base/values.h" | 7 #include "base/values.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "url/gurl.h" | 9 #include "url/gurl.h" |
10 | 10 |
11 namespace extensions { | 11 namespace extensions { |
12 | 12 |
13 namespace { | 13 namespace { |
14 | 14 |
15 void AddPattern(URLPatternSet* set, const std::string& pattern) { | 15 void AddPattern(URLPatternSet* set, const std::string& pattern) { |
16 int schemes = URLPattern::SCHEME_ALL; | 16 int schemes = URLPattern::SCHEME_ALL; |
17 set->AddPattern(URLPattern(schemes, pattern)); | 17 set->AddPattern(URLPattern(schemes, pattern)); |
18 } | 18 } |
19 | 19 |
| 20 URLPatternSet GetAllURLsPattern() { |
| 21 URLPatternSet set; |
| 22 URLPattern pattern; |
| 23 pattern.SetMatchAllURLs(true); |
| 24 set.AddPattern(pattern); |
| 25 return set; |
| 26 } |
| 27 |
20 URLPatternSet Patterns(const std::string& pattern) { | 28 URLPatternSet Patterns(const std::string& pattern) { |
21 URLPatternSet set; | 29 URLPatternSet set; |
22 AddPattern(&set, pattern); | 30 AddPattern(&set, pattern); |
23 return set; | 31 return set; |
24 } | 32 } |
25 | 33 |
26 URLPatternSet Patterns(const std::string& pattern1, | 34 URLPatternSet Patterns(const std::string& pattern1, |
27 const std::string& pattern2) { | 35 const std::string& pattern2) { |
28 URLPatternSet set; | 36 URLPatternSet set; |
29 AddPattern(&set, pattern1); | 37 AddPattern(&set, pattern1); |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 AddPattern(&expected, yahoo_a); | 394 AddPattern(&expected, yahoo_a); |
387 AddPattern(&expected, yahoo_b); | 395 AddPattern(&expected, yahoo_b); |
388 AddPattern(&expected, yahoo_c); | 396 AddPattern(&expected, yahoo_c); |
389 AddPattern(&expected, reddit_a); | 397 AddPattern(&expected, reddit_a); |
390 AddPattern(&expected, reddit_b); | 398 AddPattern(&expected, reddit_b); |
391 AddPattern(&expected, reddit_c); | 399 AddPattern(&expected, reddit_c); |
392 EXPECT_EQ(expected, result); | 400 EXPECT_EQ(expected, result); |
393 } | 401 } |
394 } | 402 } |
395 | 403 |
| 404 TEST(URLPatternSetTest, AllURLsSpecialCases) { |
| 405 URLPatternSet empty; |
| 406 URLPatternSet all_urls = GetAllURLsPattern(); |
| 407 URLPatternSet specific; |
| 408 AddPattern(&specific, "http://www.google.com/*"); |
| 409 AddPattern(&specific, "http://www.yahoo.com/*"); |
| 410 |
| 411 { |
| 412 URLPatternSet result; |
| 413 result.AddPatterns(specific); |
| 414 EXPECT_EQ(specific, result); |
| 415 result.AddPatterns(all_urls); |
| 416 EXPECT_EQ(all_urls, result); |
| 417 } |
| 418 { |
| 419 URLPatternSet result; |
| 420 result.AddPatterns(all_urls); |
| 421 EXPECT_EQ(all_urls, result); |
| 422 result.AddPatterns(specific); |
| 423 EXPECT_EQ(all_urls, result); |
| 424 } |
| 425 { |
| 426 URLPatternSet result; |
| 427 URLPatternSet::CreateUnion(all_urls, specific, &result); |
| 428 EXPECT_EQ(all_urls, result); |
| 429 } |
| 430 { |
| 431 URLPatternSet result; |
| 432 URLPatternSet::CreateUnion(specific, all_urls, &result); |
| 433 EXPECT_EQ(all_urls, result); |
| 434 } |
| 435 { |
| 436 URLPatternSet result; |
| 437 URLPatternSet::CreateIntersection(all_urls, specific, &result); |
| 438 EXPECT_EQ(specific, result); |
| 439 } |
| 440 { |
| 441 URLPatternSet result; |
| 442 URLPatternSet::CreateIntersection(specific, all_urls, &result); |
| 443 EXPECT_EQ(specific, result); |
| 444 } |
| 445 { |
| 446 URLPatternSet result; |
| 447 URLPatternSet::CreateDifference(all_urls, specific, &result); |
| 448 EXPECT_EQ(all_urls, result); |
| 449 } |
| 450 { |
| 451 URLPatternSet result; |
| 452 URLPatternSet::CreateDifference(specific, all_urls, &result); |
| 453 EXPECT_EQ(empty, result); |
| 454 } |
| 455 } |
| 456 |
| 457 TEST(URLPatternSetTest, OverlappingURLsSpecialCases) { |
| 458 URLPatternSet empty; |
| 459 URLPatternSet specific; |
| 460 AddPattern(&specific, "http://www.google.com/*"); |
| 461 AddPattern(&specific, "http://www.yahoo.com/*"); |
| 462 |
| 463 URLPatternSet overlapping; |
| 464 AddPattern(&overlapping, "*://www.google.com/*"); |
| 465 AddPattern(&overlapping, "http://*.google.com/*"); |
| 466 |
| 467 { |
| 468 URLPatternSet result; |
| 469 result.AddPatterns(overlapping); |
| 470 EXPECT_EQ(overlapping, result); |
| 471 |
| 472 result.AddPatterns(specific); |
| 473 URLPatternSet expected; |
| 474 expected.AddPatterns(overlapping); |
| 475 AddPattern(&expected, "http://www.yahoo.com/*"); |
| 476 EXPECT_EQ(expected, result); |
| 477 } |
| 478 { |
| 479 URLPatternSet result; |
| 480 URLPatternSet::CreateUnion(specific, overlapping, &result); |
| 481 |
| 482 URLPatternSet expected; |
| 483 expected.AddPatterns(overlapping); |
| 484 AddPattern(&expected, "http://www.yahoo.com/*"); |
| 485 EXPECT_EQ(expected, result); |
| 486 } |
| 487 { |
| 488 URLPatternSet result; |
| 489 URLPatternSet::CreateIntersection(specific, overlapping, &result); |
| 490 URLPatternSet expected; |
| 491 AddPattern(&expected, "http://www.google.com/*"); |
| 492 EXPECT_EQ(expected, result); |
| 493 } |
| 494 { |
| 495 URLPatternSet result; |
| 496 URLPatternSet::CreateDifference(specific, overlapping, &result); |
| 497 URLPatternSet expected; |
| 498 AddPattern(&expected, "http://www.yahoo.com/*"); |
| 499 EXPECT_EQ(expected, result); |
| 500 } |
| 501 { |
| 502 URLPatternSet result; |
| 503 URLPatternSet::CreateDifference(overlapping, specific, &result); |
| 504 EXPECT_EQ(overlapping, result); |
| 505 } |
| 506 } |
| 507 |
396 } // namespace extensions | 508 } // namespace extensions |
OLD | NEW |