| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "net/http/http_request_headers.h" | |
| 6 | |
| 7 #include "base/memory/scoped_ptr.h" | |
| 8 #include "base/values.h" | |
| 9 #include "testing/gtest/include/gtest/gtest.h" | |
| 10 | |
| 11 namespace net { | |
| 12 | |
| 13 namespace { | |
| 14 | |
| 15 TEST(HttpRequestHeaders, HasHeader) { | |
| 16 HttpRequestHeaders headers; | |
| 17 headers.SetHeader("Foo", "bar"); | |
| 18 EXPECT_TRUE(headers.HasHeader("foo")); | |
| 19 EXPECT_TRUE(headers.HasHeader("Foo")); | |
| 20 EXPECT_FALSE(headers.HasHeader("Fo")); | |
| 21 | |
| 22 const HttpRequestHeaders& headers_ref = headers; | |
| 23 EXPECT_TRUE(headers_ref.HasHeader("foo")); | |
| 24 EXPECT_TRUE(headers_ref.HasHeader("Foo")); | |
| 25 EXPECT_FALSE(headers_ref.HasHeader("Fo")); | |
| 26 } | |
| 27 | |
| 28 TEST(HttpRequestHeaders, SetHeader) { | |
| 29 HttpRequestHeaders headers; | |
| 30 headers.SetHeader("Foo", "bar"); | |
| 31 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 32 } | |
| 33 | |
| 34 TEST(HttpRequestHeaders, SetMultipleHeaders) { | |
| 35 HttpRequestHeaders headers; | |
| 36 headers.SetHeader("Cookie-Monster", "Nom nom nom"); | |
| 37 headers.SetHeader("Domo-Kun", "Loves Chrome"); | |
| 38 EXPECT_EQ("Cookie-Monster: Nom nom nom\r\nDomo-Kun: Loves Chrome\r\n\r\n", | |
| 39 headers.ToString()); | |
| 40 } | |
| 41 | |
| 42 TEST(HttpRequestHeaders, SetHeaderTwice) { | |
| 43 HttpRequestHeaders headers; | |
| 44 headers.SetHeader("Foo", "bar"); | |
| 45 headers.SetHeader("Foo", "bar"); | |
| 46 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 47 } | |
| 48 | |
| 49 TEST(HttpRequestHeaders, SetHeaderTwiceCaseInsensitive) { | |
| 50 HttpRequestHeaders headers; | |
| 51 headers.SetHeader("Foo", "bar"); | |
| 52 headers.SetHeader("FoO", "Bar"); | |
| 53 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString()); | |
| 54 } | |
| 55 | |
| 56 TEST(HttpRequestHeaders, SetHeaderTwiceSamePrefix) { | |
| 57 HttpRequestHeaders headers; | |
| 58 headers.SetHeader("FooBar", "smokes"); | |
| 59 headers.SetHeader("Foo", "crack"); | |
| 60 EXPECT_EQ("FooBar: smokes\r\nFoo: crack\r\n\r\n", headers.ToString()); | |
| 61 const HttpRequestHeaders& headers_ref = headers; | |
| 62 EXPECT_EQ("FooBar: smokes\r\nFoo: crack\r\n\r\n", headers_ref.ToString()); | |
| 63 } | |
| 64 | |
| 65 TEST(HttpRequestHeaders, SetEmptyHeader) { | |
| 66 HttpRequestHeaders headers; | |
| 67 headers.SetHeader("Foo", "Bar"); | |
| 68 headers.SetHeader("Bar", ""); | |
| 69 EXPECT_EQ("Foo: Bar\r\nBar:\r\n\r\n", headers.ToString()); | |
| 70 } | |
| 71 | |
| 72 TEST(HttpRequestHeaders, SetHeaderIfMissing) { | |
| 73 HttpRequestHeaders headers; | |
| 74 headers.SetHeaderIfMissing("Foo", "Bar"); | |
| 75 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString()); | |
| 76 headers.SetHeaderIfMissing("Foo", "Baz"); | |
| 77 EXPECT_EQ("Foo: Bar\r\n\r\n", headers.ToString()); | |
| 78 } | |
| 79 | |
| 80 TEST(HttpRequestHeaders, RemoveHeader) { | |
| 81 HttpRequestHeaders headers; | |
| 82 headers.SetHeader("Foo", "bar"); | |
| 83 headers.RemoveHeader("Foo"); | |
| 84 EXPECT_EQ("\r\n", headers.ToString()); | |
| 85 } | |
| 86 | |
| 87 TEST(HttpRequestHeaders, RemoveHeaderMissingHeader) { | |
| 88 HttpRequestHeaders headers; | |
| 89 headers.SetHeader("Foo", "bar"); | |
| 90 headers.RemoveHeader("Bar"); | |
| 91 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 92 } | |
| 93 | |
| 94 TEST(HttpRequestHeaders, RemoveHeaderCaseInsensitive) { | |
| 95 HttpRequestHeaders headers; | |
| 96 headers.SetHeader("Foo", "bar"); | |
| 97 headers.SetHeader("All-Your-Base", "Belongs To Chrome"); | |
| 98 headers.RemoveHeader("foo"); | |
| 99 EXPECT_EQ("All-Your-Base: Belongs To Chrome\r\n\r\n", headers.ToString()); | |
| 100 } | |
| 101 | |
| 102 TEST(HttpRequestHeaders, AddHeaderFromString) { | |
| 103 HttpRequestHeaders headers; | |
| 104 headers.AddHeaderFromString("Foo: bar"); | |
| 105 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 106 } | |
| 107 | |
| 108 TEST(HttpRequestHeaders, AddHeaderFromStringNoLeadingWhitespace) { | |
| 109 HttpRequestHeaders headers; | |
| 110 headers.AddHeaderFromString("Foo:bar"); | |
| 111 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 112 } | |
| 113 | |
| 114 TEST(HttpRequestHeaders, AddHeaderFromStringMoreLeadingWhitespace) { | |
| 115 HttpRequestHeaders headers; | |
| 116 headers.AddHeaderFromString("Foo: \t \t bar"); | |
| 117 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 118 } | |
| 119 | |
| 120 TEST(HttpRequestHeaders, AddHeaderFromStringTrailingWhitespace) { | |
| 121 HttpRequestHeaders headers; | |
| 122 headers.AddHeaderFromString("Foo: bar \t \t "); | |
| 123 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 124 } | |
| 125 | |
| 126 TEST(HttpRequestHeaders, AddHeaderFromStringLeadingTrailingWhitespace) { | |
| 127 HttpRequestHeaders headers; | |
| 128 headers.AddHeaderFromString("Foo: \t bar\t "); | |
| 129 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString()); | |
| 130 } | |
| 131 | |
| 132 TEST(HttpRequestHeaders, AddHeaderFromStringWithEmptyValue) { | |
| 133 HttpRequestHeaders headers; | |
| 134 headers.AddHeaderFromString("Foo:"); | |
| 135 EXPECT_EQ("Foo:\r\n\r\n", headers.ToString()); | |
| 136 } | |
| 137 | |
| 138 TEST(HttpRequestHeaders, AddHeaderFromStringWithWhitespaceValue) { | |
| 139 HttpRequestHeaders headers; | |
| 140 headers.AddHeaderFromString("Foo: "); | |
| 141 EXPECT_EQ("Foo:\r\n\r\n", headers.ToString()); | |
| 142 } | |
| 143 | |
| 144 TEST(HttpRequestHeaders, MergeFrom) { | |
| 145 HttpRequestHeaders headers; | |
| 146 headers.SetHeader("A", "A"); | |
| 147 headers.SetHeader("B", "B"); | |
| 148 | |
| 149 HttpRequestHeaders headers2; | |
| 150 headers2.SetHeader("B", "b"); | |
| 151 headers2.SetHeader("C", "c"); | |
| 152 headers.MergeFrom(headers2); | |
| 153 EXPECT_EQ("A: A\r\nB: b\r\nC: c\r\n\r\n", headers.ToString()); | |
| 154 } | |
| 155 | |
| 156 TEST(HttpRequestHeaders, CopyFrom) { | |
| 157 HttpRequestHeaders headers; | |
| 158 headers.SetHeader("A", "A"); | |
| 159 headers.SetHeader("B", "B"); | |
| 160 | |
| 161 HttpRequestHeaders headers2; | |
| 162 headers2.SetHeader("B", "b"); | |
| 163 headers2.SetHeader("C", "c"); | |
| 164 headers.CopyFrom(headers2); | |
| 165 EXPECT_EQ("B: b\r\nC: c\r\n\r\n", headers.ToString()); | |
| 166 } | |
| 167 | |
| 168 TEST(HttpRequestHeaders, ToNetLogParamAndBackAgain) { | |
| 169 HttpRequestHeaders headers; | |
| 170 headers.SetHeader("B", "b"); | |
| 171 headers.SetHeader("A", "a"); | |
| 172 std::string request_line("GET /stuff"); | |
| 173 | |
| 174 scoped_ptr<base::Value> event_param( | |
| 175 headers.NetLogCallback(&request_line, NetLog::LOG_ALL_BUT_BYTES)); | |
| 176 HttpRequestHeaders headers2; | |
| 177 std::string request_line2; | |
| 178 | |
| 179 ASSERT_TRUE(HttpRequestHeaders::FromNetLogParam(event_param.get(), | |
| 180 &headers2, | |
| 181 &request_line2)); | |
| 182 EXPECT_EQ(request_line, request_line2); | |
| 183 EXPECT_EQ("B: b\r\nA: a\r\n\r\n", headers2.ToString()); | |
| 184 } | |
| 185 | |
| 186 } // namespace | |
| 187 | |
| 188 } // namespace net | |
| OLD | NEW |