You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
5.2 KiB
160 lines
5.2 KiB
// © 2016 and later: Unicode, Inc. and others.
|
|
// License & terms of use: http://www.unicode.org/copyright.html
|
|
/*
|
|
*******************************************************************************
|
|
* Copyright (C) 2014-2016, International Business Machines Corporation and
|
|
* others. All Rights Reserved.
|
|
*******************************************************************************
|
|
*
|
|
* File QUANTITYFORMATTERTEST.CPP
|
|
*
|
|
********************************************************************************
|
|
*/
|
|
#include "cstring.h"
|
|
#include "intltest.h"
|
|
#include "quantityformatter.h"
|
|
#include "unicode/simpleformatter.h"
|
|
#include "unicode/numfmt.h"
|
|
#include "unicode/plurrule.h"
|
|
|
|
#define ASSERT_OK(status) UPRV_BLOCK_MACRO_BEGIN { \
|
|
if(U_FAILURE(status)) { \
|
|
errcheckln(status, #status " = %s @ %s:%d", u_errorName(status), __FILE__, __LINE__); \
|
|
return; \
|
|
} \
|
|
} UPRV_BLOCK_MACRO_END
|
|
|
|
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.addIfAbsent("a bad variant", "{0} pounds", status));
|
|
assertEquals("adding bad variant status", (int32_t)U_ILLEGAL_ARGUMENT_ERROR, status);
|
|
status = U_ZERO_ERROR;
|
|
assertFalse(
|
|
"Adding bad pattern",
|
|
fmt.addIfAbsent("other", "{0} {1} too many placeholders", status));
|
|
assertEquals("adding bad pattern status", (int32_t)U_ILLEGAL_ARGUMENT_ERROR, status);
|
|
status = U_ZERO_ERROR;
|
|
assertFalse("isValid with no patterns", fmt.isValid());
|
|
assertTrue(
|
|
"Adding good pattern with no placeholders",
|
|
fmt.addIfAbsent("zero", "no placeholder", status));
|
|
assertTrue(
|
|
"Adding good pattern",
|
|
fmt.addIfAbsent("other", "{0} pounds", status));
|
|
assertTrue("isValid with other", fmt.isValid());
|
|
assertTrue(
|
|
"Adding good pattern",
|
|
fmt.addIfAbsent("one", "{0} pound", status));
|
|
|
|
assertEquals(
|
|
"getByVariant",
|
|
fmt.getByVariant("bad variant")->getTextWithNoArguments(),
|
|
" pounds");
|
|
assertEquals(
|
|
"getByVariant",
|
|
fmt.getByVariant("other")->getTextWithNoArguments(),
|
|
" pounds");
|
|
assertEquals(
|
|
"getByVariant",
|
|
fmt.getByVariant("one")->getTextWithNoArguments(),
|
|
" pound");
|
|
assertEquals(
|
|
"getByVariant",
|
|
fmt.getByVariant("few")->getTextWithNoArguments(),
|
|
" pounds");
|
|
|
|
// Test copy constructor
|
|
{
|
|
QuantityFormatter copied(fmt);
|
|
assertEquals(
|
|
"copied getByVariant",
|
|
copied.getByVariant("other")->getTextWithNoArguments(),
|
|
" pounds");
|
|
assertEquals(
|
|
"copied getByVariant",
|
|
copied.getByVariant("one")->getTextWithNoArguments(),
|
|
" pound");
|
|
assertEquals(
|
|
"copied getByVariant",
|
|
copied.getByVariant("few")->getTextWithNoArguments(),
|
|
" pounds");
|
|
}
|
|
|
|
// Test assignment
|
|
{
|
|
QuantityFormatter assigned;
|
|
assigned = fmt;
|
|
assertEquals(
|
|
"assigned getByVariant",
|
|
assigned.getByVariant("other")->getTextWithNoArguments(),
|
|
" pounds");
|
|
assertEquals(
|
|
"assigned getByVariant",
|
|
assigned.getByVariant("one")->getTextWithNoArguments(),
|
|
" pound");
|
|
assertEquals(
|
|
"assigned getByVariant",
|
|
assigned.getByVariant("few")->getTextWithNoArguments(),
|
|
" pounds");
|
|
}
|
|
|
|
// Test format.
|
|
{
|
|
LocalPointer<NumberFormat> numfmt(
|
|
NumberFormat::createInstance(Locale::getEnglish(), status));
|
|
LocalPointer<PluralRules> plurrule(
|
|
PluralRules::forLocale("en", status));
|
|
ASSERT_OK(status);
|
|
FieldPosition pos(FieldPosition::DONT_CARE);
|
|
UnicodeString appendTo;
|
|
assertEquals(
|
|
"format singular",
|
|
UnicodeString("1 pound"),
|
|
fmt.format(
|
|
1.0,
|
|
*numfmt,
|
|
*plurrule,
|
|
appendTo,
|
|
pos,
|
|
status), TRUE);
|
|
appendTo.remove();
|
|
assertEquals(
|
|
"format plural",
|
|
UnicodeString("2 pounds"),
|
|
fmt.format(
|
|
2.0,
|
|
*numfmt,
|
|
*plurrule,
|
|
appendTo,
|
|
pos,
|
|
status), TRUE);
|
|
}
|
|
fmt.reset();
|
|
assertFalse("isValid after reset", fmt.isValid());
|
|
#endif
|
|
assertSuccess("", status);
|
|
}
|
|
|
|
extern IntlTest *createQuantityFormatterTest() {
|
|
return new QuantityFormatterTest();
|
|
}
|