StringPrivate() :
RefCounter() {}
- StringPrivate(unsigned int n, wchar_t c) :
- RefCounter(),
- data(static_cast<size_t>(n), c) {}
-
/*!
* Stores string in UTF-16. The byte order depends on the CPU endian.
*/
}
String::String(char c, Type t) :
- d(new StringPrivate(1, static_cast<unsigned char>(c)))
+ d(new StringPrivate())
{
- if(t != Latin1 && t != UTF8) {
+ if(t == Latin1)
+ copyFromLatin1(d->data, &c, 1);
+ else if(t == String::UTF8)
+ copyFromUTF8(d->data, &c, 1);
+ else {
debug("String::String() -- char should not contain UTF16.");
}
}
CPPUNIT_TEST(testEncodeNonLatin1);
CPPUNIT_TEST(testEncodeEmpty);
CPPUNIT_TEST(testIterator);
- CPPUNIT_TEST(testRedundantUTF8);
+ CPPUNIT_TEST(testInvalidUTF8);
CPPUNIT_TEST_SUITE_END();
public:
CPPUNIT_ASSERT_EQUAL(L'I', *it2);
}
- void testRedundantUTF8()
+ void testInvalidUTF8()
{
CPPUNIT_ASSERT_EQUAL(String("/"), String(ByteVector("\x2F"), String::UTF8));
CPPUNIT_ASSERT(String(ByteVector("\xC0\xAF"), String::UTF8).isEmpty());
CPPUNIT_ASSERT(String(ByteVector("\xE0\x80\xAF"), String::UTF8).isEmpty());
CPPUNIT_ASSERT(String(ByteVector("\xF0\x80\x80\xAF"), String::UTF8).isEmpty());
+
+ CPPUNIT_ASSERT(String(ByteVector("\xF8\x80\x80\x80\x80"), String::UTF8).isEmpty());
+ CPPUNIT_ASSERT(String(ByteVector("\xFC\x80\x80\x80\x80\x80"), String::UTF8).isEmpty());
+
+ CPPUNIT_ASSERT(String('\x80', String::UTF8).isEmpty());
}
};