From 849b2da11ddd7721a7d4e8321395c3feedcb5ab3 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Thu, 8 Mar 2012 19:29:24 +0000 Subject: [PATCH] ICU-9191 copy locale in cloned calendars X-SVN-Rev: 31603 --- icu4c/source/i18n/calendar.cpp | 2 ++ icu4c/source/test/intltest/caltest.cpp | 28 ++++++++++++++++++++++++++ icu4c/source/test/intltest/caltest.h | 2 ++ 3 files changed, 32 insertions(+) diff --git a/icu4c/source/i18n/calendar.cpp b/icu4c/source/i18n/calendar.cpp index 7f7cde40c28..202c64aad9a 100644 --- a/icu4c/source/i18n/calendar.cpp +++ b/icu4c/source/i18n/calendar.cpp @@ -783,6 +783,8 @@ Calendar::operator=(const Calendar &right) fWeekendCease = right.fWeekendCease; fWeekendCeaseMillis = right.fWeekendCeaseMillis; fNextStamp = right.fNextStamp; + uprv_strcpy(validLocale, right.validLocale); + uprv_strcpy(actualLocale, right.actualLocale); } return *this; diff --git a/icu4c/source/test/intltest/caltest.cpp b/icu4c/source/test/intltest/caltest.cpp index 21fc18cd6fd..018c90f961a 100644 --- a/icu4c/source/test/intltest/caltest.cpp +++ b/icu4c/source/test/intltest/caltest.cpp @@ -18,9 +18,15 @@ #include "unicode/udat.h" #include "unicode/ustring.h" #include "cstring.h" +#include "unicode/localpointer.h" #define mkcstr(U) u_austrcpy(calloc(8, u_strlen(U) + 1), U) +#define TEST_CHECK_STATUS {if (U_FAILURE(status)) {errln("%s:%d: Test failure. status=%s", \ + __FILE__, __LINE__, u_errorName(status)); return;}} + +#define TEST_ASSERT(expr) {if ((expr)==FALSE) {errln("%s:%d: Test failure \n", __FILE__, __LINE__);};} + // ***************************************************************************** // class CalendarTest // ***************************************************************************** @@ -265,6 +271,13 @@ void CalendarTest::runIndexedTest( int32_t index, UBool exec, const char* &name, TestSkippedWallTime(); } break; + case 30: + name = "TestCloneLocale"; + if(exec) { + logln("TestCloneLocale---"); logln(""); + TestCloneLocale(); + } + break; default: name = ""; break; } } @@ -2649,6 +2662,21 @@ void CalendarTest::TestSkippedWallTime(void) { } } +void CalendarTest::TestCloneLocale(void) { + UErrorCode status = U_ZERO_ERROR; + LocalPointer cal(Calendar::createInstance(TimeZone::getGMT()->clone(), + Locale::createFromName("en"), status)); + TEST_CHECK_STATUS; + Locale l0 = cal->getLocale(ULOC_VALID_LOCALE, status); + TEST_CHECK_STATUS; + LocalPointer cal2(cal->clone()); + Locale l = cal2->getLocale(ULOC_VALID_LOCALE, status); + if(l0!=l) { + errln("Error: cloned locale %s != original locale %s, status %s\n", l0.getName(), l.getName(), u_errorName(status)); + } + TEST_CHECK_STATUS; +} + #endif /* #if !UCONFIG_NO_FORMATTING */ //eof diff --git a/icu4c/source/test/intltest/caltest.h b/icu4c/source/test/intltest/caltest.h index c65ec725d3c..97408df5a36 100644 --- a/icu4c/source/test/intltest/caltest.h +++ b/icu4c/source/test/intltest/caltest.h @@ -235,6 +235,8 @@ public: // package void TestAmbiguousWallTimeAPIs(void); void TestRepeatedWallTime(void); void TestSkippedWallTime(void); + + void TestCloneLocale(void); }; #endif /* #if !UCONFIG_NO_FORMATTING */ -- 2.40.0