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