diff --git a/http2/platform/api/http2_string_utils_test.cc b/http2/platform/api/http2_string_utils_test.cc
new file mode 100644
index 0000000..254f9d7
--- /dev/null
+++ b/http2/platform/api/http2_string_utils_test.cc
@@ -0,0 +1,178 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/third_party/quiche/src/http2/platform/api/http2_string_utils.h"
+
+#include <cstdint>
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "net/third_party/quiche/src/http2/platform/api/http2_string_piece.h"
+
+namespace http2 {
+namespace test {
+namespace {
+
+TEST(Http2StringUtilsTest, Http2StrCat) {
+  // No arguments.
+  EXPECT_EQ("", Http2StrCat());
+
+  // Single string-like argument.
+  const char kFoo[] = "foo";
+  const Http2String string_foo(kFoo);
+  const Http2StringPiece stringpiece_foo(string_foo);
+  EXPECT_EQ("foo", Http2StrCat(kFoo));
+  EXPECT_EQ("foo", Http2StrCat(string_foo));
+  EXPECT_EQ("foo", Http2StrCat(stringpiece_foo));
+
+  // Two string-like arguments.
+  const char kBar[] = "bar";
+  const Http2StringPiece stringpiece_bar(kBar);
+  const Http2String string_bar(kBar);
+  EXPECT_EQ("foobar", Http2StrCat(kFoo, kBar));
+  EXPECT_EQ("foobar", Http2StrCat(kFoo, string_bar));
+  EXPECT_EQ("foobar", Http2StrCat(kFoo, stringpiece_bar));
+  EXPECT_EQ("foobar", Http2StrCat(string_foo, kBar));
+  EXPECT_EQ("foobar", Http2StrCat(string_foo, string_bar));
+  EXPECT_EQ("foobar", Http2StrCat(string_foo, stringpiece_bar));
+  EXPECT_EQ("foobar", Http2StrCat(stringpiece_foo, kBar));
+  EXPECT_EQ("foobar", Http2StrCat(stringpiece_foo, string_bar));
+  EXPECT_EQ("foobar", Http2StrCat(stringpiece_foo, stringpiece_bar));
+
+  // Many-many arguments.
+  EXPECT_EQ(
+      "foobarbazquxquuxquuzcorgegraultgarplywaldofredplughxyzzythud",
+      Http2StrCat("foo", "bar", "baz", "qux", "quux", "quuz", "corge", "grault",
+                  "garply", "waldo", "fred", "plugh", "xyzzy", "thud"));
+
+  // Numerical arguments.
+  const int16_t i = 1;
+  const uint64_t u = 8;
+  const double d = 3.1415;
+
+  EXPECT_EQ("1 8", Http2StrCat(i, " ", u));
+  EXPECT_EQ("3.14151181", Http2StrCat(d, i, i, u, i));
+  EXPECT_EQ("i: 1, u: 8, d: 3.1415",
+            Http2StrCat("i: ", i, ", u: ", u, ", d: ", d));
+
+  // Boolean arguments.
+  const bool t = true;
+  const bool f = false;
+
+  EXPECT_EQ("1", Http2StrCat(t));
+  EXPECT_EQ("0", Http2StrCat(f));
+  EXPECT_EQ("0110", Http2StrCat(f, t, t, f));
+
+  // Mixed string-like, numerical, and Boolean arguments.
+  EXPECT_EQ("foo1foo081bar3.14151",
+            Http2StrCat(kFoo, i, string_foo, f, u, t, stringpiece_bar, d, t));
+  EXPECT_EQ("3.141511bar18bar13.14150",
+            Http2StrCat(d, t, t, string_bar, i, u, kBar, t, d, f));
+}
+
+TEST(Http2StringUtilsTest, Http2StrAppend) {
+  // No arguments on empty string.
+  Http2String output;
+  Http2StrAppend(&output);
+  EXPECT_TRUE(output.empty());
+
+  // Single string-like argument.
+  const char kFoo[] = "foo";
+  const Http2String string_foo(kFoo);
+  const Http2StringPiece stringpiece_foo(string_foo);
+  Http2StrAppend(&output, kFoo);
+  EXPECT_EQ("foo", output);
+  Http2StrAppend(&output, string_foo);
+  EXPECT_EQ("foofoo", output);
+  Http2StrAppend(&output, stringpiece_foo);
+  EXPECT_EQ("foofoofoo", output);
+
+  // No arguments on non-empty string.
+  Http2StrAppend(&output);
+  EXPECT_EQ("foofoofoo", output);
+
+  output.clear();
+
+  // Two string-like arguments.
+  const char kBar[] = "bar";
+  const Http2StringPiece stringpiece_bar(kBar);
+  const Http2String string_bar(kBar);
+  Http2StrAppend(&output, kFoo, kBar);
+  EXPECT_EQ("foobar", output);
+  Http2StrAppend(&output, kFoo, string_bar);
+  EXPECT_EQ("foobarfoobar", output);
+  Http2StrAppend(&output, kFoo, stringpiece_bar);
+  EXPECT_EQ("foobarfoobarfoobar", output);
+  Http2StrAppend(&output, string_foo, kBar);
+  EXPECT_EQ("foobarfoobarfoobarfoobar", output);
+
+  output.clear();
+
+  Http2StrAppend(&output, string_foo, string_bar);
+  EXPECT_EQ("foobar", output);
+  Http2StrAppend(&output, string_foo, stringpiece_bar);
+  EXPECT_EQ("foobarfoobar", output);
+  Http2StrAppend(&output, stringpiece_foo, kBar);
+  EXPECT_EQ("foobarfoobarfoobar", output);
+  Http2StrAppend(&output, stringpiece_foo, string_bar);
+  EXPECT_EQ("foobarfoobarfoobarfoobar", output);
+
+  output.clear();
+
+  Http2StrAppend(&output, stringpiece_foo, stringpiece_bar);
+  EXPECT_EQ("foobar", output);
+
+  // Many-many arguments.
+  Http2StrAppend(&output, "foo", "bar", "baz", "qux", "quux", "quuz", "corge",
+                 "grault", "garply", "waldo", "fred", "plugh", "xyzzy", "thud");
+  EXPECT_EQ(
+      "foobarfoobarbazquxquuxquuzcorgegraultgarplywaldofredplughxyzzythud",
+      output);
+
+  output.clear();
+
+  // Numerical arguments.
+  const int16_t i = 1;
+  const uint64_t u = 8;
+  const double d = 3.1415;
+
+  Http2StrAppend(&output, i, " ", u);
+  EXPECT_EQ("1 8", output);
+  Http2StrAppend(&output, d, i, i, u, i);
+  EXPECT_EQ("1 83.14151181", output);
+  Http2StrAppend(&output, "i: ", i, ", u: ", u, ", d: ", d);
+  EXPECT_EQ("1 83.14151181i: 1, u: 8, d: 3.1415", output);
+
+  output.clear();
+
+  // Boolean arguments.
+  const bool t = true;
+  const bool f = false;
+
+  Http2StrAppend(&output, t);
+  EXPECT_EQ("1", output);
+  Http2StrAppend(&output, f);
+  EXPECT_EQ("10", output);
+  Http2StrAppend(&output, f, t, t, f);
+  EXPECT_EQ("100110", output);
+
+  output.clear();
+
+  // Mixed string-like, numerical, and Boolean arguments.
+  Http2StrAppend(&output, kFoo, i, string_foo, f, u, t, stringpiece_bar, d, t);
+  EXPECT_EQ("foo1foo081bar3.14151", output);
+  Http2StrAppend(&output, d, t, t, string_bar, i, u, kBar, t, d, f);
+  EXPECT_EQ("foo1foo081bar3.141513.141511bar18bar13.14150", output);
+}
+
+TEST(Http2StringUtilsTest, Http2StringPrintf) {
+  EXPECT_EQ("", Http2StringPrintf("%s", ""));
+  EXPECT_EQ("foobar", Http2StringPrintf("%sbar", "foo"));
+  EXPECT_EQ("foobar", Http2StringPrintf("%s%s", "foo", "bar"));
+  EXPECT_EQ("foo: 1, bar: 2.0",
+            Http2StringPrintf("foo: %d, bar: %.1f", 1, 2.0));
+}
+
+}  // namespace
+}  // namespace test
+}  // namespace http2
