OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "config.h" | 5 #include "config.h" |
6 #include "HTTPParsers.h" | 6 #include "HTTPParsers.h" |
7 | 7 |
8 #include "wtf/MathExtras.h" | 8 #include "wtf/MathExtras.h" |
9 #include "wtf/testing/WTFTestHelpers.h" | |
9 #include "wtf/text/AtomicString.h" | 10 #include "wtf/text/AtomicString.h" |
10 | 11 |
11 #include <gtest/gtest.h> | 12 #include <gtest/gtest.h> |
12 | 13 |
13 namespace WebCore { | 14 namespace WebCore { |
14 | 15 |
16 namespace { | |
17 | |
18 size_t parseHTTPHeader(const char* data, String& failureReason, AtomicString& na meStr, AtomicString& valueStr) | |
19 { | |
20 return WebCore::parseHTTPHeader(data, strlen(data), failureReason, nameStr, valueStr); | |
21 } | |
22 | |
23 } // namespace | |
24 | |
15 TEST(HTTPParsersTest, ParseCacheControl) | 25 TEST(HTTPParsersTest, ParseCacheControl) |
16 { | 26 { |
17 CacheControlHeader header; | 27 CacheControlHeader header; |
18 | 28 |
19 header = parseCacheControlDirectives("no-cache", AtomicString()); | 29 header = parseCacheControlDirectives("no-cache", AtomicString()); |
20 EXPECT_TRUE(header.parsed); | 30 EXPECT_TRUE(header.parsed); |
21 EXPECT_TRUE(header.containsNoCache); | 31 EXPECT_TRUE(header.containsNoCache); |
22 EXPECT_FALSE(header.containsNoStore); | 32 EXPECT_FALSE(header.containsNoStore); |
23 EXPECT_FALSE(header.containsMustRevalidate); | 33 EXPECT_FALSE(header.containsMustRevalidate); |
24 EXPECT_TRUE(std::isnan(header.maxAge)); | 34 EXPECT_TRUE(std::isnan(header.maxAge)); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
87 EXPECT_TRUE(std::isnan(header.maxAge)); | 97 EXPECT_TRUE(std::isnan(header.maxAge)); |
88 | 98 |
89 header = parseCacheControlDirectives(AtomicString(), "no-cache"); | 99 header = parseCacheControlDirectives(AtomicString(), "no-cache"); |
90 EXPECT_TRUE(header.parsed); | 100 EXPECT_TRUE(header.parsed); |
91 EXPECT_TRUE(header.containsNoCache); | 101 EXPECT_TRUE(header.containsNoCache); |
92 EXPECT_FALSE(header.containsNoStore); | 102 EXPECT_FALSE(header.containsNoStore); |
93 EXPECT_FALSE(header.containsMustRevalidate); | 103 EXPECT_FALSE(header.containsMustRevalidate); |
94 EXPECT_TRUE(std::isnan(header.maxAge)); | 104 EXPECT_TRUE(std::isnan(header.maxAge)); |
95 } | 105 } |
96 | 106 |
107 TEST(HTTPParsersTest, parseHTTPHeaderSimple) | |
108 { | |
109 String failureReason; | |
110 AtomicString name, value; | |
111 EXPECT_EQ(11u, parseHTTPHeader("foo: bar\r\notherdata", failureReason, nam e, value)); | |
112 EXPECT_TRUE(failureReason.isEmpty()); | |
113 EXPECT_EQ("foo", name.string()); | |
114 EXPECT_EQ("bar", value.string()); | |
115 } | |
116 | |
117 TEST(HTTPParsersTest, parseHTTPHeaderEmptyName) | |
118 { | |
119 String failureReason; | |
120 AtomicString name, value; | |
121 EXPECT_EQ(0u, parseHTTPHeader(": bar\r\notherdata", failureReason, name, val ue)); | |
122 EXPECT_EQ("Invalid UTF-8 sequence in header name", failureReason); | |
123 } | |
124 | |
125 TEST(HTTPParsersTest, parseHTTPHeaderEmptyValue) | |
126 { | |
127 String failureReason; | |
128 AtomicString name, value; | |
129 EXPECT_EQ(6u, parseHTTPHeader("foo: \r\notherdata", failureReason, name, val ue)); | |
130 EXPECT_TRUE(failureReason.isEmpty()); | |
131 EXPECT_EQ("foo", name.string()); | |
132 EXPECT_TRUE(value.isEmpty()); | |
133 } | |
134 | |
135 TEST(HTTPParsersTest, parseHTTPHeaderEmpty) | |
136 { | |
137 String failureReason; | |
138 AtomicString name, value; | |
139 EXPECT_EQ(0u, parseHTTPHeader("", failureReason, name, value)); | |
140 EXPECT_EQ("Unterminated header name", failureReason); | |
141 } | |
142 | |
143 TEST(HTTPParsersTest, parseHTTPHeaderEmptyLine) | |
144 { | |
145 String failureReason; | |
146 AtomicString name, value; | |
147 EXPECT_EQ(2u, parseHTTPHeader("\r\notherdata", failureReason, name, value)); | |
148 EXPECT_TRUE(failureReason.isEmpty()); | |
149 EXPECT_TRUE(name.isNull()); | |
150 EXPECT_TRUE(value.isNull()); | |
151 } | |
152 | |
153 TEST(HTTPParsersTest, parseHTTPHeaderUnexpectedCRinName) | |
154 { | |
155 String failureReason; | |
156 AtomicString name, value; | |
157 EXPECT_EQ(0u, parseHTTPHeader("foo\rotherdata\n", failureReason, name, value )); | |
158 EXPECT_EQ("Unexpected CR in name at foo", failureReason); | |
159 } | |
160 | |
161 TEST(HTTPParsersTest, parseHTTPHeaderUnexpectedLFinName) | |
162 { | |
163 String failureReason; | |
164 AtomicString name, value; | |
165 EXPECT_EQ(0u, parseHTTPHeader("foo\notherdata\n", failureReason, name, value )); | |
166 EXPECT_EQ("Unexpected LF in name at foo", failureReason); | |
167 } | |
168 | |
169 TEST(HTTPParsersTest, parseHTTPHeaderUnexpectedLFinValue) | |
170 { | |
171 String failureReason; | |
172 AtomicString name, value; | |
173 EXPECT_EQ(0u, parseHTTPHeader("foo: bar\notherdata\n", failureReason, name, value)); | |
174 EXPECT_EQ("Unexpected LF in value at bar", failureReason); | |
175 } | |
176 | |
177 TEST(HTTPParsersTest, parseHTTPHeaderNoLFAtEndOfLine) | |
178 { | |
179 String failureReason; | |
180 AtomicString name, value; | |
181 EXPECT_EQ(0u, parseHTTPHeader("foo: bar\r", failureReason, name, value)); | |
182 EXPECT_EQ("CR doesn't follow LF after value at ", failureReason); | |
183 } | |
184 | |
185 TEST(HTTPParsersTest, parseHTTPHeaderNoLF) | |
186 { | |
187 String failureReason; | |
188 AtomicString name, value; | |
189 EXPECT_EQ(0u, parseHTTPHeader("foo: bar\rhoge\r\n", failureReason, name, val ue)); | |
190 EXPECT_EQ("CR doesn't follow LF after value at hoge\r\n", failureReason); | |
191 } | |
192 | |
tyoshino (SeeGerritForStatus)
2014/06/04 08:24:12
add a test that takes input of two lines and check
yhirano
2014/06/04 09:14:03
Done.
| |
97 } // namespace WebCore | 193 } // namespace WebCore |
98 | 194 |
OLD | NEW |