/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/




// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sal.hxx"
#include "gtest/gtest.h"
#include <rtl/string.hxx>

namespace rtl_str
{

    class compare : public ::testing::Test
    {
    public:
    }; // class compare

    TEST_F(compare, compare_000)
    {
        rtl_str_compare( NULL, NULL);
    }

    TEST_F(compare, compare_000_1)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl_str_compare( aStr1.getStr(), NULL);
    }
    TEST_F(compare, compare_001)
    {
        rtl::OString aStr1 = "";
        rtl::OString aStr2 = "";

        sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal.";
    }

    TEST_F(compare, compare_002)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl::OString aStr2 = "Line must be equal.";

        sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal.";
    }

    TEST_F(compare, compare_003)
    {
        rtl::OString aStr1 = "Line must differ.";
        rtl::OString aStr2 = "Line foo bar, ok, differ.";

        sal_Int32 nValue = rtl_str_compare( aStr1.getStr(), aStr2.getStr());
        ASSERT_TRUE(nValue != 0) << "compare failed, strings differ.";
    }

    class compareIgnoreAsciiCase : public ::testing::Test
    {
    public:
    }; // class compareIgnoreAsciiCase

    TEST_F(compareIgnoreAsciiCase, compare_000)
    {
        rtl_str_compareIgnoreAsciiCase( NULL, NULL);
    }

    TEST_F(compareIgnoreAsciiCase, compare_000_1)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), NULL);
    }
    TEST_F(compareIgnoreAsciiCase, compare_001)
    {
        rtl::OString aStr1 = "";
        rtl::OString aStr2 = "";

        sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal.";
    }

    TEST_F(compareIgnoreAsciiCase, compare_002)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl::OString aStr2 = "Line must be equal.";

        sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal.";
    }

    TEST_F(compareIgnoreAsciiCase, compare_002_1)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl::OString aStr2 = "LINE MUST BE EQUAL.";

        sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal (if case insensitive).";
    }

    TEST_F(compareIgnoreAsciiCase, compare_003)
    {
        rtl::OString aStr1 = "Line must differ.";
        rtl::OString aStr2 = "Line foo bar, ok, differ.";

        sal_Int32 nValue = rtl_str_compareIgnoreAsciiCase( aStr1.getStr(), aStr2.getStr());
        ASSERT_TRUE(nValue != 0) << "compare failed, strings differ.";
    }
// -----------------------------------------------------------------------------

    class shortenedCompareIgnoreAsciiCase_WithLength : public ::testing::Test
    {
    public:
    }; // class compare

    TEST_F(shortenedCompareIgnoreAsciiCase_WithLength, compare_000)
    {
        rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( NULL, 0, NULL, 0, 0);
    }

    TEST_F(shortenedCompareIgnoreAsciiCase_WithLength, compare_000_1)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), NULL, 0, 1);
    }
    TEST_F(shortenedCompareIgnoreAsciiCase_WithLength, compare_001)
    {
        rtl::OString aStr1 = "";
        rtl::OString aStr2 = "";

        sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(), aStr2.getStr(), aStr2.getLength(), aStr1.getLength());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal.";
    }

    TEST_F(shortenedCompareIgnoreAsciiCase_WithLength, compare_002)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl::OString aStr2 = "Line must be equal.";

        sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
                                                                               aStr2.getStr(), aStr2.getLength(),
                                                                               aStr1.getLength());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal.";
    }

    TEST_F(shortenedCompareIgnoreAsciiCase_WithLength, compare_002_1)
    {
        rtl::OString aStr1 = "Line must be equal.";
        rtl::OString aStr2 = "LINE MUST BE EQUAL.";

        sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
                                                                               aStr2.getStr(), aStr2.getLength(),
                                                                               aStr1.getLength());
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal (if case insensitive).";
    }

    TEST_F(shortenedCompareIgnoreAsciiCase_WithLength, compare_003)
    {
        rtl::OString aStr1 = "Line must differ.";
        rtl::OString aStr2 = "Line foo bar, ok, differ.";

        sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
                                                                               aStr2.getStr(), aStr2.getLength(),
                                                                               5);
        ASSERT_TRUE(nValue == 0) << "compare failed, strings are equal first 5 characters.";
    }

    TEST_F(shortenedCompareIgnoreAsciiCase_WithLength, compare_004)
    {
        rtl::OString aStr1 = "Line must differ.";
        rtl::OString aStr2 = "Line foo bar, ok, differ.";

        sal_Int32 nValue = rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( aStr1.getStr(), aStr1.getLength(),
                                                                               aStr2.getStr(), aStr2.getLength(),
                                                                               aStr1.getLength());
        ASSERT_TRUE(nValue != 0) << "compare failed, strings differ.";
    }

