15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/url_pattern_set.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <sstream>
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddPattern(URLPatternSet* set, const std::string& pattern) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int schemes = URLPattern::SCHEME_ALL;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set->AddPattern(URLPattern(schemes, pattern));
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)URLPatternSet Patterns(const std::string& pattern) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set, pattern);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return set;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)URLPatternSet Patterns(const std::string& pattern1,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const std::string& pattern2) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set, pattern1);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set, pattern2);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return set;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, Empty) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("http://www.foo.com/bar")));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL()));
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("invalid")));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, One) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set, "http://www.google.com/*");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/")));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey")));
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("https://www.google.com/")));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("https://www.microsoft.com/")));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, Two) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set, "http://www.google.com/*");
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set, "http://www.yahoo.com/*");
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set.MatchesURL(GURL("http://www.google.com/monkey")));
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set.MatchesURL(GURL("http://www.yahoo.com/monkey")));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("https://www.apple.com/monkey")));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(URLPatternSetTest, StreamOperatorEmpty) {
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  URLPatternSet set;
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::ostringstream stream;
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  stream << set;
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ("{ }", stream.str());
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
73116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(URLPatternSetTest, StreamOperatorOne) {
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  URLPatternSet set;
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  AddPattern(&set, "http://www.google.com/*");
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::ostringstream stream;
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  stream << set;
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ("{ \"http://www.google.com/*\" }", stream.str());
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
82116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(URLPatternSetTest, StreamOperatorTwo) {
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  URLPatternSet set;
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  AddPattern(&set, "http://www.google.com/*");
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  AddPattern(&set, "http://www.yahoo.com/*");
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::ostringstream stream;
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  stream << set;
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ("{ \"http://www.google.com/*\", \"http://www.yahoo.com/*\" }",
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            stream.str());
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, OverlapsWith) {
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set1;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.google.com/f*");
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.yahoo.com/b*");
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set2;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.reddit.com/f*");
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.yahoo.com/z*");
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set3;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set3, "http://www.google.com/q/*");
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set3, "http://www.yahoo.com/b/*");
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set1.OverlapsWith(set2));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set2.OverlapsWith(set1));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set1.OverlapsWith(set3));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set3.OverlapsWith(set1));
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, CreateDifference) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet expected;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set1;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set2;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.google.com/f*");
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.yahoo.com/b*");
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Subtract an empty set.
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet result;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet::CreateDifference(set1, set2, &result);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(set1, result);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Subtract a real set.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.reddit.com/f*");
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.yahoo.com/z*");
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.google.com/f*");
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&expected, "http://www.yahoo.com/b*");
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result.ClearPatterns();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet::CreateDifference(set1, set2, &result);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected, result);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result.is_empty());
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set1.Contains(result));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result.Contains(set2));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set2.Contains(result));
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet intersection;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet::CreateIntersection(result, set2, &intersection);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(intersection.is_empty());
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, CreateIntersection) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet empty_set;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet expected;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set1;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.google.com/f*");
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.yahoo.com/b*");
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Intersection with an empty set.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet result;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet::CreateIntersection(set1, empty_set, &result);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected, result);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(result.is_empty());
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(empty_set.Contains(result));
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(result.Contains(empty_set));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set1.Contains(result));
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Intersection with a real set.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set2;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.reddit.com/f*");
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.yahoo.com/z*");
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.google.com/f*");
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&expected, "http://www.google.com/f*");
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result.ClearPatterns();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet::CreateIntersection(set1, set2, &result);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected, result);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(result.is_empty());
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set1.Contains(result));
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set2.Contains(result));
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, CreateUnion) {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet empty_set;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set1;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.google.com/f*");
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.yahoo.com/b*");
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet expected;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&expected, "http://www.google.com/f*");
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&expected, "http://www.yahoo.com/b*");
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Union with an empty set.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet result;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet::CreateUnion(set1, empty_set, &result);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected, result);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Union with a real set.
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set2;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.reddit.com/f*");
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.yahoo.com/z*");
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.google.com/f*");
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&expected, "http://www.reddit.com/f*");
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&expected, "http://www.yahoo.com/z*");
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result.ClearPatterns();
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet::CreateUnion(set1, set2, &result);
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected, result);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, Contains) {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set1;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set2;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet empty_set;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.google.com/*");
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.yahoo.com/*");
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.reddit.com/*");
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set1.Contains(set2));
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set1.Contains(empty_set));
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(empty_set.Contains(set1));
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.yahoo.com/*");
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set1.Contains(set2));
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set2.Contains(set1));
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.google.com/*");
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set1.Contains(set2));
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(set2.Contains(set1));
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note that this checks if individual patterns contain other patterns, not
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // just equality. For example:
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://*.reddit.com/*");
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(set1.Contains(set2));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(set2.Contains(set1));
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, Duplicates) {
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set1;
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set2;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.google.com/*");
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set2, "http://www.google.com/*");
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddPattern(&set1, "http://www.google.com/*");
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The sets should still be equal after adding a duplicate.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(set2, set1);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, ToValueAndPopulate) {
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set1;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  URLPatternSet set2;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<std::string> patterns;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  patterns.push_back("http://www.google.com/*");
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  patterns.push_back("http://www.yahoo.com/*");
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < patterns.size(); ++i)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&set1, patterns[i]);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string error;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool allow_file_access = false;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<base::ListValue> value(set1.ToValue());
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set2.Populate(*value, URLPattern::SCHEME_ALL, allow_file_access, &error);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(set1, set2);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set2.ClearPatterns();
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set2.Populate(patterns, URLPattern::SCHEME_ALL, allow_file_access, &error);
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(set1, set2);
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLPatternSetTest, NwayUnion) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string google_a = "http://www.google.com/a*";
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string google_b = "http://www.google.com/b*";
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string google_c = "http://www.google.com/c*";
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string yahoo_a = "http://www.yahoo.com/a*";
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string yahoo_b = "http://www.yahoo.com/b*";
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string yahoo_c = "http://www.yahoo.com/c*";
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string reddit_a = "http://www.reddit.com/a*";
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string reddit_b = "http://www.reddit.com/b*";
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string reddit_c = "http://www.reddit.com/c*";
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Empty list.
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<URLPatternSet> empty;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet result;
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet::CreateUnion(empty, &result);
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet expected;
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, result);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Singleton list.
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<URLPatternSet> test;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_a));
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet result;
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet::CreateUnion(test, &result);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet expected = Patterns(google_a);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, result);
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // List with 2 elements.
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<URLPatternSet> test;
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_a, google_b));
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_b, google_c));
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet result;
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet::CreateUnion(test, &result);
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet expected;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_a);
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_b);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_c);
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, result);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // List with 3 elements.
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<URLPatternSet> test;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_a, google_b));
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_b, google_c));
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_a, yahoo_b));
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet result;
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet::CreateUnion(test, &result);
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet expected;
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_a);
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_b);
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_c);
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_a);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_b);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, result);
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // List with 7 elements.
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<URLPatternSet> test;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_a));
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_b));
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_c));
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_a));
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_b));
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_c));
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(reddit_a));
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet result;
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet::CreateUnion(test, &result);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet expected;
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_a);
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_b);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_c);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_a);
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_b);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_c);
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, reddit_a);
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, result);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // List with 8 elements.
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<URLPatternSet> test;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_a));
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_b));
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_c));
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_a));
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_b));
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_c));
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(reddit_a));
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(reddit_b));
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet result;
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet::CreateUnion(test, &result);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet expected;
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_a);
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_b);
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_c);
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_a);
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_b);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_c);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, reddit_a);
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, reddit_b);
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, result);
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // List with 9 elements.
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<URLPatternSet> test;
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_a));
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_b));
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(google_c));
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_a));
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_b));
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(yahoo_c));
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(reddit_a));
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(reddit_b));
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test.push_back(Patterns(reddit_c));
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet result;
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet::CreateUnion(test, &result);
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    URLPatternSet expected;
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_a);
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_b);
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, google_c);
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_a);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_b);
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, yahoo_c);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, reddit_a);
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, reddit_b);
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddPattern(&expected, reddit_c);
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, result);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST(URLPatternSetTest, AddOrigin) {
4256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  URLPatternSet set;
4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(set.AddOrigin(
4276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      URLPattern::SCHEME_ALL, GURL("https://www.google.com/")));
4286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(set.MatchesURL(GURL("https://www.google.com/foo/bar")));
4296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("http://www.google.com/foo/bar")));
4306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("https://en.google.com/foo/bar")));
4316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  set.ClearPatterns();
4326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(set.AddOrigin(
4346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      URLPattern::SCHEME_ALL, GURL("https://google.com/")));
4356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(set.MatchesURL(GURL("https://www.google.com/foo/bar")));
4366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_TRUE(set.MatchesURL(GURL("https://google.com/foo/bar")));
4376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_FALSE(set.AddOrigin(
4396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      URLPattern::SCHEME_HTTP, GURL("https://google.com/")));
4406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
443