X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dad013ac0177be398b26236d5aa606a32d0a3356..3a1ec1d5dcd568d25f440f5c70ae853045cffdb1:/tests/xlocale/xlocale.cpp diff --git a/tests/xlocale/xlocale.cpp b/tests/xlocale/xlocale.cpp index d5cf8007c8..4c6f6c8067 100644 --- a/tests/xlocale/xlocale.cpp +++ b/tests/xlocale/xlocale.cpp @@ -39,11 +39,13 @@ public: private: CPPUNIT_TEST_SUITE( XLocaleTestCase ); CPPUNIT_TEST( TestCtor ); + CPPUNIT_TEST( PreserveLocale ); CPPUNIT_TEST( TestCtypeFunctions ); CPPUNIT_TEST( TestStdlibFunctions ); CPPUNIT_TEST_SUITE_END(); void TestCtor(); + void PreserveLocale(); void TestCtypeFunctions(); void TestStdlibFunctions(); @@ -56,7 +58,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( XLocaleTestCase ); -// 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( XLocaleTestCase, "XLocaleTestCase" ); @@ -81,6 +83,16 @@ void XLocaleTestCase::TestCtor() #endif } +void XLocaleTestCase::PreserveLocale() +{ + // Test that using locale functions doesn't change the global C locale. + const wxString origLocale(setlocale(LC_ALL, NULL)); + + wxStrtod_l(wxT("1.234"), NULL, wxCLocale); + + CPPUNIT_ASSERT_EQUAL( origLocale, setlocale(LC_ALL, NULL) ); +} + // test the ctype functions with the given locale void XLocaleTestCase::TestCtypeFunctionsWith(const wxXLocale& loc) { @@ -202,12 +214,12 @@ void XLocaleTestCase::TestStdlibFunctionsWith(const wxXLocale& loc) CPPUNIT_ASSERT_EQUAL( 0x60c0c0, wxStrtol_l(endptr, &endptr, 16, loc) ); CPPUNIT_ASSERT_EQUAL( -0x374D20, wxStrtol_l(endptr, &endptr, 2, loc) ); CPPUNIT_ASSERT_EQUAL( 0x6fffff, wxStrtol_l(endptr, NULL, 0, loc) ); - + // strtoul - // NOTE: 3147483647 and 0x12A05F200 are greater than LONG_MAX (on 32bit machines) but + // NOTE: 3147483647 and 0xEE6B2800 are greater than LONG_MAX (on 32bit machines) but // smaller than ULONG_MAX - CPPUNIT_ASSERT_EQUAL( (unsigned long)3147483647, wxStrtoul_l(wxT("3147483647"), NULL, 0, loc) ); - CPPUNIT_ASSERT_EQUAL( (unsigned long)0x12A05F200, wxStrtoul_l(wxT("0x12A05F200"), NULL, 0, loc) ); + CPPUNIT_ASSERT_EQUAL( 3147483647ul, wxStrtoul_l(wxT("3147483647"), NULL, 0, loc) ); + CPPUNIT_ASSERT_EQUAL( 0xEE6B2800ul, wxStrtoul_l(wxT("0xEE6B2800"), NULL, 0, loc) ); // TODO: test for "failure" behaviour of the functions above } @@ -246,7 +258,7 @@ void XLocaleTestCase::TestCtypeFunctions() CPPUNIT_ASSERT( locIT.IsOk() ); // doesn't make sense to continue otherwise TestCtypeFunctionsWith(locIT); - + CPPUNIT_ASSERT( wxIsalpha_l(wxT('\xe1'), locIT) ); CPPUNIT_ASSERT( wxIslower_l(wxT('\xe1'), locIT) ); #endif @@ -284,11 +296,11 @@ void XLocaleTestCase::TestStdlibFunctions() // comma as decimal point: CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locFR) ); - + // space as thousands separator is not recognized by wxStrtod_l(): CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1 234,5"), NULL, locFR) ); - - + + // italian if (!wxLocale::IsAvailable(wxLANGUAGE_ITALIAN)) @@ -301,7 +313,7 @@ void XLocaleTestCase::TestStdlibFunctions() // comma as decimal point: CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locIT) ); - + // dot as thousands separator is not recognized by wxStrtod_l(): CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1.234,5"), NULL, locIT) ); #endif