diff options
| author | Yuqian Yang <crupest@crupest.life> | 2026-03-07 20:42:37 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2026-03-07 20:42:37 +0800 |
| commit | 38756822825e20eca3b9e01b735946175223d692 (patch) | |
| tree | fc2a495bfc0e082d5ed9a1642278ae6467fe2742 /test | |
| parent | 924f4b472712d0cfc55b81dcb3eaed3f8a478288 (diff) | |
| download | cru-38756822825e20eca3b9e01b735946175223d692.tar.gz cru-38756822825e20eca3b9e01b735946175223d692.tar.bz2 cru-38756822825e20eca3b9e01b735946175223d692.zip | |
Refactor stream.
Diffstat (limited to 'test')
| -rw-r--r-- | test/base/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | test/base/io/AutoReadStreamTest.cpp | 32 | ||||
| -rw-r--r-- | test/base/io/BufferStreamTest.cpp | 39 | ||||
| -rw-r--r-- | test/base/io/MemoryStreamTest.cpp | 30 | ||||
| -rw-r--r-- | test/base/platform/win/StreamTest.cpp | 7 |
5 files changed, 107 insertions, 4 deletions
diff --git a/test/base/CMakeLists.txt b/test/base/CMakeLists.txt index 52f61a8c..94022b1a 100644 --- a/test/base/CMakeLists.txt +++ b/test/base/CMakeLists.txt @@ -5,6 +5,9 @@ add_executable(CruBaseTest StringUtilTest.cpp SubProcessTest.cpp TimerTest.cpp + io/AutoReadStreamTest.cpp + io/BufferStreamTest.cpp + io/MemoryStreamTest.cpp toml/ParserTest.cpp xml/ParserTest.cpp ) diff --git a/test/base/io/AutoReadStreamTest.cpp b/test/base/io/AutoReadStreamTest.cpp new file mode 100644 index 00000000..e95b7c24 --- /dev/null +++ b/test/base/io/AutoReadStreamTest.cpp @@ -0,0 +1,32 @@ +#include "cru/base/io/AutoReadStream.h" +#include "cru/base/io/MemoryStream.h" + +#include <catch2/catch_test_macros.hpp> + +#include <algorithm> +#include <cstddef> +#include <ranges> + +TEST_CASE("AutoReadStream should work.", "[io][stream]") { + using namespace cru::io; + + const int size = 100; + std::vector<std::byte> buffer(size); + buffer[1] = std::byte(0xf0); + buffer[2] = std::byte(0x0f); + + MemoryStream underlying_stream(buffer.data(), buffer.size(), true); + AutoReadStream stream(&underlying_stream, true, false); + + REQUIRE(stream.CanRead()); + REQUIRE(!stream.CanWrite()); + + std::vector<std::byte> buffer2(size * 2); + + auto read = stream.Read(buffer2.data(), buffer2.size()); + auto read2 = stream.Read(buffer2.data(), size, 1); + + REQUIRE(read == size); + REQUIRE(std::ranges::equal(buffer, buffer2 | std::views::take(size))); + REQUIRE(read2 == Stream::kEOF); +} diff --git a/test/base/io/BufferStreamTest.cpp b/test/base/io/BufferStreamTest.cpp new file mode 100644 index 00000000..70780b48 --- /dev/null +++ b/test/base/io/BufferStreamTest.cpp @@ -0,0 +1,39 @@ +#include "cru/base/io/BufferStream.h" + +#include <catch2/catch_test_macros.hpp> + +#include <algorithm> +#include <cstddef> +#include <ranges> +#include <thread> + +TEST_CASE("BufferStream should work.", "[io][stream]") { + using namespace cru::io; + + const int size = 100; + std::vector<std::byte> buffer(size); + buffer[1] = std::byte(0xf0); + buffer[2] = std::byte(0x0f); + + BufferStream stream; + + std::vector<std::byte> buffer2(size * 2); + cru::Index read, read2; + + std::thread read_thread([&] { + read = stream.Read(buffer2.data(), buffer2.size()); + read2 = stream.Read(buffer2.data(), size, 1); + }); + + std::thread write_thread([&] { + stream.Write(buffer.data(), buffer.size()); + stream.WriteEof(); + }); + + read_thread.join(); + write_thread.join(); + + REQUIRE(read == size); + REQUIRE(std::ranges::equal(buffer, buffer2 | std::views::take(size))); + REQUIRE(read2 == Stream::kEOF); +} diff --git a/test/base/io/MemoryStreamTest.cpp b/test/base/io/MemoryStreamTest.cpp new file mode 100644 index 00000000..684971b1 --- /dev/null +++ b/test/base/io/MemoryStreamTest.cpp @@ -0,0 +1,30 @@ +#include "cru/base/io/MemoryStream.h" +#include "cru/base/io/Stream.h" + +#include <catch2/catch_test_macros.hpp> + +#include <algorithm> +#include <cstddef> +#include <ranges> + +TEST_CASE("MemoryStream should work.", "[io][stream]") { + using namespace cru::io; + const int size = 100; + std::vector<std::byte> buffer(size); + + buffer[1] = std::byte(0xf0); + buffer[2] = std::byte(0x0f); + + MemoryStream stream(buffer.data(), size, true); + + REQUIRE(stream.CanRead()); + REQUIRE(!stream.CanWrite()); + + std::vector<std::byte> buffer2(size * 2); + + auto read = stream.Read(buffer2.data(), buffer2.size()); + auto read2 = stream.Read(buffer2.data(), 1); + REQUIRE(read == size); + REQUIRE(std::ranges::equal(buffer, buffer2 | std::views::take(size))); + REQUIRE(read2 == Stream::kEOF); +} diff --git a/test/base/platform/win/StreamTest.cpp b/test/base/platform/win/StreamTest.cpp index f42fc5c2..56761b14 100644 --- a/test/base/platform/win/StreamTest.cpp +++ b/test/base/platform/win/StreamTest.cpp @@ -1,3 +1,4 @@ +#include "cru/base/Guard.h" #include "cru/base/StringUtil.h" #include "cru/base/platform/win/Stream.h" @@ -15,6 +16,7 @@ TEST_CASE("StreamConvert FileStreamWork", "[stream]") { (std::filesystem::temp_directory_path() / "cru_test_temp.XXXXXX") .native(); _wmktemp(temp_file_path.data()); + Guard _([temp_file_path] { std::filesystem::remove(temp_file_path); }); std::string path = string::ToUtf8String(temp_file_path); @@ -32,8 +34,6 @@ TEST_CASE("StreamConvert FileStreamWork", "[stream]") { REQUIRE(std::string_view(buffer.get(), 3) == "abc"); com_stream->Release(); file2.Close(); - - std::filesystem::remove(temp_file_path); } TEST_CASE("ComStream Work", "[stream]") { @@ -45,6 +45,7 @@ TEST_CASE("ComStream Work", "[stream]") { (std::filesystem::temp_directory_path() / "cru_test_temp.XXXXXX") .native(); _wmktemp(temp_file_path.data()); + Guard _([temp_file_path] { std::filesystem::remove(temp_file_path); }); std::string path = string::ToUtf8String(temp_file_path); @@ -62,6 +63,4 @@ TEST_CASE("ComStream Work", "[stream]") { REQUIRE(std::string_view(reinterpret_cast<const char*>(buffer.get()), 3) == "abc"); file2.Close(); - - std::filesystem::remove(temp_file_path); } |
