Home | History | Annotate | Download | only in intltest
      1 /*
      2 *******************************************************************************
      3 * Copyright (C) 2014-2016, International Business Machines Corporation and
      4 * others. All Rights Reserved.
      5 *******************************************************************************
      6 *
      7 * File QUANTITYFORMATTERTEST.CPP
      8 *
      9 ********************************************************************************
     10 */
     11 #include "cstring.h"
     12 #include "intltest.h"
     13 #include "quantityformatter.h"
     14 #include "simplepatternformatter.h"
     15 #include "unicode/numfmt.h"
     16 #include "unicode/plurrule.h"
     17 
     18 
     19 class QuantityFormatterTest : public IntlTest {
     20 public:
     21     QuantityFormatterTest() {
     22     }
     23     void TestBasic();
     24     void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
     25 private:
     26 };
     27 
     28 void QuantityFormatterTest::runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/) {
     29   TESTCASE_AUTO_BEGIN;
     30   TESTCASE_AUTO(TestBasic);
     31   TESTCASE_AUTO_END;
     32 }
     33 
     34 void QuantityFormatterTest::TestBasic() {
     35     UErrorCode status = U_ZERO_ERROR;
     36 #if !UCONFIG_NO_FORMATTING
     37     QuantityFormatter fmt;
     38     assertFalse(
     39             "adding bad variant",
     40             fmt.addIfAbsent("a bad variant", "{0} pounds", status));
     41     assertEquals("adding bad variant status", U_ILLEGAL_ARGUMENT_ERROR, status);
     42     status = U_ZERO_ERROR;
     43     assertFalse(
     44             "Adding bad pattern",
     45             fmt.addIfAbsent("other", "{0} {1} too many placeholders", status));
     46     assertEquals("adding bad pattern status", U_ILLEGAL_ARGUMENT_ERROR, status);
     47     status = U_ZERO_ERROR;
     48     assertFalse("isValid with no patterns", fmt.isValid());
     49     assertTrue(
     50             "Adding good pattern with no placeholders",
     51             fmt.addIfAbsent("zero", "no placeholder", status));
     52     assertTrue(
     53             "Adding good pattern",
     54             fmt.addIfAbsent("other", "{0} pounds", status));
     55     assertTrue("isValid with other", fmt.isValid());
     56     assertTrue(
     57             "Adding good pattern",
     58             fmt.addIfAbsent("one", "{0} pound", status));
     59 
     60     assertEquals(
     61             "getByVariant",
     62             fmt.getByVariant("bad variant")->getTextWithNoPlaceholders(),
     63             " pounds");
     64     assertEquals(
     65             "getByVariant",
     66             fmt.getByVariant("other")->getTextWithNoPlaceholders(),
     67             " pounds");
     68     assertEquals(
     69             "getByVariant",
     70             fmt.getByVariant("one")->getTextWithNoPlaceholders(),
     71             " pound");
     72     assertEquals(
     73             "getByVariant",
     74             fmt.getByVariant("few")->getTextWithNoPlaceholders(),
     75             " pounds");
     76 
     77     // Test copy constructor
     78     {
     79         QuantityFormatter copied(fmt);
     80         assertEquals(
     81                 "copied getByVariant",
     82                 copied.getByVariant("other")->getTextWithNoPlaceholders(),
     83                 " pounds");
     84         assertEquals(
     85                 "copied getByVariant",
     86                 copied.getByVariant("one")->getTextWithNoPlaceholders(),
     87                 " pound");
     88         assertEquals(
     89                 "copied getByVariant",
     90                 copied.getByVariant("few")->getTextWithNoPlaceholders(),
     91                 " pounds");
     92     }
     93 
     94     // Test assignment
     95     {
     96         QuantityFormatter assigned;
     97         assigned = fmt;
     98         assertEquals(
     99                 "assigned getByVariant",
    100                 assigned.getByVariant("other")->getTextWithNoPlaceholders(),
    101                 " pounds");
    102         assertEquals(
    103                 "assigned getByVariant",
    104                 assigned.getByVariant("one")->getTextWithNoPlaceholders(),
    105                 " pound");
    106         assertEquals(
    107                 "assigned getByVariant",
    108                 assigned.getByVariant("few")->getTextWithNoPlaceholders(),
    109                 " pounds");
    110     }
    111 
    112     // Test format.
    113     {
    114         LocalPointer<NumberFormat> numfmt(
    115                 NumberFormat::createInstance(Locale::getEnglish(), status));
    116         LocalPointer<PluralRules> plurrule(
    117                 PluralRules::forLocale("en", status));
    118         FieldPosition pos(FieldPosition::DONT_CARE);
    119         UnicodeString appendTo;
    120         assertEquals(
    121                 "format singular",
    122                 "1 pound",
    123                 fmt.format(
    124                         1,
    125                         *numfmt,
    126                         *plurrule,
    127                         appendTo,
    128                         pos,
    129                         status), TRUE);
    130         appendTo.remove();
    131         assertEquals(
    132                 "format plural",
    133                 "2 pounds",
    134                 fmt.format(
    135                         2,
    136                         *numfmt,
    137                         *plurrule,
    138                         appendTo,
    139                         pos,
    140                         status), TRUE);
    141     }
    142     fmt.reset();
    143     assertFalse("isValid after reset", fmt.isValid());
    144 #endif
    145     assertSuccess("", status);
    146 }
    147 
    148 extern IntlTest *createQuantityFormatterTest() {
    149     return new QuantityFormatterTest();
    150 }
    151