// -----------------------------------------------------------------------------

    class hashCode : public ::testing::Test
    {
    public:
    }; // class compare

    TEST_F(hashCode, hashCode_000)
    {
        rtl_str_hashCode( NULL );
    }

    TEST_F(hashCode, hashCode_001)
    {
        rtl::OString aStr1 = "Line for a hashCode.";
        sal_Int32 nHashCode = rtl_str_hashCode( aStr1.getStr() );
        printf("hashcode: %d\n", nHashCode);
        // ASSERT_TRUE(nValue == 0) << "failed.";
    }

    TEST_F(hashCode, hashCode_002)
    {
        rtl::OString aStr1 = "Line for a hashCode.";
        sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() );

        rtl::OString aStr2 = "Line for a hashCode.";
        sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() );

        ASSERT_TRUE(nHashCode1 == nHashCode2) << "hashcodes must be equal.";
    }

    TEST_F(hashCode, hashCode_003)
    {
        rtl::OString aStr1 = "Line for a hashCode.";
        sal_Int32 nHashCode1 = rtl_str_hashCode( aStr1.getStr() );

        rtl::OString aStr2 = "Line for an other hashcode.";
        sal_Int32 nHashCode2 = rtl_str_hashCode( aStr2.getStr() );

        ASSERT_TRUE(nHashCode1 != nHashCode2) << "hashcodes must differ.";
    }

// -----------------------------------------------------------------------------

    class indexOfChar : public ::testing::Test
    {
    public:
    }; // class compare

    TEST_F(indexOfChar, indexOfChar_000)
    {
        rtl_str_indexOfChar( NULL, 0 );
    }

    TEST_F(indexOfChar, indexOfChar_001)
    {
        rtl::OString aStr1 = "Line for a indexOfChar.";

        sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'L' );
        ASSERT_TRUE(nIndex == 0) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'i' );
        ASSERT_TRUE(nIndex == 1) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'n' );
        ASSERT_TRUE(nIndex == 2) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'e' );
        ASSERT_TRUE(nIndex == 3) << "index is wrong.";
    }

    TEST_F(indexOfChar, indexOfChar_002)
    {
        rtl::OString aStr1 = "Line for a indexOfChar.";
        sal_Int32 nIndex = rtl_str_indexOfChar( aStr1.getStr(), 'y' );

        ASSERT_TRUE(nIndex == -1) << "index is wrong.";
    }

// -----------------------------------------------------------------------------
    class lastIndexOfChar : public ::testing::Test
    {
    public:
    }; // class lastIndexOfChar

    TEST_F(lastIndexOfChar, lastIndexOfChar_000)
    {
        rtl_str_lastIndexOfChar( NULL, 0 );
    }

    TEST_F(lastIndexOfChar, lastIndexOfChar_001)
    {
        rtl::OString aStr1 = "Line for a lastIndexOfChar.";

        sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'C' );
        ASSERT_TRUE(nIndex == 22) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'h' );
        ASSERT_TRUE(nIndex == 23) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'a' );
        ASSERT_TRUE(nIndex == 24) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'r' );
        ASSERT_TRUE(nIndex == 25) << "index is wrong.";
    }

    TEST_F(lastIndexOfChar, lastIndexOfChar_002)
    {
        rtl::OString aStr1 = "Line for a lastIndexOfChar.";
        sal_Int32 nIndex = rtl_str_lastIndexOfChar( aStr1.getStr(), 'y' );

        ASSERT_TRUE(nIndex == -1) << "index is wrong.";
    }

