16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*********************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2011, International Business Machines Corporation 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ***********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "msfmrgts.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/format.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/decimfmt.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/locid.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/msgfmt.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/numfmt.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/choicfmt.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gregocal.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "putilimp.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// class MessageFormatRegressionTest 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// ***************************************************************************** 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CASE(id,test) case id: name = #test; if (exec) { logln(#test "---"); logln((UnicodeString)""); test(); } break; 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgMessageFormatRegressionTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO_BEGIN; 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4074764) 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //TESTCASE_AUTO(Test4058973) -- disabled/obsolete in ICU 4.8 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4031438) 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4052223) 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4104976) 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4106659) 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4106660) 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4111739) 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4114743) 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4116444) 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4114739) 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4113018) 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4106661) 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4094906) 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4118592) 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4118594) 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4105380) 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4120552) 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4142938) 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(TestChoicePatternQuote) 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(Test4112104) 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(TestAPI) 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO_END; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgMessageFormatRegressionTest::failure(UErrorCode status, const char* msg, UBool possibleDataError) 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (possibleDataError) { 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status)); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("FAIL: ") + msg + " failed, error " + u_errorName(status)); 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return FALSE; 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4074764 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Null exception when formatting pattern with MessageFormat 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with no parameters. 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4074764() { 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pattern [] = { 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Message without param", 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Message with param:{0}", 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Longer Message with param {0}" 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //difference between the two param strings are that 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //in the first one, the param position is within the 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //length of the string without param while it is not so 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //in the other case. 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *messageFormatter = new MessageFormat("", status); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "couldn't create MessageFormat"); 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Apply pattern with param and print the result 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org messageFormatter->applyPattern(pattern[1], status); 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "messageFormat->applyPattern"); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] params = {new UnicodeString("BUG"), new Date()}; 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable params [] = { 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(UnicodeString("BUG")), 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable(0, Formattable::kIsDate) 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString tempBuffer; 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition pos(FieldPosition::DONT_CARE); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer = messageFormatter->format(params, 2, tempBuffer, pos, status); 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( tempBuffer != "Message with param:BUG" || failure(status, "messageFormat->format")) 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("MessageFormat with one param test failed."); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatted with one extra param : " + tempBuffer); 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Apply pattern without param and print the result 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org messageFormatter->applyPattern(pattern[0], status); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "messageFormatter->applyPattern"); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // {sfb} how much does this apply in C++? 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // do we want to verify that the Formattable* array is not NULL, 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // or is that the user's responsibility? 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // additionally, what should be the item count? 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // for bug testing purposes, assume that something was set to 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // NULL by mistake, and that the length should be non-zero 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //tempBuffer = messageFormatter->format(NULL, 1, tempBuffer, FieldPosition(FieldPosition::DONT_CARE), status); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer.remove(); 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer = messageFormatter->format(NULL, 0, tempBuffer, pos, status); 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( tempBuffer != "Message without param" || failure(status, "messageFormat->format")) 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("MessageFormat with no param test failed."); 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatted with no params : " + tempBuffer); 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer.remove(); 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer = messageFormatter->format(params, 2, tempBuffer, pos, status); 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tempBuffer != "Message without param" || failure(status, "messageFormat->format")) 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Formatted with arguments > subsitution failed. result = " + tempBuffer); 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatted with extra params : " + tempBuffer); 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //This statement gives an exception while formatting... 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //If we use pattern[1] for the message with param, 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //we get an NullPointerException in MessageFormat.java(617) 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //If we use pattern[2] for the message with param, 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //we get an StringArrayIndexOutOfBoundsException in MessageFormat.java(614) 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Both are due to maxOffset not being reset to -1 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //in applyPattern() when the pattern does not 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //contain any param. 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} catch (Exception foo) { 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Exception when formatting with no params."); 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete messageFormatter; 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4058973 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.toPattern has weird rounding behavior. 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU 4.8: This test is commented out because toPattern() has been changed to return 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the original pattern string, rather than reconstituting a new (equivalent) one. 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This trivially eliminates issues with rounding or any other pattern string differences. 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4058973() 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *fmt = new MessageFormat("{0,choice,0#no files|1#one file|1< {0,number,integer} files}", status); 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat = fmt->toPattern(pat); 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString exp("{0,choice,0#no files|1#one file|1< {0,number,integer} files}"); 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pat != exp) { 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("MessageFormat.toPattern failed"); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Exp: " + exp); 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Got: " + pat); 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fmt; 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}*/ 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4031438 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * More robust message formats. 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4031438() 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pattern1("Impossible {1} has occurred -- status code is {0} and message is {2}."); 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pattern2("Double '' Quotes {0} test and quoted '{1}' test plus 'other {2} stuff'."); 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *messageFormatter = new MessageFormat("", status); 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UBool possibleDataError = TRUE; 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Apply with pattern : " + pattern1); 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org messageFormatter->applyPattern(pattern1, status); 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "messageFormat->applyPattern"); 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] params = {new Integer(7)}; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable params []= { 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable((int32_t)7) 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString tempBuffer; 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition pos(FieldPosition::DONT_CARE); 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer = messageFormatter->format(params, 1, tempBuffer, pos, status); 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(tempBuffer != "Impossible {1} has occurred -- status code is 7 and message is {2}." || failure(status, "MessageFormat::format")) 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Tests arguments < substitution failed"); 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatted with 7 : " + tempBuffer); 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pp(0); 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = 0; 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *objs = messageFormatter->parse(tempBuffer, pp, count); 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //if(objs[7/*params.length*/] != NULL) 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // errln("Parse failed with more than expected arguments"); 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org NumberFormat *fmt = 0; 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString temp, temp1; 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; i < count; i++) { 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // convert to string if not already 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable obj = objs[i]; 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp.remove(); 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(obj.getType() == Formattable::kString) 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp = obj.getString(temp); 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = NumberFormat::createInstance(status); 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (obj.getType()) { 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case Formattable::kLong: fmt->format(obj.getLong(), temp); break; 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case Formattable::kInt64: fmt->format(obj.getInt64(), temp); break; 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case Formattable::kDouble: fmt->format(obj.getDouble(), temp); break; 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: break; 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // convert to string if not already 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable obj1 = params[i]; 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp1.remove(); 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(obj1.getType() == Formattable::kString) 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org temp1 = obj1.getString(temp1); 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = NumberFormat::createInstance(status); 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (obj1.getType()) { 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case Formattable::kLong: fmt->format(obj1.getLong(), temp1); break; 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case Formattable::kInt64: fmt->format(obj1.getInt64(), temp1); break; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case Formattable::kDouble: fmt->format(obj1.getDouble(), temp1); break; 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: break; 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //if (objs[i] != NULL && objs[i].getString(temp1) != params[i].getString(temp2)) { 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (temp != temp1) { 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Parse failed on object " + objs[i].getString(temp1) + " at index : " + i); 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fmt; 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete [] objs; 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // {sfb} does this apply? no way to really pass a null Formattable, 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // only a null array 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*tempBuffer = messageFormatter->format(null, tempBuffer, FieldPosition(FieldPosition::DONT_CARE), status); 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tempBuffer != "Impossible {1} has occurred -- status code is {0} and message is {2}." || failure(status, "messageFormat->format")) 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Tests with no arguments failed"); 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatted with null : " + tempBuffer);*/ 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Apply with pattern : " + pattern2); 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org messageFormatter->applyPattern(pattern2, status); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "messageFormatter->applyPattern", possibleDataError); 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer.remove(); 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempBuffer = messageFormatter->format(params, 1, tempBuffer, pos, status); 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tempBuffer != "Double ' Quotes 7 test and quoted {1} test plus 'other {2} stuff'.") 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("quote format test (w/ params) failed. - %s", u_errorName(status)); 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatted with params : " + tempBuffer); 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*tempBuffer = messageFormatter->format(null); 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!tempBuffer.equals("Double ' Quotes {0} test and quoted {1} test plus other {2} stuff.")) 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("quote format test (w/ null) failed."); 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatted with null : " + tempBuffer); 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("toPattern : " + messageFormatter.toPattern());*/ 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} catch (Exception foo) { 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Exception when formatting in bug 4031438. "+foo.getMessage()); 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete messageFormatter; 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4052223() 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pos(0); 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos.getErrorIndex() != -1) { 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("ParsePosition.getErrorIndex initialization failed."); 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *fmt = new MessageFormat("There are {0} apples growing on the {1} tree.", status); 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str("There is one apple growing on the peach tree."); 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = 0; 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt->parse(str, pos, count); 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("unparsable string , should fail at ") + pos.getErrorIndex()); 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos.getErrorIndex() == -1) 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Bug 4052223 failed : parsing string " + str); 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.setErrorIndex(4); 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos.getErrorIndex() != 4) 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("setErrorIndex failed, got ") + pos.getErrorIndex() + " instead of 4"); 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *f = new ChoiceFormat( 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "-1#are negative|0#are no or fraction|1#is one|1.0<is 1+|2#are two|2<are more than 2.", status); 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new ChoiceFormat"); 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.setIndex(0); 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.setErrorIndex(-1); 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable obj; 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org f->parse("are negative", obj, pos); 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos.getErrorIndex() != -1 && obj.getDouble() == -1.0) 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Parse with \"are negative\" failed, at ") + pos.getErrorIndex()); 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.setIndex(0); 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.setErrorIndex(-1); 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org f->parse("are no or fraction ", obj, pos); 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos.getErrorIndex() != -1 && obj.getDouble() == 0.0) 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Parse with \"are no or fraction\" failed, at ") + pos.getErrorIndex()); 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.setIndex(0); 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos.setErrorIndex(-1); 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org f->parse("go postal", obj, pos); 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos.getErrorIndex() == -1 && ! uprv_isNaN(obj.getDouble())) 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Parse with \"go postal\" failed, at ") + pos.getErrorIndex()); 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fmt; 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete f; 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4104976 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ChoiceFormat.equals(null) throws NullPointerException 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// {sfb} not really applicable in C++?? (kind of silly) 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4104976() 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double limits [] = {1, 20}; 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString formats [] = { 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString("xyz"), 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString("abc") 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t formats_length = (int32_t)(sizeof(formats)/sizeof(formats[0])); 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *cf = new ChoiceFormat(limits, formats, formats_length); 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new ChoiceFormat"); 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log("Compares to null is always false, returned : "); 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(cf == NULL ? "TRUE" : "FALSE"); 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} catch (Exception foo) { 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("ChoiceFormat.equals(null) throws exception."); 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cf; 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4106659 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ChoiceFormat.ctor(double[], String[]) doesn't check 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * whether lengths of input arrays are equal. 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// {sfb} again, not really applicable in C++ 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4106659() 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double limits [] = { 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1, 2, 3 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString formats [] = { 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "one", "two" 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *cf = NULL; 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // cf = new ChoiceFormat(limits, formats, 3); 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} catch (Exception foo) { 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // logln("ChoiceFormat constructor should check for the array lengths"); 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // cf = null; 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //if (cf != null) 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // errln(cf->format(5)); 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cf; 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4106660 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ChoiceFormat.ctor(double[], String[]) allows unordered double array. 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is not a bug, added javadoc to emphasize the use of limit 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * array must be in ascending order. 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4106660() 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double limits [] = {3, 1, 2}; 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString formats [] = { 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString("Three"), 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString("One"), 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString("Two") 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *cf = new ChoiceFormat(limits, formats, 3); 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double d = 5.0; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition pos(FieldPosition::DONT_CARE); 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str = cf->format(d, str, pos); 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (str != "Two") 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln( (UnicodeString) "format(" + d + ") = " + str); 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cf; 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4111739 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat is incorrectly serialized/deserialized. 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// {sfb} doesn't apply in C++ 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4111739() 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*MessageFormat format1 = null; 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat format2 = null; 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ObjectOutputStream ostream = null; 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ByteArrayOutputStream baos = null; 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ObjectInputStream istream = null; 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org try { 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org baos = new ByteArrayOutputStream(); 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ostream = new ObjectOutputStream(baos); 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } catch(IOException e) { 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Unexpected exception : " + e.getMessage()); 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org try { 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org format1 = new MessageFormat("pattern{0}"); 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ostream.writeObject(format1); 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ostream.flush(); 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org byte bytes[] = baos.toByteArray(); 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org istream = new ObjectInputStream(new ByteArrayInputStream(bytes)); 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org format2 = (MessageFormat)istream.readObject(); 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } catch(Exception e) { 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Unexpected exception : " + e.getMessage()); 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!format1.equals(format2)) { 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("MessageFormats before and after serialization are not" + 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " equal\nformat1 = " + format1 + "(" + format1.toPattern() + ")\nformat2 = " + 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org format2 + "(" + format2.toPattern() + ")"); 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Serialization for MessageFormat is OK."); 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4114743 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.applyPattern allows illegal patterns. 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4114743() 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString originalPattern("initial pattern"); 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat(originalPattern, status); 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString illegalPattern("ab { '}' de"); 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mf->applyPattern(illegalPattern, status); 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( ! U_FAILURE(status)) 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("illegal pattern: \"" + illegalPattern + "\""); 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} catch (IllegalArgumentException foo) { 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!originalPattern.equals(mf.toPattern())) 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("pattern after: \"" + mf.toPattern() + "\""); 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4116444 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.parse has different behavior in case of null. 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4116444() 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString patterns [] = { 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"", 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"one", 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString) "{0,date,short}" 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat("", status); 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; i < 3; i++) { 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pattern = patterns[i]; 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mf->applyPattern(pattern, status); 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "mf->applyPattern", TRUE); 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = 0; 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pp(0); 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *array = mf->parse(UnicodeString(""), pp, count); 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("pattern: \"" + pattern + "\""); 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log(" parsedObjects: "); 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (array != NULL) { 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log("{"); 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int j = 0; j < count; j++) { 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //if (array[j] != null) 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString dummy; 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("\"" + array[j].getString(dummy) + "\""); 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //else 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // log("null"); 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (j < count- 1) 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log(","); 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log("}") ; 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete[] array; 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log("null"); 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(""); 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} catch (Exception e) { 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("pattern: \"" + pattern + "\""); 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(" Exception: " + e.getMessage()); 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4114739 (FIX and add javadoc) 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.format has undocumented behavior about empty format objects. 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// {sfb} doesn't apply in C++? 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4114739() 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat("<{0}>", status); 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *objs1 = NULL; 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Formattable objs2 [] = {}; 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Formattable *objs3 [] = {NULL}; 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString res; 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("pattern: \"" + mf->toPattern(pat) + "\""); 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log("format(null) : "); 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition pos(FieldPosition::DONT_CARE); 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("\"" + mf->format(objs1, 0, res, pos, status) + "\""); 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "mf->format"); 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*log("format({}) : "); 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("\"" + mf->format(objs2, 0, res, FieldPosition(FieldPosition::DONT_CARE), status) + "\""); 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "mf->format"); 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log("format({null}) :"); 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("\"" + mf->format(objs3, 0, res, FieldPosition(FieldPosition::DONT_CARE), status) + "\""); 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "mf->format");*/ 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} catch (Exception e) { 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Exception thrown for null argument tests."); 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4113018 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.applyPattern works wrong with illegal patterns. 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4113018() 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString originalPattern("initial pattern"); 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat(originalPattern, status); 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new messageFormat"); 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString illegalPattern("format: {0, xxxYYY}"); 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("pattern before: \"" + mf->toPattern(pat) + "\""); 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("illegal pattern: \"" + illegalPattern + "\""); 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mf->applyPattern(illegalPattern, status); 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( ! U_FAILURE(status)) 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Should have thrown IllegalArgumentException for pattern : " + illegalPattern); 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} catch (IllegalArgumentException e) { 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!originalPattern.equals(mf.toPattern())) 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("pattern after: \"" + mf.toPattern() + "\""); 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4106661 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ChoiceFormat is silent about the pattern usage in javadoc. 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4106661() 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *fmt = new ChoiceFormat( 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "-1#are negative| 0#are no or fraction | 1#is one |1.0<is 1+ |2#are two |2<are more than 2.", status); 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new ChoiceFormat"); 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Formatter Pattern : " + fmt->toPattern(pat)); 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition bogus(FieldPosition::DONT_CARE); 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Will this work for -inf? 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with -INF : " + fmt->format(Formattable(-uprv_getInfinity()), str, bogus, status)); 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with -1.0 : " + fmt->format(Formattable(-1.0), str, bogus, status)); 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with -1.0 : " + fmt->format(Formattable(-1.0), str, bogus, status)); 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 0 : " + fmt->format(Formattable((int32_t)0), str, bogus, status)); 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 0.9 : " + fmt->format(Formattable(0.9), str, bogus, status)); 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 1.0 : " + fmt->format(Formattable(1.0), str, bogus, status)); 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 1.5 : " + fmt->format(Formattable(1.5), str, bogus, status)); 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 2 : " + fmt->format(Formattable((int32_t)2), str, bogus, status)); 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 2.1 : " + fmt->format(Formattable(2.1), str, bogus, status)); 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with NaN : " + fmt->format(Formattable(uprv_getNaN()), str, bogus, status)); 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with +INF : " + fmt->format(Formattable(uprv_getInfinity()), str, bogus, status)); 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fmt; 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4094906 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ChoiceFormat should accept \u221E as eq. to INF. 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4094906() 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pattern("-"); 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern += (UChar) 0x221E; 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern += "<are negative|0<are no or fraction|1#is one|1<is 1+|"; 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern += (UChar) 0x221E; 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern += "<are many."; 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *fmt = new ChoiceFormat(pattern, status); 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new ChoiceFormat"); 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fmt->toPattern(pat) != pattern) { 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln( (UnicodeString) "Formatter Pattern : " + pat); 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln( (UnicodeString) "Expected Pattern : " + pattern); 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition bogus(FieldPosition::DONT_CARE); 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Will this work for -inf? 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with -INF : " + fmt->format(Formattable(-uprv_getInfinity()), str, bogus, status)); 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with -1.0 : " + fmt->format(Formattable(-1.0), str, bogus, status)); 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with -1.0 : " + fmt->format(Formattable(-1.0), str, bogus, status)); 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 0 : " + fmt->format(Formattable((int32_t)0), str, bogus, status)); 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 0.9 : " + fmt->format(Formattable(0.9), str, bogus, status)); 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 1.0 : " + fmt->format(Formattable(1.0), str, bogus, status)); 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 1.5 : " + fmt->format(Formattable(1.5), str, bogus, status)); 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 2 : " + fmt->format(Formattable((int32_t)2), str, bogus, status)); 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with 2.1 : " + fmt->format(Formattable(2.1), str, bogus, status)); 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with NaN : " + fmt->format(Formattable(uprv_getNaN()), str, bogus, status)); 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str.remove(); 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Format with +INF : " + fmt->format(Formattable(uprv_getInfinity()), str, bogus, status)); 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "fmt->format"); 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fmt; 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4118592 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.parse fails with ChoiceFormat. 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4118592() 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat("", status); 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new messageFormat"); 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pattern("{0,choice,1#YES|2#NO}"); 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString prefix(""); 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *objs = 0; 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; i < 5; i++) { 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString formatted; 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org formatted = prefix + "YES"; 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mf->applyPattern(prefix + pattern, status); 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "mf->applyPattern"); 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org prefix += "x"; 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] objs = mf.parse(formatted, new ParsePosition(0)); 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = 0; 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pp(0); 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org objs = mf->parse(formatted, pp, count); 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(UnicodeString("") + i + ". pattern :\"" + mf->toPattern(pat) + "\""); 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log(" \"" + formatted + "\" parsed as "); 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (objs == NULL) 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(" null"); 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString temp; 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(objs[0].getType() == Formattable::kString) 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)" " + objs[0].getString(temp)); 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)" " + (objs[0].getType() == Formattable::kLong ? objs[0].getLong() : objs[0].getDouble())); 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete[] objs; 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4118594 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.parse fails for some patterns. 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4118594() 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UBool possibleDataError = TRUE; 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat("{0}, {0}, {0}", status); 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString forParsing("x, y, z"); 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] objs = mf.parse(forParsing, new ParsePosition(0)); 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = 0; 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pp(0); 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *objs = mf->parse(forParsing, pp, count); 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("pattern: \"" + mf->toPattern(pat) + "\""); 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("text for parsing: \"" + forParsing + "\""); 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str; 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (objs[0].getString(str) != "z") 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("argument0: \"" + objs[0].getString(str) + "\""); 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org mf->applyPattern("{0,number,#.##}, {0,number,#.#}", status); 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "mf->applyPattern", possibleDataError); 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] oldobjs = {new Double(3.1415)}; 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable oldobjs [] = {Formattable(3.1415)}; 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString result; 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition pos(FieldPosition::DONT_CARE); 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = mf->format( oldobjs, 1, result, pos, status ); 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "mf->format", possibleDataError); 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat.remove(); 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("pattern: \"" + mf->toPattern(pat) + "\""); 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("text for parsing: \"" + result + "\""); 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // result now equals "3.14, 3.1" 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (result != "3.14, 3.1") 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("result = " + result + " - " + u_errorName(status)); 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] newobjs = mf.parse(result, new ParsePosition(0)); 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count1 = 0; 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pp.setIndex(0); 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *newobjs = mf->parse(result, pp, count1); 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // newobjs now equals {new Double(3.1)} 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (newobjs == NULL) { 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Error calling MessageFormat::parse"); 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (newobjs[0].getDouble() != 3.1) 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln( UnicodeString("newobjs[0] = ") + newobjs[0].getDouble()); 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete [] objs; 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete [] newobjs; 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4105380 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When using ChoiceFormat, MessageFormat is not good for I18n. 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4105380() 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString patternText1("The disk \"{1}\" contains {0}."); 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString patternText2("There are {0} on the disk \"{1}\""); 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UBool possibleDataError = TRUE; 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *form1 = new MessageFormat(patternText1, status); 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *form2 = new MessageFormat(patternText2, status); 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double filelimits [] = {0,1,2}; 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString filepart [] = { 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"no files", 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"one file", 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"{0,number} files" 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *fileform = new ChoiceFormat(filelimits, filepart, 3); 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org form1->setFormat(1, *fileform); 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org form2->setFormat(0, *fileform); 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] testArgs = {new Long(12373), "MyDisk"}; 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable testArgs [] = { 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable((int32_t)12373), 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable((UnicodeString)"MyDisk") 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition bogus(FieldPosition::DONT_CARE); 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString result; 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(form1->format(testArgs, 2, result, bogus, status)); 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "form1->format", possibleDataError); 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result.remove(); 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(form2->format(testArgs, 2, result, bogus, status)); 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "form1->format", possibleDataError); 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete form1; 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete form2; 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete fileform; 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* @bug 4120552 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.parse incorrectly sets errorIndex. 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4120552() 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat("pattern", status); 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString texts[] = { 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"pattern", 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"pat", 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UnicodeString)"1234" 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("pattern: \"" + mf->toPattern(pat) + "\""); 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i = 0; i < 3; i++) { 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ParsePosition pp(0); 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //Object[] objs = mf.parse(texts[i], pp); 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count = 0; 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable *objs = mf->parse(texts[i], pp, count); 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log(" text for parsing: \"" + texts[i] + "\""); 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (objs == NULL) { 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(" (incorrectly formatted string)"); 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pp.getErrorIndex() == -1) 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("Incorrect error index: ") + pp.getErrorIndex()); 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(" (correctly formatted string)"); 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete[] objs; 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @bug 4142938 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat handles single quotes in pattern wrong. 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This is actually a problem in ChoiceFormat; it doesn't 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * understand single quotes. 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4142938() 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat = CharsToUnicodeString("''Vous'' {0,choice,0#n''|1#}avez s\\u00E9lectionn\\u00E9 " 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "{0,choice,0#aucun|1#{0}} client{0,choice,0#s|1#|2#s} " 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "personnel{0,choice,0#s|1#|2#s}."); 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *mf = new MessageFormat(pat, status); 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString PREFIX [] = { 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharsToUnicodeString("'Vous' n'avez s\\u00E9lectionn\\u00E9 aucun clients personnels."), 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharsToUnicodeString("'Vous' avez s\\u00E9lectionn\\u00E9 "), 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharsToUnicodeString("'Vous' avez s\\u00E9lectionn\\u00E9 ") 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString SUFFIX [] = { 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString(), 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNICODE_STRING(" client personnel.", 18), 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UNICODE_STRING(" clients personnels.", 20) 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i=0; i<3; i++) { 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString out; 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //out = mf->format(new Object[]{new Integer(i)}); 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable objs [] = { 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Formattable((int32_t)i) 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition pos(FieldPosition::DONT_CARE); 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out = mf->format(objs, 1, out, pos, status); 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!failure(status, "mf->format", TRUE)) { 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (SUFFIX[i] == "") { 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (out != PREFIX[i]) 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"" + i + ": Got \"" + out + "\"; Want \"" + PREFIX[i] + "\""); 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!out.startsWith(PREFIX[i]) || 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org !out.endsWith(SUFFIX[i])) 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"" + i + ": Got \"" + out + "\"; Want \"" + PREFIX[i] + "\"...\"" + 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org SUFFIX[i] + "\""); 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete mf; 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @bug 4142938 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test the applyPattern and toPattern handling of single quotes 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * by ChoiceFormat. (This is in here because this was a bug reported 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * against MessageFormat.) The single quote is used to quote the 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pattern characters '|', '#', '<', and '\u2264'. Two quotes in a row 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is a quote literal. 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::TestChoicePatternQuote() 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // ICU 4.8 ChoiceFormat (like PluralFormat & SelectFormat) 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // returns the chosen string unmodified, so that it is usable in a MessageFormat. 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // We modified the test strings accordingly. 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Note: Without further formatting/trimming/etc., it is not possible 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // to get a single apostrophe as the last character of a non-final choice sub-message 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // because the single apostrophe before the pipe '|' would start quoted text. 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Normally, ChoiceFormat is used inside a MessageFormat, where a double apostrophe 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // can be used in that case and will be formatted as a single one. 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // (Better: Use a "real" apostrophe, U+2019.) 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString DATA [] = { 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Pattern 0 value 1 value 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // {sfb} hacked - changed \u2264 to = (copied from Character Map) 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "0#can't|1#can", "can't", "can", 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "0#pound(#)='#''|1#xyz", "pound(#)='#''", "xyz", 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "0#1<2 '| 1=1'|1#'", "1<2 '| 1=1'", "'", 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i=0; i<9; i+=3) { 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *cf = new ChoiceFormat(DATA[i], status); 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new ChoiceFormat"); 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int j=0; j<=1; ++j) { 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString out; 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FieldPosition pos(FieldPosition::DONT_CARE); 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out = cf->format((double)j, out, pos); 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (out != DATA[i+1+j]) 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Pattern \"" + DATA[i] + "\" x "+j+" -> " + 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org out + "; want \"" + DATA[i+1+j] + "\""); 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat; 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat = cf->toPattern(pat); 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString pat2; 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ChoiceFormat *cf2 = new ChoiceFormat(pat, status); 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pat2 = cf2->toPattern(pat2); 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pat != pat2) 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Pattern \"" + DATA[i] + "\" x toPattern -> \"" + pat + "\""); 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Ok: Pattern \"" + DATA[i] + "\" x toPattern -> \"" + pat + "\""); 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org catch (IllegalArgumentException e) { 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: Pattern \"" + DATA[i] + "\" -> " + e); 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cf; 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete cf2; 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @bug 4112104 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * MessageFormat.equals(null) throws a NullPointerException. The JLS states 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that it should return false. 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::Test4112104() 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *format = new MessageFormat("", status); 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //try { 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // This should NOT throw an exception 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (format == NULL) { 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // It also should return false 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("MessageFormat.equals(null) returns false"); 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*} 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org catch (NullPointerException e) { 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("MessageFormat.equals(null) throws " + e); 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }*/ 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete format; 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid MessageFormatRegressionTest::TestAPI() { 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *format = new MessageFormat("", status); 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "new MessageFormat"); 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Test adoptFormat 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MessageFormat *fmt = new MessageFormat("",status); 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org format->adoptFormat("some_name",fmt,status); // Must at least pass a valid identifier. 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "adoptFormat"); 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Test getFormat 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org format->setFormat((int32_t)0,*fmt); 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org format->getFormat("some_other_name",status); // Must at least pass a valid identifier. 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org failure(status, "getFormat"); 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete format; 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1005