void MBConvTestCase::LibcTests()
{
- // There isn't a locale that all systems support (except "C"), so leave
- // this one disabled for non-Windows systems for the moment, until
- // a solution can be found.
-#ifdef __WXMSW__
-
-#ifdef __WXMSW__
- setlocale( LC_ALL, "English_United States.1252" );
- const unsigned char* systemMB = CP1252;
- size_t systemMB_size = sizeof(CP1252);
- const unsigned char* systemMB_utf8 = CP1252_utf8;
- size_t systemMB_utf8_size = sizeof(CP1252_utf8);
-#else
- setlocale( LC_ALL, "en_US.iso8859-1" );
- const unsigned char* systemMB = iso8859_1;
- size_t systemMB_size = sizeof(iso8859_1);
- const unsigned char* systemMB_utf8 = iso8859_1_utf8;
- size_t systemMB_utf8_size = sizeof(iso8859_1_utf8);
-#endif
+ // The locale name are OS-dependent so this test is done only under Windows
+ // when using MSVC (surprisingly it fails with MinGW, even though it's
+ // supposed to use the same CRT -- no idea why and unfortunately gdb is too
+ // flaky to debug it)
+#ifdef __VISUALC__
+ LocaleSetter loc("English_United States.1252");
+
wxMBConvLibc convLibc;
TestCoder(
- (const char*)systemMB,
- systemMB_size,
- (const char*)systemMB_utf8,
- systemMB_utf8_size,
+ (const char*)CP1252,
+ sizeof(CP1252),
+ (const char*)CP1252_utf8,
+ sizeof(CP1252_utf8),
convLibc,
1
);
-
-#endif // __WXMSW__
+#endif // __VISUALC__
}
// verifies that the specified mb sequences decode to the specified wc sequence
extern bool IsNetworkAvailable();
-// helper class setting the locale to "C" for its lifetime
-class CLocaleSetter
+// Helper class setting the locale to the given one for its lifetime.
+class LocaleSetter
{
public:
- CLocaleSetter() : m_locOld(setlocale(LC_ALL, "C")) { }
- ~CLocaleSetter() { setlocale(LC_ALL, m_locOld); }
+ LocaleSetter(const char *loc) : m_locOld(setlocale(LC_ALL, loc)) { }
+ ~LocaleSetter() { setlocale(LC_ALL, m_locOld); }
private:
const char * const m_locOld;
+
+ wxDECLARE_NO_COPY_CLASS(LocaleSetter);
+};
+
+// An even simpler helper for setting the locale to "C" one during its lifetime.
+class CLocaleSetter : private LocaleSetter
+{
+public:
+ CLocaleSetter() : LocaleSetter("C") { }
+
+private:
wxDECLARE_NO_COPY_CLASS(CLocaleSetter);
};