// -----------------------------------------------------------------------------

    class indexOfStr : public ::testing::Test
    {
    public:
    }; // class compare

    TEST_F(indexOfStr, indexOfStr_000)
    {
        rtl_str_indexOfStr( NULL, 0 );
    }

    TEST_F(indexOfStr, indexOfStr_000_1)
    {
        rtl::OString aStr1 = "Line for a indexOfStr.";
        rtl_str_indexOfStr( aStr1.getStr(), 0 );
    }

    TEST_F(indexOfStr, indexOfStr_001)
    {
        rtl::OString aStr1 = "Line for a indexOfStr.";

        sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "Line" );
        ASSERT_TRUE(nIndex == 0) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "for" );
        ASSERT_TRUE(nIndex == 5) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "a" );
        ASSERT_TRUE(nIndex == 9) << "index is wrong.";

        /* sal_Int32 */ nIndex = rtl_str_indexOfStr( aStr1.getStr(), "a index" );
        ASSERT_TRUE(nIndex ==9) << "index is wrong.";
    }

    TEST_F(indexOfStr, indexOfStr_002)
    {
        rtl::OString aStr1 = "Line for a indexOfStr.";
        sal_Int32 nIndex = rtl_str_indexOfStr( aStr1.getStr(), "not exist" );

        ASSERT_TRUE(nIndex == -1) << "index is wrong.";
    }

// -----------------------------------------------------------------------------


    class lastIndexOfStr : public ::testing::Test
    {
    public:
    }; // class lastIndexOfStr

    TEST_F(lastIndexOfStr, lastIndexOfStr_000)
    {
        rtl_str_lastIndexOfStr( NULL, NULL );
    }

    TEST_F(lastIndexOfStr, lastIndexOfStr_000_1)
    {
        rtl::OString aStr1 = "Line for a lastIndexOfStr.";
        rtl_str_lastIndexOfStr( aStr1.getStr(), NULL );
    }

    TEST_F(lastIndexOfStr, lastIndexOfStr_001)
    {
        rtl::OString aStr1 = "Line for a lastIndexOfStr.";
        rtl::OString aSearchStr = "Index";

        sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
        ASSERT_TRUE(nIndex == 15) << "index is wrong.";

        /* rtl::OString */ aSearchStr = "Line";
        /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
        ASSERT_TRUE(nIndex == 0) << "index is wrong.";

        /* rtl::OString */ aSearchStr = "";
        /* sal_Int32 */ nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );
        ASSERT_TRUE(nIndex == -1) << "index is wrong.";
    }

    TEST_F(lastIndexOfStr, lastIndexOfStr_002)
    {
        rtl::OString aStr1 = "Line for a lastIndexOfStr.";
        rtl::OString aSearchStr = "foo";
        sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );

        ASSERT_TRUE(nIndex == -1) << "index is wrong.";
    }

    TEST_F(lastIndexOfStr, lastIndexOfStr_003)
    {
        rtl::OString aStr1 = "Line for a lastIndexOfStr.";
        rtl::OString aSearchStr = "O";
        sal_Int32 nIndex = rtl_str_lastIndexOfStr( aStr1.getStr(), aSearchStr.getStr() );

        ASSERT_TRUE(nIndex == 20) << "index is wrong.";
    }

// -----------------------------------------------------------------------------

    class replaceChar : public ::testing::Test
    {
    public:
    }; // class replaceChar

    TEST_F(replaceChar, replaceChar_000)
    {
        rtl_str_replaceChar( NULL, 0, 0 );
    }

    TEST_F(replaceChar, replaceChar_001)
    {
        rtl::OString aStr1 = "replace char.";
        rtl::OString aShouldStr1 = "ruplacu char.";

        sal_Char* pStr = (sal_Char*) malloc(aStr1.getLength() + 1);
        ASSERT_TRUE(pStr != NULL) << "can't get memory for test";
        strcpy(pStr, aStr1.getStr());

        rtl_str_replaceChar( pStr, 'e', 'u' );

        ASSERT_TRUE(aShouldStr1.equals(rtl::OString(pStr)) == sal_True) << "replace failed";
        free(pStr);
    }

