carnold 2005/02/10 13:24:20
Modified: tests/src/helpers datetimedateformattestcase.cpp
Log:
LOGCXX-11: Rework test7 and 8 to handle missing france or us locale
Revision Changes Path
1.6 +45 -36
logging-log4cxx/tests/src/helpers/datetimedateformattestcase.cpp
Index: datetimedateformattestcase.cpp
===================================================================
RCS file:
/home/cvs/logging-log4cxx/tests/src/helpers/datetimedateformattestcase.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- datetimedateformattestcase.cpp 11 Dec 2004 04:53:29 -0000 1.5
+++ datetimedateformattestcase.cpp 10 Feb 2005 21:24:20 -0000 1.6
@@ -26,8 +26,8 @@
using namespace log4cxx::helpers;
#if defined(_WIN32)
-#define LOCALE_US "us"
-#define LOCALE_FR "france"
+#define LOCALE_US "English_us"
+#define LOCALE_FR "French_france"
#else
#define LOCALE_US "en_US"
#define LOCALE_FR "fr_FR"
@@ -39,6 +39,32 @@
#endif
+class LocaleChanger {
+public:
+ LocaleChanger(const char* locale) {
+ try {
+ std::locale newLocale(locale);
+ initial = std::locale::global(newLocale);
+ effective = true;
+ } catch(std::exception&) {
+ }
+ }
+
+ ~LocaleChanger() {
+ if (effective) {
+ std::locale::global(initial);
+ }
+ }
+ inline bool isEffective() { return effective; }
+
+private:
+ LocaleChanger(LocaleChanger&);
+ LocaleChanger& operator=(LocaleChanger&);
+ std::locale initial;
+ bool effective;
+};
+
+
/**
Unit test [EMAIL PROTECTED] DateTimeDateFormat}.
@author Curt Arnold
@@ -53,9 +79,7 @@
CPPUNIT_TEST( test4 );
CPPUNIT_TEST( test5 );
CPPUNIT_TEST( test6 );
-#if !defined(_WIN32)
CPPUNIT_TEST( test7 );
-#endif
CPPUNIT_TEST( test8 );
CPPUNIT_TEST_SUITE_END();
@@ -161,50 +185,35 @@
LOG4CXX_STR("03 Jul 2004 00:00:00,000"));
}
+
/** Check that format is locale sensitive. */
void test7()
{
apr_time_t mars11 = MICROSECONDS_PER_DAY * 12519;
- std::locale fr(LOCALE_FR);
- std::locale initialDefault = std::locale::global(fr);
- LogString formatted;
- Pool p;
- try
- {
- DateTimeDateFormat formatter;
- formatter.setTimeZone(TimeZone::getGMT());
- formatter.format(formatted, mars11, p);
- }
- catch ( std::exception& ex )
- {
- std::locale::global(initialDefault);
- throw ex;
+ LocaleChanger localeChange(LOCALE_FR);
+ if (localeChange.isEffective()) {
+ LogString formatted;
+ Pool p;
+ DateTimeDateFormat formatter;
+ formatter.setTimeZone(TimeZone::getGMT());
+ formatter.format(formatted, mars11, p);
+ CPPUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("11 avr. 2004
00:00:00,000"), formatted );
}
- std::locale::global(initialDefault);
- CPPUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("11 avr 2004
00:00:00,000"), formatted );
}
/** Check that format is locale sensitive. */
void test8()
{
apr_time_t march12 = MICROSECONDS_PER_DAY * 12519;
- std::locale en(LOCALE_US);
- std::locale initialDefault = std::locale::global(en);
- LogString formatted;
- Pool p;
- try
- {
- DateTimeDateFormat formatter;
- formatter.setTimeZone(TimeZone::getGMT());
- formatter.format(formatted, march12, p);
- }
- catch ( std::exception& ex )
- {
- std::locale::global(initialDefault);
- throw ex;
+ LocaleChanger localeChange(LOCALE_US);
+ if (localeChange.isEffective()) {
+ LogString formatted;
+ Pool p;
+ DateTimeDateFormat formatter;
+ formatter.setTimeZone(TimeZone::getGMT());
+ formatter.format(formatted, march12, p);
+ CPPUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("11 Apr 2004
00:00:00,000"), formatted );
}
- std::locale::global(initialDefault);
- CPPUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("11 Apr 2004
00:00:00,000"), formatted );
}