Chromium Code Reviews| 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 |