Index: extensions/common/url_pattern_unittest.cc |
diff --git a/extensions/common/url_pattern_unittest.cc b/extensions/common/url_pattern_unittest.cc |
index c37b73d7734bd91a2e4ca10489c1ed5ca10e7f0d..be8a9c0a29a8f6142dac34f91ffc0ce62310a4ea 100644 |
--- a/extensions/common/url_pattern_unittest.cc |
+++ b/extensions/common/url_pattern_unittest.cc |
@@ -7,6 +7,8 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "googleurl/src/gurl.h" |
+namespace { |
+ |
// See url_pattern.h for examples of valid and invalid patterns. |
static const int kAllSchemes = |
@@ -448,15 +450,23 @@ TEST(ExtensionURLPatternTest, GetAsString) { |
} |
} |
-void TestPatternOverlap(const URLPattern& pattern1, const URLPattern& pattern2, |
- bool expect_overlap) { |
- EXPECT_EQ(expect_overlap, pattern1.OverlapsWith(pattern2)) |
- << pattern1.GetAsString() << ", " << pattern2.GetAsString(); |
- EXPECT_EQ(expect_overlap, pattern2.OverlapsWith(pattern1)) |
- << pattern2.GetAsString() << ", " << pattern1.GetAsString(); |
+testing::AssertionResult Overlaps(const URLPattern& pattern1, |
+ const URLPattern& pattern2) { |
+ if (!pattern1.OverlapsWith(pattern2)) { |
+ return testing::AssertionFailure() |
+ << pattern1.GetAsString() << " does not overlap " << |
+ pattern2.GetAsString(); |
+ } |
+ if (!pattern2.OverlapsWith(pattern1)) { |
+ return testing::AssertionFailure() |
+ << pattern2.GetAsString() << " does not overlap " << |
+ pattern1.GetAsString(); |
+ } |
+ return testing::AssertionSuccess() |
+ << pattern1.GetAsString() << " overlaps with " << pattern2.GetAsString(); |
} |
-TEST(ExtensionURLPatternTest, OverlapsWith) { |
+TEST(ExtensionURLPatternTest, Overlaps) { |
URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); |
URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); |
URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); |
@@ -469,22 +479,22 @@ TEST(ExtensionURLPatternTest, OverlapsWith) { |
URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); |
URLPattern pattern10(kAllSchemes, "<all_urls>"); |
- TestPatternOverlap(pattern1, pattern1, true); |
- TestPatternOverlap(pattern1, pattern2, false); |
- TestPatternOverlap(pattern1, pattern3, true); |
- TestPatternOverlap(pattern1, pattern4, false); |
- TestPatternOverlap(pattern3, pattern4, false); |
- TestPatternOverlap(pattern4, pattern5, false); |
- TestPatternOverlap(pattern5, pattern6, true); |
+ EXPECT_TRUE(Overlaps(pattern1, pattern1)); |
+ EXPECT_FALSE(Overlaps(pattern1, pattern2)); |
+ EXPECT_TRUE(Overlaps(pattern1, pattern3)); |
+ EXPECT_FALSE(Overlaps(pattern1, pattern4)); |
+ EXPECT_FALSE(Overlaps(pattern3, pattern4)); |
+ EXPECT_FALSE(Overlaps(pattern4, pattern5)); |
+ EXPECT_TRUE(Overlaps(pattern5, pattern6)); |
// Test that scheme restrictions work. |
- TestPatternOverlap(pattern1, pattern8, true); |
- TestPatternOverlap(pattern1, pattern9, false); |
- TestPatternOverlap(pattern1, pattern10, true); |
+ EXPECT_TRUE(Overlaps(pattern1, pattern8)); |
+ EXPECT_FALSE(Overlaps(pattern1, pattern9)); |
+ EXPECT_TRUE(Overlaps(pattern1, pattern10)); |
// Test that '<all_urls>' includes file URLs, while scheme '*' does not. |
- TestPatternOverlap(pattern7, pattern8, false); |
- TestPatternOverlap(pattern7, pattern10, true); |
+ EXPECT_FALSE(Overlaps(pattern7, pattern8)); |
+ EXPECT_TRUE(Overlaps(pattern7, pattern10)); |
// Test that wildcard schemes are handled correctly, especially when compared |
// to each-other. |
@@ -492,14 +502,14 @@ TEST(ExtensionURLPatternTest, OverlapsWith) { |
URLPattern pattern12(kAllSchemes, "*://example.com/*"); |
URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); |
URLPattern pattern14(kAllSchemes, "*://google.com/*"); |
- TestPatternOverlap(pattern8, pattern12, true); |
- TestPatternOverlap(pattern9, pattern12, true); |
- TestPatternOverlap(pattern10, pattern12, true); |
- TestPatternOverlap(pattern11, pattern12, true); |
- TestPatternOverlap(pattern12, pattern13, true); |
- TestPatternOverlap(pattern11, pattern13, true); |
- TestPatternOverlap(pattern14, pattern12, false); |
- TestPatternOverlap(pattern14, pattern13, false); |
+ EXPECT_TRUE(Overlaps(pattern8, pattern12)); |
+ EXPECT_TRUE(Overlaps(pattern9, pattern12)); |
+ EXPECT_TRUE(Overlaps(pattern10, pattern12)); |
+ EXPECT_TRUE(Overlaps(pattern11, pattern12)); |
+ EXPECT_TRUE(Overlaps(pattern12, pattern13)); |
+ EXPECT_TRUE(Overlaps(pattern11, pattern13)); |
+ EXPECT_FALSE(Overlaps(pattern14, pattern12)); |
+ EXPECT_FALSE(Overlaps(pattern14, pattern13)); |
} |
TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { |
@@ -657,3 +667,116 @@ TEST(ExtensionURLPatternTest, CanReusePatternWithParse) { |
EXPECT_FALSE(pattern3.MatchesURL(GURL("http://aa.com/path"))); |
EXPECT_TRUE(pattern3.MatchesURL(GURL("http://aa.com:88/path"))); |
} |
+ |
+// Returns success if neither |a| nor |b| encompasses the other. |
+testing::AssertionResult NeitherContains(const URLPattern& a, |
+ const URLPattern& b) { |
+ if (a.Contains(b)) |
+ return testing::AssertionFailure() << a.GetAsString() << " encompasses " << |
+ b.GetAsString(); |
+ if (b.Contains(a)) |
+ return testing::AssertionFailure() << b.GetAsString() << " encompasses " << |
+ a.GetAsString(); |
+ return testing::AssertionSuccess() << |
+ "Neither " << a.GetAsString() << " nor " << b.GetAsString() << |
+ " encompass the other"; |
+} |
+ |
+// Returns success if |a| encompasses |b| but not the other way around. |
+testing::AssertionResult StrictlyContains(const URLPattern& a, |
+ const URLPattern& b) { |
+ if (!a.Contains(b)) |
+ return testing::AssertionFailure() << a.GetAsString() << |
+ " does not encompass " << |
+ b.GetAsString(); |
+ if (b.Contains(a)) |
+ return testing::AssertionFailure() << b.GetAsString() << " encompasses " << |
+ a.GetAsString(); |
+ return testing::AssertionSuccess() << a.GetAsString() << |
+ " strictly encompasses " << |
+ b.GetAsString(); |
+} |
+ |
+TEST(ExtensionURLPatternTest, Subset) { |
+ URLPattern pattern1(kAllSchemes, "http://www.google.com/foo/*"); |
+ URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); |
+ URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); |
+ URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); |
+ URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); |
+ URLPattern pattern6(kAllSchemes, "http://www.yahooo.com/bar/baz/*"); |
+ URLPattern pattern7(kAllSchemes, "file:///*"); |
+ URLPattern pattern8(kAllSchemes, "*://*/*"); |
+ URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); |
+ URLPattern pattern10(kAllSchemes, "<all_urls>"); |
+ URLPattern pattern11(kAllSchemes, "http://example.com/*"); |
+ URLPattern pattern12(kAllSchemes, "*://example.com/*"); |
+ URLPattern pattern13(kAllSchemes, "*://example.com/foo/*"); |
+ |
+ // All patterns should encompass themselves. |
+ EXPECT_TRUE(pattern1.Contains(pattern1)); |
+ EXPECT_TRUE(pattern2.Contains(pattern2)); |
+ EXPECT_TRUE(pattern3.Contains(pattern3)); |
+ EXPECT_TRUE(pattern4.Contains(pattern4)); |
+ EXPECT_TRUE(pattern5.Contains(pattern5)); |
+ EXPECT_TRUE(pattern6.Contains(pattern6)); |
+ EXPECT_TRUE(pattern7.Contains(pattern7)); |
+ EXPECT_TRUE(pattern8.Contains(pattern8)); |
+ EXPECT_TRUE(pattern9.Contains(pattern9)); |
+ EXPECT_TRUE(pattern10.Contains(pattern10)); |
+ EXPECT_TRUE(pattern11.Contains(pattern11)); |
+ EXPECT_TRUE(pattern12.Contains(pattern12)); |
+ EXPECT_TRUE(pattern13.Contains(pattern13)); |
+ |
+ // pattern1's relationship to the other patterns. |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern2)); |
+ EXPECT_TRUE(StrictlyContains(pattern3, pattern1)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern4)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern5)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern6)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern7)); |
+ EXPECT_TRUE(StrictlyContains(pattern8, pattern1)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern9)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern1)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern11)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern12)); |
+ EXPECT_TRUE(NeitherContains(pattern1, pattern13)); |
+ |
+ // pattern2's relationship to the other patterns. |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern3)); |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern4)); |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern5)); |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern6)); |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern7)); |
+ EXPECT_TRUE(StrictlyContains(pattern8, pattern2)); |
+ EXPECT_TRUE(StrictlyContains(pattern9, pattern2)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern2)); |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern11)); |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern12)); |
+ EXPECT_TRUE(NeitherContains(pattern2, pattern13)); |
+ |
+ // Specifically test file:// URLs. |
+ EXPECT_TRUE(NeitherContains(pattern7, pattern8)); |
+ EXPECT_TRUE(NeitherContains(pattern7, pattern9)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern7)); |
+ |
+ // <all_urls> encompasses everything. |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern1)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern2)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern3)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern4)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern5)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern6)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern7)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern8)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern9)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern11)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern12)); |
+ EXPECT_TRUE(StrictlyContains(pattern10, pattern13)); |
+ |
+ // More... |
+ EXPECT_TRUE(StrictlyContains(pattern12, pattern11)); |
+ EXPECT_TRUE(NeitherContains(pattern11, pattern13)); |
+ EXPECT_TRUE(StrictlyContains(pattern12, pattern13)); |
+} |
+ |
+} // namespace |