From f86a35be5536b37c3a1d667a043ad060ae1372c3 Mon Sep 17 00:00:00 2001 From: Shane Carr Date: Wed, 9 May 2018 02:26:14 +0000 Subject: [PATCH] ICU-13644 Returning bogus string when toSkeleton() fails. X-SVN-Rev: 41367 --- icu4c/source/i18n/number_fluent.cpp | 2 +- icu4c/source/test/intltest/numbertest_api.cpp | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/icu4c/source/i18n/number_fluent.cpp b/icu4c/source/i18n/number_fluent.cpp index 597df575870..0d3ee2d1238 100644 --- a/icu4c/source/i18n/number_fluent.cpp +++ b/icu4c/source/i18n/number_fluent.cpp @@ -320,7 +320,7 @@ Derived NumberFormatterSettings::macros(impl::MacroProps&& macros)&& { template UnicodeString NumberFormatterSettings::toSkeleton(UErrorCode& status) const { if (fMacros.copyErrorTo(status)) { - return {}; + return ICU_Utility::makeBogusString(); } return skeleton::generate(fMacros, status); } diff --git a/icu4c/source/test/intltest/numbertest_api.cpp b/icu4c/source/test/intltest/numbertest_api.cpp index 1295d29ce24..b8ddd44b9f3 100644 --- a/icu4c/source/test/intltest/numbertest_api.cpp +++ b/icu4c/source/test/intltest/numbertest_api.cpp @@ -2192,6 +2192,17 @@ void NumberFormatterApiTest::errors() { U_NUMBER_ARG_OUTOFBOUNDS_ERROR, status); + // Skeleton string + status = U_ZERO_ERROR; + UnicodeString output = lnf.toSkeleton(status); + assertEquals( + "Should fail on toSkeleton terminal method with correct error code", + U_NUMBER_ARG_OUTOFBOUNDS_ERROR, + status); + assertTrue( + "Terminal toSkeleton on error object should be bogus", + output.isBogus()); + // FieldPosition status = U_ZERO_ERROR; FieldPosition fp; @@ -2212,8 +2223,7 @@ void NumberFormatterApiTest::errors() { // Appendable status = U_ZERO_ERROR; - UnicodeString output; - UnicodeStringAppendable appendable(output); + UnicodeStringAppendable appendable(output.remove()); fn.appendTo(appendable, status); assertEquals( "Should fail on Appendable terminal method with correct error code",