blob: dd6d043feff941d6f3ee20b9efa61dc788fb8b41 [file] [log] [blame]
// © 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) override;
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();
}