X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a29cce78aa6275dc63c58fdcbee4d13879dfc89f..bbd55ff9564dcaf1a5d2ee93d789c4d656baabef:/tests/mbconv/convautotest.cpp diff --git a/tests/mbconv/convautotest.cpp b/tests/mbconv/convautotest.cpp index 4bec78a271..45fb79e0d5 100644 --- a/tests/mbconv/convautotest.cpp +++ b/tests/mbconv/convautotest.cpp @@ -17,13 +17,11 @@ #pragma hdrstop #endif -#if wxUSE_WCHAR_T - -#ifndef WX_PRECOMP -#endif // WX_PRECOMP - #include "wx/convauto.h" +#include "wx/mstream.h" +#include "wx/txtstrm.h" + // ---------------------------------------------------------------------------- // test class // ---------------------------------------------------------------------------- @@ -43,6 +41,12 @@ private: CPPUNIT_TEST( UTF16LE ); CPPUNIT_TEST( UTF16BE ); CPPUNIT_TEST( UTF8 ); + CPPUNIT_TEST( StreamUTF8NoBOM ); + CPPUNIT_TEST( StreamUTF8 ); + CPPUNIT_TEST( StreamUTF16LE ); + CPPUNIT_TEST( StreamUTF16BE ); + CPPUNIT_TEST( StreamUTF32LE ); + CPPUNIT_TEST( StreamUTF32BE ); CPPUNIT_TEST_SUITE_END(); // real test function: check that converting the src multibyte string to @@ -57,13 +61,26 @@ private: void UTF16LE(); void UTF16BE(); void UTF8(); + + // test whether two lines of text are converted properly from a stream + void TestTextStream(const char *src, + size_t srclength, + const wxString& line1, + const wxString& line2); + + void StreamUTF8NoBOM(); + void StreamUTF8(); + void StreamUTF16LE(); + void StreamUTF16BE(); + void StreamUTF32LE(); + void StreamUTF32BE(); }; // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION(ConvAutoTestCase); // also include in it's own registry so that these tests can be run alone -CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConvAutoTestCase, "ConvAuto"); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConvAutoTestCase, "ConvAutoTestCase"); // ---------------------------------------------------------------------------- // tests @@ -78,37 +95,37 @@ void ConvAutoTestCase::TestFirstChar(const char *src, wchar_t wch) void ConvAutoTestCase::Empty() { - TestFirstChar("", _T('\0')); + TestFirstChar("", wxT('\0')); } void ConvAutoTestCase::Short() { - TestFirstChar("1", _T('1')); + TestFirstChar("1", wxT('1')); } void ConvAutoTestCase::None() { - TestFirstChar("Hello world", _T('H')); + TestFirstChar("Hello world", wxT('H')); } void ConvAutoTestCase::UTF32LE() { - TestFirstChar("\xff\xfe\0\0A\0\0\0", _T('A')); + TestFirstChar("\xff\xfe\0\0A\0\0\0", wxT('A')); } void ConvAutoTestCase::UTF32BE() { - TestFirstChar("\0\0\xfe\xff\0\0\0B", _T('B')); + TestFirstChar("\0\0\xfe\xff\0\0\0B", wxT('B')); } void ConvAutoTestCase::UTF16LE() { - TestFirstChar("\xff\xfeZ\0", _T('Z')); + TestFirstChar("\xff\xfeZ\0", wxT('Z')); } void ConvAutoTestCase::UTF16BE() { - TestFirstChar("\xfe\xff\0Y", _T('Y')); + TestFirstChar("\xfe\xff\0Y", wxT('Y')); } void ConvAutoTestCase::UTF8() @@ -118,5 +135,73 @@ void ConvAutoTestCase::UTF8() #endif } -#endif // wxUSE_WCHAR_T +void ConvAutoTestCase::TestTextStream(const char *src, + size_t srclength, + const wxString& line1, + const wxString& line2) +{ + wxMemoryInputStream instream(src, srclength); + wxTextInputStream text(instream); + + CPPUNIT_ASSERT_EQUAL( line1, text.ReadLine() ); + CPPUNIT_ASSERT_EQUAL( line2, text.ReadLine() ); +} + +// the first line of the teststring used in the following functions is an +// 'a' followed by a Japanese hiragana A (u+3042). +// The second line is a single Greek beta (u+03B2). There is no blank line +// at the end. + +namespace +{ + +const wxString line1 = wxString::FromUTF8("a\xe3\x81\x82"); +const wxString line2 = wxString::FromUTF8("\xce\xb2"); + +} // anonymous namespace + +void ConvAutoTestCase::StreamUTF8NoBOM() +{ + // currently this test doesn't work because without the BOM wxConvAuto + // decides that the string is in Latin-1 after finding the first (but not + // the two subsequent ones which are part of the same UTF-8 sequence!) + // 8-bit character + // + // FIXME: we need to fix this at wxTextInputStream level, see #11570 +#if 0 + TestTextStream("\x61\xE3\x81\x82\x0A\xCE\xB2", + 7, line1, line2); +#endif +} + +void ConvAutoTestCase::StreamUTF8() +{ + TestTextStream("\xEF\xBB\xBF\x61\xE3\x81\x82\x0A\xCE\xB2", + 10, line1, line2); +} + +void ConvAutoTestCase::StreamUTF16LE() +{ + TestTextStream("\xFF\xFE\x61\x00\x42\x30\x0A\x00\xB2\x03", + 10, line1, line2); +} +void ConvAutoTestCase::StreamUTF16BE() +{ + TestTextStream("\xFE\xFF\x00\x61\x30\x42\x00\x0A\x03\xB2", + 10, line1, line2); +} + +void ConvAutoTestCase::StreamUTF32LE() +{ + TestTextStream("\xFF\xFE\0\0\x61\x00\0\0\x42\x30\0\0\x0A" + "\x00\0\0\xB2\x03\0\0", + 20, line1, line2); +} + +void ConvAutoTestCase::StreamUTF32BE() +{ + TestTextStream("\0\0\xFE\xFF\0\0\x00\x61\0\0\x30\x42\0\0\x00\x0A" + "\0\0\x03\xB2", + 20, line1, line2); +}