Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(213)

Side by Side Diff: third_party/WebKit/Source/platform/network/LinkHeaderTest.cpp

Issue 2739633003: platform/loader: move LinkHeader from network/ to loader/ (Closed)
Patch Set: gen gen --check passes Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/network/LinkHeader.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 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 "platform/network/LinkHeader.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include <base/macros.h>
9
10 namespace blink {
11 namespace {
12
13 TEST(LinkHeaderTest, Empty) {
14 String nullString;
15 LinkHeaderSet nullHeaderSet(nullString);
16 ASSERT_EQ(nullHeaderSet.size(), unsigned(0));
17 String emptyString("");
18 LinkHeaderSet emptyHeaderSet(emptyString);
19 ASSERT_EQ(emptyHeaderSet.size(), unsigned(0));
20 }
21
22 struct SingleTestCase {
23 const char* headerValue;
24 bool valid;
25 const char* url;
26 const char* rel;
27 const char* as;
28 const char* media;
29 } singleTestCases[] = {
30 {"</images/cat.jpg>; rel=prefetch", true, "/images/cat.jpg", "prefetch", "",
31 ""},
32 {"</images/cat.jpg>;rel=prefetch", true, "/images/cat.jpg", "prefetch", "",
33 ""},
34 {"</images/cat.jpg> ;rel=prefetch", true, "/images/cat.jpg", "prefetch",
35 "", ""},
36 {"</images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg",
37 "prefetch", "", ""},
38 {"< /images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg",
39 "prefetch", "", ""},
40 {"</images/cat.jpg > ; rel=prefetch", true, "/images/cat.jpg",
41 "prefetch", "", ""},
42 {"</images/cat.jpg wutwut> ; rel=prefetch", true,
43 "/images/cat.jpg wutwut", "prefetch", "", ""},
44 {"</images/cat.jpg wutwut \t > ; rel=prefetch", true,
45 "/images/cat.jpg wutwut", "prefetch", "", ""},
46 {"</images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch",
47 "", ""},
48 {"</images/cat.jpg>; Rel=prefetch ", true, "/images/cat.jpg", "prefetch",
49 "", ""},
50 {"</images/cat.jpg>; Rel=PReFetCh ", true, "/images/cat.jpg", "prefetch",
51 "", ""},
52 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", true,
53 "/images/cat.jpg", "prefetch", "", ""},
54 {" </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg",
55 "prefetch", "", ""},
56 {"\t </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg",
57 "prefetch", "", ""},
58 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", true, "/images/cat.jpg",
59 "prefetch", "", ""},
60 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", false},
61 {"</images/cat.jpg>; rel= prefetch", true, "/images/cat.jpg", "prefetch",
62 "", ""},
63 {"<../images/cat.jpg?dog>; rel= prefetch", true, "../images/cat.jpg?dog",
64 "prefetch", "", ""},
65 {"</images/cat.jpg>; rel =prefetch", true, "/images/cat.jpg", "prefetch",
66 "", ""},
67 {"</images/cat.jpg>; rel pel=prefetch", false},
68 {"< /images/cat.jpg>", true, "/images/cat.jpg", "", "", ""},
69 {"</images/cat.jpg>; rel =", false},
70 {"</images/cat.jpg>; wut=sup; rel =prefetch", true, "/images/cat.jpg",
71 "prefetch", "", ""},
72 {"</images/cat.jpg>; wut=sup ; rel =prefetch", true, "/images/cat.jpg",
73 "prefetch", "", ""},
74 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", true,
75 "/images/cat.jpg", "prefetch", "", ""},
76 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", false},
77 {"< /images/cat.jpg", false},
78 {"< http://wut.com/ sdfsdf ?sd>; rel=dns-prefetch", true,
79 "http://wut.com/ sdfsdf ?sd", "dns-prefetch", "", ""},
80 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=dns-prefetch", true,
81 "http://wut.com/%20%20%3dsdfsdf?sd", "dns-prefetch", "", ""},
82 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", true,
83 "http://wut.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", ""},
84 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>;;;;; rel=prefetch", true,
85 "http://wut.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", ""},
86 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=image", true,
87 "http://wut.com/%20%20%3dsdfsdf?sd", "preload", "image", ""},
88 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=whatever", true,
89 "http://wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", ""},
90 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", false},
91 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", false},
92 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", false},
93 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", false},
94 {"</images/cat.jpg>; rel=prefetch;anchor='' ", false},
95 {"</images/cat.jpg>; rel=prefetch;", true, "/images/cat.jpg", "prefetch",
96 "", ""},
97 {"</images/cat.jpg>; rel=prefetch ;", true, "/images/cat.jpg",
98 "prefetch", "", ""},
99 {"</images/ca,t.jpg>; rel=prefetch ;", true, "/images/ca,t.jpg",
100 "prefetch", "", ""},
101 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE and "
102 "backslash\"",
103 true, "simple.css", "stylesheet", "", ""},
104 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE \\\" and "
105 "backslash: \\\"",
106 false},
107 {"<simple.css>; title=\"title with a DQUOTE \\\" and backslash: \"; "
108 "rel=stylesheet; ",
109 true, "simple.css", "stylesheet", "", ""},
110 {"<simple.css>; title=\'title with a DQUOTE \\\' and backslash: \'; "
111 "rel=stylesheet; ",
112 true, "simple.css", "stylesheet", "", ""},
113 {"<simple.css>; title=\"title with a DQUOTE \\\" and ;backslash,: \"; "
114 "rel=stylesheet; ",
115 true, "simple.css", "stylesheet", "", ""},
116 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; "
117 "rel=stylesheet; ",
118 true, "simple.css", "stylesheet", "", ""},
119 {"<simple.css>; title=\"\"; rel=stylesheet; ", true, "simple.css",
120 "stylesheet", "", ""},
121 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", true, "simple.css",
122 "stylesheet", "", ""},
123 {"<simple.css>; rel=stylesheet; title=\"", false},
124 {"<simple.css>; rel=stylesheet; title=\"\"", true, "simple.css",
125 "stylesheet", "", ""},
126 {"<simple.css>; rel=\"stylesheet\"; title=\"", false},
127 {"<simple.css>; rel=\";style,sheet\"; title=\"", false},
128 {"<simple.css>; rel=\"bla'sdf\"; title=\"", false},
129 {"<simple.css>; rel=\"\"; title=\"\"", true, "simple.css", "", "", ""},
130 {"<simple.css>; rel=''; title=\"\"", true, "simple.css", "''", "", ""},
131 {"<simple.css>; rel=''; title=", false},
132 {"<simple.css>; rel=''; title", false},
133 {"<simple.css>; rel=''; media", false},
134 {"<simple.css>; rel=''; hreflang", false},
135 {"<simple.css>; rel=''; type", false},
136 {"<simple.css>; rel=''; rev", false},
137 {"<simple.css>; rel=''; bla", true, "simple.css", "''", "", ""},
138 {"<simple.css>; rel='prefetch", true, "simple.css", "'prefetch", "", ""},
139 {"<simple.css>; rel=\"prefetch", false},
140 {"<simple.css>; rel=\"", false},
141 {"<http://whatever.com>; rel=preconnect; valid!", true,
142 "http://whatever.com", "preconnect", "", ""},
143 {"<http://whatever.com>; rel=preconnect; valid$", true,
144 "http://whatever.com", "preconnect", "", ""},
145 {"<http://whatever.com>; rel=preconnect; invalid@", false},
146 {"<http://whatever.com>; rel=preconnect; invalid*", false},
147 {"</images/cat.jpg>; rel=prefetch;media='(max-width: 5000px)'", true,
148 "/images/cat.jpg", "prefetch", "", "'(max-width: 5000px)'"},
149 {"</images/cat.jpg>; rel=prefetch;media=\"(max-width: 5000px)\"", true,
150 "/images/cat.jpg", "prefetch", "", "(max-width: 5000px)"},
151 {"</images/cat.jpg>; rel=prefetch;media=(max-width:5000px)", true,
152 "/images/cat.jpg", "prefetch", "", "(max-width:5000px)"},
153 };
154
155 void PrintTo(const SingleTestCase& test, std::ostream* os) {
156 *os << ::testing::PrintToString(test.headerValue);
157 }
158
159 class SingleLinkHeaderTest : public ::testing::TestWithParam<SingleTestCase> {};
160
161 // Test the cases with a single header
162 TEST_P(SingleLinkHeaderTest, Single) {
163 const SingleTestCase testCase = GetParam();
164 LinkHeaderSet headerSet(testCase.headerValue);
165 ASSERT_EQ(1u, headerSet.size());
166 LinkHeader& header = headerSet[0];
167 EXPECT_EQ(testCase.valid, header.valid());
168 if (testCase.valid) {
169 EXPECT_STREQ(testCase.url, header.url().ascii().data());
170 EXPECT_STREQ(testCase.rel, header.rel().ascii().data());
171 EXPECT_STREQ(testCase.as, header.as().ascii().data());
172 EXPECT_STREQ(testCase.media, header.media().ascii().data());
173 }
174 }
175
176 INSTANTIATE_TEST_CASE_P(LinkHeaderTest,
177 SingleLinkHeaderTest,
178 testing::ValuesIn(singleTestCases));
179
180 struct DoubleTestCase {
181 const char* headerValue;
182 const char* url;
183 const char* rel;
184 bool valid;
185 const char* url2;
186 const char* rel2;
187 bool valid2;
188 } doubleTestCases[] = {
189 {"<ybg.css>; rel=stylesheet, <simple.css>; rel=stylesheet", "ybg.css",
190 "stylesheet", true, "simple.css", "stylesheet", true},
191 {"<ybg.css>; rel=stylesheet,<simple.css>; rel=stylesheet", "ybg.css",
192 "stylesheet", true, "simple.css", "stylesheet", true},
193 {"<ybg.css>; rel=stylesheet;crossorigin,<simple.css>; rel=stylesheet",
194 "ybg.css", "stylesheet", true, "simple.css", "stylesheet", true},
195 {"<hel,lo.css>; rel=stylesheet; title=\"foo,bar\", <simple.css>; "
196 "rel=stylesheet; title=\"foo;bar\"",
197 "hel,lo.css", "stylesheet", true, "simple.css", "stylesheet", true},
198 };
199
200 void PrintTo(const DoubleTestCase& test, std::ostream* os) {
201 *os << ::testing::PrintToString(test.headerValue);
202 }
203
204 class DoubleLinkHeaderTest : public ::testing::TestWithParam<DoubleTestCase> {};
205
206 TEST_P(DoubleLinkHeaderTest, Double) {
207 const DoubleTestCase testCase = GetParam();
208 LinkHeaderSet headerSet(testCase.headerValue);
209 ASSERT_EQ(2u, headerSet.size());
210 LinkHeader& header1 = headerSet[0];
211 LinkHeader& header2 = headerSet[1];
212 EXPECT_STREQ(testCase.url, header1.url().ascii().data());
213 EXPECT_STREQ(testCase.rel, header1.rel().ascii().data());
214 EXPECT_EQ(testCase.valid, header1.valid());
215 EXPECT_STREQ(testCase.url2, header2.url().ascii().data());
216 EXPECT_STREQ(testCase.rel2, header2.rel().ascii().data());
217 EXPECT_EQ(testCase.valid2, header2.valid());
218 }
219
220 INSTANTIATE_TEST_CASE_P(LinkHeaderTest,
221 DoubleLinkHeaderTest,
222 testing::ValuesIn(doubleTestCases));
223
224 struct CrossOriginTestCase {
225 const char* headerValue;
226 const char* url;
227 const char* rel;
228 const char* crossorigin;
229 bool valid;
230 } crossOriginTestCases[] = {
231 {"<http://whatever.com>; rel=preconnect", "http://whatever.com",
232 "preconnect", nullptr, true},
233 {"<http://whatever.com>; rel=preconnect; crossorigin=", "", "", "", false},
234 {"<http://whatever.com>; rel=preconnect; crossorigin",
235 "http://whatever.com", "preconnect", "", true},
236 {"<http://whatever.com>; rel=preconnect; crossorigin ",
237 "http://whatever.com", "preconnect", "", true},
238 {"<http://whatever.com>; rel=preconnect; crossorigin;",
239 "http://whatever.com", "preconnect", "", true},
240 {"<http://whatever.com>; rel=preconnect; crossorigin, "
241 "<http://whatever2.com>; rel=preconnect",
242 "http://whatever.com", "preconnect", "", true},
243 {"<http://whatever.com>; rel=preconnect; crossorigin , "
244 "<http://whatever2.com>; rel=preconnect",
245 "http://whatever.com", "preconnect", "", true},
246 {"<http://whatever.com>; rel=preconnect; "
247 "crossorigin,<http://whatever2.com>; rel=preconnect",
248 "http://whatever.com", "preconnect", "", true},
249 {"<http://whatever.com>; rel=preconnect; crossorigin=anonymous",
250 "http://whatever.com", "preconnect", "anonymous", true},
251 {"<http://whatever.com>; rel=preconnect; crossorigin=use-credentials",
252 "http://whatever.com", "preconnect", "use-credentials", true},
253 {"<http://whatever.com>; rel=preconnect; crossorigin=whatever",
254 "http://whatever.com", "preconnect", "whatever", true},
255 {"<http://whatever.com>; rel=preconnect; crossorig|in=whatever",
256 "http://whatever.com", "preconnect", nullptr, true},
257 {"<http://whatever.com>; rel=preconnect; crossorigin|=whatever",
258 "http://whatever.com", "preconnect", nullptr, true},
259 };
260
261 void PrintTo(const CrossOriginTestCase& test, std::ostream* os) {
262 *os << ::testing::PrintToString(test.headerValue);
263 }
264
265 class CrossOriginLinkHeaderTest
266 : public ::testing::TestWithParam<CrossOriginTestCase> {};
267
268 TEST_P(CrossOriginLinkHeaderTest, CrossOrigin) {
269 const CrossOriginTestCase testCase = GetParam();
270 LinkHeaderSet headerSet(testCase.headerValue);
271 ASSERT_GE(headerSet.size(), 1u);
272 LinkHeader& header = headerSet[0];
273 EXPECT_STREQ(testCase.url, header.url().ascii().data());
274 EXPECT_STREQ(testCase.rel, header.rel().ascii().data());
275 EXPECT_EQ(testCase.valid, header.valid());
276 if (!testCase.crossorigin)
277 EXPECT_TRUE(header.crossOrigin().isNull());
278 else
279 EXPECT_STREQ(testCase.crossorigin, header.crossOrigin().ascii().data());
280 }
281
282 INSTANTIATE_TEST_CASE_P(LinkHeaderTest,
283 CrossOriginLinkHeaderTest,
284 testing::ValuesIn(crossOriginTestCases));
285
286 } // namespace
287 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/network/LinkHeader.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698