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

Side by Side Diff: third_party/WebKit/Source/core/loader/LinkHeaderTest.cpp

Issue 1785563003: Refactor LinkHeaderTest to use parameterized tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 | « no previous file | 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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 "core/loader/LinkHeader.h" 5 #include "core/loader/LinkHeader.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include <base/macros.h> 8 #include <base/macros.h>
9 9
10 namespace blink { 10 namespace blink {
11 namespace {
11 12
12 TEST(LinkHeaderTest, Empty) 13 TEST(LinkHeaderTest, Empty)
13 { 14 {
14 String nullString; 15 String nullString;
15 LinkHeaderSet nullHeaderSet(nullString); 16 LinkHeaderSet nullHeaderSet(nullString);
16 ASSERT_EQ(nullHeaderSet.size(), unsigned(0)); 17 ASSERT_EQ(nullHeaderSet.size(), unsigned(0));
17 String emptyString(""); 18 String emptyString("");
18 LinkHeaderSet emptyHeaderSet(emptyString); 19 LinkHeaderSet emptyHeaderSet(emptyString);
19 ASSERT_EQ(emptyHeaderSet.size(), unsigned(0)); 20 ASSERT_EQ(emptyHeaderSet.size(), unsigned(0));
20 } 21 }
21 22
22 TEST(LinkHeaderTest, Single) 23 struct SingleTestCase {
24 const char* headerValue;
25 const char* url;
26 const char* rel;
27 const char* as;
28 bool valid;
29 } singleTestCases[] = {
30 {"</images/cat.jpg>; rel=prefetch", "/images/cat.jpg", "prefetch", "", true} ,
31 {"</images/cat.jpg>;rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
32 {"</images/cat.jpg> ;rel=prefetch", "/images/cat.jpg", "prefetch", "", tru e},
33 {"</images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
34 {"< /images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
35 {"</images/cat.jpg > ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
36 {"</images/cat.jpg wutwut> ; rel=prefetch", "/images/cat.jpg", "prefetch ", "", true},
37 {"</images/cat.jpg wutwut \t > ; rel=prefetch", "/images/cat.jpg", "pre fetch", "", true},
38 {"</images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "", tr ue},
39 {"</images/cat.jpg>; Rel=prefetch ", "/images/cat.jpg", "prefetch", "", tr ue},
40 {"</images/cat.jpg>; Rel=PReFetCh ", "/images/cat.jpg", "prefetch", "", tr ue},
41 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", "/images/cat.jpg", "p refetch", "", true},
42 {" </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "", true},
43 {"\t </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "" , true},
44 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", "/images/cat.jpg", "prefetch ", "", true},
45 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", "", "", "", false},
46 {"</images/cat.jpg>; rel= prefetch", "/images/cat.jpg", "prefetch", "", true },
47 {"<../images/cat.jpg?dog>; rel= prefetch", "../images/cat.jpg?dog", "prefetc h", "", true},
48 {"</images/cat.jpg>; rel =prefetch", "/images/cat.jpg", "prefetch", "", true },
49 {"</images/cat.jpg>; rel pel=prefetch", "/images/cat.jpg", "", "", false},
50 {"< /images/cat.jpg>", "/images/cat.jpg", "", "", true},
51 {"</images/cat.jpg>; rel =", "/images/cat.jpg", "", "", false},
52 {"</images/cat.jpg>; wut=sup; rel =prefetch", "/images/cat.jpg", "prefetch", "", true},
53 {"</images/cat.jpg>; wut=sup ; rel =prefetch", "/images/cat.jpg", "prefetch" , "", true},
54 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "pr efetch", "", true},
55 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "", "", false},
56 {"< /images/cat.jpg", "", "", "", false},
57 {"< http://wut.com/ sdfsdf ?sd>; rel=dns-prefetch", "http://wut.com/", "d ns-prefetch", "", true},
58 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=dns-prefetch", "http://wut.com /%20%20%3dsdfsdf?sd", "dns-prefetch", "", true},
59 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", "http://wut.com/ dfsdf?sdf=ghj&wer=rty", "prefetch", "", true},
60 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>;;;;; rel=prefetch", "http://wut. com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", true},
61 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=image", "http://wut .com/%20%20%3dsdfsdf?sd", "preload", "image", true},
62 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=whatever", "http:// wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", true},
63 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", "/images/cat.jpg", "", "", false},
64 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", "/images/cat.jpg", "prefetch ", "", false},
65 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", "/images/cat.jpg", "", "" , false},
66 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", "/images/cat.jpg", "prefet ch", "", false},
67 {"</images/cat.jpg>; rel=prefetch;anchor='' ", "/images/cat.jpg", "prefetch" , "", false},
68 {"</images/cat.jpg>; rel=prefetch;", "/images/cat.jpg", "prefetch", "", true },
69 {"</images/cat.jpg>; rel=prefetch ;", "/images/cat.jpg", "prefetch", "", true},
70 {"</images/ca,t.jpg>; rel=prefetch ;", "/images/ca,t.jpg", "prefetch", "" , true},
71 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE and backslash\"" , "simple.css", "stylesheet", "", true},
72 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE \\\" and backsla sh: \\\"", "simple.css", "stylesheet", "", false},
73 {"<simple.css>; title=\"title with a DQUOTE \\\" and backslash: \"; rel=styl esheet; ", "simple.css", "stylesheet", "", true},
74 {"<simple.css>; title=\'title with a DQUOTE \\\' and backslash: \'; rel=styl esheet; ", "simple.css", "stylesheet", "", true},
75 {"<simple.css>; title=\"title with a DQUOTE \\\" and ;backslash,: \"; rel=st ylesheet; ", "simple.css", "stylesheet", "", true},
76 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; rel=styl esheet; ", "simple.css", "stylesheet", "", true},
77 {"<simple.css>; title=\"\"; rel=stylesheet; ", "simple.css", "stylesheet", " ", true},
78 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", "simple.css", "stylesheet ", "", true},
79 {"<simple.css>; rel=stylesheet; title=\"", "simple.css", "stylesheet", "", f alse},
80 {"<simple.css>; rel=stylesheet; title=\"\"", "simple.css", "stylesheet", "", true},
81 {"<simple.css>; rel=\"stylesheet\"; title=\"", "simple.css", "stylesheet", " ", false},
82 {"<simple.css>; rel=\";style,sheet\"; title=\"", "simple.css", ";style,sheet ", "", false},
83 {"<simple.css>; rel=\"bla'sdf\"; title=\"", "simple.css", "bla'sdf", "", fal se},
84 {"<simple.css>; rel=\"\"; title=\"\"", "simple.css", "", "", true},
85 {"<simple.css>; rel=''; title=\"\"", "simple.css", "", "", true},
86 {"<simple.css>; rel=''; title=", "simple.css", "", "", false},
87 {"<simple.css>; rel=''; title", "simple.css", "", "", false},
88 {"<simple.css>; rel=''; media", "simple.css", "", "", false},
89 {"<simple.css>; rel=''; hreflang", "simple.css", "", "", false},
90 {"<simple.css>; rel=''; type", "simple.css", "", "", false},
91 {"<simple.css>; rel=''; rev", "simple.css", "", "", false},
92 {"<simple.css>; rel=''; bla", "simple.css", "", "", true},
93 {"<simple.css>; rel='prefetch", "simple.css", "", "", false},
94 {"<simple.css>; rel=\"prefetch", "simple.css", "", "", false},
95 {"<simple.css>; rel=\"", "simple.css", "", "", false},
96 };
97
98 void PrintTo(const SingleTestCase& test, std::ostream* os)
23 { 99 {
24 struct TestCase { 100 *os << ::testing::PrintToString(test.headerValue);
25 const char* headerValue;
26 const char* url;
27 const char* rel;
28 const char* as;
29 bool valid;
30 } cases[] = {
31 {"</images/cat.jpg>; rel=prefetch", "/images/cat.jpg", "prefetch", "", t rue},
32 {"</images/cat.jpg>;rel=prefetch", "/images/cat.jpg", "prefetch", "", tr ue},
33 {"</images/cat.jpg> ;rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
34 {"</images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
35 {"< /images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
36 {"</images/cat.jpg > ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
37 {"</images/cat.jpg wutwut> ; rel=prefetch", "/images/cat.jpg", "pref etch", "", true},
38 {"</images/cat.jpg wutwut \t > ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true},
39 {"</images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "" , true},
40 {"</images/cat.jpg>; Rel=prefetch ", "/images/cat.jpg", "prefetch", "" , true},
41 {"</images/cat.jpg>; Rel=PReFetCh ", "/images/cat.jpg", "prefetch", "" , true},
42 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", "/images/cat.jpg" , "prefetch", "", true},
43 {" </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "", true},
44 {"\t </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch" , "", true},
45 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", "/images/cat.jpg", "pref etch", "", true},
46 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", "", "", "", false},
47 {"</images/cat.jpg>; rel= prefetch", "/images/cat.jpg", "prefetch", "", true},
48 {"<../images/cat.jpg?dog>; rel= prefetch", "../images/cat.jpg?dog", "pre fetch", "", true},
49 {"</images/cat.jpg>; rel =prefetch", "/images/cat.jpg", "prefetch", "", true},
50 {"</images/cat.jpg>; rel pel=prefetch", "/images/cat.jpg", "", "", false },
51 {"< /images/cat.jpg>", "/images/cat.jpg", "", "", true},
52 {"</images/cat.jpg>; rel =", "/images/cat.jpg", "", "", false},
53 {"</images/cat.jpg>; wut=sup; rel =prefetch", "/images/cat.jpg", "prefet ch", "", true},
54 {"</images/cat.jpg>; wut=sup ; rel =prefetch", "/images/cat.jpg", "prefe tch", "", true},
55 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "prefetch", "", true},
56 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "", "", false},
57 {"< /images/cat.jpg", "", "", "", false},
58 {"< http://wut.com/ sdfsdf ?sd>; rel=dns-prefetch", "http://wut.com/" , "dns-prefetch", "", true},
59 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=dns-prefetch", "http://wut .com/%20%20%3dsdfsdf?sd", "dns-prefetch", "", true},
60 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", "http://wut. com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", true},
61 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>;;;;; rel=prefetch", "http:// wut.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", true},
62 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=image", "http:/ /wut.com/%20%20%3dsdfsdf?sd", "preload", "image", true},
63 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=whatever", "htt p://wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", true},
64 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", "/images/cat.jpg", "", "", false},
65 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", "/images/cat.jpg", "pref etch", "", false},
66 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", "/images/cat.jpg", "" , "", false},
67 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", "/images/cat.jpg", "pr efetch", "", false},
68 {"</images/cat.jpg>; rel=prefetch;anchor='' ", "/images/cat.jpg", "prefe tch", "", false},
69 {"</images/cat.jpg>; rel=prefetch;", "/images/cat.jpg", "prefetch", "", true},
70 {"</images/cat.jpg>; rel=prefetch ;", "/images/cat.jpg", "prefetch", "", true},
71 {"</images/ca,t.jpg>; rel=prefetch ;", "/images/ca,t.jpg", "prefetch" , "", true},
72 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE and backslas h\"", "simple.css", "stylesheet", "", true},
73 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE \\\" and bac kslash: \\\"", "simple.css", "stylesheet", "", false},
74 {"<simple.css>; title=\"title with a DQUOTE \\\" and backslash: \"; rel= stylesheet; ", "simple.css", "stylesheet", "", true},
75 {"<simple.css>; title=\'title with a DQUOTE \\\' and backslash: \'; rel= stylesheet; ", "simple.css", "stylesheet", "", true},
76 {"<simple.css>; title=\"title with a DQUOTE \\\" and ;backslash,: \"; re l=stylesheet; ", "simple.css", "stylesheet", "", true},
77 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; rel= stylesheet; ", "simple.css", "stylesheet", "", true},
78 {"<simple.css>; title=\"\"; rel=stylesheet; ", "simple.css", "stylesheet ", "", true},
79 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", "simple.css", "styles heet", "", true},
80 {"<simple.css>; rel=stylesheet; title=\"", "simple.css", "stylesheet", " ", false},
81 {"<simple.css>; rel=stylesheet; title=\"\"", "simple.css", "stylesheet", "", true},
82 {"<simple.css>; rel=\"stylesheet\"; title=\"", "simple.css", "stylesheet ", "", false},
83 {"<simple.css>; rel=\";style,sheet\"; title=\"", "simple.css", ";style,s heet", "", false},
84 {"<simple.css>; rel=\"bla'sdf\"; title=\"", "simple.css", "bla'sdf", "", false},
85 {"<simple.css>; rel=\"\"; title=\"\"", "simple.css", "", "", true},
86 {"<simple.css>; rel=''; title=\"\"", "simple.css", "", "", true},
87 {"<simple.css>; rel=''; title=", "simple.css", "", "", false},
88 {"<simple.css>; rel=''; title", "simple.css", "", "", false},
89 {"<simple.css>; rel=''; media", "simple.css", "", "", false},
90 {"<simple.css>; rel=''; hreflang", "simple.css", "", "", false},
91 {"<simple.css>; rel=''; type", "simple.css", "", "", false},
92 {"<simple.css>; rel=''; rev", "simple.css", "", "", false},
93 {"<simple.css>; rel=''; bla", "simple.css", "", "", true},
94 {"<simple.css>; rel='prefetch", "simple.css", "", "", false},
95 {"<simple.css>; rel=\"prefetch", "simple.css", "", "", false},
96 {"<simple.css>; rel=\"", "simple.css", "", "", false},
97 };
98
99
100 // Test the cases with a single header
101 for (auto& testCase : cases) {
102 LinkHeaderSet headerSet(testCase.headerValue);
103 LinkHeader& header = headerSet[0];
104 ASSERT_STREQ(testCase.url, header.url().ascii().data());
105 ASSERT_STREQ(testCase.rel, header.rel().ascii().data());
106 ASSERT_EQ(testCase.valid, header.valid());
107 }
108 } 101 }
109 102
110 TEST(LinkHeaderTest, Double) 103 class SingleLinkHeaderTest : public ::testing::TestWithParam<SingleTestCase> {};
104
105 // Test the cases with a single header
106 TEST_P(SingleLinkHeaderTest, Single)
111 { 107 {
112 struct DoubleTestCase { 108 const SingleTestCase testCase = GetParam();
113 const char* headerValue; 109 LinkHeaderSet headerSet(testCase.headerValue);
114 const char* url; 110 LinkHeader& header = headerSet[0];
115 const char* rel; 111 ASSERT_STREQ(testCase.url, header.url().ascii().data());
116 bool valid; 112 ASSERT_STREQ(testCase.rel, header.rel().ascii().data());
117 const char* url2; 113 ASSERT_EQ(testCase.valid, header.valid());
118 const char* rel2;
119 bool valid2;
120 } cases[] = {
121 {"<ybg.css>; rel=stylesheet, <simple.css>; rel=stylesheet", "ybg.css", " stylesheet", true, "simple.css", "stylesheet", true},
122 {"<ybg.css>; rel=stylesheet,<simple.css>; rel=stylesheet", "ybg.css", "s tylesheet", true, "simple.css", "stylesheet", true},
123 {"<ybg.css>; rel=stylesheet;crossorigin,<simple.css>; rel=stylesheet", " ybg.css", "stylesheet", true, "simple.css", "stylesheet", true},
124 };
125
126 for (auto& testCase : cases) {
127 LinkHeaderSet headerSet(testCase.headerValue);
128 LinkHeader& header1 = headerSet[0];
129 LinkHeader& header2 = headerSet[1];
130 ASSERT_STREQ(testCase.url, header1.url().ascii().data());
131 ASSERT_STREQ(testCase.rel, header1.rel().ascii().data());
132 ASSERT_EQ(testCase.valid, header1.valid());
133 ASSERT_STREQ(testCase.url2, header2.url().ascii().data());
134 ASSERT_STREQ(testCase.rel2, header2.rel().ascii().data());
135 ASSERT_EQ(testCase.valid2, header2.valid());
136 }
137 } 114 }
138 115
139 TEST(LinkHeaderTest, CrossOrigin) 116 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, SingleLinkHeaderTest, testing::ValuesIn( singleTestCases));
117
118 struct DoubleTestCase {
119 const char* headerValue;
120 const char* url;
121 const char* rel;
122 bool valid;
123 const char* url2;
124 const char* rel2;
125 bool valid2;
126 } doubleTestCases[] = {
127 {"<ybg.css>; rel=stylesheet, <simple.css>; rel=stylesheet", "ybg.css", "styl esheet", true, "simple.css", "stylesheet", true},
128 {"<ybg.css>; rel=stylesheet,<simple.css>; rel=stylesheet", "ybg.css", "style sheet", true, "simple.css", "stylesheet", true},
129 {"<ybg.css>; rel=stylesheet;crossorigin,<simple.css>; rel=stylesheet", "ybg. css", "stylesheet", true, "simple.css", "stylesheet", true},
130 };
131
132 void PrintTo(const DoubleTestCase& test, std::ostream* os)
140 { 133 {
141 struct TestCase { 134 *os << ::testing::PrintToString(test.headerValue);
142 const char* headerValue; 135 }
143 const char* url;
144 const char* rel;
145 const CrossOriginAttributeValue crossorigin;
146 bool valid;
147 } cases[] = {
148 {"<http://whatever.com>; rel=preconnect", "http://whatever.com", "precon nect", CrossOriginAttributeNotSet, true},
149 {"<http://whatever.com>; rel=preconnect; crossorigin=", "http://whatever .com", "preconnect", CrossOriginAttributeAnonymous, true},
150 {"<http://whatever.com>; rel=preconnect; crossorigin", "http://whatever. com", "preconnect", CrossOriginAttributeAnonymous, true},
151 {"<http://whatever.com>; rel=preconnect; crossorigin ", "http://whatever .com", "preconnect", CrossOriginAttributeAnonymous, true},
152 {"<http://whatever.com>; rel=preconnect; crossorigin;", "http://whatever .com", "preconnect", CrossOriginAttributeAnonymous, true},
153 {"<http://whatever.com>; rel=preconnect; crossorigin, <http://whatever2. com>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttribute Anonymous, true},
154 {"<http://whatever.com>; rel=preconnect; crossorigin , <http://whatever2 .com>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttribut eAnonymous, true},
155 {"<http://whatever.com>; rel=preconnect; crossorigin,<http://whatever2.c om>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeA nonymous, true},
156 {"<http://whatever.com>; rel=preconnect; crossorigin=anonymous", "http:/ /whatever.com", "preconnect", CrossOriginAttributeAnonymous, true},
157 {"<http://whatever.com>; rel=preconnect; crossorigin=use-credentials", " http://whatever.com", "preconnect", CrossOriginAttributeUseCredentials, true},
158 {"<http://whatever.com>; rel=preconnect; crossorigin=whatever", "http:// whatever.com", "preconnect", CrossOriginAttributeAnonymous, true},
159 {"<http://whatever.com>; rel=preconnect; crossorig|in=whatever", "http:/ /whatever.com", "preconnect", CrossOriginAttributeNotSet, true},
160 {"<http://whatever.com>; rel=preconnect; crossorigin|=whatever", "http:/ /whatever.com", "preconnect", CrossOriginAttributeNotSet, true},
161 {"<http://whatever.com>; rel=preconnect; valid!", "http://whatever.com", "preconnect", CrossOriginAttributeNotSet, true},
162 {"<http://whatever.com>; rel=preconnect; valid$", "http://whatever.com", "preconnect", CrossOriginAttributeNotSet, true},
163 {"<http://whatever.com>; rel=preconnect; invalid@", "http://whatever.com ", "preconnect", CrossOriginAttributeNotSet, false},
164 {"<http://whatever.com>; rel=preconnect; invalid*", "http://whatever.com ", "preconnect", CrossOriginAttributeNotSet, false},
165 };
166 136
137 class DoubleLinkHeaderTest : public ::testing::TestWithParam<DoubleTestCase> {};
167 138
168 // Test the cases with a single header 139 TEST_P(DoubleLinkHeaderTest, Double)
169 for (auto& testCase : cases) { 140 {
170 LinkHeaderSet headerSet(testCase.headerValue); 141 const DoubleTestCase testCase = GetParam();
171 LinkHeader& header = headerSet[0]; 142 LinkHeaderSet headerSet(testCase.headerValue);
172 ASSERT_STREQ(testCase.url, header.url().ascii().data()); 143 LinkHeader& header1 = headerSet[0];
173 ASSERT_STREQ(testCase.rel, header.rel().ascii().data()); 144 LinkHeader& header2 = headerSet[1];
174 ASSERT_EQ(testCase.crossorigin, header.crossOrigin()); 145 ASSERT_STREQ(testCase.url, header1.url().ascii().data());
175 ASSERT_EQ(testCase.valid, header.valid()); 146 ASSERT_STREQ(testCase.rel, header1.rel().ascii().data());
176 } 147 ASSERT_EQ(testCase.valid, header1.valid());
148 ASSERT_STREQ(testCase.url2, header2.url().ascii().data());
149 ASSERT_STREQ(testCase.rel2, header2.rel().ascii().data());
150 ASSERT_EQ(testCase.valid2, header2.valid());
177 } 151 }
152
153 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, DoubleLinkHeaderTest, testing::ValuesIn( doubleTestCases));
154
155 struct CrossOriginTestCase {
156 const char* headerValue;
157 const char* url;
158 const char* rel;
159 const CrossOriginAttributeValue crossorigin;
160 bool valid;
161 } crossOriginTestCases[] = {
162 {"<http://whatever.com>; rel=preconnect", "http://whatever.com", "preconnect ", CrossOriginAttributeNotSet, true},
163 {"<http://whatever.com>; rel=preconnect; crossorigin=", "http://whatever.com ", "preconnect", CrossOriginAttributeAnonymous, true},
164 {"<http://whatever.com>; rel=preconnect; crossorigin", "http://whatever.com" , "preconnect", CrossOriginAttributeAnonymous, true},
165 {"<http://whatever.com>; rel=preconnect; crossorigin ", "http://whatever.com ", "preconnect", CrossOriginAttributeAnonymous, true},
166 {"<http://whatever.com>; rel=preconnect; crossorigin;", "http://whatever.com ", "preconnect", CrossOriginAttributeAnonymous, true},
167 {"<http://whatever.com>; rel=preconnect; crossorigin, <http://whatever2.com> ; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAnon ymous, true},
168 {"<http://whatever.com>; rel=preconnect; crossorigin , <http://whatever2.com >; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAno nymous, true},
169 {"<http://whatever.com>; rel=preconnect; crossorigin,<http://whatever2.com>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAnony mous, true},
170 {"<http://whatever.com>; rel=preconnect; crossorigin=anonymous", "http://wha tever.com", "preconnect", CrossOriginAttributeAnonymous, true},
171 {"<http://whatever.com>; rel=preconnect; crossorigin=use-credentials", "http ://whatever.com", "preconnect", CrossOriginAttributeUseCredentials, true},
172 {"<http://whatever.com>; rel=preconnect; crossorigin=whatever", "http://what ever.com", "preconnect", CrossOriginAttributeAnonymous, true},
173 {"<http://whatever.com>; rel=preconnect; crossorig|in=whatever", "http://wha tever.com", "preconnect", CrossOriginAttributeNotSet, true},
174 {"<http://whatever.com>; rel=preconnect; crossorigin|=whatever", "http://wha tever.com", "preconnect", CrossOriginAttributeNotSet, true},
175 {"<http://whatever.com>; rel=preconnect; valid!", "http://whatever.com", "pr econnect", CrossOriginAttributeNotSet, true},
176 {"<http://whatever.com>; rel=preconnect; valid$", "http://whatever.com", "pr econnect", CrossOriginAttributeNotSet, true},
177 {"<http://whatever.com>; rel=preconnect; invalid@", "http://whatever.com", " preconnect", CrossOriginAttributeNotSet, false},
178 {"<http://whatever.com>; rel=preconnect; invalid*", "http://whatever.com", " preconnect", CrossOriginAttributeNotSet, false},
179 };
180
181 void PrintTo(const CrossOriginTestCase& test, std::ostream* os)
182 {
183 *os << ::testing::PrintToString(test.headerValue);
184 }
185
186 class CrossOriginLinkHeaderTest : public ::testing::TestWithParam<CrossOriginTes tCase> {};
187
188 TEST_P(CrossOriginLinkHeaderTest, CrossOrigin)
189 {
190 const CrossOriginTestCase testCase = GetParam();
191 LinkHeaderSet headerSet(testCase.headerValue);
192 LinkHeader& header = headerSet[0];
193 ASSERT_STREQ(testCase.url, header.url().ascii().data());
194 ASSERT_STREQ(testCase.rel, header.rel().ascii().data());
195 ASSERT_EQ(testCase.crossorigin, header.crossOrigin());
196 ASSERT_EQ(testCase.valid, header.valid());
197 }
198
199 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu esIn(crossOriginTestCases));
200
201 } // namespace
178 } // namespace blink 202 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698