Newer
Older
libj / modules / x-tokenizer / test / src / ut_string_util.cpp
#include <iostream>
#include <j/cppunit/cppunit.hpp>
#include <j/cppunit/assert.hpp>
#include <j/lang/assertion_error.hpp>

#include <string_util.hpp>

using namespace j;
using namespace j::lang;
using namespace j::cppunit;
using namespace xtokenizer;

class StringUtilTest : public TestCase
{
public:
    StringUtilTest() {}
    ~StringUtilTest() {}
    void setUp() {}
    void tearDown() {}

    void testStartsWith()
    { //                 01234567890123
        std::string str = "abcdefghijklmn";
        bool ret = startsWith(str, "abc", 0);
        assertTrue(ret);
        ret = startsWith(str, "abc", 3);
        assertFalse(ret);
        ret = startsWith(str, "fghijk", 5);
        assertTrue(ret);
        ret = startsWith(str, "abcdefghijklmnopqrstuvwxyz", 0);
        assertFalse(ret);
        ret = startsWith(str, "abc", -1);
        assertFalse(ret);
        ret = startsWith(str, "abc", 100);
        assertFalse(ret);

        // String
        ret = startsWith(str, String("abc"), 0);
        assertTrue(ret);
        ret = startsWith(str, String("abc"), 3);
        assertFalse(ret);
        ret = startsWith(str, String("fghijk"), 5);
        assertTrue(ret);
        ret = startsWith(str, String("abcdefghijklmnopqrstuvwxyz"), 0);
        assertFalse(ret);
        ret = startsWith(str, String("abc"), -1);
        assertFalse(ret);
        ret = startsWith(str, String("abc"), 100);
        assertFalse(ret);
    }

    void testUnescapedIndexOf()
    {
        // int unescapedIndexOf(const std::string &str, const std::string &needle, int offset);
        //                 0123 4567 8 90123 4567
        std::string str = "abcd\"efg\\\"hijk\"lmn";
        int ret = unescapedIndexOf(str, "\"", 0);
        assertEquals(4, ret);

        ret = unescapedIndexOf(str, "\"", 5);
        assertEquals(14, ret);

        ret = unescapedIndexOf(str, "\"", 15);
        assertEquals(-1, ret);
    }

    void testEscapedString()
    {
        //                            10         20         30
        //                 01234 56789012 3456789012345678 90 12
        std::string str = "Hello\\tWorld!\\nThis is Sample\\r\\n";
        std::string res = escapedString(str, 0, 13);
        assertEquals(std::string("Hello\tWorld!"), res);

        res = escapedString(str, 7, 32);
        assertEquals(std::string("World!\nThis is Sample\r\n"), res);

        std::string str2 = "Hello\\x20World!";
        res = escapedString(str2, 0, str2.length());
        assertEquals(std::string("Hello World!"), res);

        std::string str3 = "\\!";
        res = escapedString(str3, 0, str3.length());
        assertEquals(std::string("\\!"), res);
    }

    /*
        std::string escapedString(const std::string &str, int offset, int length);
        */

    void suite()
    {
        RUN_TEST("startsWith", testStartsWith);
        RUN_TEST("unescapedIndexOf", testUnescapedIndexOf);
        RUN_TEST("escapedString", testEscapedString);
    }
};