For convenience, adds a matcher that considers only frame types.
This is just syntactic sugar, but can reduce test verbosity if the test case only cares about frame types and not lengths.
PiperOrigin-RevId: 364801347
Change-Id: I431fd1ae764747bd61e9bc89b86568ba50fecda3
diff --git a/http2/adapter/test_utils.cc b/http2/adapter/test_utils.cc
index 6477e9c..9e1db99 100644
--- a/http2/adapter/test_utils.cc
+++ b/http2/adapter/test_utils.cc
@@ -111,6 +111,17 @@
return MakeMatcher(new SpdyControlFrameMatcher(std::move(types_and_lengths)));
}
+testing::Matcher<const std::string> ContainsFrames(
+ std::vector<spdy::SpdyFrameType> types) {
+ std::vector<std::pair<spdy::SpdyFrameType, absl::optional<size_t>>>
+ types_and_lengths;
+ types_and_lengths.reserve(types.size());
+ for (spdy::SpdyFrameType type : types) {
+ types_and_lengths.push_back({type, absl::nullopt});
+ }
+ return MakeMatcher(new SpdyControlFrameMatcher(std::move(types_and_lengths)));
+}
+
} // namespace test
} // namespace adapter
} // namespace http2
diff --git a/http2/adapter/test_utils.h b/http2/adapter/test_utils.h
index 6d585ee..6276bf1 100644
--- a/http2/adapter/test_utils.h
+++ b/http2/adapter/test_utils.h
@@ -17,6 +17,11 @@
std::vector<std::pair<spdy::SpdyFrameType, absl::optional<size_t>>>
types_and_lengths);
+// Matcher that checks whether a string contains HTTP/2 frames of the specified
+// ordered sequence of types.
+testing::Matcher<const std::string> ContainsFrames(
+ std::vector<spdy::SpdyFrameType> types);
+
} // namespace test
} // namespace adapter
} // namespace http2
diff --git a/http2/adapter/test_utils_test.cc b/http2/adapter/test_utils_test.cc
index 1f8c557..a000e5c 100644
--- a/http2/adapter/test_utils_test.cc
+++ b/http2/adapter/test_utils_test.cc
@@ -11,7 +11,7 @@
using spdy::SpdyFramer;
TEST(ContainsFrames, Empty) {
- EXPECT_THAT("", ContainsFrames({}));
+ EXPECT_THAT("", ContainsFrames(std::vector<spdy::SpdyFrameType>{}));
}
TEST(ContainsFrames, SingleFrameWithLength) {
@@ -67,19 +67,27 @@
block[":authority"] = "example.com";
spdy::SpdyHeadersIR headers{17, std::move(block)};
- EXPECT_THAT(
+ const std::string frame_sequence =
absl::StrCat(absl::string_view(framer.SerializeFrame(ping)),
absl::string_view(framer.SerializeFrame(window_update)),
absl::string_view(framer.SerializeFrame(data)),
absl::string_view(framer.SerializeFrame(rst_stream)),
absl::string_view(framer.SerializeFrame(goaway)),
- absl::string_view(framer.SerializeFrame(headers))),
+ absl::string_view(framer.SerializeFrame(headers)));
+ EXPECT_THAT(
+ frame_sequence,
ContainsFrames({{spdy::SpdyFrameType::PING, absl::nullopt},
{spdy::SpdyFrameType::WINDOW_UPDATE, absl::nullopt},
{spdy::SpdyFrameType::DATA, 25},
{spdy::SpdyFrameType::RST_STREAM, absl::nullopt},
{spdy::SpdyFrameType::GOAWAY, 42},
{spdy::SpdyFrameType::HEADERS, 19}}));
+ EXPECT_THAT(
+ frame_sequence,
+ ContainsFrames(
+ {spdy::SpdyFrameType::PING, spdy::SpdyFrameType::WINDOW_UPDATE,
+ spdy::SpdyFrameType::DATA, spdy::SpdyFrameType::RST_STREAM,
+ spdy::SpdyFrameType::GOAWAY, spdy::SpdyFrameType::HEADERS}));
}
} // namespace