From: Shane Carr Date: Tue, 8 May 2018 21:52:26 +0000 (+0000) Subject: ICU-13437 Adding makeBogusString() utility function and returning bogus strings on... X-Git-Tag: release-62-rc~119 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3275a9c5d39e81b0ae4961872735ea10a35426c0;p=icu ICU-13437 Adding makeBogusString() utility function and returning bogus strings on failed FormattedNumber toString() calls. X-SVN-Rev: 41361 --- diff --git a/icu4c/source/common/util.h b/icu4c/source/common/util.h index e7822490665..e197cab7882 100644 --- a/icu4c/source/common/util.h +++ b/icu4c/source/common/util.h @@ -46,6 +46,13 @@ class U_COMMON_API ICU_Utility /* not : public UObject because all methods are s int32_t radix = 10, int32_t minDigits = 1); + /** Returns a bogus UnicodeString by value. */ + static inline UnicodeString makeBogusString() { + UnicodeString result; + result.setToBogus(); + return result; + } + /** * Return true if the character is NOT printable ASCII. * diff --git a/icu4c/source/i18n/number_fluent.cpp b/icu4c/source/i18n/number_fluent.cpp index ea4c10156a4..a5e7f894baf 100644 --- a/icu4c/source/i18n/number_fluent.cpp +++ b/icu4c/source/i18n/number_fluent.cpp @@ -12,6 +12,7 @@ #include "umutex.h" #include "number_skeletons.h" #include "number_utypes.h" +#include "util.h" using namespace icu; using namespace icu::number; @@ -745,29 +746,24 @@ int32_t LocalizedNumberFormatter::getCallCount() const { } UnicodeString FormattedNumber::toString() const { - if (fResults == nullptr) { - return {}; - } - return fResults->string.toUnicodeString(); + UErrorCode localStatus = U_ZERO_ERROR; + return toString(localStatus); } UnicodeString FormattedNumber::toString(UErrorCode& status) const { if (U_FAILURE(status)) { - return {}; + return ICU_Utility::makeBogusString(); } if (fResults == nullptr) { status = fErrorCode; - return {}; + return ICU_Utility::makeBogusString(); } return fResults->string.toUnicodeString(); } Appendable& FormattedNumber::appendTo(Appendable& appendable) { - if (fResults == nullptr) { - return appendable; - } - appendable.appendString(fResults->string.chars(), fResults->string.length()); - return appendable; + UErrorCode localStatus = U_ZERO_ERROR; + return appendTo(appendable, localStatus); } Appendable& FormattedNumber::appendTo(Appendable& appendable, UErrorCode& status) { diff --git a/icu4c/source/test/intltest/numbertest_api.cpp b/icu4c/source/test/intltest/numbertest_api.cpp index 95a5114ea31..1295d29ce24 100644 --- a/icu4c/source/test/intltest/numbertest_api.cpp +++ b/icu4c/source/test/intltest/numbertest_api.cpp @@ -2227,6 +2227,9 @@ void NumberFormatterApiTest::errors() { "Should fail on UnicodeString terminal method with correct error code", U_NUMBER_ARG_OUTOFBOUNDS_ERROR, status); + assertTrue( + "Terminal UnicodeString on error object should be bogus", + output.isBogus()); // CopyErrorTo status = U_ZERO_ERROR;