Correctly restore the old locale in wxXLocale functions.

In non-wxHAS_XLOCALE_SUPPORT case we didn't restore the original locale
correctly in wxStrtoxxx_l() functions as the return value of wxSetlocale() was
incorrectly assumed to be the old locale instead of the new one.

Fix this and also replace the macros used by the old code with a small helper
class, this simplifies the code and is less ugly.

Finally add a unit test which failed before these changes when the program ran
in any non-C locale but passes now.

Closes #13117.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67406 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2011-04-06 14:37:32 +00:00
parent fd1c361c33
commit cee25be77b
2 changed files with 71 additions and 38 deletions

View File

@@ -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();
@@ -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)
{