mirror of
https://github.com/izzy2lost/libultraship.git
synced 2026-10-26 11:44:27 -07:00
* test: add comprehensive test coverage for utility modules Agent-Logs-Url: https://github.com/Kenix3/libultraship/sessions/a89625bd-3a8f-4c51-b418-4258f9c6c44a Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com> * chore: plan ResourceManager/ArchiveManager test additions Agent-Logs-Url: https://github.com/Kenix3/libultraship/sessions/a89625bd-3a8f-4c51-b418-4258f9c6c44a Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com> * chore: plan maximum coverage test additions Agent-Logs-Url: https://github.com/Kenix3/libultraship/sessions/a89625bd-3a8f-4c51-b418-4258f9c6c44a Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com> * test: add comprehensive coverage — glob, splitText, Path/DiskFile, resource types/factories, Archive self tests, ResourceLoader, ResourceManager helpers Agent-Logs-Url: https://github.com/Kenix3/libultraship/sessions/a89625bd-3a8f-4c51-b418-4258f9c6c44a Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com> * test: address PR review suggestions and splitText leak Agent-Logs-Url: https://github.com/Kenix3/libultraship/sessions/44c1e76b-581e-4593-b8bc-a60be4c0dd9f Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com> * Changes before error encountered Agent-Logs-Url: https://github.com/Kenix3/libultraship/sessions/44c1e76b-581e-4593-b8bc-a60be4c0dd9f Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com> * style: apply clang-format to remaining test files Agent-Logs-Url: https://github.com/Kenix3/libultraship/sessions/1a9e1a9f-2efb-449b-91a3-8c8372053c64 Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Kenix3 <18299654+Kenix3@users.noreply.github.com>
117 lines
3.3 KiB
C++
117 lines
3.3 KiB
C++
#include <gtest/gtest.h>
|
|
#include "ship/utils/Utils.h"
|
|
|
|
// ============================================================
|
|
// splitText — basic space separation
|
|
// ============================================================
|
|
|
|
TEST(SplitText, SingleToken) {
|
|
auto v = Ship::splitText("hello", ' ', false);
|
|
ASSERT_EQ(v.size(), 1u);
|
|
EXPECT_EQ(v[0], "hello");
|
|
}
|
|
|
|
TEST(SplitText, TwoSpaceSeparatedTokens) {
|
|
auto v = Ship::splitText("foo bar", ' ', false);
|
|
ASSERT_EQ(v.size(), 2u);
|
|
EXPECT_EQ(v[0], "foo");
|
|
EXPECT_EQ(v[1], "bar");
|
|
}
|
|
|
|
TEST(SplitText, MultipleTokens) {
|
|
auto v = Ship::splitText("a b c d", ' ', false);
|
|
ASSERT_EQ(v.size(), 4u);
|
|
EXPECT_EQ(v[0], "a");
|
|
EXPECT_EQ(v[3], "d");
|
|
}
|
|
|
|
TEST(SplitText, EmptyStringReturnsEmpty) {
|
|
auto v = Ship::splitText("", ' ', false);
|
|
EXPECT_TRUE(v.empty());
|
|
}
|
|
|
|
TEST(SplitText, OnlySeparatorsReturnsEmpty) {
|
|
auto v = Ship::splitText(" ", ' ', false);
|
|
EXPECT_TRUE(v.empty());
|
|
}
|
|
|
|
TEST(SplitText, LeadingSeparatorIgnored) {
|
|
auto v = Ship::splitText(" hello", ' ', false);
|
|
ASSERT_EQ(v.size(), 1u);
|
|
EXPECT_EQ(v[0], "hello");
|
|
}
|
|
|
|
TEST(SplitText, TrailingSeparatorIgnored) {
|
|
auto v = Ship::splitText("hello ", ' ', false);
|
|
ASSERT_EQ(v.size(), 1u);
|
|
EXPECT_EQ(v[0], "hello");
|
|
}
|
|
|
|
TEST(SplitText, AdjacentSeparatorsIgnored) {
|
|
auto v = Ship::splitText("a b", ' ', false);
|
|
ASSERT_EQ(v.size(), 2u);
|
|
EXPECT_EQ(v[0], "a");
|
|
EXPECT_EQ(v[1], "b");
|
|
}
|
|
|
|
// ============================================================
|
|
// splitText — custom separator
|
|
// ============================================================
|
|
|
|
TEST(SplitText, CommaSeparator) {
|
|
auto v = Ship::splitText("a,b,c", ',', false);
|
|
ASSERT_EQ(v.size(), 3u);
|
|
EXPECT_EQ(v[0], "a");
|
|
EXPECT_EQ(v[1], "b");
|
|
EXPECT_EQ(v[2], "c");
|
|
}
|
|
|
|
TEST(SplitText, SlashSeparator) {
|
|
auto v = Ship::splitText("textures/link/idle", '/', false);
|
|
ASSERT_EQ(v.size(), 3u);
|
|
EXPECT_EQ(v[0], "textures");
|
|
EXPECT_EQ(v[1], "link");
|
|
EXPECT_EQ(v[2], "idle");
|
|
}
|
|
|
|
TEST(SplitText, SeparatorNotPresentReturnsSingleToken) {
|
|
auto v = Ship::splitText("hello", ',', false);
|
|
ASSERT_EQ(v.size(), 1u);
|
|
EXPECT_EQ(v[0], "hello");
|
|
}
|
|
|
|
// ============================================================
|
|
// splitText — quoted strings (quotes stripped, keepQuotes=false)
|
|
// ============================================================
|
|
|
|
TEST(SplitText, QuotedStringWithSpaceIsSingleToken) {
|
|
auto v = Ship::splitText(R"("hello world")", ' ', false);
|
|
ASSERT_EQ(v.size(), 1u);
|
|
EXPECT_EQ(v[0], "hello world");
|
|
}
|
|
|
|
TEST(SplitText, QuotedStringQuotesStrippedByDefault) {
|
|
auto v = Ship::splitText(R"("foo bar" baz)", ' ', false);
|
|
ASSERT_EQ(v.size(), 2u);
|
|
EXPECT_EQ(v[0], "foo bar");
|
|
EXPECT_EQ(v[1], "baz");
|
|
}
|
|
|
|
TEST(SplitText, UnquotedTokensMixedWithQuoted) {
|
|
auto v = Ship::splitText(R"(alpha "beta gamma" delta)", ' ', false);
|
|
ASSERT_EQ(v.size(), 3u);
|
|
EXPECT_EQ(v[0], "alpha");
|
|
EXPECT_EQ(v[1], "beta gamma");
|
|
EXPECT_EQ(v[2], "delta");
|
|
}
|
|
|
|
// ============================================================
|
|
// splitText — keepQuotes=true
|
|
// ============================================================
|
|
|
|
TEST(SplitText, KeepQuotesTruePreservesQuotes) {
|
|
auto v = Ship::splitText(R"("hello world")", ' ', true);
|
|
ASSERT_EQ(v.size(), 1u);
|
|
EXPECT_EQ(v[0], R"("hello world")");
|
|
}
|