]> granicus.if.org Git - icu/commitdiff
ICU-13437 Adding makeBogusString() utility function and returning bogus strings on...
authorShane Carr <shane@unicode.org>
Tue, 8 May 2018 21:52:26 +0000 (21:52 +0000)
committerShane Carr <shane@unicode.org>
Tue, 8 May 2018 21:52:26 +0000 (21:52 +0000)
X-SVN-Rev: 41361

icu4c/source/common/util.h
icu4c/source/i18n/number_fluent.cpp
icu4c/source/test/intltest/numbertest_api.cpp

index e78224906657f49e2981c8a39ae4205c0c1ac3ff..e197cab7882842a14d6fa11b9fb0dd9ca94ddbcb 100644 (file)
@@ -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.
      *
index ea4c10156a406ecbc05bd9a6fad0aff717444ea9..a5e7f894bafda6a06f6ad42c2bf9fbfa7f8f08d0 100644 (file)
@@ -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) {
index 95a5114ea31eca6ca794025a56488c560061736b..1295d29ce24c0503ee0586255d1e56557cc22768 100644 (file)
@@ -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;