X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/527587d347e5e2ba48c8570631338841ee630b23..c29c95fe24973b94fd724db767193171ca7c513d:/tests/strings/unicode.cpp diff --git a/tests/strings/unicode.cpp b/tests/strings/unicode.cpp index b79c987438..8a0574e43d 100644 --- a/tests/strings/unicode.cpp +++ b/tests/strings/unicode.cpp @@ -21,12 +21,16 @@ #include "wx/wx.h" #endif // WX_PRECOMP +#include "wx/encconv.h" + +// ---------------------------------------------------------------------------- // helper class holding the matching MB and WC strings -// -// either str or wcs (but not both) may be NULL, this means that the conversion -// to it should fail +// ---------------------------------------------------------------------------- + struct StringConversionData { + // either str or wcs (but not both) may be NULL, this means that the conversion + // to it should fail StringConversionData(const char *str_, const wchar_t *wcs_, int flags_ = 0) : str(str_), wcs(wcs_), flags(flags_) { @@ -139,7 +143,7 @@ private: CPPUNIT_TEST_SUITE( UnicodeTestCase ); CPPUNIT_TEST( ToFromAscii ); CPPUNIT_TEST( ConstructorsWithConversion ); - CPPUNIT_TEST( ConversionEmpty ); + CPPUNIT_TEST( ConversionFixed ); CPPUNIT_TEST( ConversionWithNULs ); CPPUNIT_TEST( ConversionUTF7 ); CPPUNIT_TEST( ConversionUTF8 ); @@ -153,7 +157,7 @@ private: void ToFromAscii(); void ConstructorsWithConversion(); - void ConversionEmpty(); + void ConversionFixed(); void ConversionWithNULs(); void ConversionUTF7(); void ConversionUTF8(); @@ -170,7 +174,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( UnicodeTestCase ); -// also include in it's own registry so that these tests can be run alone +// also include in its own registry so that these tests can be run alone CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( UnicodeTestCase, "UnicodeTestCase" ); UnicodeTestCase::UnicodeTestCase() @@ -193,9 +197,9 @@ void UnicodeTestCase::ToFromAscii() void UnicodeTestCase::ConstructorsWithConversion() { - // the string "Déjà" in UTF-8 and wchar_t: + // the string "Déjà" in UTF-8 and wchar_t: const unsigned char utf8Buf[] = {0x44,0xC3,0xA9,0x6A,0xC3,0xA0,0}; - const unsigned char utf8subBuf[] = {0x44,0xC3,0xA9,0x6A,0}; // just "Déj" + const unsigned char utf8subBuf[] = {0x44,0xC3,0xA9,0x6A,0}; // just "Déj" const char *utf8 = (char *)utf8Buf; const char *utf8sub = (char *)utf8subBuf; @@ -207,7 +211,7 @@ void UnicodeTestCase::ConstructorsWithConversion() wxString s2(wchar); CPPUNIT_ASSERT_EQUAL( wchar, s2 ); - CPPUNIT_ASSERT_EQUAL( utf8, s2 ); + CPPUNIT_ASSERT_EQUAL( wxString::FromUTF8(utf8), s2 ); #else CPPUNIT_ASSERT_EQUAL( utf8, s1 ); #endif @@ -221,7 +225,7 @@ void UnicodeTestCase::ConstructorsWithConversion() CPPUNIT_ASSERT_EQUAL( sub, s4 ); // conversion should stop with failure at pos 35 - wxString s("\t[pl]open.format.Sformatuj dyskietkê=gfloppy %f", wxConvUTF8); + wxString s("\t[pl]open.format.Sformatuj dyskietk\xea=gfloppy %f", wxConvUTF8); CPPUNIT_ASSERT( s.empty() ); #endif // wxUSE_UNICODE @@ -238,17 +242,26 @@ void UnicodeTestCase::ConstructorsWithConversion() CPPUNIT_ASSERT( s5 != "SomethingElse" ); } -void UnicodeTestCase::ConversionEmpty() +void UnicodeTestCase::ConversionFixed() { size_t len; #if wxUSE_UNICODE - wxCharBuffer buf = wxConvLibc.cWC2MB(L"", 0, &len); + wxConvLibc.cWC2MB(L"", 0, &len); #else // !wxUSE_UNICODE - wxWCharBuffer wbuf = wxConvLibc.cMB2WC("", 0, &len); + wxConvLibc.cMB2WC("", 0, &len); #endif // wxUSE_UNICODE/!wxUSE_UNICODE - CPPUNIT_ASSERT(len == 0); + CPPUNIT_ASSERT_EQUAL( 0, len ); + +#if wxUSE_UNICODE + // check that when we convert a fixed number of characters we obtain the + // expected return value + CPPUNIT_ASSERT_EQUAL( 0, wxConvLibc.ToWChar(NULL, 0, "", 0) ); + CPPUNIT_ASSERT_EQUAL( 1, wxConvLibc.ToWChar(NULL, 0, "x", 1) ); + CPPUNIT_ASSERT_EQUAL( 2, wxConvLibc.ToWChar(NULL, 0, "x", 2) ); + CPPUNIT_ASSERT_EQUAL( 2, wxConvLibc.ToWChar(NULL, 0, "xy", 2) ); +#endif // wxUSE_UNICODE } void UnicodeTestCase::ConversionWithNULs() @@ -333,7 +346,7 @@ void UnicodeTestCase::ConversionUTF8() StringConversionData("\xc2", NULL), }; - wxCSConv conv(_T("utf-8")); + wxCSConv conv(wxT("utf-8")); for ( size_t n = 0; n < WXSIZEOF(utf8data); n++ ) { const StringConversionData& d = utf8data[n]; @@ -368,8 +381,8 @@ void UnicodeTestCase::ConversionUTF16() // terminate the string, this exposed a bug in our conversion code which // got confused in this case size_t len; - wxWCharBuffer wbuf(conv.cMB2WC("\x01\0\0B\0C" /* A macron BC */, 6, &len)); - CPPUNIT_ASSERT_EQUAL( (size_t)3, len ); + conv.cMB2WC("\x01\0\0B\0C" /* A macron BC */, 6, &len); + CPPUNIT_ASSERT_EQUAL( 3, len ); } void UnicodeTestCase::ConversionUTF32() @@ -392,9 +405,8 @@ void UnicodeTestCase::ConversionUTF32() } size_t len; - wxWCharBuffer wbuf(conv.cMB2WC("\0\0\x01\0\0\0\0B\0\0\0C" /* A macron BC */, - 12, &len)); - CPPUNIT_ASSERT_EQUAL( (size_t)3, len ); + conv.cMB2WC("\0\0\x01\0\0\0\0B\0\0\0C" /* A macron BC */, 12, &len); + CPPUNIT_ASSERT_EQUAL( 3, len ); } void UnicodeTestCase::IsConvOk() @@ -462,3 +474,4 @@ void UnicodeTestCase::Iteration() } } #endif // wxUSE_UNICODE +