1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 359d709d503bab6e2b61931737e662dd293b40578ccornelius * Copyright (c) 1997-2013, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ******************************************************************** 650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * File CMSGTST.C 850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Modification History: 1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Name Description 1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Madhu Katragadda Creation 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* C API TEST FOR MESSAGE FORMAT */ 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdarg.h> 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/umsg.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udat.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/umsg.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmsgtst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cformtst.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 3254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const txt_testCasePatterns[] = { 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Quotes '', '{', a {0,number,integer} '{'0}", 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Quotes '', '{', a {0,number,integer} '{'0}", 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "You deposited {0,number,integer} times an amount of {1,number,currency} on {2,date,short}", 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "'{'2,time,full}, for {1, number }, {0,number,integer} is {2,time,full} and full date is {2,date,full}", 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "'{'1,number,percent} for {0,number,integer} is {1,number,percent}", 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* const txt_testResultStrings[] = { 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Quotes ', {, a 1 {0}", 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "Quotes ', {, a 1 {0}", 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "You deposited 1 times an amount of $3,456.00 on 1/12/70", 45b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru "{2,time,full}, for 3,456, 1 is 5:46:40 AM Pacific Standard Time and full date is Monday, January 12, 1970", 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "{1,number,percent} for 1 is 345,600%" 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst int32_t cnt_testCases = 5; 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar* testCasePatterns[5]; 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar* testResultStrings[5]; 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool strings_initialized = FALSE; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* function used to create the test patterns for testing Message formatting */ 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void InitStrings( void ) 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strings_initialized) 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i < cnt_testCases; i++ ) { 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t strSize = (uint32_t)strlen(txt_testCasePatterns[i]) + 1; 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testCasePatterns[i]=(UChar*)malloc(sizeof(UChar) * strSize); 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(testCasePatterns[i], txt_testCasePatterns[i], strSize); 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i < cnt_testCases; i++ ) { 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t strSize = (uint32_t)strlen(txt_testResultStrings[i]) + 1; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testResultStrings[i] = (UChar*)malloc(sizeof(UChar) * strSize); 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(testResultStrings[i], txt_testResultStrings[i], strSize); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strings_initialized = TRUE; 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void FreeStrings( void ) 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!strings_initialized) 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i < cnt_testCases; i++ ) { 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testCasePatterns[i]); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i < cnt_testCases; i++ ) { 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(testResultStrings[i]); 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strings_initialized = FALSE; 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#if (U_PLATFORM == U_PF_LINUX) /* add platforms here .. */ 938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius/* Keep the #if above in sync with the one below that has the same "add platforms here .." comment. */ 948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#else 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Platform dependent test to detect if this type will return NULL when interpreted as a pointer. */ 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool returnsNullForType(int firstParam, ...) { 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isNULL; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list marker; 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(marker, firstParam); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isNULL = (UBool)(va_arg(marker, void*) == NULL); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(marker); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return isNULL; 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#endif 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test u_formatMessage() with various test patterns() */ 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void MessageFormatTest( void ) 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* result; 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLengthOut,resultlength,i, patternlength; 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1=1000000000.0; 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * 7); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(str, "MyDisk", 7); 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=1; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * 1); 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing u_formatMessage()\n"); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru InitStrings(); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < cnt_testCases; i++) { 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternlength=u_strlen(testCasePatterns[i]); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US",testCasePatterns[i], patternlength, result, resultlength, 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status, 1, 3456.00, d1); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status== U_BUFFER_OVERFLOW_ERROR) 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result,sizeof(UChar) * resultlength); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US",testCasePatterns[i], patternlength, result, resultlength, 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status, 1, 3456.00, d1); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format on testcase %d: %s (Are you missing data?)\n", i, myErrorName(status) ); 138c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru continue; 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, testResultStrings[i])==0){ 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on testcase : %d\n", i); 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on testcase : %d\n GOT %s EXPECTED %s\n", i, 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result), austrdup(testResultStrings[i]) ); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < cnt_testCases; i++) { 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternlength=u_strlen(testCasePatterns[i]); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessageWithError( "en_US",testCasePatterns[i], patternlength, result, resultlength, 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &parseError,&status, 1, 3456.00, d1); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status== U_BUFFER_OVERFLOW_ERROR) 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US",testCasePatterns[i], patternlength, result, resultlength, 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status, 1, 3456.00, d1); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format on testcase %d: %s (Are you missing data?)\n", i, myErrorName(status) ); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, testResultStrings[i])==0){ 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on testcase : %d\n", i); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on testcase : %d\n GOT %s EXPECTED %s\n", i, 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result), austrdup(testResultStrings[i]) ); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=NULL; 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t patternLength = u_strlen(testCasePatterns[0]); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UMessageFormat formatter = umsg_open(testCasePatterns[0],patternLength,"en_US",NULL,&ec); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(ec)){ 1906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("umsg_open() failed for testCasePattens[%d]. -> %s (Are you missing data?)\n",i, u_errorName(ec)); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i = 0;i<cnt_testCases; i++){ 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLength =0,count=0; 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t one=0; 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t two=0; 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d2=0; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=NULL; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternLength = u_strlen(testCasePatterns[i]); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_applyPattern(formatter,testCasePatterns[i],patternLength,&parseError,&ec); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(ec)){ 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_applyPattern() failed for testCasePattens[%d].\n",i); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* pre-flight */ 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLength = umsg_format(formatter,result,resultLength,&ec,1,3456.00,d1); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ec==U_BUFFER_OVERFLOW_ERROR){ 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec=U_ZERO_ERROR; 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = (UChar*) malloc(U_SIZEOF_UCHAR*resultLength+2); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLength = umsg_format(formatter,result,resultLength+2,&ec,1,3456.00,d1); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(ec)){ 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: failure in message format on testcase %d: %s\n", i, u_errorName(status) ); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, testResultStrings[i])==0){ 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on testcase : %d\n", i); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on testcase : %d\n GOT %s EXPECTED %s\n", i, 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result), austrdup(testResultStrings[i]) ); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if (U_PLATFORM == U_PF_LINUX) /* add platforms here .. */ 22927f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Skipping potentially crashing test for mismatched varargs.\n"); 23027f654740f2a26ad62a5c155af9199af9e69b889claireho#else 23127f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Note: the next is a platform dependent test. If it crashes, add an exclusion for your platform near %s:%d\n", __FILE__, __LINE__); 23227f654740f2a26ad62a5c155af9199af9e69b889claireho 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (returnsNullForType(1, (double)2.0)) { 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* HP/UX and possibly other platforms don't properly check for this case. 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru We pass in a UDate, but the function expects a UDate *. When va_arg is used, 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru most compilers will return NULL, but HP-UX won't do that and will return 2 23727f654740f2a26ad62a5c155af9199af9e69b889claireho in this case. This is a platform dependent test. It crashes on some systems. 23827f654740f2a26ad62a5c155af9199af9e69b889claireho 23927f654740f2a26ad62a5c155af9199af9e69b889claireho If you get a crash here, see the definition of returnsNullForType. 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru This relies upon "undefined" behavior, as indicated by C99 7.15.1.1 paragraph 2 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_parse(formatter,result,resultLength,&count,&ec,one,two,d2); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ec!=U_ILLEGAL_ARGUMENT_ERROR){ 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Did not get expected error for umsg_parse(). Expected: U_ILLEGAL_ARGUMENT_ERROR Got: %s \n",u_errorName(ec)); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Warning: Returning NULL for a mismatched va_arg type isn't supported on this platform.\n", i); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 25327f654740f2a26ad62a5c155af9199af9e69b889claireho#endif 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_parse(formatter,result,resultLength,&count,&ec,&one,&two,&d2); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(ec)){ 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_parse could not parse the pattern. Error: %s.\n",u_errorName(ec)); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Expected U_BUFFER_OVERFLOW error while preflighting got: %s for testCasePatterns[%d]",u_errorName(ec),i); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_close(formatter); 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FreeStrings(); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*test u_formatMessage() with sample patterns */ 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSampleMessageFormat(void) 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str; 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[100], expected[100]; 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLengthOut, resultlength; 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = 837039928046.0; 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * 15); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "abc"); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "There are {0} files on {1,date}"); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "There are abc files on Jul 10, 1996"); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * 1); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting a sample for Message format test#1\n"); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=1; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, str, d); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result, sizeof(UChar) * resultlength); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, str, d); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error: failure in message format on test#1: %s (Are you missing data?)\n", myErrorName(status)); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 303c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(u_strcmp(result, expected)==0) 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#1\n"); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#1 \n GOT: %s EXPECTED: %s\n", 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result), austrdup(expected) ); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting message format with another pattern test#2\n"); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "The disk \"{0}\" contains {1,number,integer} file(s)"); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "The disk \"MyDisk\" contains 23 file(s)"); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "MyDisk"); 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US", 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern, 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strlen(pattern), 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result, 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength, 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status, 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result, sizeof(UChar) * (resultlength+1)); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, str, 23); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error: failure in message format on test#2 : %s (Are you missing data?)\n", myErrorName(status)); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 334c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(u_strcmp(result, expected)==0) 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#2\n"); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#2\n GOT: %s EXPECTED: %s\n", 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result), austrdup(expected) ); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting message format with another pattern test#3\n"); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "You made a {0} of {1,number,currency}"); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "You made a deposit of $500.00"); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "deposit"); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, str, 500.00); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result, sizeof(UChar) * resultlength); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, str, 500.00); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("Error: failure in message format on test#3 : %s (Are you missing data?)\n", myErrorName(status)); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 359c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(u_strcmp(result, expected)==0) 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#3\n"); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#3\n GOT: %s EXPECTED %s\n", austrdup(result), 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(expected) ); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test umsg_format() and umsg_parse() , format and parse sequence and round trip */ 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNewFormatAndParseAPI(void) 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 376c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar *result, tzID[4], str[25]; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[100]; 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[100]; 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLengthOut, resultlength; 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal; 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1,d; 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *def1; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value = 0; 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ret[30]; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UMessageFormat* fmt = NULL; 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count=0; 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing format and parse with parse error\n"); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "disturbance in force"); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("error in ucal_open caldef : %s - (Are you missing data?)\n", myErrorName(status) ); 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(cal, 1999, UCAL_MARCH, 18, 0, 0, 0, &status); 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(cal, &status); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error: failure in get millis: %s\n", myErrorName(status) ); 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting with pattern test#4"); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}"); 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "On March 18, 1999, there was a disturbance in force on planet 7"); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=1; 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = umsg_open(pattern,u_strlen(pattern),"en_US",&parseError,&status); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 4146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in umsg_open : %s (Are you missing data?)\n", u_errorName(status) ); 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=umsg_format(fmt ,result, resultlength,&status, d1, str, 7); 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result, sizeof(UChar) * resultlength); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessageWithError( "en_US", pattern, u_strlen(pattern), result, resultlength,&parseError, &status, d1, str, 7); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: failure in message format test#4: %s\n", myErrorName(status)); 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, expected)==0) 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#4\n"); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#4\n GOT: %s EXPECTED: %s\n", austrdup(result), 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(expected) ); 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*try to parse this and check*/ 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the parse Message test#5\n"); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_parse(fmt, result, u_strlen(result),&count,&status, &d, ret, &value); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: error in parsing: test#5: %s\n", myErrorName(status)); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(value!=7 && u_strcmp(str,ret)!=0) 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parseMessage on test#5 \n"); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful on test#5\n"); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def1 = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,NULL, NULL, 0, NULL,0,&status); 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in creating the dateformat using short date and time style:\n %s\n", myErrorName(status)); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(def1, d), myDateFormat(def1, d1))==0) 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful test#5\n"); 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: parseMessage didn't parse the date successfully\n GOT: %s EXPECTED %s\n", 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(myDateFormat(def1,d)), austrdup(myDateFormat(def1,d1)) ); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_close(fmt); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def1); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test u_formatMessageWithError() and u_parseMessageWithError() , format and parse sequence and round trip */ 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSampleFormatAndParseWithError(void) 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result, *tzID, *str; 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[100]; 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[100]; 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLengthOut, resultlength; 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal; 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1,d; 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *def1; 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value = 0; 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ret[30]; 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing format and parse with parse error\n"); 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * 25); 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "disturbance in force"); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tzID=(UChar*)malloc(sizeof(UChar) * 4); 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 50050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("error in ucal_open caldef : %s - (Are you missing data?)\n", myErrorName(status) ); 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(cal, 1999, UCAL_MARCH, 18, 0, 0, 0, &status); 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(cal, &status); 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 50550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("Error: failure in get millis: %s - (Are you missing data?)\n", myErrorName(status) ); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting with pattern test#4"); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}"); 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "On March 18, 1999, there was a disturbance in force on planet 7"); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=1; 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessageWithError( "en_US", pattern, u_strlen(pattern), result, resultlength,&parseError, &status, d1, str, 7); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result, sizeof(UChar) * resultlength); 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessageWithError( "en_US", pattern, u_strlen(pattern), result, resultlength,&parseError, &status, d1, str, 7); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format test#4: %s (Are you missing data?)\n", myErrorName(status)); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 525c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(u_strcmp(result, expected)==0) 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#4\n"); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#4\n GOT: %s EXPECTED: %s\n", austrdup(result), 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(expected) ); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*try to parse this and check*/ 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the parse Message test#5\n"); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_parseMessageWithError("en_US", pattern, u_strlen(pattern), result, u_strlen(result), &parseError,&status, &d, ret, &value); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 5386d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: error in parsing: test#5: %s (Are you missing data?)\n", myErrorName(status)); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 540c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(value!=7 && u_strcmp(str,ret)!=0) 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parseMessage on test#5 \n"); 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful on test#5\n"); 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def1 = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,NULL, NULL, 0, NULL,0,&status); 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 5486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat using short date and time style: %s (Are you missing data?)\n", myErrorName(status)); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(def1, d), myDateFormat(def1, d1))==0) 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful test#5\n"); 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: parseMessage didn't parse the date successfully\n GOT: %s EXPECTED %s\n", 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(myDateFormat(def1,d)), austrdup(myDateFormat(def1,d1)) ); 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def1); 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tzID); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test u_formatMessage() and u_parseMessage() , format and parse sequence and round trip */ 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSampleFormatAndParse(void) 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result, *tzID, *str; 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[100]; 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[100]; 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLengthOut, resultlength; 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal; 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1,d; 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *def1; 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value = 0; 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ret[30]; 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing format and parse\n"); 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * 25); 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "disturbance in force"); 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tzID=(UChar*)malloc(sizeof(UChar) * 4); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 59350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("error in ucal_open caldef : %s - (Are you missing data?)\n", myErrorName(status) ); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(cal, 1999, UCAL_MARCH, 18, 0, 0, 0, &status); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(cal, &status); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 59850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("Error: failure in get millis: %s - (Are you missing data?)\n", myErrorName(status) ); 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting with pattern test#4"); 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}"); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "On March 18, 1999, there was a disturbance in force on planet 7"); 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=1; 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, d1, str, 7); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result, sizeof(UChar) * resultlength); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, d1, str, 7); 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format test#4: %s (Are you missing data?)\n", myErrorName(status)); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 618c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(u_strcmp(result, expected)==0) 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#4\n"); 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#4\n GOT: %s EXPECTED: %s\n", austrdup(result), 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(expected) ); 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*try to parse this and check*/ 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the parse Message test#5\n"); 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_parseMessage("en_US", pattern, u_strlen(pattern), result, u_strlen(result), &status, &d, ret, &value); 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: error in parsing: test#5: %s (Are you missing data?)\n", myErrorName(status)); 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 633c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(value!=7 && u_strcmp(str,ret)!=0) 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parseMessage on test#5 \n"); 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful on test#5\n"); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def1 = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,NULL, NULL, 0, NULL,0,&status); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 6416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat using short date and time style: %s (Are you missing data?)\n", myErrorName(status)); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(def1, d), myDateFormat(def1, d1))==0) 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful test#5\n"); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: parseMessage didn't parse the date successfully\n GOT: %s EXPECTED %s\n", 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(myDateFormat(def1,d)), austrdup(myDateFormat(def1,d1)) ); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def1); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tzID); 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Test message format with a Select option */ 66250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void TestMsgFormatSelect(void) 66350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 66450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar* str; 66550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar* str1; 66650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 66750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar *result; 66850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar pattern[100]; 66950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar expected[100]; 67050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t resultlength,resultLengthOut; 67150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 67250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho str=(UChar*)malloc(sizeof(UChar) * 25); 67350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(str, "Kirti"); 67450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho str1=(UChar*)malloc(sizeof(UChar) * 25); 67550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(str1, "female"); 67650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Testing message format with Select test #1\n:"); 67750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(pattern, "{0} est {1, select, female {all\\u00E9e} other {all\\u00E9}} \\u00E0 Paris."); 67850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(expected, "Kirti est all\\u00E9e \\u00E0 Paris."); 67950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultlength=0; 68050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultLengthOut=u_formatMessage( "fr", pattern, u_strlen(pattern), NULL, resultlength, &status, str , str1); 68150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(status==U_BUFFER_OVERFLOW_ERROR) 68250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 68350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status=U_ZERO_ERROR; 68450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultlength=resultLengthOut+1; 68550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result=(UChar*)malloc(sizeof(UChar) * resultlength); 68650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_formatMessage( "fr", pattern, u_strlen(pattern), result, resultlength, &status, str , str1); 68750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(u_strcmp(result, expected)==0) 68850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("PASS: MessagFormat successful on Select test#1\n"); 68950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho else{ 69050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: Error in MessageFormat on Select test#1\n GOT %s EXPECTED %s\n", austrdup(result), 69150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho austrdup(expected) ); 69250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 69350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho free(result); 69450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 69550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)){ 69650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ERROR: failure in message format on Select test#1 : %s \n", myErrorName(status)); 69750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 69850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho free(str); 69950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho free(str1); 70050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 70150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /*Test a nested pattern*/ 70250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho str=(UChar*)malloc(sizeof(UChar) * 25); 70350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(str, "Noname"); 70450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho str1=(UChar*)malloc(sizeof(UChar) * 25); 70550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(str1, "other"); 70650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Testing message format with Select test #2\n:"); 70750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(pattern, "{0} est {1, select, female {{2,number,integer} all\\u00E9e} other {all\\u00E9}} \\u00E0 Paris."); 70850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(expected, "Noname est all\\u00E9 \\u00E0 Paris."); 70950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultlength=0; 71050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultLengthOut=u_formatMessage( "fr", pattern, u_strlen(pattern), NULL, resultlength, &status, str , str1,6); 71150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(status==U_BUFFER_OVERFLOW_ERROR) 71250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 71350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status=U_ZERO_ERROR; 71450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho resultlength=resultLengthOut+1; 71550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho result=(UChar*)malloc(sizeof(UChar) * resultlength); 71650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_formatMessage( "fr", pattern, u_strlen(pattern), result, resultlength, &status, str , str1); 71750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(u_strcmp(result, expected)==0) 71850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("PASS: MessagFormat successful on Select test#2\n"); 71950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho else{ 72050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: Error in MessageFormat on Select test#2\n GOT %s EXPECTED %s\n", austrdup(result), 72150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho austrdup(expected) ); 72250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 72350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho free(result); 72450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 72550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(U_FAILURE(status)){ 72650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ERROR: failure in message format on Select test#2 : %s \n", myErrorName(status)); 72750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 72850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho free(str); 72950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho free(str1); 73050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 73150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* test message format with a choice option */ 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestMsgFormatChoice(void) 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* str; 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result; 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[100]; 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[100]; 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength,resultLengthOut; 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * 25); 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "MyDisk"); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing message format with choice test #6\n:"); 745b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /* 746b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Before ICU 4.8, umsg_xxx() did not detect conflicting argument types, 747b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * and this pattern had {0,number,integer} as the inner argument. 748b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * The choice argument has kDouble type while {0,number,integer} has kLong (int32_t). 749b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * ICU 4.8 and above detects this as an error. 750b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * We changed this pattern to work as intended. 751b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 752b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number} files}"); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "The disk MyDisk contains 100 files"); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, 100., str); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, 100., str); 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, expected)==0) 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#6\n"); 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#6\n GOT %s EXPECTED %s\n", austrdup(result), 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(expected) ); 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 7716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format on test#6 : %s (Are you missing data?)\n", myErrorName(status)); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing message format with choice test #7\n:"); 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "The disk MyDisk contains no files"); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, 0., str); 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, 0., str); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, expected)==0) 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#7\n"); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#7\n GOT: %s EXPECTED %s\n", austrdup(result), 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(expected) ); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 7946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format on test#7 : %s (Are you missing data?)\n", myErrorName(status)); 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing message format with choice test #8\n:"); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(expected, "The disk MyDisk contains one file"); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, 1., str); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, 1., str); 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, expected)==0) 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on test#8\n"); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on test#8\n GOT %s EXPECTED: %s\n", austrdup(result), 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(expected) ); 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 8186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format on test#8 : %s (Are you missing data?)\n", myErrorName(status)); 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*test u_parseMessage() with various test patterns */ 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestParseMessage(void) 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[100]; 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar source[100]; 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value; 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar str[10]; 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar res[10]; 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting a sample for parse Message test#9\n"); 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(source, "You deposited an amount of $500.00"); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "You {0} an amount of {1,number,currency}"); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res,"deposited"); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_parseMessage( "en_US", pattern, u_strlen(pattern), source, u_strlen(source), &status, str, &value); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 8436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in parse Message on test#9: %s (Are you missing data?)\n", myErrorName(status)); 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 845c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(value==500.00 && u_strcmp(str,res)==0) 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful on test#9\n"); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parseMessage on test#9 \n"); 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting a sample for parse Message test#10\n"); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(source, "There are 123 files on MyDisk created"); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "There are {0,number,integer} files on {1} created"); 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res,"MyDisk"); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_parseMessage( "en_US", pattern, u_strlen(pattern), source, u_strlen(source), &status, &value, str); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 8606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in parse Message on test#10: %s (Are you missing data?)\n", myErrorName(status)); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 862c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(value==123.00 && u_strcmp(str,res)==0) 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful on test#10\n"); 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parseMessage on test#10 \n"); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t CallFormatMessage(const char* locale, UChar* testCasePattern, int32_t patternLength, 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* result, int32_t resultLength, UErrorCode *status, ...) 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = 0; 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, status); 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru len = u_vformatMessage(locale, testCasePattern, patternLength, result, resultLength, ap, status); 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return len; 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test u_vformatMessage() with various test patterns. */ 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestMessageFormatWithValist( void ) 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *str; 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* result; 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultLengthOut,resultlength,i, patternlength; 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1=1000000000.0; 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str=(UChar*)malloc(sizeof(UChar) * 7); 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(str, "MyDisk"); 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=1; 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * 1); 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing u_formatMessage90\n"); 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru InitStrings(); 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < cnt_testCases; i++) { 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru patternlength=u_strlen(testCasePatterns[i]); 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultLengthOut=CallFormatMessage( "en_US",testCasePatterns[i], patternlength, result, resultlength, 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status, 1, 3456.00, d1); 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status== U_BUFFER_OVERFLOW_ERROR) 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultLengthOut+1; 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)realloc(result,sizeof(UChar) * resultlength); 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CallFormatMessage( "en_US",testCasePatterns[i], patternlength, result, resultlength, 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &status, 1, 3456.00, d1); 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 9116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in message format on testcase %d: %s (Are you missing data?)\n", i, myErrorName(status) ); 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 913c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(u_strcmp(result, testResultStrings[i])==0){ 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: MessagFormat successful on testcase : %d\n", i); 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in MessageFormat on testcase : %d\n GOT %s EXPECTED %s\n", i, 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result), austrdup(testResultStrings[i]) ); 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(str); 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FreeStrings(); 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void CallParseMessage(const char* locale, UChar* pattern, int32_t patternLength, 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* source, int32_t sourceLength, UErrorCode *status, ...) 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, status); 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_vparseMessage(locale, pattern, patternLength, source, sourceLength, ap, status); 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*test u_vparseMessage() with various test patterns */ 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestParseMessageWithValist(void) 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[100]; 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar source[100]; 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value; 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar str[10]; 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar res[10]; 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting a sample for parse Message test#9\n"); 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(source, "You deposited an amount of $500.00"); 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "You {0} an amount of {1,number,currency}"); 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res,"deposited"); 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CallParseMessage( "en_US", pattern, u_strlen(pattern), source, u_strlen(source), &status, str, &value); 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 9556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in parse Message on test#9: %s (Are you missing data?)\n", myErrorName(status)); 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 9576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru else if(value==500.00 && u_strcmp(str,res)==0) 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful on test#9\n"); 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 9606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err("FAIL: Error in parseMessage on test#9\n"); 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting a sample for parse Message test#10\n"); 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(source, "There are 123 files on MyDisk created"); 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "There are {0,number,integer} files on {1} created"); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(res,"MyDisk"); 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CallParseMessage( "en_US", pattern, u_strlen(pattern), source, u_strlen(source), &status, &value, str); 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 9716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ERROR: failure in parse Message on test#10: %s (Are you missing data?)\n", myErrorName(status)); 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 973c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru else if(value==123.00 && u_strcmp(str,res)==0) 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parseMessage successful on test#10\n"); 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parseMessage on test#10 \n"); 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Regression test for ICU4C Jitterbug 904 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJ904(void) { 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[256]; 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar result[256]; 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar string[16]; 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cresult[256]; 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* PAT = "Number {1,number,#0.000}, String {0}, Date {2,date,12:mm:ss.SSS}"; 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* EXP = "Number 0,143, String foo, Date 12:34:56.789"; 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(string, "foo"); 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Slight hack here -- instead of date pattern HH:mm:ss.SSS, use 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 12:mm:ss.SSS. Why? So this test generates the same output -- 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "12:34:56.789" -- regardless of time zone (as long as we aren't 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in one of the 30 minute offset zones!). */ 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, PAT); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length = u_formatMessage("nl", pattern, u_strlen(pattern), 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result, 256, &status, 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru string, 1/7.0, 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789.0+1000*(56+60*(34+60*12))); 100459d709d503bab6e2b61931737e662dd293b40578ccornelius (void)length; /* Suppress set but not used warning. */ 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(cresult, result, sizeof(cresult)); 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* This test passes if it DOESN'T CRASH. However, we test the 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * output anyway. If the string doesn't match in the date part, 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * check to see that the machine doesn't have an unusual time zone 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * offset, that is, one with a non-zero minutes/seconds offset 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * from GMT -- see above. */ 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(cresult, EXP) == 0) { 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Ok: \"%s\"\n", cresult); 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 10166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: got \"%s\", expected \"%s\" -> %s (Are you missing data?)\n", cresult, EXP, u_errorName(status)); 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void OpenMessageFormatTest(void) 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UMessageFormat *f1, *f2, *f3; 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[256]; 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar result[256]; 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cresult[256]; 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* locale = "hi_IN"; 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char* retLoc; 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* PAT = "Number {1,number,#0.000}, String {0}, Date {2,date,12:mm:ss.SSS}"; 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length=0; 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(pattern, PAT, sizeof(pattern)/sizeof(pattern[0])); 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test umsg_open */ 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f1 = umsg_open(pattern,length,NULL,NULL,&status); 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_open failed with pattern %s. Error: \n", PAT, u_errorName(status)); 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test umsg_open with parse error */ 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f2 = umsg_open(pattern,length,NULL,&parseError,&status); 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_open with parseError failed with pattern %s. Error: %s\n", PAT, u_errorName(status)); 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test umsg_clone */ 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f3 = umsg_clone(f1,&status); 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_clone failed. Error %s \n", u_errorName(status)); 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test umsg_setLocale */ 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_setLocale(f1,locale); 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test umsg_getLocale */ 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retLoc = (char*)umsg_getLocale(f1); 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(strcmp(retLoc,locale)!=0) 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_setLocale and umsg_getLocale methods failed. Expected:%s Got: %s \n", locale, retLoc); 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test umsg_applyPattern */ 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_applyPattern(f1,pattern,(int32_t)strlen(PAT),NULL,&status); 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 10786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("umsg_applyPattern failed. Error %s (Are you missing data?)\n",u_errorName(status)); 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test umsg_toPattern */ 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_toPattern(f1,result,256,&status); 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) ){ 10846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("umsg_toPattern method failed. Error: %s (Are you missing data?)\n",u_errorName(status)); 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result,pattern)!=0){ 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_UCharsToChars(result,cresult,256); 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("umsg_toPattern method failed. Expected: %s Got: %s \n",PAT,cresult); 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* umsg_format umsg_parse */ 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_close(f1); 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_close(f2); 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_close(f3); 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void MessageLength(void) 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char patChars[] = {"123{0}456{0}"}; 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char expectedChars[] = {"123abc"}; 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar pattern[sizeof(patChars)]; 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar arg[] = {0x61,0x62,0x63,0}; 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar result[128] = {0}; 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expected[sizeof(expectedChars)]; 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(pattern, patChars, sizeof(pattern)/sizeof(pattern[0])); 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(expected, expectedChars, sizeof(expected)/sizeof(expected[0])); 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_formatMessage("en_US", pattern, 6, result, sizeof(result)/sizeof(result[0]), &status, arg); 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_formatMessage method failed. Error: %s \n",u_errorName(status)); 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(result, expected) != 0) { 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_formatMessage didn't return expected result\n"); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112054dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic void TestMessageWithUnusedArgNumber() { 112154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode errorCode = U_ZERO_ERROR; 112254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius U_STRING_DECL(pattern, "abc {1} def", 11); 112354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar x[2] = { 0x78, 0 }; // "x" 112454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar y[2] = { 0x79, 0 }; // "y" 112554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius U_STRING_DECL(expected, "abc y def", 9); 112654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar result[20]; 112754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t length; 112854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 112954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius U_STRING_INIT(pattern, "abc {1} def", 11); 113054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius U_STRING_INIT(expected, "abc y def", 9); 113154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius length = u_formatMessage("en", pattern, -1, result, LENGTHOF(result), &errorCode, x, y); 113254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(errorCode) || length != u_strlen(expected) || u_strcmp(result, expected) != 0) { 113354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("u_formatMessage(pattern with only {1}, 2 args) failed: result length %d, UErrorCode %s \n", 113454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (int)length, u_errorName(errorCode)); 113554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 113654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 113754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestErrorChaining(void) { 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_USELESS_COLLATOR_ERROR; 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_open(NULL, 0, NULL, NULL, &status); 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_applyPattern(NULL, NULL, 0, NULL, &status); 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_toPattern(NULL, NULL, 0, &status); 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_clone(NULL, &status); 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_format(NULL, NULL, 0, &status); 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_parse(NULL, NULL, 0, NULL, &status); 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_close(NULL); 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* All of this code should have done nothing. */ 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_USELESS_COLLATOR_ERROR) { 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Status got changed to %s\n", u_errorName(status)); 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_open(NULL, 0, NULL, NULL, &status); 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR) { 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Status should be U_ILLEGAL_ARGUMENT_ERROR instead of %s\n", u_errorName(status)); 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_applyPattern(NULL, NULL, 0, NULL, &status); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR) { 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Status should be U_ILLEGAL_ARGUMENT_ERROR instead of %s\n", u_errorName(status)); 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_toPattern(NULL, NULL, 0, &status); 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR) { 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Status should be U_ILLEGAL_ARGUMENT_ERROR instead of %s\n", u_errorName(status)); 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umsg_clone(NULL, &status); 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR) { 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Status should be U_ILLEGAL_ARGUMENT_ERROR instead of %s\n", u_errorName(status)); 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addMsgForTest(TestNode** root); 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addMsgForTest(TestNode** root) 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &OpenMessageFormatTest, "tsformat/cmsgtst/OpenMessageFormatTest"); 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &MessageFormatTest, "tsformat/cmsgtst/MessageFormatTest"); 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestSampleMessageFormat, "tsformat/cmsgtst/TestSampleMessageFormat"); 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestSampleFormatAndParse, "tsformat/cmsgtst/TestSampleFormatAndParse"); 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestSampleFormatAndParseWithError, "tsformat/cmsgtst/TestSampleFormatAndParseWithError"); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestNewFormatAndParseAPI, "tsformat/cmsgtst/TestNewFormatAndParseAPI"); 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestMsgFormatChoice, "tsformat/cmsgtst/TestMsgFormatChoice"); 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestParseMessage, "tsformat/cmsgtst/TestParseMessage"); 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestMessageFormatWithValist, "tsformat/cmsgtst/TestMessageFormatWithValist"); 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestParseMessageWithValist, "tsformat/cmsgtst/TestParseMessageWithValist"); 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestJ904, "tsformat/cmsgtst/TestJ904"); 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &MessageLength, "tsformat/cmsgtst/MessageLength"); 119254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius addTest(root, &TestMessageWithUnusedArgNumber, "tsformat/cmsgtst/TestMessageWithUnusedArgNumber"); 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestErrorChaining, "tsformat/cmsgtst/TestErrorChaining"); 119450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &TestMsgFormatSelect, "tsformat/cmsgtst/TestMsgFormatSelect"); 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1198