X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/08b89b0a244153b9f5bbb2f49c55ab0f7298122e..b331163bffd790ced0e88b73f44f86d49ccc48a5:/icuSources/test/intltest/quantityformattertest.cpp diff --git a/icuSources/test/intltest/quantityformattertest.cpp b/icuSources/test/intltest/quantityformattertest.cpp new file mode 100644 index 00000000..0167075f --- /dev/null +++ b/icuSources/test/intltest/quantityformattertest.cpp @@ -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 numfmt( + NumberFormat::createInstance(Locale::getEnglish(), status)); + LocalPointer 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(); +}