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 );
     }
   
   
  
  
  

Reply via email to