- add sources.
[platform/framework/web/crosswalk.git] / src / net / http / http_request_headers_unittest.cc
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