OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 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 "modules/fetch/FetchHeaderList.h" |
| 6 |
| 7 #include <utility> |
| 8 #include "platform/wtf/StdLibExtras.h" |
| 9 #include "platform/wtf/text/WTFString.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 |
| 12 namespace blink { |
| 13 namespace { |
| 14 |
| 15 TEST(FetchHeaderListTest, Append) { |
| 16 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 17 headerList->Append("ConTenT-TyPe", "text/plain"); |
| 18 headerList->Append("content-type", "application/xml"); |
| 19 headerList->Append("CONTENT-type", "foo"); |
| 20 headerList->Append("X-Foo", "bar"); |
| 21 const std::pair<String, String> expectedHeaders[] = { |
| 22 std::make_pair("ConTenT-TyPe", "text/plain"), |
| 23 std::make_pair("ConTenT-TyPe", "application/xml"), |
| 24 std::make_pair("ConTenT-TyPe", "foo"), std::make_pair("X-Foo", "bar"), |
| 25 }; |
| 26 EXPECT_EQ(WTF_ARRAY_LENGTH(expectedHeaders), headerList->size()); |
| 27 size_t i = 0; |
| 28 for (const auto& header : headerList->List()) { |
| 29 EXPECT_EQ(expectedHeaders[i].first, header.first); |
| 30 EXPECT_EQ(expectedHeaders[i].second, header.second); |
| 31 ++i; |
| 32 } |
| 33 } |
| 34 |
| 35 TEST(FetchHeaderListTest, Set) { |
| 36 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 37 headerList->Append("ConTenT-TyPe", "text/plain"); |
| 38 headerList->Append("content-type", "application/xml"); |
| 39 headerList->Append("CONTENT-type", "foo"); |
| 40 headerList->Append("X-Foo", "bar"); |
| 41 headerList->Set("contENT-type", "quux"); |
| 42 headerList->Set("some-header", "some value"); |
| 43 EXPECT_EQ(3U, headerList->size()); |
| 44 const std::pair<String, String> expectedHeaders[] = { |
| 45 std::make_pair("ConTenT-TyPe", "quux"), |
| 46 std::make_pair("some-header", "some value"), |
| 47 std::make_pair("X-Foo", "bar"), |
| 48 }; |
| 49 EXPECT_EQ(WTF_ARRAY_LENGTH(expectedHeaders), headerList->size()); |
| 50 size_t i = 0; |
| 51 for (const auto& header : headerList->List()) { |
| 52 EXPECT_EQ(expectedHeaders[i].first, header.first); |
| 53 EXPECT_EQ(expectedHeaders[i].second, header.second); |
| 54 ++i; |
| 55 } |
| 56 } |
| 57 |
| 58 TEST(FetchHeaderListTest, Erase) { |
| 59 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 60 headerList->Remove("foo"); |
| 61 EXPECT_EQ(0U, headerList->size()); |
| 62 headerList->Append("ConTenT-TyPe", "text/plain"); |
| 63 headerList->Append("content-type", "application/xml"); |
| 64 headerList->Append("CONTENT-type", "foo"); |
| 65 headerList->Append("X-Foo", "bar"); |
| 66 headerList->Remove("content-TYPE"); |
| 67 EXPECT_EQ(1U, headerList->size()); |
| 68 const std::pair<String, String> expectedHeaders[] = { |
| 69 std::make_pair("X-Foo", "bar"), |
| 70 }; |
| 71 EXPECT_EQ(WTF_ARRAY_LENGTH(expectedHeaders), headerList->size()); |
| 72 size_t i = 0; |
| 73 for (const auto& header : headerList->List()) { |
| 74 EXPECT_EQ(expectedHeaders[i].first, header.first); |
| 75 EXPECT_EQ(expectedHeaders[i].second, header.second); |
| 76 ++i; |
| 77 } |
| 78 } |
| 79 |
| 80 TEST(FetchHeaderListTest, Combine) { |
| 81 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 82 headerList->Append("ConTenT-TyPe", "text/plain"); |
| 83 headerList->Append("content-type", "application/xml"); |
| 84 headerList->Append("CONTENT-type", "foo"); |
| 85 headerList->Append("X-Foo", "bar"); |
| 86 String combinedValue; |
| 87 EXPECT_TRUE(headerList->Get("X-Foo", combinedValue)); |
| 88 EXPECT_EQ("bar", combinedValue); |
| 89 EXPECT_TRUE(headerList->Get("content-TYPE", combinedValue)); |
| 90 EXPECT_EQ("text/plain,application/xml,foo", combinedValue); |
| 91 } |
| 92 |
| 93 // This is going to be removed: see crbug.com/645492. |
| 94 TEST(FetchHeaderListTest, GetAll) { |
| 95 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 96 headerList->Append("ConTenT-TyPe", "text/plain"); |
| 97 headerList->Append("content-type", "application/xml"); |
| 98 headerList->Append("CONTENT-type", "foo"); |
| 99 headerList->Append("X-Foo", "bar"); |
| 100 Vector<String> combinedValues; |
| 101 headerList->GetAll("content-TYPE", combinedValues); |
| 102 EXPECT_EQ(Vector<String>({"text/plain", "application/xml", "foo"}), |
| 103 combinedValues); |
| 104 headerList->GetAll("x-foo", combinedValues); |
| 105 EXPECT_EQ(Vector<String>({"bar"}), combinedValues); |
| 106 headerList->GetAll("Host", combinedValues); |
| 107 EXPECT_TRUE(combinedValues.IsEmpty()); |
| 108 } |
| 109 |
| 110 TEST(FetchHeaderListTest, Contains) { |
| 111 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 112 headerList->Append("ConTenT-TyPe", "text/plain"); |
| 113 headerList->Append("content-type", "application/xml"); |
| 114 headerList->Append("X-Foo", "bar"); |
| 115 EXPECT_TRUE(headerList->Has("CONTENT-TYPE")); |
| 116 EXPECT_TRUE(headerList->Has("X-Foo")); |
| 117 EXPECT_FALSE(headerList->Has("X-Bar")); |
| 118 } |
| 119 |
| 120 TEST(FetchHeaderListTest, ContainsNonSimpleHeader) { |
| 121 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 122 EXPECT_FALSE(headerList->ContainsNonSimpleHeader()); |
| 123 |
| 124 headerList->Append("Host", "foobar"); |
| 125 headerList->Append("X-Foo", "bar"); |
| 126 EXPECT_TRUE(headerList->ContainsNonSimpleHeader()); |
| 127 |
| 128 headerList->ClearList(); |
| 129 headerList->Append("ConTenT-TyPe", "text/plain"); |
| 130 headerList->Append("content-type", "application/xml"); |
| 131 headerList->Append("X-Foo", "bar"); |
| 132 EXPECT_TRUE(headerList->ContainsNonSimpleHeader()); |
| 133 |
| 134 headerList->ClearList(); |
| 135 headerList->Append("ConTenT-TyPe", "multipart/form-data"); |
| 136 headerList->Append("Accept", "xyz"); |
| 137 EXPECT_FALSE(headerList->ContainsNonSimpleHeader()); |
| 138 } |
| 139 |
| 140 TEST(FetchHeaderListTest, SortAndCombine) { |
| 141 FetchHeaderList* headerList = FetchHeaderList::Create(); |
| 142 EXPECT_TRUE(headerList->SortAndCombine().IsEmpty()); |
| 143 headerList->Append("content-type", "multipart/form-data"); |
| 144 headerList->Append("ConTenT-TyPe", "application/xml"); |
| 145 headerList->Append("Accept", "XYZ"); |
| 146 headerList->Append("X-Foo", "bar"); |
| 147 const std::pair<String, String> expectedHeaders[] = { |
| 148 std::make_pair("accept", "XYZ"), |
| 149 std::make_pair("content-type", "multipart/form-data,application/xml"), |
| 150 std::make_pair("x-foo", "bar")}; |
| 151 const Vector<FetchHeaderList::Header> sortedAndCombined = |
| 152 headerList->SortAndCombine(); |
| 153 EXPECT_EQ(WTF_ARRAY_LENGTH(expectedHeaders), sortedAndCombined.size()); |
| 154 size_t i = 0; |
| 155 for (const auto& headerPair : headerList->SortAndCombine()) { |
| 156 EXPECT_EQ(expectedHeaders[i].first, headerPair.first); |
| 157 EXPECT_EQ(expectedHeaders[i].second, headerPair.second); |
| 158 ++i; |
| 159 } |
| 160 } |
| 161 |
| 162 } // namespace |
| 163 } // namespace blink |
OLD | NEW |