root/src/tests/apps/haikudepot/StringUtilsTest.cpp
/*
 * Copyright 2023-2024, Andrew Lindesay <apl@lindesay.co.nz>.
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#include "StringUtilsTest.h"

#include <String.h>

#include <cppunit/TestCaller.h>
#include <cppunit/TestSuite.h>

#include "StringUtils.h"


StringUtilsTest::StringUtilsTest()
{
}


StringUtilsTest::~StringUtilsTest()
{
}


void
StringUtilsTest::TestStartInSituTrimSpaceAndControl()
{
        BString string = "\t\n Tonic Water";

// ----------------------
        StringUtils::InSituTrimSpaceAndControl(string);
// ----------------------

        const BString expected = "Tonic Water";
        CPPUNIT_ASSERT_EQUAL(expected, string);
}


void
StringUtilsTest::TestEndInSituTrimSpaceAndControl()
{
        BString string = "Tonic Water  \x05\t";

// ----------------------
        StringUtils::InSituTrimSpaceAndControl(string);
// ----------------------

        const BString expected = "Tonic Water";
        CPPUNIT_ASSERT_EQUAL(expected, string);
}


void
StringUtilsTest::TestStartAndEndInSituTrimSpaceAndControl()
{
        BString string = "\x01Tonic Water\x02";

// ----------------------
        StringUtils::InSituTrimSpaceAndControl(string);
// ----------------------

        const BString expected = "Tonic Water";
        CPPUNIT_ASSERT_EQUAL(expected, string);
}


void
StringUtilsTest::TestNoTrimInSituTrimSpaceAndControl()
{
        BString string = "Tonic Water";

// ----------------------
        StringUtils::InSituTrimSpaceAndControl(string);
// ----------------------

        const BString expected = "Tonic Water";
        CPPUNIT_ASSERT_EQUAL(expected, string);
}


void
StringUtilsTest::TestInSituStripSpaceAndControl()
{
        BString string = "\x01 To\tnic Wa\nter  ";

// ----------------------
        StringUtils::InSituStripSpaceAndControl(string);
// ----------------------

        const BString expected = "TonicWater";
                // note intervening space also removed
        CPPUNIT_ASSERT_EQUAL(expected, string);
}


void
StringUtilsTest::TestNoInSituStripSpaceAndControl()
{
        BString string = "Tonic Water";

// ----------------------
        StringUtils::InSituStripSpaceAndControl(string);
// ----------------------

        const BString expected = "TonicWater";
        CPPUNIT_ASSERT_EQUAL(expected, string);
}


/*static*/ void
StringUtilsTest::AddTests(BTestSuite& parent)
{
        CppUnit::TestSuite& suite = *new CppUnit::TestSuite("StringUtilsTest");

        suite.addTest(
                new CppUnit::TestCaller<StringUtilsTest>(
                        "StringUtilsTest::TestStartInSituTrimSpaceAndControl",
                        &StringUtilsTest::TestStartInSituTrimSpaceAndControl));
        suite.addTest(
                new CppUnit::TestCaller<StringUtilsTest>(
                        "StringUtilsTest::TestEndInSituTrimSpaceAndControl",
                        &StringUtilsTest::TestEndInSituTrimSpaceAndControl));
        suite.addTest(
                new CppUnit::TestCaller<StringUtilsTest>(
                        "StringUtilsTest::TestStartAndEndInSituTrimSpaceAndControl",
                        &StringUtilsTest::TestStartAndEndInSituTrimSpaceAndControl));
        suite.addTest(
                new CppUnit::TestCaller<StringUtilsTest>(
                        "StringUtilsTest::TestNoTrimInSituTrimSpaceAndControl",
                        &StringUtilsTest::TestNoTrimInSituTrimSpaceAndControl));

        suite.addTest(
                new CppUnit::TestCaller<StringUtilsTest>(
                        "StringUtilsTest::TestNoInSituStripSpaceAndControl",
                        &StringUtilsTest::TestNoInSituStripSpaceAndControl));
        suite.addTest(
                new CppUnit::TestCaller<StringUtilsTest>(
                        "StringUtilsTest::TestInSituStripSpaceAndControl",
                        &StringUtilsTest::TestInSituStripSpaceAndControl));

        parent.addTest("StringUtilsTest", &suite);