mesa/src/util/tests/u_memstream_test.cpp
Daniel Almeida 01586bc57e util: u_memstream: add tests
Now we have a few extra methods and things are diverging a bit between
Linux and Windows. Add a few unit tests to make sure this works.

Signed-off-by: Daniel Almeida <daniel.almeida@collabora.com>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30594>
2024-10-17 02:50:21 +00:00

99 lines
2.2 KiB
C++

// Copyright © 2024 Collabora, Ltd.
// SPDX-License-Identifier: MIT
#include <gtest/gtest.h>
#include "memstream.h"
class MemStreamTest : public ::testing::Test {
protected:
struct u_memstream mem;
char *buffer;
size_t size;
MemStreamTest() : buffer(nullptr), size(0) {
u_memstream_open(&mem, &buffer, &size);
}
~MemStreamTest() {
u_memstream_close(&mem);
free(buffer);
}
void resetStream() {
u_memstream_close(&mem);
free(buffer);
buffer = nullptr;
size = 0;
u_memstream_open(&mem, &buffer, &size);
}
};
TEST_F(MemStreamTest, OpenStream) {
EXPECT_NE(mem.f, nullptr);
EXPECT_EQ(size, 0);
}
TEST_F(MemStreamTest, WriteAndFlush) {
const char *data = "Hello, world!";
size_t data_len = strlen(data);
EXPECT_EQ(fwrite(data, 1, data_len, mem.f), data_len);
EXPECT_EQ(u_memstream_flush(&mem), 0);
EXPECT_STREQ(buffer, data);
EXPECT_EQ(size, data_len);
}
TEST_F(MemStreamTest, ResetStream) {
const char *data = "Hello, world!";
size_t data_len = strlen(data);
EXPECT_EQ(fwrite(data, 1, data_len, mem.f), data_len);
EXPECT_EQ(u_memstream_flush(&mem), 0);
EXPECT_STREQ(buffer, data);
EXPECT_EQ(size, data_len);
resetStream();
EXPECT_EQ(size, 0);
}
TEST_F(MemStreamTest, WriteAfterReset) {
const char *data1 = "Hello, world!";
const char *data2 = "New data";
size_t data1_len = strlen(data1);
size_t data2_len = strlen(data2);
EXPECT_EQ(fwrite(data1, 1, data1_len, mem.f), data1_len);
EXPECT_EQ(u_memstream_flush(&mem), 0);
EXPECT_STREQ(buffer, data1);
EXPECT_EQ(size, data1_len);
resetStream();
EXPECT_EQ(size, 0);
EXPECT_EQ(fwrite(data2, 1, data2_len, mem.f), data2_len);
EXPECT_EQ(u_memstream_flush(&mem), 0);
EXPECT_STREQ(buffer, data2);
EXPECT_EQ(size, data2_len);
}
TEST_F(MemStreamTest, MultipleFlushes) {
const char *data = "Hello, world!";
size_t data_len = strlen(data);
EXPECT_EQ(fwrite(data, 1, data_len, mem.f), data_len);
EXPECT_EQ(u_memstream_flush(&mem), 0);
EXPECT_STREQ(buffer, data);
EXPECT_EQ(size, data_len);
EXPECT_EQ(u_memstream_flush(&mem), 0);
EXPECT_STREQ(buffer, data);
EXPECT_EQ(size, data_len);
}