Home | History | Annotate | Download | only in http
      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