Beispiel #1
0
MojErr MojSockAddr::fromPath(const MojChar* path)
{
    MojAssert(path);

    MojSockAddrUnT addr;
    MojZero(&addr, sizeof(addr));

    if (MojStrLen(path) > (sizeof(addr.sun_path) - 1))
        MojErrThrow(MojErrPathTooLong);
    MojStrCpy(addr.sun_path, path);

    addr.sun_family = MOJ_PF_LOCAL;
    fromAddr((MojSockAddrT*) &addr, sizeof(addr));

    return MojErrNone;
}
Beispiel #2
0
MojErr MojAutoPtrTest::run()
{
	MojErr err = MojErrNone;
	MojAutoPtr<int> intPtr1;
	MojAutoPtr<MojString> strPtr1;
	MojAutoArrayPtr<MojChar> charPtr1;
	MojAutoPtr<int> intPtr2(new int(5));
	MojAutoPtr<MojString> strPtr2(new MojString());
	MojAutoArrayPtr<MojChar> charPtr2(new MojChar[6]);
	MojAutoPtr<int> intPtr3(new int(5));
	MojAutoPtr<MojString> strPtr3(new MojString());
	MojAutoArrayPtr<MojChar> charPtr3(new MojChar[6]);
	MojAutoPtr<int> intPtr4(intPtr3);
	MojAutoPtr<MojString> strPtr4(strPtr3);
	MojAutoArrayPtr<MojChar> charPtr4(charPtr3);
	MojSharedPtr<int> intSp1;
	MojSharedPtr<int> intSp2(intSp1);
	MojSharedPtr<MojString> strSp1;
	MojSharedPtr<MojString> strSp2(strSp1);
	MojSharedArrayPtr<MojChar> charSp1;
	MojSharedArrayPtr<MojChar> charSp2;

	MojTestAssert(!intPtr1.get());
	MojTestAssert(!strPtr1.get());
	MojTestAssert(!charPtr1.get());
	MojTestAssert(!intPtr3.get());
	MojTestAssert(!strPtr3.get());
	MojTestAssert(!charPtr3.get());
	MojTestAssert(intPtr2.get());
	MojTestAssert(strPtr2.get());
	MojTestAssert(charPtr2.get());
	MojTestAssert(intPtr4.get());
	MojTestAssert(strPtr4.get());
	MojTestAssert(charPtr4.get());
	MojTestAssert(!intPtr1.release());

	intPtr1.reset();
	strPtr1.reset();
	charPtr1.reset();
	MojTestAssert(*intPtr2.get() == 5);
	MojTestAssert(*intPtr2 == 5);
	MojTestAssert(strPtr2->empty());
	MojStrCpy(charPtr2.get(), _T("hello"));
	MojTestAssert(*charPtr2 == _T('h'));
	err = strPtr2->assign(charPtr2.get());
	MojTestErrCheck(err);
	MojTestAssert(*strPtr2 == charPtr2.get());
	intPtr1 = intPtr2;
	strPtr1 = strPtr2;
	charPtr1 = charPtr2;
	MojTestAssert(!intPtr2.get());
	MojTestAssert(!strPtr2.get());
	MojTestAssert(!charPtr2.get());
	MojTestAssert(intPtr1.get());
	MojTestAssert(strPtr1.get());
	MojTestAssert(charPtr1.get());
	MojTestAssert(*intPtr1 == 5);
	MojTestAssert(*strPtr1 == _T("hello"));
	MojTestAssert(*charPtr1 == _T('h'));

	delete intPtr1.release();

	// related type
	MojAutoPtr<FooTest> foop;
	MojAutoPtr<BarTest> barp(new BarTest());
	MojAllocCheck(barp.get());
	BarTest* barraw = barp.get();
	foop = barp;
	MojTestAssert(foop.get() == barraw);
	MojTestAssert(barp.get() == NULL);
	MojAutoPtr<FooTest> foop2(barp);

	MojSharedPtr<FooTest> foosp;
	MojSharedPtr<BarTest> barsp;
	foosp = barsp;
	MojSharedPtr<FooTest> foosp2(barsp);

	// shared ptrs
	MojTestAssert(!intSp1.get());
	MojTestAssert(intSp1.refcount() == 0);
	MojTestAssert(!intSp2.get());
	MojTestAssert(intSp2.refcount() == 0);
	MojTestAssert(!strSp1.get());
	MojTestAssert(strSp1.refcount() == 0);
	MojTestAssert(!strSp2.get());
	MojTestAssert(strSp2.refcount() == 0);
	MojTestAssert(!charSp1.get());
	MojTestAssert(charSp1.refcount() == 0);
	MojTestAssert(!charSp2.get());
	MojTestAssert(charSp2.refcount() == 0);

	err = intSp1.reset(new int(10));
	MojTestErrCheck(err);
	MojTestAssert(intSp1.get() && *intSp1 == 10);
	MojTestAssert(!intSp2.get());
	MojTestAssert(intSp1.refcount() == 1);
	intSp2 = intSp1;
	MojTestAssert(intSp1.get() && *intSp1 == 10);
	MojTestAssert(intSp2.get() && *intSp2 == 10);
	MojTestAssert(intSp1.refcount() == 2);
	MojTestAssert(intSp2.refcount() == 2);
	err = intSp1.reset(new int(20));
	MojTestErrCheck(err);
	MojTestAssert(intSp1.get() && *intSp1 == 20);
	MojTestAssert(intSp2.get() && *intSp2 == 10);
	MojTestAssert(intSp1.refcount() == 1);
	MojTestAssert(intSp2.refcount() == 1);
	intSp2 = intSp1;
	MojTestAssert(intSp1.get() && *intSp1 == 20);
	MojTestAssert(intSp2.get() && *intSp2 == 20);
	MojTestAssert(intSp1.refcount() == 2);
	MojTestAssert(intSp2.refcount() == 2);
	err = intSp1.reset(NULL);
	MojTestErrCheck(err);
	MojTestAssert(!intSp1.get());
	MojTestAssert(intSp1.refcount() == 0);
	MojTestAssert(intSp2.get() && *intSp2 == 20);
	MojTestAssert(intSp2.refcount() == 1);
	err = strSp1.reset(new MojString);
	MojTestErrCheck(err);
	MojTestAssert(strSp1.get());
	MojTestAssert(strSp1->empty());
	MojTestAssert(*strSp1 == _T(""));
	strSp2 = strSp1;
	MojTestAssert(*strSp2 == _T(""));
	err = charSp1.reset(new MojChar[100]);
	MojErrCheck(err);
	MojTestAssert(charSp1.get());
	charSp2 = charSp1;
	MojTestAssert(charSp1.get() == charSp2.get());
	err = charSp1.resetChecked(new MojChar[100]);
	MojErrCheck(err);
	err = charSp1.resetChecked(NULL);
	MojTestErrExpected(err, MojErrNoMem);

	// refs
	MojAutoPtr<FooTest> foop3 = makeFooAuto();
	takeFooAuto(foop3);
	takeFooAuto(makeFooAuto());
	MojSharedPtr<FooTest> foosp3 = makeFooShared();
	takeFooShared(foosp3);
	takeFooShared(makeFooShared());

	return MojErrNone;
}
Beispiel #3
0
MojErr MojStringTest::run()
{
	MojString str1;
	MojString str2;
	MojString str3;
	MojString str4;
	MojString str5;
	const MojChar* const chars1 = _T("hello");
	const MojChar* const chars2 = _T("howdy!!");
	const MojChar* const chars3 = _T(" hi there  ");
	MojAutoArrayPtr<MojChar> bigFormatStr;
	MojVector<MojString> vec;
	MojSize idx;

	// empty strings
	MojErr err = str2.assign(_T(""));
	MojTestErrCheck(err);
	str3.assign(str2);
	MojTestAssert(str1.data() == str2.data());
	MojTestAssert(str2.data() == str3.data());
	MojTestAssert(str1.length() == 0);
	MojTestAssert(str2.length() == 0);
	MojTestAssert(str3.length() == 0);
	MojTestAssert(str1.empty());
	MojTestAssert(str2.empty());
	MojTestAssert(str3.empty());
	MojTestAssert(str1.compare(_T("")) == 0);
	MojTestAssert(str1.compare(_T(""), 0) == 0);
	MojTestAssert(str1.compareCaseless(_T("")) == 0);
	MojTestAssert(str1.compareCaseless(_T(""), 0) == 0);
	MojTestAssert(str1.startsWith(_T("")));
	MojTestAssert(!str1.startsWith(_T("hello")));
	MojTestAssert(str1 == _T(""));
	MojTestAssert(str1 >= _T(""));
	MojTestAssert(str1 <= _T(""));
	MojTestAssert(!(str1 != _T("")));
	MojTestAssert(!(str1 > _T("")));
	MojTestAssert(!(str1 < _T("")));
	str2.clear();
	MojTestAssert(str1.data() == str2.data());
	str1.swap(str1);
	MojTestAssert(str1 == str2);
	err = str1.assign(_T(""));
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	err = str1.truncate(0);
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	err = str1.resize(0);
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	err = str1.assign(NULL, 0);
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	err = str1.append(_T(""));
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	err = str1.append(NULL, 0);
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	MojTestAssert(str1.find(_T('h')) == MojInvalidIndex);
	MojTestAssert(str1.rfind(_T('h')) == MojInvalidIndex);
	err = str1.substring(0, 0, str2);
	MojTestErrCheck(err);
	MojTestAssert(str2.empty());
	err = str1.split(_T(' '), vec);
	MojTestErrCheck(err);
	MojTestAssert(vec.empty());
	MojString::Iterator iter;
	err = str1.begin(iter);
	MojTestErrCheck(err);
	MojTestAssert(iter == str1.begin());
	MojTestAssert(*iter == 0);
	err = str1.end(iter);
	MojTestErrCheck(err);
	MojTestAssert(iter == str1.end());
	MojTestAssert(*iter == 0);

	// non-empty strings
	err = str1.assign(chars1);
	MojTestErrCheck(err);
	err = str2.assign(chars2);
	MojTestErrCheck(err);
	str3.assign(str1);
	err = str4.assign(_T("hEllo World!"), 5);
	MojTestErrCheck(err);
	err = str4.setAt(0, _T('H'));
	MojTestErrCheck(err);
	err = str4.setAt(4, _T('O'));
	MojTestErrCheck(err);
	MojTestAssert(str4 == _T("HEllO"));
	MojTestAssert(str1.data() != chars1);
	MojTestAssert(str1.length() == 5);
	MojTestAssert(str2.length() == 7);
	MojTestAssert(str3.length() == 5);
	MojTestAssert(!str1.empty());
	MojTestAssert(!str2.empty());
	MojTestAssert(!str3.empty());
	MojTestAssert(str1.compare(chars1) == 0);
	MojTestAssert(str1.compare(chars1, 3) == 0);
	MojTestAssert(str1.compare(chars1, 3000) == 0);
	MojTestAssert(str1.compare(str3) == 0);
	MojTestAssert(str1.compare(chars2) < 0);
	MojTestAssert(str1.compare(chars2, 2) < 0);
	MojTestAssert(str1.compare(str2) < 0);
	MojTestAssert(str1.compare(str4) > 0);
	MojTestAssert(str2.compare(chars1) > 0);
	MojTestAssert(str2.compare(str1) > 0);
	MojTestAssert(str1.compareCaseless(chars1) == 0);
	MojTestAssert(str1.compareCaseless(chars1, 3) == 0);
	MojTestAssert(str1.compareCaseless(str3) == 0);
	MojTestAssert(str1.compareCaseless(str4) == 0);
	MojTestAssert(str1.compareCaseless(chars2) < 0);
	MojTestAssert(str1.compareCaseless(str2) < 0);
	MojTestAssert(str2.compareCaseless(chars1) > 0);
	MojTestAssert(str2.compareCaseless(str1) > 0);
	MojTestAssert(str1.startsWith(_T("")));
	MojTestAssert(str1.startsWith(_T("he")));
	MojTestAssert(str1.startsWith(chars1));
	MojTestAssert(str1.startsWith(str1));
	MojTestAssert(str1.at(0) == chars1[0] && str1.at(3) == chars1[3]);
	MojTestAssert(str1 == chars1);
	MojTestAssert(str1 == str3);
	MojTestAssert(str1 != chars2);
	MojTestAssert(str1 != str2);
	MojTestAssert(str1 != str4);
	MojTestAssert(str1 < chars2);
	MojTestAssert(str1 < str2);
	MojTestAssert(str1 <= chars2);
	MojTestAssert(str1 <= str2);
	MojTestAssert(str1 <= chars1);
	MojTestAssert(str1 <= str3);
	MojTestAssert(str2 > chars1);
	MojTestAssert(str2 > str1);
	MojTestAssert(str2 >= chars1);
	MojTestAssert(str2 >= str2);
	MojTestAssert(str1 >= chars1);
	MojTestAssert(str1 >= str3);
	str1.clear();
	MojTestAssert(str1.empty());
	MojTestAssert(str1.length() == 0);
	MojTestAssert(str1 == _T(""));

	// self-assignment
	err = str1.assign(chars1);
	MojTestErrCheck(err);
	str1.assign(str1);
	MojTestAssert(str1 == chars1);
	err = str1.substring(0, 2, str1);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("he"));

	// find char
	err = str1.assign(chars3);
	MojTestErrCheck(err);
	idx = str1.find(_T(' '));
	MojTestAssert(idx == 0);
	idx = str1.find(_T(' '), idx + 1);
	MojTestAssert(idx == 3);
	idx = str1.find(_T(' '), idx + 1);
	MojTestAssert(idx == 9);
	idx = str1.find(_T(' '), idx + 1);
	MojTestAssert(idx == 10);
	idx = str1.find(_T('?'), idx);
	MojTestAssert(idx == MojInvalidIndex);
	idx = str1.rfind(_T(' '));
	MojTestAssert(idx == 10);
	idx = str1.rfind(_T(' '), idx - 1);
	MojTestAssert(idx == 9);
	idx = str1.rfind(_T(' '), idx - 1);
	MojTestAssert(idx == 3);
	idx = str1.rfind(_T(' '), idx - 1);
	MojTestAssert(idx == 0);
	idx = str1.rfind(_T('&'));
	MojTestAssert(idx == MojInvalidIndex);
	// find str
	idx = str1.find(_T(" "));
	MojTestAssert(idx == 0);
	idx = str1.find(_T(" "), idx + 1);
	MojTestAssert(idx == 3);
	idx = str1.find(_T(" "), idx + 1);
	MojTestAssert(idx == 9);
	idx = str1.find(_T(" "), idx + 1);
	MojTestAssert(idx == 10);
	idx = str1.find(_T("?"), idx);
	MojTestAssert(idx == MojInvalidIndex);
	idx = str1.find(_T("hi"));
	MojTestAssert(idx == 1);

	// split
	err = str1.assign(_T(" hi   there   !  "));
	MojTestErrCheck(err);
	err = str1.split(_T(' '), vec);
	MojTestErrCheck(err);
	MojTestAssert(vec.size() == 3);
	MojTestAssert(vec[0] == _T("hi"));
	MojTestAssert(vec[1] == _T("there"));
	MojTestAssert(vec[2] == _T("!"));
	err = str1.assign(_T("     "));
	MojTestErrCheck(err);
	err = str1.split(_T(' '), vec);
	MojTestErrCheck(err);
	MojTestAssert(vec.empty());
	err = str1.assign(_T("howdy"));
	MojTestErrCheck(err);
	err = str1.split(_T(' '), vec);
	MojTestErrCheck(err);
	MojTestAssert(vec.size() == 1);
	MojTestAssert(vec[0] == _T("howdy"));
	err = str1.assign(_T("a b"));
	MojTestErrCheck(err);
	err = str1.split(_T(' '), vec);
	MojTestErrCheck(err);
	MojTestAssert(vec.size() == 2);
	MojTestAssert(vec[0] == _T("a"));
	MojTestAssert(vec[1] == _T("b"));

	// ref counting
	err = str1.assign(chars1);
	MojTestErrCheck(err);
	str2 = str1;
	MojTestAssert(str1.data() == str2.data());
	err = str2.assign(chars2);
	MojTestErrCheck(err);
	MojTestAssert(str1.data() != str2.data());
	str1.swap(str2);
	MojTestAssert(str1 == chars2);
	MojTestAssert(str2 == chars1);

	// format
	err = str1.format(_T("hello %s %d"), _T("world"), 14);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello world 14"));
	MojTestAssert(str1.length() == 14);
	MojTestAssert(str1.first() == _T('h') && str1.last() == _T('4'));
	bigFormatStr.reset(new MojChar[10003]);
	MojAllocCheck(bigFormatStr.get());
	MojStrCpy(bigFormatStr.get(), _T("%s"));
	for (int i = 2; i < 10002; i++)
		bigFormatStr.get()[i] = _T('f');
	bigFormatStr.get()[10002] = _T('\0');
	err = str1.format(bigFormatStr.get(), _T("hi"));
	MojTestErrCheck(err);
	MojTestAssert(str1.length() == 10002);
	MojTestAssert(str1.at(0) == _T('h') && str1.at(1) == _T('i'));
	for (int i = 2; i < 10002; ++i)
		MojTestAssert(str1.at(i) == _T('f'));

	// append
	str1.clear();
	for (int i = 0; i < 1000; ++i) {
		err = str1.append(_T('a'));
		MojTestErrCheck(err);
		MojTestAssert(str1.at(i) == _T('a'));
	}
	MojTestAssert(str1.length() == 1000);
	str1.clear();
	err = str1.append(_T("hello"));
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello"));
	err = str1.append(_T('!'));
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello!"));
	err = str1.appendFormat(_T(" %s"), _T("world"));
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello! world"));
	err = str1.append(_T('!'));
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello! world!"));

	// truncate
	err = str1.truncate(1000);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello! world!"));
	err = str1.truncate(5);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello"));
	err = str1.truncate(0);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T(""));

	// reserve
	MojTestAssert(str5.capacity() == 0);
	err = str5.reserve(0);
	MojTestErrCheck(err);
	MojTestAssert(str5.capacity() == 0);
	err = str5.reserve(5);
	MojTestErrCheck(err);
	MojTestAssert(str5.capacity() == 5);
	err = str5.reserve(1);
	MojTestErrCheck(err);
	MojTestAssert(str5.capacity() == 5);
	err = str5.assign(_T("hello"));
	MojTestErrCheck(err);
	err = str5.reserve(1000);
	MojTestErrCheck(err);
	MojTestAssert(str5.capacity() == 1000);
	MojTestAssert(str5 == _T("hello"));

	// resize
	err = str1.assign(_T("hello"));
	MojTestErrCheck(err);
	err = str1.resize(4);
	MojTestErrCheck(err);
	MojTestAssert(str1.length() == 4);
	MojTestAssert(str1 == _T("hell"));
	err = str1.resize(100);
	MojTestErrCheck(err);
	MojTestAssert(str1.length() == 100);
	err = str1.resize(1);
	MojTestAssert(str1.length() == 1);
	MojTestAssert(str1 == _T("h"));
	err = str1.resize(0);
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());

	// ref-count
	err = str1.assign(_T("hello"));
	MojTestErrCheck(err);
	str2 = str1;
	err = str1.setAt(0, _T('H'));
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("Hello"));
	MojTestAssert(str2 == _T("hello"));
	str2 = str1;
	err = str1.format(_T("%d"), 52);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("52"));
	MojTestAssert(str2 == _T("Hello"));
	str2 = str1;
	err = str1.append(_T('0'));
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("520"));
	MojTestAssert(str2 == _T("52"));
	str2 = str1;
	err = str1.append(_T("1"));
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("5201"));
	MojTestAssert(str2 == _T("520"));
	str2 = str1;
	err = str1.appendFormat(_T("%d"), 89);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("520189"));
	MojTestAssert(str2 == _T("5201"));
	str2 = str1;
	err = str1.reserve(1000);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("520189"));
	MojTestAssert(str2 == _T("520189"));
	str2 = str1;
	err = str1.truncate(2);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("52"));
	MojTestAssert(str2 == _T("520189"));

	// base64
	MojVector<MojByte> bv;
	str1.clear();
	err = str1.base64Encode(bv);
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	err = str1.base64Decode(bv);
	MojTestErrCheck(err);
	MojTestAssert(bv.empty());
	MojByte input[] = {0x14, 0xfb, 0x9c, 0x03, 0xd9};
	err = bv.assign(input, input + sizeof(input));
	MojTestErrCheck(err);
	err = str1.base64Encode(bv);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("4EiR+xZ="));
	MojVector<MojByte> bv2;
	err = str1.base64Decode(bv2);
	MojTestErrCheck(err);
	MojTestAssert(bv == bv2);
	err = str1.base64Encode(bv, false);
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("4EiR+xZ"));
	err = str1.base64Decode(bv2);
	MojTestErrCheck(err);
	MojTestAssert(bv == bv2);

	// tolower
	str1.clear();
	err = str1.toLower();
	MojTestErrCheck(err);
	MojTestAssert(str1.empty());
	MojTestAssert(str1 == _T(""));
	err = str1.assign(_T("HeLlO"));
	MojTestErrCheck(err);
	err = str1.toLower();
	MojTestErrCheck(err);
	MojTestAssert(str1 == _T("hello"));
	err = str1.assign(_T("AnOtHER"));
	MojErrCheck(err);
	err = str1.toLower();
	MojErrCheck(err);
	MojTestAssert(str1 == _T("another"));

	return MojErrNone;
}