]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/intltest/quantityformattertest.cpp
ICU-551.24.tar.gz
[apple/icu.git] / icuSources / test / intltest / quantityformattertest.cpp
diff --git a/icuSources/test/intltest/quantityformattertest.cpp b/icuSources/test/intltest/quantityformattertest.cpp
new file mode 100644 (file)
index 0000000..0167075
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+*******************************************************************************
+* Copyright (C) 2014, International Business Machines Corporation and         *
+* others. All Rights Reserved.                                                *
+*******************************************************************************
+*
+* File QUANTITYFORMATTERTEST.CPP
+*
+********************************************************************************
+*/
+#include "cstring.h"
+#include "intltest.h"
+#include "quantityformatter.h"
+#include "simplepatternformatter.h"
+#include "unicode/numfmt.h"
+#include "unicode/plurrule.h"
+
+
+class QuantityFormatterTest : public IntlTest {
+public:
+    QuantityFormatterTest() {
+    }
+    void TestBasic();
+    void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+private:
+};
+
+void QuantityFormatterTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
+  TESTCASE_AUTO_BEGIN;
+  TESTCASE_AUTO(TestBasic);
+  TESTCASE_AUTO_END;
+}
+
+void QuantityFormatterTest::TestBasic() {
+    UErrorCode status = U_ZERO_ERROR;
+#if !UCONFIG_NO_FORMATTING
+    QuantityFormatter fmt;
+    assertFalse(
+            "adding bad variant",
+            fmt.add("a bad variant", "{0} pounds", status));
+    assertEquals("adding bad variant status", U_ILLEGAL_ARGUMENT_ERROR, status);
+    status = U_ZERO_ERROR;
+    assertFalse(
+            "Adding bad pattern",
+            fmt.add("other", "{0} {1} too many placeholders", status));
+    assertEquals("adding bad pattern status", U_ILLEGAL_ARGUMENT_ERROR, status);
+    status = U_ZERO_ERROR;
+    assertFalse("isValid with no patterns", fmt.isValid());
+    assertTrue(
+            "Adding good pattern with no placeholders",
+            fmt.add("other", "no placeholder", status));
+    assertTrue(
+            "Adding good pattern",
+            fmt.add("other", "{0} pounds", status));
+    assertTrue("isValid with other", fmt.isValid());
+    assertTrue(
+            "Adding good pattern",
+            fmt.add("one", "{0} pound", status));
+
+    assertEquals(
+            "getByVariant",
+            fmt.getByVariant("bad variant")->getPatternWithNoPlaceholders(),
+            " pounds");
+    assertEquals(
+            "getByVariant",
+            fmt.getByVariant("other")->getPatternWithNoPlaceholders(),
+            " pounds");
+    assertEquals(
+            "getByVariant",
+            fmt.getByVariant("one")->getPatternWithNoPlaceholders(),
+            " pound");
+    assertEquals(
+            "getByVariant",
+            fmt.getByVariant("few")->getPatternWithNoPlaceholders(),
+            " pounds");
+
+    // Test copy constructor
+    {
+        QuantityFormatter copied(fmt);
+        assertEquals(
+                "copied getByVariant",
+                copied.getByVariant("other")->getPatternWithNoPlaceholders(),
+                " pounds");
+        assertEquals(
+                "copied getByVariant",
+                copied.getByVariant("one")->getPatternWithNoPlaceholders(),
+                " pound");
+        assertEquals(
+                "copied getByVariant",
+                copied.getByVariant("few")->getPatternWithNoPlaceholders(),
+                " pounds");
+    }
+        
+    // Test assignment
+    {
+        QuantityFormatter assigned;
+        assigned = fmt;
+        assertEquals(
+                "assigned getByVariant",
+                assigned.getByVariant("other")->getPatternWithNoPlaceholders(),
+                " pounds");
+        assertEquals(
+                "assigned getByVariant",
+                assigned.getByVariant("one")->getPatternWithNoPlaceholders(),
+                " pound");
+        assertEquals(
+                "assigned getByVariant",
+                assigned.getByVariant("few")->getPatternWithNoPlaceholders(),
+                " pounds");
+    }
+
+    // Test format.
+    {
+        LocalPointer<NumberFormat> numfmt(
+                NumberFormat::createInstance(Locale::getEnglish(), status));
+        LocalPointer<PluralRules> plurrule(
+                PluralRules::forLocale("en", status));
+        FieldPosition pos(FieldPosition::DONT_CARE);
+        UnicodeString appendTo;
+        assertEquals(
+                "format singular",
+                "1 pound",
+                fmt.format(
+                        1,
+                        *numfmt,
+                        *plurrule,
+                        appendTo,
+                        pos,
+                        status), TRUE);
+        appendTo.remove();
+        assertEquals(
+                "format plural",
+                "2 pounds",
+                fmt.format(
+                        2,
+                        *numfmt,
+                        *plurrule,
+                        appendTo,
+                        pos,
+                        status), TRUE);
+    }
+    fmt.reset();
+    assertFalse("isValid after reset", fmt.isValid());
+#endif
+    assertSuccess("", status);
+}
+
+extern IntlTest *createQuantityFormatterTest() {
+    return new QuantityFormatterTest();
+}