OLD | NEW |
1 // Copyright (c) 2011 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 "chrome/common/content_settings_pattern.h" | 5 #include "chrome/common/content_settings_pattern.h" |
6 #include "chrome/common/content_settings_pattern_parser.h" | 6 #include "chrome/common/content_settings_pattern_parser.h" |
7 | 7 |
8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
11 namespace { | 11 namespace { |
12 typedef ContentSettingsPattern::BuilderInterface BuilderInterface; | 12 typedef ContentSettingsPattern::BuilderInterface BuilderInterface; |
13 } // namespace | 13 } // namespace |
14 | 14 |
15 class MockBuilder : public ContentSettingsPattern::BuilderInterface { | 15 class MockBuilder : public ContentSettingsPattern::BuilderInterface { |
16 public: | 16 public: |
17 MOCK_METHOD0(WithSchemeWildcard, BuilderInterface*()); | 17 MOCK_METHOD0(WithSchemeWildcard, BuilderInterface*()); |
18 MOCK_METHOD0(WithDomainWildcard, BuilderInterface*()); | 18 MOCK_METHOD0(WithDomainWildcard, BuilderInterface*()); |
19 MOCK_METHOD0(WithPortWildcard, BuilderInterface*()); | 19 MOCK_METHOD0(WithPortWildcard, BuilderInterface*()); |
20 MOCK_METHOD1(WithScheme, BuilderInterface*(const std::string& scheme)); | 20 MOCK_METHOD1(WithScheme, BuilderInterface*(const std::string& scheme)); |
21 MOCK_METHOD1(WithHost, BuilderInterface*(const std::string& host)); | 21 MOCK_METHOD1(WithHost, BuilderInterface*(const std::string& host)); |
22 MOCK_METHOD1(WithPort, BuilderInterface*(const std::string& port)); | 22 MOCK_METHOD1(WithPort, BuilderInterface*(const std::string& port)); |
23 MOCK_METHOD1(WithPath, BuilderInterface*(const std::string& path)); | 23 MOCK_METHOD1(WithPath, BuilderInterface*(const std::string& path)); |
| 24 MOCK_METHOD0(WithPathWildcard, BuilderInterface*()); |
24 MOCK_METHOD0(Invalid, BuilderInterface*()); | 25 MOCK_METHOD0(Invalid, BuilderInterface*()); |
25 MOCK_METHOD0(Build, ContentSettingsPattern()); | 26 MOCK_METHOD0(Build, ContentSettingsPattern()); |
26 }; | 27 }; |
27 | 28 |
28 TEST(ContentSettingsPatternParserTest, ParsePatterns) { | 29 TEST(ContentSettingsPatternParserTest, ParsePatterns) { |
29 // Test valid patterns | 30 // Test valid patterns |
30 MockBuilder builder; | 31 ::testing::StrictMock<MockBuilder> builder; |
| 32 |
| 33 // WithPathWildcard() is not called for "*". (Need a strict Mock for this |
| 34 // case.) |
| 35 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( |
| 36 ::testing::Return(&builder)); |
| 37 EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce( |
| 38 ::testing::Return(&builder)); |
| 39 EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce( |
| 40 ::testing::Return(&builder)); |
| 41 content_settings::PatternParser::Parse("*", &builder); |
| 42 ::testing::Mock::VerifyAndClear(&builder); |
31 | 43 |
32 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( | 44 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( |
33 ::testing::Return(&builder)); | 45 ::testing::Return(&builder)); |
34 EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce( | 46 EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce( |
35 ::testing::Return(&builder)); | 47 ::testing::Return(&builder)); |
36 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( | 48 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( |
37 ::testing::Return(&builder)); | 49 ::testing::Return(&builder)); |
38 content_settings::PatternParser::Parse( | 50 content_settings::PatternParser::Parse( |
39 "http://www.youtube.com:8080", &builder); | 51 "http://www.youtube.com:8080", &builder); |
40 ::testing::Mock::VerifyAndClear(&builder); | 52 ::testing::Mock::VerifyAndClear(&builder); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 | 91 |
80 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( | 92 EXPECT_CALL(builder, WithScheme("http")).Times(1).WillOnce( |
81 ::testing::Return(&builder)); | 93 ::testing::Return(&builder)); |
82 EXPECT_CALL(builder, WithHost("127.0.0.1")).Times(1).WillOnce( | 94 EXPECT_CALL(builder, WithHost("127.0.0.1")).Times(1).WillOnce( |
83 ::testing::Return(&builder)); | 95 ::testing::Return(&builder)); |
84 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( | 96 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( |
85 ::testing::Return(&builder)); | 97 ::testing::Return(&builder)); |
86 content_settings::PatternParser::Parse("http://127.0.0.1:8080", &builder); | 98 content_settings::PatternParser::Parse("http://127.0.0.1:8080", &builder); |
87 ::testing::Mock::VerifyAndClear(&builder); | 99 ::testing::Mock::VerifyAndClear(&builder); |
88 | 100 |
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 | 101 // Test valid pattern short forms |
98 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( | 102 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( |
99 ::testing::Return(&builder)); | 103 ::testing::Return(&builder)); |
100 EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce( | 104 EXPECT_CALL(builder, WithHost("www.youtube.com")).Times(1).WillOnce( |
101 ::testing::Return(&builder)); | 105 ::testing::Return(&builder)); |
102 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( | 106 EXPECT_CALL(builder, WithPort("8080")).Times(1).WillOnce( |
103 ::testing::Return(&builder)); | 107 ::testing::Return(&builder)); |
104 content_settings::PatternParser::Parse("www.youtube.com:8080", &builder); | 108 content_settings::PatternParser::Parse("www.youtube.com:8080", &builder); |
105 ::testing::Mock::VerifyAndClear(&builder); | 109 ::testing::Mock::VerifyAndClear(&builder); |
106 | 110 |
(...skipping 11 matching lines...) Expand all Loading... |
118 EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce( | 122 EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce( |
119 ::testing::Return(&builder)); | 123 ::testing::Return(&builder)); |
120 EXPECT_CALL(builder, WithHost("youtube.com")).Times(1).WillOnce( | 124 EXPECT_CALL(builder, WithHost("youtube.com")).Times(1).WillOnce( |
121 ::testing::Return(&builder)); | 125 ::testing::Return(&builder)); |
122 EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce( | 126 EXPECT_CALL(builder, WithPortWildcard()).Times(1).WillOnce( |
123 ::testing::Return(&builder)); | 127 ::testing::Return(&builder)); |
124 content_settings::PatternParser::Parse("[*.]youtube.com", &builder); | 128 content_settings::PatternParser::Parse("[*.]youtube.com", &builder); |
125 ::testing::Mock::VerifyAndClear(&builder); | 129 ::testing::Mock::VerifyAndClear(&builder); |
126 | 130 |
127 // Test invalid patterns | 131 // Test invalid patterns |
| 132 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( |
| 133 ::testing::Return(&builder)); |
128 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( | 134 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( |
129 ::testing::Return(&builder)); | 135 ::testing::Return(&builder)); |
130 content_settings::PatternParser::Parse("*youtube.com", &builder); | 136 content_settings::PatternParser::Parse("*youtube.com", &builder); |
131 ::testing::Mock::VerifyAndClear(&builder); | 137 ::testing::Mock::VerifyAndClear(&builder); |
132 | 138 |
| 139 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( |
| 140 ::testing::Return(&builder)); |
133 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( | 141 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( |
134 ::testing::Return(&builder)); | 142 ::testing::Return(&builder)); |
135 content_settings::PatternParser::Parse("*.youtube.com", &builder); | 143 content_settings::PatternParser::Parse("*.youtube.com", &builder); |
136 ::testing::Mock::VerifyAndClear(&builder); | 144 ::testing::Mock::VerifyAndClear(&builder); |
137 | 145 |
| 146 EXPECT_CALL(builder, WithSchemeWildcard()).Times(1).WillOnce( |
| 147 ::testing::Return(&builder)); |
138 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( | 148 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( |
139 ::testing::Return(&builder)); | 149 ::testing::Return(&builder)); |
140 content_settings::PatternParser::Parse("www.youtube.com*", &builder); | 150 content_settings::PatternParser::Parse("www.youtube.com*", &builder); |
141 ::testing::Mock::VerifyAndClear(&builder); | 151 ::testing::Mock::VerifyAndClear(&builder); |
142 } | 152 } |
143 | 153 |
| 154 TEST(ContentSettingsPatternParserTest, ParseFilePatterns) { |
| 155 ::testing::StrictMock<MockBuilder> builder; |
| 156 |
| 157 EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce( |
| 158 ::testing::Return(&builder)); |
| 159 EXPECT_CALL(builder, WithPath("/foo/bar/test.html")).Times(1).WillOnce( |
| 160 ::testing::Return(&builder)); |
| 161 content_settings::PatternParser::Parse( |
| 162 "file:///foo/bar/test.html", &builder); |
| 163 ::testing::Mock::VerifyAndClear(&builder); |
| 164 |
| 165 EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce( |
| 166 ::testing::Return(&builder)); |
| 167 EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce( |
| 168 ::testing::Return(&builder)); |
| 169 content_settings::PatternParser::Parse( |
| 170 "file://*", &builder); |
| 171 ::testing::Mock::VerifyAndClear(&builder); |
| 172 |
| 173 EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce( |
| 174 ::testing::Return(&builder)); |
| 175 EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce( |
| 176 ::testing::Return(&builder)); |
| 177 EXPECT_CALL(builder, WithPath("/")).Times(1).WillOnce( |
| 178 ::testing::Return(&builder)); |
| 179 content_settings::PatternParser::Parse( |
| 180 "file://*/", &builder); |
| 181 ::testing::Mock::VerifyAndClear(&builder); |
| 182 |
| 183 EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce( |
| 184 ::testing::Return(&builder)); |
| 185 EXPECT_CALL(builder, WithDomainWildcard()).Times(1).WillOnce( |
| 186 ::testing::Return(&builder)); |
| 187 EXPECT_CALL(builder, WithPathWildcard()).Times(1).WillOnce( |
| 188 ::testing::Return(&builder)); |
| 189 content_settings::PatternParser::Parse( |
| 190 "file://*/*", &builder); |
| 191 ::testing::Mock::VerifyAndClear(&builder); |
| 192 |
| 193 EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce( |
| 194 ::testing::Return(&builder)); |
| 195 EXPECT_CALL(builder, WithPathWildcard()).Times(1).WillOnce( |
| 196 ::testing::Return(&builder)); |
| 197 content_settings::PatternParser::Parse( |
| 198 "file:///*", &builder); |
| 199 ::testing::Mock::VerifyAndClear(&builder); |
| 200 |
| 201 // Invalid file patterns. |
| 202 EXPECT_CALL(builder, WithScheme("file")).Times(1).WillOnce( |
| 203 ::testing::Return(&builder)); |
| 204 EXPECT_CALL(builder, Invalid()).Times(1).WillOnce( |
| 205 ::testing::Return(&builder)); |
| 206 content_settings::PatternParser::Parse( |
| 207 "file://**", &builder); |
| 208 ::testing::Mock::VerifyAndClear(&builder); |
| 209 } |
| 210 |
144 TEST(ContentSettingsPatternParserTest, SerializePatterns) { | 211 TEST(ContentSettingsPatternParserTest, SerializePatterns) { |
145 ContentSettingsPattern::PatternParts parts; | 212 ContentSettingsPattern::PatternParts parts; |
146 parts.scheme = "http"; | 213 parts.scheme = "http"; |
147 parts.host = "www.youtube.com"; | 214 parts.host = "www.youtube.com"; |
148 parts.port = "8080"; | 215 parts.port = "8080"; |
149 EXPECT_STREQ("http://www.youtube.com:8080", | 216 EXPECT_STREQ("http://www.youtube.com:8080", |
150 content_settings::PatternParser::ToString(parts).c_str()); | 217 content_settings::PatternParser::ToString(parts).c_str()); |
151 | 218 |
152 parts = ContentSettingsPattern::PatternParts(); | 219 parts = ContentSettingsPattern::PatternParts(); |
153 parts.scheme = "file"; | 220 parts.scheme = "file"; |
154 parts.path = "/foo/bar/test.html"; | 221 parts.path = "/foo/bar/test.html"; |
155 EXPECT_STREQ("file:///foo/bar/test.html", | 222 EXPECT_STREQ("file:///foo/bar/test.html", |
156 content_settings::PatternParser::ToString(parts).c_str()); | 223 content_settings::PatternParser::ToString(parts).c_str()); |
| 224 |
| 225 parts = ContentSettingsPattern::PatternParts(); |
| 226 parts.scheme = "file"; |
| 227 parts.path = ""; |
| 228 parts.is_path_wildcard = true; |
| 229 EXPECT_EQ("file:///*", content_settings::PatternParser::ToString(parts)); |
157 } | 230 } |
OLD | NEW |