diff options
author | Borja Lorente Escobar | 2016-03-02 17:07:50 +0100 |
---|---|---|
committer | Borja Lorente | 2016-05-16 22:01:21 +0200 |
commit | a19b50ddf26ac4e36b3e86f781ef7c2ae5fc69fd (patch) | |
tree | 09d1e0bd96a74f17b8928676b233a52fa9831f46 /test/common/str.h | |
parent | f397a7313810f2538a7474aa1f7040252617a2ba (diff) | |
download | scummvm-rg350-a19b50ddf26ac4e36b3e86f781ef7c2ae5fc69fd.tar.gz scummvm-rg350-a19b50ddf26ac4e36b3e86f781ef7c2ae5fc69fd.tar.bz2 scummvm-rg350-a19b50ddf26ac4e36b3e86f781ef7c2ae5fc69fd.zip |
COMMON: Add replace functions to Common and String.
COMMON: Add replacement to common/algorithm.h
COMMON: Intermediate commit to show doubts.
COMMON: Basic String::replace() methods implemented.
COMMON: Fix typo in the algorithm.h documentation.
COMMON: Fix documentation of String::replace()
COMMON: Fix formatting issues in method signatures.
COMMON: Add assert and reformat loops in str and algorithm.
COMMON: Fix typo in comment.
COMMON: Fix style in string test cases.
COMMON: Add Doxygen documentation to algorithm and String.
COMMON: Add Doxygen documentation to algorithm and String.
COMMON: Add Doxygen documentation to algorithm.
COMMON: Fix style in algorithm comments.
COMMON: Add Doxygen comments to String.
COMMON: Add Doxygen comments to algorithm test function.
COMMON: Add String support for substring replace.
COMMON: Fix string replace to comply with STL
COMMON: Fix documentation on string replace
COMMON: Fix style in string replace
COMMON: Fix unwanted reference problem in String::replace().
COMMON: Fix indentation in comments for replace
COMMON: Fix indentation in replace
COMMON: Fix comments in String::replace to match implementation.
COMMON: Remove assert to allow for not-null-terminated character arrays
COMMON: Add new test for String::replace
COMMON: Fix broken comments on String::replace
COMMON: Fix sharing bug on ensureCapacity
COMMON: Remove superfluous call to makeUnique()
Diffstat (limited to 'test/common/str.h')
-rw-r--r-- | test/common/str.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/common/str.h b/test/common/str.h index 3ab5d828c1..461b26088a 100644 --- a/test/common/str.h +++ b/test/common/str.h @@ -419,4 +419,78 @@ class StringTestSuite : public CxxTest::TestSuite TS_ASSERT_EQUALS(scumm_strnicmp("abCd", "ABCde", 4), 0); TS_ASSERT_LESS_THAN(scumm_strnicmp("abCd", "ABCde", 5), 0); } + + void test_replace() { + // Tests created with the results of the STL std::string class + + // -------------------------- + // Tests without displacement + // -------------------------- + Common::String testString = Common::String("This is the original string."); + + // Positions and sizes as parameters, string as replacement + testString.replace(12, 8, Common::String("newnewne")); + TS_ASSERT_EQUALS(testString, Common::String("This is the newnewne string.")); + + // The same but with char* + testString.replace(0, 4, "That"); + TS_ASSERT_EQUALS(testString, Common::String("That is the newnewne string.")); + + // Using iterators (also a terribly useless program as a test). + testString.replace(testString.begin(), testString.end(), "That is the supernew string."); + TS_ASSERT_EQUALS(testString, Common::String("That is the supernew string.")); + + // With sub strings of character arrays. + testString.replace(21, 6, "That phrase is new.", 5, 6); + TS_ASSERT_EQUALS(testString, Common::String("That is the supernew phrase.")); + + // Now with substrings. + testString.replace(12, 2, Common::String("That hy is new."), 5, 2); + TS_ASSERT_EQUALS(testString, Common::String("That is the hypernew phrase.")); + + // -------------------------- + // Tests with displacement + // -------------------------- + testString = Common::String("Hello World"); + + // Positions and sizes as parameters, string as replacement + testString.replace(6, 5, Common::String("friends")); + TS_ASSERT_EQUALS(testString, Common::String("Hello friends")); + + // The same but with char* + testString.replace(0, 5, "Good"); + TS_ASSERT_EQUALS(testString, Common::String("Good friends")); + + // Using iterators (also a terribly useless program as a test) + testString.replace(testString.begin() + 4, testString.begin() + 5, " coffee "); + TS_ASSERT_EQUALS(testString, Common::String("Good coffee friends")); + + // With sub strings of character arrays + testString.replace(4, 0, "Lorem ipsum expresso dolor sit amet", 11, 9); + TS_ASSERT_EQUALS(testString, Common::String("Good expresso coffee friends")); + + // Now with substrings + testString.replace(5, 9, Common::String("Displaced ristretto string"), 10, 10); + TS_ASSERT_EQUALS(testString, Common::String("Good ristretto coffee friends")); + + // ----------------------- + // Deep copy compliance + // ----------------------- + + // Makes a deep copy without changing the length of the original + Common::String s1 = "TestTestTestTestTestTestTestTestTestTestTest"; + Common::String s2(s1); + TS_ASSERT_EQUALS(s1, "TestTestTestTestTestTestTestTestTestTestTest"); + TS_ASSERT_EQUALS(s2, "TestTestTestTestTestTestTestTestTestTestTest"); + s1.replace(0, 4, "TEST"); + TS_ASSERT_EQUALS(s1, "TESTTestTestTestTestTestTestTestTestTestTest"); + TS_ASSERT_EQUALS(s2, "TestTestTestTestTestTestTestTestTestTestTest"); + + // Makes a deep copy when we shorten the string + Common::String s3 = "TestTestTestTestTestTestTestTestTestTestTest"; + Common::String s4(s3); + s3.replace(0, 32, ""); + TS_ASSERT_EQUALS(s3, "TestTestTest"); + TS_ASSERT_EQUALS(s4, "TestTestTestTestTestTestTestTestTestTestTest"); + } }; |