1 // Copyright (c) 2019 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4
5 #include "include/cef_response.h"
6 #include "tests/ceftests/test_util.h"
7 #include "tests/gtest/include/gtest/gtest.h"
8
TEST(ResponseTest,SetGetHeaderByName)9 TEST(ResponseTest, SetGetHeaderByName) {
10 CefRefPtr<CefResponse> response(CefResponse::Create());
11 EXPECT_TRUE(response.get() != nullptr);
12
13 CefResponse::HeaderMap headers, expectedHeaders;
14
15 response->SetHeaderByName("HeaderA", "ValueA", false);
16 response->SetHeaderByName("HeaderB", "ValueB", false);
17
18 expectedHeaders.insert(std::make_pair("HeaderA", "ValueA"));
19 expectedHeaders.insert(std::make_pair("HeaderB", "ValueB"));
20
21 // Case insensitive retrieval.
22 EXPECT_STREQ("ValueA",
23 response->GetHeaderByName("headera").ToString().c_str());
24 EXPECT_STREQ("ValueB",
25 response->GetHeaderByName("headerb").ToString().c_str());
26 EXPECT_STREQ("", response->GetHeaderByName("noexist").ToString().c_str());
27
28 response->GetHeaderMap(headers);
29 TestMapEqual(expectedHeaders, headers, false);
30
31 // Replace an existing value.
32 response->SetHeaderByName("HeaderA", "ValueANew", true);
33
34 expectedHeaders.clear();
35 expectedHeaders.insert(std::make_pair("HeaderA", "ValueANew"));
36 expectedHeaders.insert(std::make_pair("HeaderB", "ValueB"));
37
38 // Case insensitive retrieval.
39 EXPECT_STREQ("ValueANew",
40 response->GetHeaderByName("headerA").ToString().c_str());
41
42 response->GetHeaderMap(headers);
43 TestMapEqual(expectedHeaders, headers, false);
44
45 // Header with multiple values.
46 expectedHeaders.clear();
47 expectedHeaders.insert(std::make_pair("HeaderA", "ValueA1"));
48 expectedHeaders.insert(std::make_pair("HeaderA", "ValueA2"));
49 expectedHeaders.insert(std::make_pair("HeaderB", "ValueB"));
50 response->SetHeaderMap(expectedHeaders);
51
52 // When there are multiple values only the first is returned.
53 EXPECT_STREQ("ValueA1",
54 response->GetHeaderByName("headera").ToString().c_str());
55
56 // Don't overwrite the value.
57 response->SetHeaderByName("HeaderA", "ValueANew", false);
58
59 response->GetHeaderMap(headers);
60 TestMapEqual(expectedHeaders, headers, false);
61
62 // Overwrite the value (remove the duplicates).
63 response->SetHeaderByName("HeaderA", "ValueANew", true);
64
65 expectedHeaders.clear();
66 expectedHeaders.insert(std::make_pair("HeaderA", "ValueANew"));
67 expectedHeaders.insert(std::make_pair("HeaderB", "ValueB"));
68
69 response->GetHeaderMap(headers);
70 TestMapEqual(expectedHeaders, headers, false);
71 }
72