Files
libultraship/tests/splittext_tests.cpp
CopilotandKenix3 59da65504d test: add comprehensive test coverage across libultraship (#1066)
* 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>
2026-04-15 18:46:45 -04:00

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")");
}