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