You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

312 lines
9.5 KiB

#include <plString.h>
#include <gtest/gtest.h>
#include <wchar.h>
//TEST(PlStringTest,ToUtf16)
//{
// uint16_t text[] = {4278124641,4278124776,4278125475,4278136649};
// plStringBuffer<uint16_t> expected = plStringBuffer<uint16_t>(text,4);
// plStringBuffer<uint16_t> output = plString("abcd").ToUtf16();
//
// const uint16_t* c = output.GetData();
// const uint16_t* d = expected.GetData();
// printf("expected size %d output size %d\n",expected.GetSize(),output.GetSize());
// for(int i=0;i<expected.GetSize();i++)
// {
// printf("%u %s \n",c,c);
// printf("%u %s \n",d,d);
// c++;
// d++;
// }
//}
//TEST(PlStringTest,ToWchar)
//{
// wchar_t text[] =L"abcdé";
// plStringBuffer<wchar_t> expected = plStringBuffer<wchar_t>(text,sizeof(text));
// plStringBuffer<wchar_t> output = plString("abcdé").ToWchar();
// const wchar_t* outputStr = output.GetData();
// const wchar_t* expectedStr = expected.GetData();
// EXPECT_STREQ(expectedStr,outputStr);
//}
//
//TEST(PlStringTest,ToIso8859_1)
//{
// char text[] ="abcde";
// plStringBuffer<char> expected = plStringBuffer<char>(text,sizeof(text));
// plStringBuffer<char> output = plString("abcde").ToIso8859_1();
// const char* outputStr = output.GetData();
// const char* expectedStr = expected.GetData();
// EXPECT_STREQ(expectedStr,outputStr);
//}
TEST(PlStringTest,Format)
{
//string <256 characters
plString expected1 = plString("abcd3");
plString output1 = plString::Format("a%c%s%d",'b',"cd",3);
EXPECT_EQ(expected1,output1);
//string == 256 characters
plString expected2 = plString("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi elit erat, ornare vitae dictum non, accumsan nec orci. Pellentesque vel lectus magna, nec fermentum leo. Vestibulum venenatis sapien sit amet diam luctus laoreet. Integer accumsan iaculis amet.");
plString output2 = plString::Format("Lorem %s dolor sit amet, consectetur adipiscing elit. %s elit erat, ornare vitae dictum non, accumsan nec orci. Pellentesque vel lectus magna, nec fermentum leo. Vestibulum venenatis sapien sit amet diam luctus laoreet. Integer accumsan %s amet.","ipsum","Morbi","iaculis");
EXPECT_EQ(expected2,output2);
//string >256 characters
plString expected3 = plString("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur blandit iaculis metus eu gravida. Nulla ut lorem et tortor aliquam varius. Maecenas sed metus turpis. Mauris molestie velit aliquam felis suscipit egestas. Duis id arcu eget velit facilisis varius vitae ac neque. Quisque dapibus sed.");
plString output3 = plString::Format("Lorem ipsum dolor sit amet, %s adipiscing elit. Curabitur blandit iaculis metus eu gravida. Nulla ut lorem et tortor aliquam varius. Maecenas sed metus turpis. Mauris molestie velit aliquam felis suscipit %s. %s","consectetur","egestas","Duis id arcu eget velit facilisis varius vitae ac neque. Quisque dapibus sed.");
EXPECT_EQ(expected3,output3);
}
TEST(PlStringTest,FindChar)
{
plString input = plString("abCdcBAeab");
int result=0;
//available char, case sensitive
result = input.Find('B',plString::kCaseSensitive);
EXPECT_EQ(5,result);
//available char, case insensitive
result = input.Find('B',plString::kCaseInsensitive);
EXPECT_EQ(1,result);
//unavailable char, case sensitive
result = input.Find('f',plString::kCaseSensitive);
EXPECT_EQ(-1,result);
//unavailable char, case insensitive
result=0;
result = input.Find('f',plString::kCaseInsensitive);
EXPECT_EQ(-1,result);
plString input1 = plString("abCdcBÁèab");
//available accented char, case sensitive
result = input1.Find('Á',plString::kCaseSensitive);
EXPECT_EQ(7,result);
//available accented char, case insensitive
result = input1.Find('è',plString::kCaseInsensitive);
EXPECT_EQ(9,result);
}
TEST(PlStringTest,FindLast)
{
plString input = plString("abCdcBAeab");
int result=0;
//available char, case sensitive
result = input.FindLast('B',plString::kCaseSensitive);
EXPECT_EQ(5,result);
//available char, case insensitive
result = input.FindLast('B',plString::kCaseInsensitive);
EXPECT_EQ(9,result);
//unavailable char, case sensitive
result = input.FindLast('f',plString::kCaseSensitive);
EXPECT_EQ(-1,result);
//unavailable char, case insensitive
result=0;
result = input.FindLast('f',plString::kCaseInsensitive);
EXPECT_EQ(-1,result);
plString input1 = plString("éeÉß");
//available accented char, case sensitive
result = input1.FindLast('e',plString::kCaseSensitive);
EXPECT_EQ(2,result);
//available accented char, case insensitive
result = input1.FindLast('ß',plString::kCaseInsensitive);
EXPECT_EQ(6,result);
}
TEST(PlStringTest,FindString)
{
plString input = plString("abABÁè");
int result=0;
//available string, case sensitive
result = input.Find("AB",plString::kCaseSensitive);
EXPECT_EQ(2,result);
//available string, case insensitive
result = input.Find("ab",plString::kCaseInsensitive);
EXPECT_EQ(0,result);
//unavailable string, case sensitive
result = input.Find("cd",plString::kCaseSensitive);
EXPECT_EQ(-1,result);
//unavailable string, case insensitive
result=0;
result = input.Find("cd",plString::kCaseInsensitive);
EXPECT_EQ(-1,result);
plString input1 = plString("àbéCdcBÀéab");
//available accented string, case sensitive
result = input1.Find("À",plString::kCaseSensitive);
EXPECT_EQ(9,result);
//the strnicmp method used does not support unicode
//available accented string, case insensitive
// result = input1.Find("À",plString::kCaseInsensitive);
// EXPECT_EQ(1,result);
}
//TODO: test regex functions
TEST(PlStringTest,TrimLeft)
{
plString input = plString("abcdefgh");
plString output = input.TrimLeft("abc");
plString expected = plString("defgh");
EXPECT_EQ(expected,output);
plString input1 = plString("abcdefgh");
plString output1 = input1.TrimLeft("bc");
EXPECT_EQ(input1,output1);
}
TEST(PlStringTest,TrimRight)
{
plString input = plString("abcdefgh");
plString output = input.TrimRight("fgh");
plString expected = plString("abcde");
EXPECT_EQ(expected,output);
plString input1 = plString("abcdefgh");
plString output1 = input1.TrimRight("fg");
EXPECT_EQ(input1,output1);
}
TEST(PlStringTest,Trim)
{
plString input = plString("abcdefba");
plString output = input.Trim("ab");
plString expected = plString("cdef");
EXPECT_EQ(expected,output);
plString input1 = plString("abcdefba");
plString output1 = input1.Trim("f");
EXPECT_EQ(input1,output1);
}
TEST(PlStringTest,Substr)
{
plString input = plString("abcdefgh");
//start > size returns null
plString output = input.Substr(15,1);
EXPECT_EQ(plString::Null,output);
//start<0
plString output1 =input.Substr(-3,3);
plString expected1 = plString("fgh");
EXPECT_EQ(expected1,output1);
//start+size>size string
plString output2 =input.Substr(4,6);
plString expected2 = plString("efgh");
EXPECT_EQ(expected2,output2);
//start =0 size = length string
plString output3 =input.Substr(0,input.GetSize());
EXPECT_EQ(input,output3);
//normal case
plString output4 =input.Substr(1,3);
plString expected4 = plString("bcd");
EXPECT_EQ(expected4,output4);
}
TEST(PlStringTest,Replace)
{
plString input = plString("abcdabcd");
plString output = input.Replace("ab","cd");
plString expected = plString("cdcdcdcd");
EXPECT_EQ(expected,output);
plString output1 = input.Replace("a","cd");
plString expected1 = plString("cdbcdcdbcd");
EXPECT_EQ(expected1,output1);
}
TEST(PlStringTest,ToUpper)
{
plString input = plString("abCDe");
plString output = input.ToUpper();
plString expected = plString("ABCDE");
EXPECT_EQ(expected,output);
}
TEST(PlStringTest,ToLower)
{
plString input = plString("aBcDe");
plString output = input.ToLower();
plString expected = plString("abcde");
EXPECT_EQ(expected,output);
}
TEST(PlStringTest,Tokenize)
{
std::vector<plString> expected;
expected.push_back(plString("a"));
expected.push_back(plString("b"));
expected.push_back(plString("c"));
expected.push_back(plString("d"));
expected.push_back(plString("è"));
plString input = plString("a\t\tb\n;c-d;è");
std::vector<plString> output = input.Tokenize("\t\n-;");
EXPECT_EQ(expected,output);
}
TEST(PlStringTest,Split)
{
std::vector<plString> expected;
expected.push_back(plString("a"));
expected.push_back(plString("b"));
expected.push_back(plString("c"));
expected.push_back(plString("d"));
expected.push_back(plString("è"));
plString input = plString("a-b-c-d-è");
std::vector<plString> output = input.Split("-",4);
EXPECT_EQ(expected,output);
}
TEST(PlStringTest,Fill)
{
plString expected = plString("aaaaa");
plString output = plString::Fill(5,'a');
EXPECT_EQ(expected,output);
}
//overload operator+
TEST(PlStringTest,Addition)
{
plString expected = "abcde";
plString input1 = "ab";
plString input2 = "cde";
//plstring+plstring
plString output = input1+input2;
EXPECT_EQ(expected,output);
//plstring+char*
plString output1 = input1 + input2.c_str();
EXPECT_EQ(expected,output1);
//char*+plstring
plString output2 = input1.c_str() + input2;
EXPECT_EQ(expected,output2);
}