|  | #include "http2/adapter/data_source.h" | 
|  |  | 
|  | #include "common/platform/api/quiche_test.h" | 
|  |  | 
|  | namespace http2 { | 
|  | namespace adapter { | 
|  | namespace test { | 
|  | namespace { | 
|  |  | 
|  | TEST(StringDataSourceTest, EmptyString) { | 
|  | StringDataSource source(""); | 
|  |  | 
|  | EXPECT_EQ(source.state(), DataSource::DONE); | 
|  | EXPECT_THAT(source.NextData(), testing::IsEmpty()); | 
|  | } | 
|  |  | 
|  | TEST(StringDataSourceTest, PartialConsume) { | 
|  | StringDataSource source("I'm a HTTP message body. Really!"); | 
|  |  | 
|  | EXPECT_EQ(source.state(), DataSource::READY); | 
|  | EXPECT_THAT(source.NextData(), testing::Not(testing::IsEmpty())); | 
|  | source.Consume(6); | 
|  | EXPECT_EQ(source.state(), DataSource::READY); | 
|  | EXPECT_THAT(source.NextData(), testing::StartsWith("HTTP")); | 
|  |  | 
|  | source.Consume(0); | 
|  | EXPECT_EQ(source.state(), DataSource::READY); | 
|  | EXPECT_THAT(source.NextData(), testing::StartsWith("HTTP")); | 
|  |  | 
|  | // Consumes more than the remaining bytes available. | 
|  | source.Consume(50); | 
|  | EXPECT_THAT(source.NextData(), testing::IsEmpty()) | 
|  | << "next data: " << source.NextData(); | 
|  | EXPECT_EQ(source.state(), DataSource::DONE); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace test | 
|  | }  // namespace adapter | 
|  | }  // namespace http2 |