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