• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright © 2024 Collabora, Ltd.
2 // SPDX-License-Identifier: MIT
3 
4 #include <gtest/gtest.h>
5 #include "memstream.h"
6 
7 class MemStreamTest : public ::testing::Test {
8 protected:
9     struct u_memstream mem;
10     char *buffer;
11     size_t size;
12 
MemStreamTest()13     MemStreamTest() : buffer(nullptr), size(0) {
14         u_memstream_open(&mem, &buffer, &size);
15     }
16 
~MemStreamTest()17     ~MemStreamTest() {
18         u_memstream_close(&mem);
19         free(buffer);
20     }
21 
resetStream()22     void resetStream() {
23         u_memstream_close(&mem);
24         free(buffer);
25         buffer = nullptr;
26         size = 0;
27         u_memstream_open(&mem, &buffer, &size);
28     }
29 };
30 
TEST_F(MemStreamTest,OpenStream)31 TEST_F(MemStreamTest, OpenStream) {
32     EXPECT_NE(mem.f, nullptr);
33     EXPECT_EQ(size, 0);
34 }
35 
TEST_F(MemStreamTest,WriteAndFlush)36 TEST_F(MemStreamTest, WriteAndFlush) {
37     const char *data = "Hello, world!";
38     size_t data_len = strlen(data);
39 
40     EXPECT_EQ(fwrite(data, 1, data_len, mem.f), data_len);
41     EXPECT_EQ(u_memstream_flush(&mem), 0);
42 
43     EXPECT_STREQ(buffer, data);
44     EXPECT_EQ(size, data_len);
45 }
46 
TEST_F(MemStreamTest,ResetStream)47 TEST_F(MemStreamTest, ResetStream) {
48     const char *data = "Hello, world!";
49     size_t data_len = strlen(data);
50 
51     EXPECT_EQ(fwrite(data, 1, data_len, mem.f), data_len);
52     EXPECT_EQ(u_memstream_flush(&mem), 0);
53 
54     EXPECT_STREQ(buffer, data);
55     EXPECT_EQ(size, data_len);
56 
57     resetStream();
58 
59     EXPECT_EQ(size, 0);
60 }
61 
TEST_F(MemStreamTest,WriteAfterReset)62 TEST_F(MemStreamTest, WriteAfterReset) {
63     const char *data1 = "Hello, world!";
64     const char *data2 = "New data";
65     size_t data1_len = strlen(data1);
66     size_t data2_len = strlen(data2);
67 
68     EXPECT_EQ(fwrite(data1, 1, data1_len, mem.f), data1_len);
69     EXPECT_EQ(u_memstream_flush(&mem), 0);
70 
71     EXPECT_STREQ(buffer, data1);
72     EXPECT_EQ(size, data1_len);
73 
74     resetStream();
75 
76     EXPECT_EQ(size, 0);
77 
78     EXPECT_EQ(fwrite(data2, 1, data2_len, mem.f), data2_len);
79     EXPECT_EQ(u_memstream_flush(&mem), 0);
80 
81     EXPECT_STREQ(buffer, data2);
82     EXPECT_EQ(size, data2_len);
83 }
84 
TEST_F(MemStreamTest,MultipleFlushes)85 TEST_F(MemStreamTest, MultipleFlushes) {
86     const char *data = "Hello, world!";
87     size_t data_len = strlen(data);
88 
89     EXPECT_EQ(fwrite(data, 1, data_len, mem.f), data_len);
90     EXPECT_EQ(u_memstream_flush(&mem), 0);
91 
92     EXPECT_STREQ(buffer, data);
93     EXPECT_EQ(size, data_len);
94 
95     EXPECT_EQ(u_memstream_flush(&mem), 0);
96 
97     EXPECT_STREQ(buffer, data);
98     EXPECT_EQ(size, data_len);
99 }
100