1 // Copyright (c) 2023 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
5 #include "quiche/common/test_tools/mock_streams.h"
6
7 #include <array>
8 #include <string>
9
10 #include "absl/types/span.h"
11 #include "quiche/common/platform/api/quiche_test.h"
12 #include "quiche/common/quiche_stream.h"
13 #include "quiche/common/test_tools/quiche_test_utils.h"
14
15 namespace quiche::test {
16 namespace {
17
18 using ::testing::ElementsAre;
19 using ::testing::IsEmpty;
20
TEST(MockWriteStreamTest,DefaultWrite)21 TEST(MockWriteStreamTest, DefaultWrite) {
22 MockWriteStream stream;
23 QUICHE_EXPECT_OK(quiche::WriteIntoStream(stream, "test"));
24 EXPECT_EQ(stream.data(), "test");
25 EXPECT_FALSE(stream.fin_written());
26 }
27
TEST(ReadStreamFromStringTest,ReadIntoSpan)28 TEST(ReadStreamFromStringTest, ReadIntoSpan) {
29 std::string source = "abcdef";
30 std::array<char, 3> buffer;
31 ReadStreamFromString stream(&source);
32 EXPECT_EQ(stream.ReadableBytes(), 6);
33
34 stream.Read(absl::MakeSpan(buffer));
35 EXPECT_THAT(buffer, ElementsAre('a', 'b', 'c'));
36 EXPECT_EQ(stream.ReadableBytes(), 3);
37
38 stream.Read(absl::MakeSpan(buffer));
39 EXPECT_THAT(buffer, ElementsAre('d', 'e', 'f'));
40 EXPECT_EQ(stream.ReadableBytes(), 0);
41 EXPECT_THAT(source, IsEmpty());
42 }
43
TEST(ReadStreamFromStringTest,ReadIntoString)44 TEST(ReadStreamFromStringTest, ReadIntoString) {
45 std::string source = "abcdef";
46 std::string destination;
47 ReadStreamFromString stream(&source);
48 stream.Read(&destination);
49 EXPECT_EQ(destination, "abcdef");
50 EXPECT_THAT(source, IsEmpty());
51 }
52
TEST(ReadStreamFromStringTest,PeekAndSkip)53 TEST(ReadStreamFromStringTest, PeekAndSkip) {
54 std::string source = "abcdef";
55 ReadStreamFromString stream(&source);
56 EXPECT_EQ(stream.PeekNextReadableRegion().peeked_data, "abcdef");
57 stream.SkipBytes(2);
58 EXPECT_EQ(stream.PeekNextReadableRegion().peeked_data, "cdef");
59 EXPECT_EQ(source, "cdef");
60 }
61
62 } // namespace
63 } // namespace quiche::test
64