Boolean DateFormatSymbols::TimeZoneStringsEqual( /* [in] */ IDateFormatSymbols *lhs, /* [in] */ IDateFormatSymbols *rhs) { if (lhs == rhs) { return TRUE; } if (lhs == NULL || rhs == NULL) { return FALSE; } DateFormatSymbols* l = (DateFormatSymbols*)lhs; DateFormatSymbols* r = (DateFormatSymbols*)rhs; // Quick check that may keep us from having to load the zone strings. // Note that different locales may have the same strings, so the opposite check isn't valid. if (l->mZoneStrings == NULL && r->mZoneStrings == NULL && Object::Equals(l->mLocale, r->mLocale)) { return TRUE; } // Make sure zone strings are loaded, then check. AutoPtr<ArrayOf<IArrayOf*> > lzs, rzs; lzs = l->InternalZoneStrings(); rzs = r->InternalZoneStrings(); return Arrays::DeepEquals(lzs, rzs); }
// UDAT_foo are for labels that are meant to be formatted as part of a date. // UDAT_STANDALONE_foo are for labels that are displayed separately from other date components. // For example, UDAT_SHORT_MONTHS in Catalan puts a preposition in front of the month but UDAT_STANDALONE_SHORT_MONTHS does not. const String DatePickerClient::generateDateLabels(UDateFormatSymbolType symbolType) { UErrorCode uerrStatus = U_ZERO_ERROR; DateFormatSymbols dateSymbols = DateFormatSymbols(uerrStatus); // constructor will never fail const UnicodeString* labels = 0; int32_t labelCount = 0; switch (symbolType) { // dateSymbols retain ownership of return values from getFoo calls case UDAT_STANDALONE_MONTHS: labelCount = 12; labels = dateSymbols.getMonths(labelCount, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE); break; case UDAT_STANDALONE_SHORT_MONTHS: labelCount = 12; labels = dateSymbols.getMonths(labelCount, DateFormatSymbols::STANDALONE, DateFormatSymbols::ABBREVIATED); break; case UDAT_SHORT_MONTHS: labelCount = 12; labels = dateSymbols.getMonths(labelCount, DateFormatSymbols::FORMAT, DateFormatSymbols::ABBREVIATED); break; case UDAT_STANDALONE_WEEKDAYS: labelCount = 8; // getWeekdays returns an array where the zeroeth element is empty; the first label is placed in index 1 labels = &(dateSymbols.getWeekdays(labelCount, DateFormatSymbols::STANDALONE, DateFormatSymbols::WIDE))[1]; // skip zeroeth element --labelCount; break; case UDAT_AM_PMS: labelCount = 2; labels = dateSymbols.getAmPmStrings(labelCount); break; default: ASSERT(0); break; } StringBuilder printedLabels; printedLabels.appendLiteral("["); for (int32_t i = 0; i < labelCount; ++i) { String escapedLabel = String(labels[i].getBuffer(), labels[i].length()).replace('\\', "\\\\").replace('\'', "\\'"); // TODO PR 243547: refactor escaping of strings for DatePickerClient and SelectPopupClient printedLabels.append("'" + escapedLabel + "'"); if (i < labelCount - 1) printedLabels.appendLiteral(","); } printedLabels.appendLiteral("]"); return printedLabels.toString(); }
void DateFormatMiscTests::test4117335() { //UnicodeString bc = "\u7d00\u5143\u524d"; UChar bcC [] = { 0x7D00, 0x5143, 0x524D }; UnicodeString bc(bcC, 3, 3); //UnicodeString ad = "\u897f\u66a6"; UChar adC [] = { 0x897F, 0x66A6 }; UnicodeString ad(adC, 2, 2); //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642"; UChar jstLongC [] = { 0x65e5, 0x672c, 0x6a19, 0x6e96, 0x6642 }; UChar jdtLongC [] = {0x65E5, 0x672C, 0x590F, 0x6642, 0x9593}; UnicodeString jstLong(jstLongC, 5, 5); UnicodeString jstShort = "JST"; UnicodeString tzID = "Asia/Tokyo"; UnicodeString jdtLong(jdtLongC, 5, 5); UnicodeString jdtShort = "JDT"; UErrorCode status = U_ZERO_ERROR; DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status); if(U_FAILURE(status)) { errcheckln(status, "Failure creating DateFormatSymbols, %s", u_errorName(status)); delete symbols; return; } failure(status, "new DateFormatSymbols"); int32_t eraCount = 0; const UnicodeString *eras = symbols->getEraNames(eraCount); logln(UnicodeString("BC = ") + eras[0]); if (eras[0] != bc) { errln("*** Should have been " + bc); //throw new Exception("Error in BC"); } logln(UnicodeString("AD = ") + eras[1]); if (eras[1] != ad) { errln("*** Should have been " + ad); //throw new Exception("Error in AD"); } int32_t rowCount, colCount; const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount); //don't hard code the index .. compute it. int32_t index = -1; for (int32_t i = 0; i < rowCount; ++i) { if (tzID == (zones[i][0])) { index = i; break; } } logln(UnicodeString("Long zone name = ") + zones[index][1]); if (zones[index][1] != jstLong) { errln("*** Should have been " + prettify(jstLong)+ " but it is: " + prettify(zones[index][1])); //throw new Exception("Error in long TZ name"); } logln(UnicodeString("Short zone name = ") + zones[index][2]); if (zones[index][2] != jstShort) { errln("*** Should have been " + prettify(jstShort) + " but it is: " + prettify(zones[index][2])); //throw new Exception("Error in short TZ name"); } logln(UnicodeString("Long zone name = ") + zones[index][3]); if (zones[index][3] != jdtLong) { errln("*** Should have been " + prettify(jstLong) + " but it is: " + prettify(zones[index][3])); //throw new Exception("Error in long TZ name"); } logln(UnicodeString("SHORT zone name = ") + zones[index][4]); if (zones[index][4] != jdtShort) { errln("*** Should have been " + prettify(jstShort)+ " but it is: " + prettify(zones[index][4])); //throw new Exception("Error in short TZ name"); } delete symbols; }
void DateFormatMiscTests::test4099975() { /** * Test Constructor SimpleDateFormat::SimpleDateFormat (const UnicodeString & pattern, * const DateFormatSymbols & formatData, UErrorCode & status ) * The DateFormatSymbols object is NOT adopted; Modifying the original DateFormatSymbols * should not change the SimpleDateFormat's behavior. */ UDate d = Calendar::getNow(); { UErrorCode status = U_ZERO_ERROR; DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); if(failure(status, "new DateFormatSymbols")) return; SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), *symbols, status); if(failure(status, "new SimpleDateFormat")) return; UnicodeString format0; format0 = df->format(d, format0); UnicodeString localizedPattern0; localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); failure(status, "df->toLocalizedPattern"); symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field UnicodeString format1; format1 = df->format(d, format1); if (format0 != format1) { errln(UnicodeString("Formats are different. format0: ") + format0 + UnicodeString("; format1: ") + format1); } UnicodeString localizedPattern1; localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); failure(status, "df->toLocalizedPattern"); if (localizedPattern0 != localizedPattern1) { errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0 + UnicodeString("; localizedPattern1: ") + localizedPattern1); } delete symbols; delete df; } /* * Test void SimpleDateFormat::setDateFormatSymbols ( const DateFormatSymbols & newFormatSymbols ) * Modifying the original DateFormatSymbols should not change the SimpleDateFormat's behavior. */ { UErrorCode status = U_ZERO_ERROR; DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); if(failure(status, "new DateFormatSymbols")) return; SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status); if(failure(status, "new SimpleDateFormat")) return; df->setDateFormatSymbols(*symbols); UnicodeString format0; format0 = df->format(d, format0); UnicodeString localizedPattern0; localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); failure(status, "df->toLocalizedPattern"); symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field UnicodeString format1; format1 = df->format(d, format1); if (format0 != format1) { errln(UnicodeString("Formats are different. format0: ") + format0 + UnicodeString("; format1: ") + format1); } UnicodeString localizedPattern1; localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); failure(status, "df->toLocalizedPattern"); if (localizedPattern0 != localizedPattern1) { errln(UnicodeString("Pattern has been changed. localizedPattern0: ") + localizedPattern0 + UnicodeString("; localizedPattern1: ") + localizedPattern1); } delete symbols; delete df; } //Test the pointer version of the constructor (and the adoptDateFormatSymbols method) { UErrorCode status = U_ZERO_ERROR; DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); if(failure(status, "new DateFormatSymbols")) return; SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), symbols, status); if(failure(status, "new SimpleDateFormat")) return; UnicodeString format0; format0 = df->format(d, format0); UnicodeString localizedPattern0; localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); failure(status, "df->toLocalizedPattern"); symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field UnicodeString format1; format1 = df->format(d, format1); if (format0 != format1) { errln(UnicodeString("Formats are different. format0: ") + format0 + UnicodeString("; format1: ") + format1); } UnicodeString localizedPattern1; localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); failure(status, "df->toLocalizedPattern"); if (localizedPattern0 == localizedPattern1) { errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0 + UnicodeString("; localizedPattern1: ") + localizedPattern1); } //delete symbols; the caller is no longer responsible for deleting the symbols delete df; } // { UErrorCode status = U_ZERO_ERROR; DateFormatSymbols* symbols = new DateFormatSymbols(Locale::getUS(), status); failure(status, "new DateFormatSymbols"); SimpleDateFormat *df = new SimpleDateFormat(UnicodeString("E hh:mm"), status); if(failure(status, "new SimpleDateFormat")) return; df-> adoptDateFormatSymbols(symbols); UnicodeString format0; format0 = df->format(d, format0); UnicodeString localizedPattern0; localizedPattern0 = df->toLocalizedPattern(localizedPattern0, status); failure(status, "df->toLocalizedPattern"); symbols->setLocalPatternChars(UnicodeString("abcdefghijklmonpqr")); // change value of field UnicodeString format1; format1 = df->format(d, format1); if (format0 != format1) { errln(UnicodeString("Formats are different. format0: ") + format0 + UnicodeString("; format1: ") + format1); } UnicodeString localizedPattern1; localizedPattern1 = df->toLocalizedPattern(localizedPattern1, status); failure(status, "df->toLocalizedPattern"); if (localizedPattern0 == localizedPattern1) { errln(UnicodeString("Pattern should have been changed. localizedPattern0: ") + localizedPattern0 + UnicodeString("; localizedPattern1: ") + localizedPattern1); } //delete symbols; the caller is no longer responsible for deleting the symbols delete df; } }
/* * @test @(#)bug4117335.java 1.1 3/5/98 * * @bug 4117335 */ void DateFormatMiscTests::test4117335() { //UnicodeString bc = "\u7d00\u5143\u524d"; UChar bcC [] = { 0x7D00, 0x5143, 0x524D }; UnicodeString bc(bcC, 3, 3); //UnicodeString ad = "\u897f\u66a6"; UChar adC [] = { 0x897F, 0x66A6 }; UnicodeString ad(adC, 2, 2); //UnicodeString jstLong = "\u65e5\u672c\u6a19\u6e96\u6642"; UChar jstLongC [] = { 0x65e5, 0x672c, 0x6a19, 0x6e96, 0x6642 }; UnicodeString jstLong(jstLongC, 5, 5); UnicodeString jstShort = "JST"; UErrorCode status = U_ZERO_ERROR; DateFormatSymbols *symbols = new DateFormatSymbols(Locale::getJapan(), status); if(U_FAILURE(status)) { errln("Failure creating DateFormatSymbols, %s", u_errorName(status)); delete symbols; return; } failure(status, "new DateFormatSymbols"); int32_t eraCount = 0; const UnicodeString *eras = symbols->getEras(eraCount); logln(UnicodeString("BC = ") + eras[0]); if (eras[0] != bc) { errln("*** Should have been " + bc); //throw new Exception("Error in BC"); } logln(UnicodeString("AD = ") + eras[1]); if (eras[1] != ad) { errln("*** Should have been " + ad); //throw new Exception("Error in AD"); } int32_t rowCount, colCount; const UnicodeString **zones = symbols->getZoneStrings(rowCount, colCount); logln(UnicodeString("Long zone name = ") + zones[24][1]); if (zones[24][1] != jstLong) { errln("*** Should have been " + jstLong); //throw new Exception("Error in long TZ name"); } logln(UnicodeString("Short zone name = ") + zones[24][2]); if (zones[24][2] != jstShort) { errln("*** Should have been " + jstShort); //throw new Exception("Error in short TZ name"); } logln(UnicodeString("Long zone name = ") + zones[24][3]); if (zones[24][3] != jstLong) { errln("*** Should have been " + jstLong); //throw new Exception("Error in long TZ name"); } logln(UnicodeString("SHORT zone name = ") + zones[24][4]); if (zones[24][4] != jstShort) { errln("*** Should have been " + jstShort); //throw new Exception("Error in short TZ name"); } delete symbols; }