// -----------------------------------------------------------------------------

    class replaceChar_WithLength : public ::testing::Test
    {
    public:
    }; // class replaceChar

    TEST_F(replaceChar_WithLength, replaceChar_WithLength_000)
    {
        rtl_str_replaceChar_WithLength( NULL, 0, 0, 0 );
    }

    TEST_F(replaceChar_WithLength, replaceChar_WithLength_000_1)
    {
        rtl_str_replaceChar_WithLength( NULL, 1, 0, 0 );
    }
    TEST_F(replaceChar_WithLength, replaceChar_WithLength_001)
    {
        rtl::OString aStr1 = "replace char.";
        rtl::OString aShouldStr1 = "ruplace char.";

        sal_Char* pStr = (sal_Char*) malloc(aStr1.getLength() + 1);
        ASSERT_TRUE(pStr != NULL) << "can't get memory for test";
        strcpy(pStr, aStr1.getStr());

        rtl_str_replaceChar_WithLength( pStr, 6, 'e', 'u' );

        ASSERT_TRUE(aShouldStr1.equals(rtl::OString(pStr)) == sal_True) << "replace failed";
        free(pStr);
    }

// -----------------------------------------------------------------------------

    class toAsciiLowerCase : public ::testing::Test
    {
    public:
    }; // class replaceChar

    TEST_F(toAsciiLowerCase, toAsciiLowerCase_000)
    {
        rtl_str_toAsciiLowerCase( NULL );
    }

    TEST_F(toAsciiLowerCase, toAsciiLowerCase_001)
    {
        rtl::OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE.";
        rtl::OString aShouldStr1 = "change this to ascii lower case.";

        sal_Char* pStr = (sal_Char*) malloc(aStr1.getLength() + 1);
        ASSERT_TRUE(pStr != NULL) << "can't get memory for test";
        strcpy(pStr, aStr1.getStr());

        rtl_str_toAsciiLowerCase( pStr );

        ASSERT_TRUE(aShouldStr1.equals(rtl::OString(pStr)) == sal_True) << "failed";
        free(pStr);
    }

    class toAsciiLowerCase_WithLength : public ::testing::Test
    {
    public:
    }; // class replaceChar

    TEST_F(toAsciiLowerCase_WithLength, toAsciiLowerCase_WithLength_000)
    {
        rtl_str_toAsciiLowerCase_WithLength( NULL, 0 );
    }

    TEST_F(toAsciiLowerCase_WithLength, toAsciiLowerCase_WithLength_001)
    {
        rtl::OString aStr1 = "CHANGE THIS TO ASCII LOWER CASE.";
        rtl::OString aShouldStr1 = "change thiS TO ASCII LOWER CASE.";

        sal_Char* pStr = (sal_Char*) malloc(aStr1.getLength() + 1);
        ASSERT_TRUE(pStr != NULL) << "can't get memory for test";
        strcpy(pStr, aStr1.getStr());

        rtl_str_toAsciiLowerCase_WithLength( pStr, 10 );

        printf("Lowercase with length: '%s'\n", pStr);
        ASSERT_TRUE(aShouldStr1.equals(rtl::OString(pStr)) == sal_True) << "failed";
        free(pStr);
    }

