blob: 384ceeb67adfc9d6152a3705cfd92fe10bc5b165 [file] [log] [blame]
[email protected]270c6412010-03-29 22:02:471// 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
9namespace net {
10
11namespace {
12
[email protected]8c76ae22010-04-20 22:15:4313TEST(HttpRequestHeaders, HasHeader) {
[email protected]270c6412010-03-29 22:02:4714 HttpRequestHeaders headers;
[email protected]8c76ae22010-04-20 22:15:4315 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"));
[email protected]270c6412010-03-29 22:02:4724}
25
26TEST(HttpRequestHeaders, SetHeader) {
27 HttpRequestHeaders headers;
28 headers.SetHeader("Foo", "bar");
29 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
30}
31
32TEST(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
40TEST(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
47TEST(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
54TEST(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());
[email protected]8c76ae22010-04-20 22:15:4359 const HttpRequestHeaders& headers_ref = headers;
60 EXPECT_EQ("FooBar: smokes\r\nFoo: crack\r\n\r\n", headers_ref.ToString());
[email protected]270c6412010-03-29 22:02:4761}
62
63TEST(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
[email protected]50ba404b2011-01-21 13:38:4570TEST(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
[email protected]270c6412010-03-29 22:02:4778TEST(HttpRequestHeaders, RemoveHeader) {
79 HttpRequestHeaders headers;
80 headers.SetHeader("Foo", "bar");
81 headers.RemoveHeader("Foo");
82 EXPECT_EQ("\r\n", headers.ToString());
83}
84
85TEST(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
92TEST(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
100TEST(HttpRequestHeaders, AddHeaderFromString) {
101 HttpRequestHeaders headers;
102 headers.AddHeaderFromString("Foo: bar");
103 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
104}
105
106TEST(HttpRequestHeaders, AddHeaderFromStringNoLeadingWhitespace) {
107 HttpRequestHeaders headers;
108 headers.AddHeaderFromString("Foo:bar");
109 EXPECT_EQ("Foo: bar\r\n\r\n", headers.ToString());
110}
111
112TEST(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
118TEST(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
124TEST(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
130TEST(HttpRequestHeaders, AddHeaderFromStringWithEmptyValue) {
131 HttpRequestHeaders headers;
132 headers.AddHeaderFromString("Foo:");
133 EXPECT_EQ("Foo:\r\n\r\n", headers.ToString());
134}
135
136TEST(HttpRequestHeaders, AddHeaderFromStringWithWhitespaceValue) {
137 HttpRequestHeaders headers;
138 headers.AddHeaderFromString("Foo: ");
139 EXPECT_EQ("Foo:\r\n\r\n", headers.ToString());
140}
141
142TEST(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
[email protected]8c76ae22010-04-20 22:15:43154TEST(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
[email protected]270c6412010-03-29 22:02:47166} // namespace
167
168} // namespace net