OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/content_settings/content_settings_pattern.h" | |
6 #include "chrome/browser/content_settings/content_settings_pattern_parser.h" | |
7 | |
8 #include "testing/gmock/include/gmock/gmock.h" | |
9 #include "testing/gtest/include/gtest/gtest.h" | |
10 | |
11 namespace { | |
12 typedef ContentSettingsPattern::BuilderInterface BuilderInterface; | |
13 } // namespace | |
14 | |
15 class MockBuilder : public ContentSettingsPattern::BuilderInterface { | |
16 public: | |
17 MOCK_METHOD0(WithSchemeWildcard, BuilderInterface*()); | |
18 MOCK_METHOD0(WithDomainWildcard, BuilderInterface*()); | |
19 MOCK_METHOD0(WithPortWildcard, BuilderInterface*()); | |
20 MOCK_METHOD1(WithScheme, BuilderInterface*(const std::string& scheme)); | |
21 MOCK_METHOD1(WithHost, BuilderInterface*(const std::string& host)); | |
22 MOCK_METHOD1(WithPort, BuilderInterface*(const std::string& port)); | |
23 MOCK_METHOD1(WithPath, BuilderInterface*(const std::string& path)); | |
24 MOCK_METHOD0(Invalid, BuilderInterface*()); | |
25 MOCK_METHOD0(Build, ContentSettingsPattern()); | |
26 }; | |
27 | |
28 TEST(ContentSettingsPatternParserTest, ParsePatterns) { | |
29 // Test valid patterns | |
30 MockBuilder builder; | |
31 | |
32 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( | |
33 ::testing::Return(&builder)); | |
34 EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce( | |
35 ::testing::Return(&builder)); | |
36 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( | |
37 ::testing::Return(&builder)); | |
38 content_settings::PatternParser::Parse( | |
39 "http://www.youtube.com:8080", &builder); | |
40 ::testing::Mock::VerifyAndClear(&builder); | |
41 | |
42 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( | |
43 ::testing::Return(&builder)); | |
44 EXPECT_CALL(builder, WithHost("www.gmail.com")).Times(1).WillOnce( | |
45 ::testing::Return(&builder)); | |
46 EXPECT_CALL(builder, WithPort("80")).Times(1).WillOnce( | |
47 ::testing::Return(&builder)); | |
48 content_settings::PatternParser::Parse("*://www.gmail.com:80", &builder); | |
49 ::testing::Mock::VerifyAndClear(&builder); | |
50 | |
51 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( | |
52 ::testing::Return(&builder)); | |
53 EXPECT_CALL(builder, WithHost("www.gmail.com")).Times(1).WillOnce( | |
54 ::testing::Return(&builder)); | |
55 EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce( | |
56 ::testing::Return(&builder)); | |
57 content_settings::PatternParser::Parse("http://www.gmail.com:*", &builder); | |
58 ::testing::Mock::VerifyAndClear(&builder); | |
59 | |
60 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( | |
61 ::testing::Return(&builder)); | |
62 EXPECT_CALL(builder, WithDomainWildcard()).WillOnce( | |
63 ::testing::Return(&builder)); | |
64 EXPECT_CALL(builder, WithHost("google.com")).Times(1).WillOnce( | |
65 ::testing::Return(&builder)); | |
66 EXPECT_CALL(builder, WithPort("80")).Times(1).WillOnce( | |
67 ::testing::Return(&builder)); | |
68 content_settings::PatternParser::Parse("http://[*.]google.com:80", &builder); | |
69 ::testing::Mock::VerifyAndClear(&builder); | |
70 | |
71 EXPECT_CALL(builder, WithScheme("https")).Times(1).WillOnce( | |
72 ::testing::Return(&builder)); | |
73 EXPECT_CALL(builder, WithHost("[::1]")).Times(1).WillOnce( | |
74 ::testing::Return(&builder)); | |
75 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( | |
76 ::testing::Return(&builder)); | |
77 content_settings::PatternParser::Parse("https://[::1]:8080", &builder); | |
78 ::testing::Mock::VerifyAndClear(&builder); | |
79 | |
80 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( | |
81 ::testing::Return(&builder)); | |
82 EXPECT_CALL(builder, WithHost("127.0.0.1")).Times(1).WillOnce( | |
83 ::testing::Return(&builder)); | |
84 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( | |
85 ::testing::Return(&builder)); | |
86 content_settings::PatternParser::Parse("http://127.0.0.1:8080", &builder); | |
87 ::testing::Mock::VerifyAndClear(&builder); | |
88 | |
89 EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce( | |
90 ::testing::Return(&builder)); | |
91 EXPECT_CALL(builder, WithPath("/foo/bar/test.html")).Times(1).WillOnce( | |
92 ::testing::Return(&builder)); | |
93 content_settings::PatternParser::Parse( | |
94 "file:///foo/bar/test.html", &builder); | |
95 ::testing::Mock::VerifyAndClear(&builder); | |
96 | |
97 // Test valid pattern short forms | |
98 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( | |
99 ::testing::Return(&builder)); | |
100 EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce( | |
101 ::testing::Return(&builder)); | |
102 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( | |
103 ::testing::Return(&builder)); | |
104 content_settings::PatternParser::Parse("www.youtube.com:8080", &builder); | |
105 ::testing::Mock::VerifyAndClear(&builder); | |
106 | |
107 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( | |
108 ::testing::Return(&builder)); | |
109 EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce( | |
110 ::testing::Return(&builder)); | |
111 EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce( | |
112 ::testing::Return(&builder)); | |
113 content_settings::PatternParser::Parse("www.youtube.com", &builder); | |
114 ::testing::Mock::VerifyAndClear(&builder); | |
115 | |
116 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( | |
117 ::testing::Return(&builder)); | |
118 EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce( | |
119 ::testing::Return(&builder)); | |
120 EXPECT_CALL(builder, WithHost("youtube.com")).Times(1).WillOnce( | |
121 ::testing::Return(&builder)); | |
122 EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce( | |
123 ::testing::Return(&builder)); | |
124 content_settings::PatternParser::Parse("[*.]youtube.com", &builder); | |
125 ::testing::Mock::VerifyAndClear(&builder); | |
126 | |
127 // Test invalid patterns | |
128 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( | |
129 ::testing::Return(&builder)); | |
130 content_settings::PatternParser::Parse("*youtube.com", &builder); | |
131 ::testing::Mock::VerifyAndClear(&builder); | |
132 | |
133 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( | |
134 ::testing::Return(&builder)); | |
135 content_settings::PatternParser::Parse("*.youtube.com", &builder); | |
136 ::testing::Mock::VerifyAndClear(&builder); | |
137 | |
138 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( | |
139 ::testing::Return(&builder)); | |
140 content_settings::PatternParser::Parse("www.youtube.com*", &builder); | |
141 ::testing::Mock::VerifyAndClear(&builder); | |
142 } | |
143 | |
144 TEST(ContentSettingsPatternParserTest, SerializePatterns) { | |
145 ContentSettingsPattern::PatternParts parts; | |
146 parts.scheme = "http"; | |
147 parts.host = "www.youtube.com"; | |
148 parts.port = "8080"; | |
149 EXPECT_STREQ("http://www.youtube.com:8080", | |
150 content_settings::PatternParser::ToString(parts).c_str()); | |
151 | |
152 parts = ContentSettingsPattern::PatternParts(); | |
153 parts.scheme = "file"; | |
154 parts.path = "/foo/bar/test.html"; | |
155 EXPECT_STREQ("file:///foo/bar/test.html", | |
156 content_settings::PatternParser::ToString(parts).c_str()); | |
157 } | |
OLD | NEW |