+void IntlTestDecimalFormatSymbols::testLastResortData() {
+ IcuTestErrorCode errorCode(*this, "testLastResortData");
+ LocalPointer<DecimalFormatSymbols> lastResort(
+ DecimalFormatSymbols::createWithLastResortData(errorCode));
+ if(errorCode.logIfFailureAndReset("DecimalFormatSymbols::createWithLastResortData() failed")) {
+ return;
+ }
+ DecimalFormatSymbols root(Locale::getRoot(), errorCode);
+ if(errorCode.logDataIfFailureAndReset("DecimalFormatSymbols(root) failed")) {
+ return;
+ }
+ // Note: It is not necessary that the last resort data matches the root locale,
+ // but it seems weird if most symbols did not match.
+ // Also, one purpose for calling operator==() is to find uninitialized memory in a debug build.
+ if(*lastResort == root) {
+ errln("DecimalFormatSymbols last resort data unexpectedly matches root");
+ }
+ // Here we adjust for expected differences.
+ assertEquals("last-resort grouping separator",
+ "", lastResort->getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol));
+ lastResort->setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, ",");
+ assertEquals("last-resort monetary grouping separator",
+ "", lastResort->getSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol));
+ lastResort->setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, ",");
+ assertEquals("last-resort NaN",
+ UnicodeString((UChar)0xfffd), lastResort->getSymbol(DecimalFormatSymbols::kNaNSymbol));
+ lastResort->setSymbol(DecimalFormatSymbols::kNaNSymbol, "NaN");
+ // Check that now all of the symbols match root.
+ for(int32_t i = 0; i < DecimalFormatSymbols::kFormatSymbolCount; ++i) {
+ DecimalFormatSymbols::ENumberFormatSymbol e = (DecimalFormatSymbols::ENumberFormatSymbol)i;
+ assertEquals("last-resort symbol vs. root", root.getSymbol(e), lastResort->getSymbol(e));
+ }
+ // Also, the CurrencySpacing patterns are empty in the last resort instance,
+ // but not in root.
+ Verify(1234567.25, "#,##0.##", *lastResort, "1,234,567.25");
+}
+
+void IntlTestDecimalFormatSymbols::Verify(double value, const UnicodeString& pattern,
+ const DecimalFormatSymbols &sym, const UnicodeString& expected){