OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/common/extensions/extension.h" | 5 #include "chrome/common/extensions/extension.h" |
6 | 6 |
7 #include "googleurl/src/gurl.h" | 7 #include "googleurl/src/gurl.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 static const int kAllSchemes = | 10 namespace { |
11 URLPattern::SCHEME_HTTP | | |
12 URLPattern::SCHEME_HTTPS | | |
13 URLPattern::SCHEME_FILE | | |
14 URLPattern::SCHEME_FTP | | |
15 URLPattern::SCHEME_CHROMEUI; | |
16 | 11 |
| 12 static void AddPattern(URLPatternSet* set, const std::string& pattern) { |
| 13 int schemes = URLPattern::SCHEME_ALL; |
| 14 set->AddPattern(URLPattern(schemes, pattern)); |
| 15 } |
| 16 |
| 17 } |
17 TEST(URLPatternSetTest, Empty) { | 18 TEST(URLPatternSetTest, Empty) { |
18 URLPatternSet extent; | 19 URLPatternSet set; |
19 EXPECT_FALSE(extent.MatchesURL(GURL("http://www.foo.com/bar"))); | 20 EXPECT_FALSE(set.MatchesURL(GURL("http://www.foo.com/bar"))); |
20 EXPECT_FALSE(extent.MatchesURL(GURL())); | 21 EXPECT_FALSE(set.MatchesURL(GURL())); |
21 EXPECT_FALSE(extent.MatchesURL(GURL("invalid"))); | 22 EXPECT_FALSE(set.MatchesURL(GURL("invalid"))); |
22 } | 23 } |
23 | 24 |
24 TEST(URLPatternSetTest, One) { | 25 TEST(URLPatternSetTest, One) { |
25 URLPatternSet extent; | 26 URLPatternSet set; |
26 extent.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/*")); | 27 AddPattern(&set, "http://www.google.com/*"); |
27 | 28 |
28 EXPECT_TRUE(extent.MatchesURL(GURL("http://www.google.com/"))); | 29 EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/"))); |
29 EXPECT_TRUE(extent.MatchesURL(GURL("http://www.google.com/monkey"))); | 30 EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey"))); |
30 EXPECT_FALSE(extent.MatchesURL(GURL("https://www.google.com/"))); | 31 EXPECT_FALSE(set.MatchesURL(GURL("https://www.google.com/"))); |
31 EXPECT_FALSE(extent.MatchesURL(GURL("https://www.microsoft.com/"))); | 32 EXPECT_FALSE(set.MatchesURL(GURL("https://www.microsoft.com/"))); |
32 } | 33 } |
33 | 34 |
34 TEST(URLPatternSetTest, Two) { | 35 TEST(URLPatternSetTest, Two) { |
35 URLPatternSet extent; | 36 URLPatternSet set; |
36 extent.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/*")); | 37 AddPattern(&set, "http://www.google.com/*"); |
37 extent.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/*")); | 38 AddPattern(&set, "http://www.yahoo.com/*"); |
38 | 39 |
39 EXPECT_TRUE(extent.MatchesURL(GURL("http://www.google.com/monkey"))); | 40 EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey"))); |
40 EXPECT_TRUE(extent.MatchesURL(GURL("http://www.yahoo.com/monkey"))); | 41 EXPECT_TRUE(set.MatchesURL(GURL("http://www.yahoo.com/monkey"))); |
41 EXPECT_FALSE(extent.MatchesURL(GURL("https://www.apple.com/monkey"))); | 42 EXPECT_FALSE(set.MatchesURL(GURL("https://www.apple.com/monkey"))); |
42 } | 43 } |
43 | 44 |
44 TEST(URLPatternSetTest, OverlapsWith) { | 45 TEST(URLPatternSetTest, OverlapsWith) { |
45 URLPatternSet extent1; | 46 URLPatternSet set1; |
46 extent1.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); | 47 AddPattern(&set1, "http://www.google.com/f*"); |
47 extent1.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b*")); | 48 AddPattern(&set1, "http://www.yahoo.com/b*"); |
48 | 49 |
49 URLPatternSet extent2; | 50 URLPatternSet set2; |
50 extent2.AddPattern(URLPattern(kAllSchemes, "http://www.reddit.com/f*")); | 51 AddPattern(&set2, "http://www.reddit.com/f*"); |
51 extent2.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/z*")); | 52 AddPattern(&set2, "http://www.yahoo.com/z*"); |
52 | 53 |
53 URLPatternSet extent3; | 54 URLPatternSet set3; |
54 extent3.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/q/*")); | 55 AddPattern(&set3, "http://www.google.com/q/*"); |
55 extent3.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b/*")); | 56 AddPattern(&set3, "http://www.yahoo.com/b/*"); |
56 | 57 |
57 EXPECT_FALSE(extent1.OverlapsWith(extent2)); | 58 EXPECT_FALSE(set1.OverlapsWith(set2)); |
58 EXPECT_FALSE(extent2.OverlapsWith(extent1)); | 59 EXPECT_FALSE(set2.OverlapsWith(set1)); |
59 | 60 |
60 EXPECT_TRUE(extent1.OverlapsWith(extent3)); | 61 EXPECT_TRUE(set1.OverlapsWith(set3)); |
61 EXPECT_TRUE(extent3.OverlapsWith(extent1)); | 62 EXPECT_TRUE(set3.OverlapsWith(set1)); |
| 63 } |
| 64 |
| 65 TEST(URLPatternSetTest, CreateDifference) { |
| 66 URLPatternSet expected; |
| 67 URLPatternSet set1; |
| 68 URLPatternSet set2; |
| 69 AddPattern(&set1, "http://www.google.com/f*"); |
| 70 AddPattern(&set1, "http://www.yahoo.com/b*"); |
| 71 |
| 72 // Subtract an empty set. |
| 73 URLPatternSet result; |
| 74 URLPatternSet::CreateDifference(set1, set2, &result); |
| 75 EXPECT_EQ(set1, result); |
| 76 |
| 77 // Subtract a real set. |
| 78 AddPattern(&set2, "http://www.reddit.com/f*"); |
| 79 AddPattern(&set2, "http://www.yahoo.com/z*"); |
| 80 AddPattern(&set2, "http://www.google.com/f*"); |
| 81 |
| 82 AddPattern(&expected, "http://www.yahoo.com/b*"); |
| 83 |
| 84 result.ClearPatterns(); |
| 85 URLPatternSet::CreateDifference(set1, set2, &result); |
| 86 EXPECT_EQ(expected, result); |
| 87 EXPECT_FALSE(result.is_empty()); |
| 88 EXPECT_TRUE(set1.Contains(result)); |
| 89 EXPECT_FALSE(result.Contains(set2)); |
| 90 EXPECT_FALSE(set2.Contains(result)); |
| 91 |
| 92 URLPatternSet intersection; |
| 93 URLPatternSet::CreateIntersection(result, set2, &intersection); |
| 94 EXPECT_TRUE(intersection.is_empty()); |
| 95 } |
| 96 |
| 97 TEST(URLPatternSetTest, CreateIntersection) { |
| 98 URLPatternSet empty_set; |
| 99 URLPatternSet expected; |
| 100 URLPatternSet set1; |
| 101 AddPattern(&set1, "http://www.google.com/f*"); |
| 102 AddPattern(&set1, "http://www.yahoo.com/b*"); |
| 103 |
| 104 // Intersection with an empty set. |
| 105 URLPatternSet result; |
| 106 URLPatternSet::CreateIntersection(set1, empty_set, &result); |
| 107 EXPECT_EQ(expected, result); |
| 108 EXPECT_TRUE(result.is_empty()); |
| 109 EXPECT_TRUE(empty_set.Contains(result)); |
| 110 EXPECT_TRUE(result.Contains(empty_set)); |
| 111 EXPECT_TRUE(set1.Contains(result)); |
| 112 |
| 113 // Intersection with a real set. |
| 114 URLPatternSet set2; |
| 115 AddPattern(&set2, "http://www.reddit.com/f*"); |
| 116 AddPattern(&set2, "http://www.yahoo.com/z*"); |
| 117 AddPattern(&set2, "http://www.google.com/f*"); |
| 118 |
| 119 AddPattern(&expected, "http://www.google.com/f*"); |
| 120 |
| 121 result.ClearPatterns(); |
| 122 URLPatternSet::CreateIntersection(set1, set2, &result); |
| 123 EXPECT_EQ(expected, result); |
| 124 EXPECT_FALSE(result.is_empty()); |
| 125 EXPECT_TRUE(set1.Contains(result)); |
| 126 EXPECT_TRUE(set2.Contains(result)); |
62 } | 127 } |
63 | 128 |
64 TEST(URLPatternSetTest, CreateUnion) { | 129 TEST(URLPatternSetTest, CreateUnion) { |
65 URLPatternSet empty_extent; | 130 URLPatternSet empty_set; |
66 | 131 |
67 URLPatternSet extent1; | 132 URLPatternSet set1; |
68 extent1.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); | 133 AddPattern(&set1, "http://www.google.com/f*"); |
69 extent1.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b*")); | 134 AddPattern(&set1, "http://www.yahoo.com/b*"); |
70 | 135 |
71 URLPatternSet expected; | 136 URLPatternSet expected; |
72 expected.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); | 137 AddPattern(&expected, "http://www.google.com/f*"); |
73 expected.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/b*")); | 138 AddPattern(&expected, "http://www.yahoo.com/b*"); |
74 | 139 |
75 // Union with an empty set. | 140 // Union with an empty set. |
76 URLPatternSet result; | 141 URLPatternSet result; |
77 URLPatternSet::CreateUnion(extent1, empty_extent, &result); | 142 URLPatternSet::CreateUnion(set1, empty_set, &result); |
78 EXPECT_EQ(expected, result); | 143 EXPECT_EQ(expected, result); |
79 | 144 |
80 // Union with a real set (including a duplicate). | 145 // Union with a real set. |
81 URLPatternSet extent2; | 146 URLPatternSet set2; |
82 extent2.AddPattern(URLPattern(kAllSchemes, "http://www.reddit.com/f*")); | 147 AddPattern(&set2, "http://www.reddit.com/f*"); |
83 extent2.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/z*")); | 148 AddPattern(&set2, "http://www.yahoo.com/z*"); |
84 extent2.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); | 149 AddPattern(&set2, "http://www.google.com/f*"); |
85 | 150 |
86 expected.AddPattern(URLPattern(kAllSchemes, "http://www.reddit.com/f*")); | 151 AddPattern(&expected, "http://www.reddit.com/f*"); |
87 expected.AddPattern(URLPattern(kAllSchemes, "http://www.yahoo.com/z*")); | 152 AddPattern(&expected, "http://www.yahoo.com/z*"); |
88 // CreateUnion does not filter out duplicates right now. | |
89 expected.AddPattern(URLPattern(kAllSchemes, "http://www.google.com/f*")); | |
90 | 153 |
91 result.ClearPatterns(); | 154 result.ClearPatterns(); |
92 URLPatternSet::CreateUnion(extent1, extent2, &result); | 155 URLPatternSet::CreateUnion(set1, set2, &result); |
93 EXPECT_EQ(expected, result); | 156 EXPECT_EQ(expected, result); |
94 } | 157 } |
| 158 |
| 159 TEST(URLPatternSetTest, Contains) { |
| 160 URLPatternSet set1; |
| 161 URLPatternSet set2; |
| 162 URLPatternSet empty_set; |
| 163 |
| 164 AddPattern(&set1, "http://www.google.com/*"); |
| 165 AddPattern(&set1, "http://www.yahoo.com/*"); |
| 166 |
| 167 AddPattern(&set2, "http://www.reddit.com/*"); |
| 168 |
| 169 EXPECT_FALSE(set1.Contains(set2)); |
| 170 EXPECT_TRUE(set1.Contains(empty_set)); |
| 171 EXPECT_FALSE(empty_set.Contains(set1)); |
| 172 |
| 173 AddPattern(&set2, "http://www.yahoo.com/*"); |
| 174 |
| 175 EXPECT_FALSE(set1.Contains(set2)); |
| 176 EXPECT_FALSE(set2.Contains(set1)); |
| 177 |
| 178 AddPattern(&set2, "http://www.google.com/*"); |
| 179 |
| 180 EXPECT_FALSE(set1.Contains(set2)); |
| 181 EXPECT_TRUE(set2.Contains(set1)); |
| 182 |
| 183 // Note that this just checks pattern equality, and not if individual patterns |
| 184 // contain other patterns. For example: |
| 185 AddPattern(&set1, "http://*.reddit.com/*"); |
| 186 EXPECT_FALSE(set1.Contains(set2)); |
| 187 EXPECT_FALSE(set2.Contains(set1)); |
| 188 } |
| 189 |
| 190 TEST(URLPatternSetTest, Duplicates) { |
| 191 URLPatternSet set1; |
| 192 URLPatternSet set2; |
| 193 |
| 194 AddPattern(&set1, "http://www.google.com/*"); |
| 195 AddPattern(&set2, "http://www.google.com/*"); |
| 196 |
| 197 AddPattern(&set1, "http://www.google.com/*"); |
| 198 |
| 199 // The sets should still be equal after adding a duplicate. |
| 200 EXPECT_EQ(set2, set1); |
| 201 } |
OLD | NEW |