// -----------------------------------------------------------------------------

    class toAsciiUpperCase : public ::testing::Test
    {
    public:
    }; // class replaceChar

    TEST_F(toAsciiUpperCase, toAsciiUpperCase_000)
    {
        rtl_str_toAsciiUpperCase( NULL );
    }

    TEST_F(toAsciiUpperCase, toAsciiUpperCase_001)
    {
        rtl::OString aStr1 = "change this to ascii upper case.";
        rtl::OString aShouldStr1 = "CHANGE THIS TO ASCII UPPER CASE.";

        sal_Char* pStr = (sal_Char*) malloc(aStr1.getLength() + 1);
        ASSERT_TRUE(pStr != NULL) << "can't get memory for test";
        strcpy(pStr, aStr1.getStr());

        rtl_str_toAsciiUpperCase( pStr );

        ASSERT_TRUE(aShouldStr1.equals(rtl::OString(pStr)) == sal_True) << "failed";
        free(pStr);
    }

    class toAsciiUpperCase_WithLength : public ::testing::Test
    {
    public:
    }; // class replaceChar

    TEST_F(toAsciiUpperCase_WithLength, toAsciiUpperCase_WithLength_000)
    {
        rtl_str_toAsciiUpperCase_WithLength( NULL, 0 );
    }

    TEST_F(toAsciiUpperCase_WithLength, toAsciiUpperCase_WithLength_001)
    {
        rtl::OString aStr1 = "change this to ascii lower case.";
        rtl::OString aShouldStr1 = "CHANGE THIs to ascii lower case.";

        sal_Char* pStr = (sal_Char*) malloc(aStr1.getLength() + 1);
        ASSERT_TRUE(pStr != NULL) << "can't get memory for test";

        strcpy(pStr, aStr1.getStr());
        rtl_str_toAsciiUpperCase_WithLength( pStr, 10 );

        printf("Uppercase with length: '%s'\n", aStr1.getStr());
        ASSERT_TRUE(aShouldStr1.equals(rtl::OString(pStr)) == sal_True) << "failed";
        free(pStr);
    }

    // -----------------------------------------------------------------------------

    class trim_WithLength : public ::testing::Test
    {
      public:
    };

    TEST_F(trim_WithLength, trim_WithLength_000)
    {
        rtl_str_trim_WithLength(NULL, 0);
        // should not GPF
    }

    TEST_F(trim_WithLength, trim_WithLength_000_1)
    {
        char pStr[] = { "  trim this" };
        rtl_str_trim_WithLength( pStr, 0 );
    }

    TEST_F(trim_WithLength, trim_WithLength_001)
    {
        char const *pStr = "  trim this";
        sal_Char *pStr2 = (sal_Char*)malloc(strlen(pStr) + 1);
        if (pStr2)
        {
            strcpy(pStr2, pStr);
            rtl_str_trim_WithLength( pStr2, 2 );

            ASSERT_TRUE(strlen(pStr2) == 0) << "string should be empty";
            free(pStr2);
        }
    }

    TEST_F(trim_WithLength, trim_WithLength_002)
    {
        char const *pStr = "trim this";
        sal_Char *pStr2 = (sal_Char*)malloc(strlen(pStr) + 1);
        if (pStr2)
        {
            strcpy(pStr2, pStr);
            rtl_str_trim_WithLength( pStr2, 5 );

            ASSERT_TRUE(strlen(pStr2) == 4) << "string should contain 'trim'";
            free(pStr2);
        }
    }

    TEST_F(trim_WithLength, trim_WithLength_003)
    {
        char const *pStr = "     trim   this";
        sal_Char *pStr2 = (sal_Char*)malloc(strlen(pStr) + 1);
        if (pStr2)
        {
            strcpy(pStr2, pStr);
            rtl_str_trim_WithLength( pStr2, 11 );

            ASSERT_TRUE(strlen(pStr2) == 4) << "string should contain 'trim'";
            free(pStr2);
        }
    }

    TEST_F(trim_WithLength, trim_WithLength_004)
    {
        char const *pStr = "\r\n\t \n\r    trim  \n this";
        sal_Char *pStr2 = (sal_Char*)malloc(strlen(pStr) + 1);
        if (pStr2)
        {
            strcpy(pStr2, pStr);
            rtl_str_trim_WithLength( pStr2, 17 );

            ASSERT_TRUE(strlen(pStr2) == 4) << "string should contain 'trim'";
            free(pStr2);
        }
    }

    TEST_F(trim_WithLength, trim_WithLength_005)
    {
        char const *pStr = "\r\n\t \n\r    trim \t this \n\r\t\t     ";
        sal_Char *pStr2 = (sal_Char*)malloc(strlen(pStr) + 1);
        if (pStr2)
        {
            strcpy(pStr2, pStr);
            rtl_str_trim_WithLength( pStr2, strlen(pStr2) );
            ASSERT_TRUE(strlen(pStr2) == 11) << "string should contain 'trim'";
            free(pStr2);
        }
    }

    // -----------------------------------------------------------------------------

    class valueOfChar : public ::testing::Test
    {
      public:
    };

    TEST_F(valueOfChar, valueOfChar_000)
    {
        rtl_str_valueOfChar(NULL, 0);
        // should not GPF
    }
    TEST_F(valueOfChar, valueOfChar_001)
    {
        sal_Char *pStr = (sal_Char*)malloc(RTL_STR_MAX_VALUEOFCHAR);
        if (pStr)
        {
            rtl_str_valueOfChar(pStr, 'A');

            ASSERT_TRUE(pStr[0] == 'A') << "string should contain 'A'";
            free(pStr);
        }
    }

} // namespace rtl_str

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
