blob: 4d3f02fbc98ef884ba8a091045cfcb4ff138e4ed [file] [log] [blame]
QUICHE teamfd50a402018-12-07 22:54:05 -05001// 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
QUICHE team5be974e2020-12-29 18:35:24 -05005#include "http2/platform/api/http2_string_utils.h"
QUICHE teamfd50a402018-12-07 22:54:05 -05006
7#include <cstdint>
8
vasilvvb16f7962020-10-13 10:48:38 -07009#include "absl/strings/string_view.h"
QUICHE team5be974e2020-12-29 18:35:24 -050010#include "common/platform/api/quiche_str_cat.h"
11#include "common/platform/api/quiche_test.h"
QUICHE teamfd50a402018-12-07 22:54:05 -050012
13namespace http2 {
14namespace test {
15namespace {
16
QUICHE teamfd50a402018-12-07 22:54:05 -050017TEST(Http2StringUtilsTest, Http2StrAppend) {
18 // No arguments on empty string.
bnc47904002019-08-16 11:49:48 -070019 std::string output;
QUICHE teamfd50a402018-12-07 22:54:05 -050020 Http2StrAppend(&output);
21 EXPECT_TRUE(output.empty());
22
23 // Single string-like argument.
24 const char kFoo[] = "foo";
bnc47904002019-08-16 11:49:48 -070025 const std::string string_foo(kFoo);
vasilvvb16f7962020-10-13 10:48:38 -070026 const absl::string_view stringpiece_foo(string_foo);
QUICHE teamfd50a402018-12-07 22:54:05 -050027 Http2StrAppend(&output, kFoo);
28 EXPECT_EQ("foo", output);
29 Http2StrAppend(&output, string_foo);
30 EXPECT_EQ("foofoo", output);
31 Http2StrAppend(&output, stringpiece_foo);
32 EXPECT_EQ("foofoofoo", output);
33
34 // No arguments on non-empty string.
35 Http2StrAppend(&output);
36 EXPECT_EQ("foofoofoo", output);
37
38 output.clear();
39
40 // Two string-like arguments.
41 const char kBar[] = "bar";
vasilvvb16f7962020-10-13 10:48:38 -070042 const absl::string_view stringpiece_bar(kBar);
bnc47904002019-08-16 11:49:48 -070043 const std::string string_bar(kBar);
QUICHE teamfd50a402018-12-07 22:54:05 -050044 Http2StrAppend(&output, kFoo, kBar);
45 EXPECT_EQ("foobar", output);
46 Http2StrAppend(&output, kFoo, string_bar);
47 EXPECT_EQ("foobarfoobar", output);
48 Http2StrAppend(&output, kFoo, stringpiece_bar);
49 EXPECT_EQ("foobarfoobarfoobar", output);
50 Http2StrAppend(&output, string_foo, kBar);
51 EXPECT_EQ("foobarfoobarfoobarfoobar", output);
52
53 output.clear();
54
55 Http2StrAppend(&output, string_foo, string_bar);
56 EXPECT_EQ("foobar", output);
57 Http2StrAppend(&output, string_foo, stringpiece_bar);
58 EXPECT_EQ("foobarfoobar", output);
59 Http2StrAppend(&output, stringpiece_foo, kBar);
60 EXPECT_EQ("foobarfoobarfoobar", output);
61 Http2StrAppend(&output, stringpiece_foo, string_bar);
62 EXPECT_EQ("foobarfoobarfoobarfoobar", output);
63
64 output.clear();
65
66 Http2StrAppend(&output, stringpiece_foo, stringpiece_bar);
67 EXPECT_EQ("foobar", output);
68
69 // Many-many arguments.
70 Http2StrAppend(&output, "foo", "bar", "baz", "qux", "quux", "quuz", "corge",
71 "grault", "garply", "waldo", "fred", "plugh", "xyzzy", "thud");
72 EXPECT_EQ(
73 "foobarfoobarbazquxquuxquuzcorgegraultgarplywaldofredplughxyzzythud",
74 output);
75
76 output.clear();
77
78 // Numerical arguments.
79 const int16_t i = 1;
80 const uint64_t u = 8;
81 const double d = 3.1415;
82
83 Http2StrAppend(&output, i, " ", u);
84 EXPECT_EQ("1 8", output);
85 Http2StrAppend(&output, d, i, i, u, i);
86 EXPECT_EQ("1 83.14151181", output);
87 Http2StrAppend(&output, "i: ", i, ", u: ", u, ", d: ", d);
88 EXPECT_EQ("1 83.14151181i: 1, u: 8, d: 3.1415", output);
89
90 output.clear();
91
92 // Boolean arguments.
93 const bool t = true;
94 const bool f = false;
95
96 Http2StrAppend(&output, t);
97 EXPECT_EQ("1", output);
98 Http2StrAppend(&output, f);
99 EXPECT_EQ("10", output);
100 Http2StrAppend(&output, f, t, t, f);
101 EXPECT_EQ("100110", output);
102
103 output.clear();
104
105 // Mixed string-like, numerical, and Boolean arguments.
106 Http2StrAppend(&output, kFoo, i, string_foo, f, u, t, stringpiece_bar, d, t);
107 EXPECT_EQ("foo1foo081bar3.14151", output);
108 Http2StrAppend(&output, d, t, t, string_bar, i, u, kBar, t, d, f);
109 EXPECT_EQ("foo1foo081bar3.141513.141511bar18bar13.14150", output);
110}
111
112TEST(Http2StringUtilsTest, Http2StringPrintf) {
113 EXPECT_EQ("", Http2StringPrintf("%s", ""));
114 EXPECT_EQ("foobar", Http2StringPrintf("%sbar", "foo"));
115 EXPECT_EQ("foobar", Http2StringPrintf("%s%s", "foo", "bar"));
116 EXPECT_EQ("foo: 1, bar: 2.0",
117 Http2StringPrintf("foo: %d, bar: %.1f", 1, 2.0));
118}
119
120} // namespace
121} // namespace test
122} // namespace http2