| // Copyright (c) 2023 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 "quiche/common/test_tools/mock_streams.h" | 
 |  | 
 | #include <array> | 
 | #include <string> | 
 |  | 
 | #include "absl/types/span.h" | 
 | #include "quiche/common/platform/api/quiche_test.h" | 
 | #include "quiche/common/quiche_stream.h" | 
 | #include "quiche/common/test_tools/quiche_test_utils.h" | 
 |  | 
 | namespace quiche::test { | 
 | namespace { | 
 |  | 
 | using ::testing::ElementsAre; | 
 | using ::testing::IsEmpty; | 
 |  | 
 | TEST(MockWriteStreamTest, DefaultWrite) { | 
 |   MockWriteStream stream; | 
 |   QUICHE_EXPECT_OK(quiche::WriteIntoStream(stream, "test")); | 
 |   EXPECT_EQ(stream.data(), "test"); | 
 |   EXPECT_FALSE(stream.fin_written()); | 
 | } | 
 |  | 
 | TEST(ReadStreamFromStringTest, ReadIntoSpan) { | 
 |   std::string source = "abcdef"; | 
 |   std::array<char, 3> buffer; | 
 |   ReadStreamFromString stream(&source); | 
 |   EXPECT_EQ(stream.ReadableBytes(), 6); | 
 |  | 
 |   stream.Read(absl::MakeSpan(buffer)); | 
 |   EXPECT_THAT(buffer, ElementsAre('a', 'b', 'c')); | 
 |   EXPECT_EQ(stream.ReadableBytes(), 3); | 
 |  | 
 |   stream.Read(absl::MakeSpan(buffer)); | 
 |   EXPECT_THAT(buffer, ElementsAre('d', 'e', 'f')); | 
 |   EXPECT_EQ(stream.ReadableBytes(), 0); | 
 |   EXPECT_THAT(source, IsEmpty()); | 
 | } | 
 |  | 
 | TEST(ReadStreamFromStringTest, ReadIntoString) { | 
 |   std::string source = "abcdef"; | 
 |   std::string destination; | 
 |   ReadStreamFromString stream(&source); | 
 |   stream.Read(&destination); | 
 |   EXPECT_EQ(destination, "abcdef"); | 
 |   EXPECT_THAT(source, IsEmpty()); | 
 | } | 
 |  | 
 | TEST(ReadStreamFromStringTest, PeekAndSkip) { | 
 |   std::string source = "abcdef"; | 
 |   ReadStreamFromString stream(&source); | 
 |   EXPECT_EQ(stream.PeekNextReadableRegion().peeked_data, "abcdef"); | 
 |   stream.SkipBytes(2); | 
 |   EXPECT_EQ(stream.PeekNextReadableRegion().peeked_data, "cdef"); | 
 |   EXPECT_EQ(source, "cdef"); | 
 | } | 
 |  | 
 | }  // namespace | 
 | }  // namespace quiche::test |