1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/********************************************************************
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT:
3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, International Business Machines Corporation and
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved.
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*******************************************************************************
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* File CRESTST.C
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Modification History:
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*        Name                     Description
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*     Madhu Katragadda            Ported for C API
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*  06/14/99     stephen           Updated for RB API changes (no suffix).
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru********************************************************************************
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h"
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cintltst.h"
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h"
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cstring.h"
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "filestrm.h"
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <stdlib.h>
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define RESTEST_HEAP_CHECK 0
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ures.h"
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "crestst.h"
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ctest.h"
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestOpenDirect(void);
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestFallback(void);
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestTable32(void);
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestFileStream(void);
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*****************************************************************************/
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruconst UChar kERROR[] = { 0x0045 /*E*/, 0x0052 /*'R'*/, 0x0052 /*'R'*/,
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru             0x004F /*'O'*/, 0x0052/*'R'*/, 0x0000 /*'\0'*/};
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*****************************************************************************/
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruenum E_Where
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  e_Root,
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  e_te,
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  e_te_IN,
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  e_Where_count
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef enum E_Where E_Where;
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*****************************************************************************/
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CONFIRM_EQ(actual,expected) if (u_strcmp(expected,actual)==0){ record_pass(); } else { record_fail(); log_err("%s  returned  %s  instead of %s\n", action, austrdup(actual), austrdup(expected)); }
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define CONFIRM_ErrorCode(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail();  log_err("%s returned  %s  instead of %s\n", action, myErrorName(actual), myErrorName(expected)); }
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Array of our test objects */
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic struct
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  const char* name;
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  UErrorCode expected_constructor_status;
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  E_Where where;
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  UBool like[e_Where_count];
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  UBool inherits[e_Where_count];
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} param[] =
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* "te" means test */
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* "IN" means inherits */
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  /* "NE" or "ne" means "does not exist" */
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  { "root",         U_ZERO_ERROR,             e_Root,    { TRUE, FALSE, FALSE }, { TRUE, FALSE, FALSE } },
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  { "te",           U_ZERO_ERROR,             e_te,      { FALSE, TRUE, FALSE }, { TRUE, TRUE, FALSE } },
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  { "te_IN",        U_ZERO_ERROR,             e_te_IN,   { FALSE, FALSE, TRUE }, { TRUE, TRUE, TRUE } },
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  { "te_NE",        U_USING_FALLBACK_WARNING, e_te,      { FALSE, TRUE, FALSE }, { TRUE, TRUE, FALSE } },
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  { "te_IN_NE",     U_USING_FALLBACK_WARNING, e_te_IN,   { FALSE, FALSE, TRUE }, { TRUE, TRUE, TRUE } },
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  { "ne",           U_USING_DEFAULT_WARNING,  e_Root,    { TRUE, FALSE, FALSE }, { TRUE, FALSE, FALSE } }
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic int32_t bundles_count = sizeof(param) / sizeof(param[0]);
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/***************************************************************************************/
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* Array of our test objects */
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid addResourceBundleTest(TestNode** root);
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid addResourceBundleTest(TestNode** root)
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    addTest(root, &TestConstruction1, "tsutil/crestst/TestConstruction1");
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    addTest(root, &TestOpenDirect, "tsutil/crestst/TestOpenDirect");
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    addTest(root, &TestResourceBundles, "tsutil/crestst/TestResourceBundles");
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    addTest(root, &TestTable32, "tsutil/crestst/TestTable32");
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    addTest(root, &TestFileStream, "tsutil/crestst/TestFileStream");
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    addTest(root, &TestGetSize, "tsutil/crestst/TestGetSize");
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    addTest(root, &TestGetLocaleByType, "tsutil/crestst/TestGetLocaleByType");
10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestFallback, "tsutil/crestst/TestFallback");
10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestAliasConflict, "tsutil/crestst/TestAliasConflict");
10550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/***************************************************************************************/
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestAliasConflict(void) {
111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *he = NULL;
113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *iw = NULL;
114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UChar *result = NULL;
115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t resultLen;
116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    he = ures_open(NULL, "he", &status);
118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    iw = ures_open(NULL, "iw", &status);
119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status)) {
12085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_err_status(status, "Failed to get resource with %s\n", myErrorName(status));
121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(iw);
123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result = ures_getStringByKey(he, "ExemplarCharacters", &resultLen, &status);
124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status) || result == NULL) {
12585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_err_status(status, "Failed to get resource with %s\n", myErrorName(status));
126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(he);
128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestResourceBundles()
132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    loadTestData(&status);
135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status)) {
13685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("Could not load testdata.dat, status = %s\n", u_errorName(status));
137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("only_in_Root", TRUE, FALSE, FALSE);
141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("in_Root_te", TRUE, TRUE, FALSE);
142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("in_Root_te_te_IN", TRUE, TRUE, TRUE);
143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("in_Root_te_IN", TRUE, FALSE, TRUE);
144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("only_in_te", FALSE, TRUE, FALSE);
145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("only_in_te_IN", FALSE, FALSE, TRUE);
146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("in_te_te_IN", FALSE, TRUE, TRUE);
147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testTag("nonexistent", FALSE, FALSE, FALSE);
148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    log_verbose("Passed:=  %d   Failed=   %d \n", pass, fail);
150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestConstruction1()
153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *test1 = 0, *test2 = 0;
155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UChar *result1, *result2;
156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t resultLen;
157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar temp[7];
158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode   err = U_ZERO_ERROR;
160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char* testdatapath ;
161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char*      locale="te_IN";
162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    log_verbose("Testing ures_open()......\n");
164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    testdatapath=loadTestData(&err);
167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(err))
168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
16985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("Could not load testdata.dat %s \n",myErrorName(err));
170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    test1=ures_open(testdatapath, NULL, &err);
174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(err))
175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("construction of %s did not succeed :  %s \n",NULL, myErrorName(err));
177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    test2=ures_open(testdatapath, locale, &err);
182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(err))
183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("construction of %s did not succeed :  %s \n",locale, myErrorName(err));
185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result1= ures_getStringByKey(test1, "string_in_Root_te_te_IN", &resultLen, &err);
188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    result2= ures_getStringByKey(test2, "string_in_Root_te_te_IN", &resultLen, &err);
189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if (U_FAILURE(err)) {
192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("Something threw an error in TestConstruction(): %s\n", myErrorName(err));
193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    u_uastrcpy(temp, "TE_IN");
197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(u_strcmp(result2, temp)!=0)
199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        int n;
201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("Construction test failed for ures_open();\n");
20327f654740f2a26ad62a5c155af9199af9e69b889claireho        if(!getTestOption(VERBOSITY_OPTION))
204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_info("(run verbose for more information)\n");
205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_verbose("\nGot->");
207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        for(n=0;result2[n];n++)
208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_verbose("%04X ",result2[n]);
210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_verbose("<\n");
212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_verbose("\nWant>");
214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        for(n=0;temp[n];n++)
215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_verbose("%04X ",temp[n]);
217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_verbose("<\n");
219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    log_verbose("for string_in_Root_te_te_IN, default.txt had  %s\n", austrdup(result1));
223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    log_verbose("for string_in_Root_te_te_IN, te_IN.txt had %s\n", austrdup(result2));
224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* Test getVersionNumber*/
226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    log_verbose("Testing version number\n");
227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    log_verbose("for getVersionNumber :  %s\n", ures_getVersionNumber(test1));
228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(test1);
230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(test2);
231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*****************************************************************************/
234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*****************************************************************************/
235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUBool testTag(const char* frag,
237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           UBool in_Root,
238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           UBool in_te,
239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           UBool in_te_IN)
240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t passNum=pass;
242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* Make array from input params */
244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UBool is_in[3];
246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char *NAME[] = { "ROOT", "TE", "TE_IN" };
247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* Now try to load the desired items */
249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle* theBundle = NULL;
250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    char tag[99];
251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    char action[256];
252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR,expected_resource_status = U_ZERO_ERROR;
253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar* base = NULL;
254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UChar* expected_string = NULL;
255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UChar* string = NULL;
256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    char item_tag[10];
257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t i,j;
258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t actual_bundle;
259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t resultLen;
260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char *testdatapath = loadTestData(&status);
261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    is_in[0] = in_Root;
263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    is_in[1] = in_te;
264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    is_in[2] = in_te_IN;
265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    strcpy(item_tag, "tag");
267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    theBundle = ures_open(testdatapath, "root", &status);
270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status))
271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(theBundle);
273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("Couldn't open root bundle in %s", testdatapath);
274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return FALSE;
275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(theBundle);
277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    theBundle = NULL;
278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for (i=0; i<bundles_count; ++i)
281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcpy(action,"construction for");
283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcat(action, param[i].name);
284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        status = U_ZERO_ERROR;
287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        theBundle = ures_open(testdatapath, param[i].name, &status);
289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /*theBundle = ures_open("c:\\icu\\icu\\source\\test\\testdata\\testdata", param[i].name, &status);*/
290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        CONFIRM_ErrorCode(status,param[i].expected_constructor_status);
292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(i == 5)
296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            actual_bundle = 0; /* ne -> default */
297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        else if(i == 3)
298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            actual_bundle = 1; /* te_NE -> te */
299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        else if(i == 4)
300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            actual_bundle = 2; /* te_IN_NE -> te_IN */
301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        else
302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            actual_bundle = i;
303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        expected_resource_status = U_MISSING_RESOURCE_ERROR;
305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        for (j=e_te_IN; j>=e_Root; --j)
306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if (is_in[j] && param[i].inherits[j])
308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            {
309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                if(j == actual_bundle) /* it's in the same bundle OR it's a nonexistent=default bundle (5) */
311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    expected_resource_status = U_ZERO_ERROR;
312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                else if(j == 0)
313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    expected_resource_status = U_USING_DEFAULT_WARNING;
314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                else
315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    expected_resource_status = U_USING_FALLBACK_WARNING;
316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                log_verbose("%s[%d]::%s: in<%d:%s> inherits<%d:%s>.  actual_bundle=%s\n",
318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            param[i].name,
319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            i,
320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            frag,
321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            j,
322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            is_in[j]?"Yes":"No",
323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            j,
324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            param[i].inherits[j]?"Yes":"No",
325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                            param[actual_bundle].name);
326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                break;
328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        for (j=param[i].where; j>=0; --j)
332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if (is_in[j])
334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            {
335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                if(base != NULL) {
336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    free(base);
337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    base = NULL;
338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                }
339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                base=(UChar*)malloc(sizeof(UChar)*(strlen(NAME[j]) + 1));
341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                u_uastrcpy(base,NAME[j]);
342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                break;
344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            else {
346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                if(base != NULL) {
347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    free(base);
348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    base = NULL;
349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                }
350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                base = (UChar*) malloc(sizeof(UChar) * 1);
351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                *base = 0x0000;
352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /*-------------------------------------------------------------------- */
356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* string */
357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcpy(tag,"string_");
359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcat(tag,frag);
360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcpy(action,param[i].name);
362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcat(action, ".ures_get(" );
363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcat(action,tag);
364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        strcat(action, ")");
365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        string=    kERROR;
367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        status = U_ZERO_ERROR;
369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_getStringByKey(theBundle, tag, &resultLen, &status);
371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(U_SUCCESS(status))
372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            status = U_ZERO_ERROR;
374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            string=ures_getStringByKey(theBundle, tag, &resultLen, &status);
375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
377ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_verbose("%s got %d, expected %d\n", action, status, expected_resource_status);
378ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
379ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        CONFIRM_ErrorCode(status, expected_resource_status);
380ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
381ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
382ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(U_SUCCESS(status)){
383ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            expected_string=(UChar*)malloc(sizeof(UChar)*(u_strlen(base) + 3));
384ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            u_strcpy(expected_string,base);
385ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
386ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
387ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        else
388ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
389ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            expected_string = (UChar*)malloc(sizeof(UChar)*(u_strlen(kERROR) + 1));
390ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            u_strcpy(expected_string,kERROR);
391ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
392ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
393ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
394ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        CONFIRM_EQ(string, expected_string);
395ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
396ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        free(expected_string);
397ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(theBundle);
398ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
399ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    free(base);
400ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return (UBool)(passNum == pass);
401ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
402ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
403ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid record_pass()
404ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
405ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  ++pass;
406ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
407ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
408ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid record_fail()
409ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
410ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  ++fail;
411ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
412ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
413ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
414ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test to make sure that the U_USING_FALLBACK_ERROR and U_USING_DEFAULT_ERROR
415ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * are set correctly
416ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
417ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
418ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestFallback()
419ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
420ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
421ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *fr_FR = NULL;
422ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *subResource = NULL;
423ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UChar *junk; /* ignored */
424ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t resultLen;
425ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
426ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    log_verbose("Opening fr_FR..");
427ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fr_FR = ures_open(NULL, "fr_FR", &status);
428ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status))
429ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
43085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_err_status(status, "Couldn't open fr_FR - %s\n", u_errorName(status));
431ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
432ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
433ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
434ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
435ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
436ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
437ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* clear it out..  just do some calls to get the gears turning */
438ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    junk = ures_getStringByKey(fr_FR, "LocaleID", &resultLen, &status);
43959d709d503bab6e2b61931737e662dd293b40578ccornelius    (void)junk;    /* Suppress set but not used warning. */
440ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
441ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    junk = ures_getStringByKey(fr_FR, "LocaleString", &resultLen, &status);
442ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
443ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    junk = ures_getStringByKey(fr_FR, "LocaleID", &resultLen, &status);
444ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
445ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
446ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* OK first one. This should be a Default value. */
44759d709d503bab6e2b61931737e662dd293b40578ccornelius    subResource = ures_getByKey(fr_FR, "layout", NULL, &status);
448ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(status != U_USING_DEFAULT_WARNING)
449ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
45059d709d503bab6e2b61931737e662dd293b40578ccornelius        log_data_err("Expected U_USING_DEFAULT_ERROR when trying to get layout from fr_FR, got %s\n",
451ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            u_errorName(status));
452ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
453ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(subResource);
454ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
455ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
456ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* and this is a Fallback, to fr */
45750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    junk = ures_getStringByKey(fr_FR, "ExemplarCharacters", &resultLen, &status);
458ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(status != U_USING_FALLBACK_WARNING)
459ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
46050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        log_data_err("Expected U_USING_FALLBACK_ERROR when trying to get ExemplarCharacters from fr_FR, got %s\n",
461ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            u_errorName(status));
462ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
463ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
464ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    status = U_ZERO_ERROR;
465ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
466ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(fr_FR);
467ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
468ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
469ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void
470ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTestOpenDirect(void) {
471ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *idna_rules, *casing, *te_IN, *ne, *item;
472ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode errorCode;
473ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
474ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /*
475ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * test that ures_openDirect() opens a resource bundle
476ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * where one can look up its own items but not fallback items
477ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * from root or similar
478ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
479ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
480ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    idna_rules=ures_openDirect(loadTestData(&errorCode), "idna_rules", &errorCode);
481ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
48285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("ures_openDirect(\"idna_rules\") failed: %s\n", u_errorName(errorCode));
483ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
484ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
485ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
486ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(0!=uprv_strcmp("idna_rules", ures_getLocale(idna_rules, &errorCode))) {
487ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("ures_openDirect(\"idna_rules\").getLocale()!=idna_rules\n");
488ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
489ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
490ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
491ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* try an item in idna_rules, must work */
492ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    item=ures_getByKey(idna_rules, "UnassignedSet", NULL, &errorCode);
493ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
494ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("translit_index.getByKey(local key) failed: %s\n", u_errorName(errorCode));
495ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errorCode=U_ZERO_ERROR;
496ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
497ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(item);
498ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
499ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
500ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* try an item in root, must fail */
501ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    item=ures_getByKey(idna_rules, "ShortLanguage", NULL, &errorCode);
502ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
503ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errorCode=U_ZERO_ERROR;
504ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
505ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("idna_rules.getByKey(root key) succeeded!\n");
506ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(item);
507ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
508ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(idna_rules);
509ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
510ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* now make sure that "idna_rules" will not work with ures_open() */
511ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
512ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    idna_rules=ures_open("testdata", "idna_rules", &errorCode);
513ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode) || errorCode==U_USING_DEFAULT_WARNING || errorCode==U_USING_FALLBACK_WARNING) {
514ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* falling back to default or root is ok */
515ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errorCode=U_ZERO_ERROR;
516ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else if(0!=uprv_strcmp("idna_rules", ures_getLocale(idna_rules, &errorCode))) {
517ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /* Opening this file will work in "files mode" on Windows and the Mac,
518ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru           which have case insensitive file systems */
519ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("ures_open(\"idna_rules\") succeeded, should fail! Got: %s\n", u_errorName(errorCode));
520ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
521ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(idna_rules);
522ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
523ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* ures_openDirect("translit_index_WronG") must fail */
524ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    idna_rules=ures_openDirect(NULL, "idna_rules_WronG", &errorCode);
525ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
526ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        errorCode=U_ZERO_ERROR;
527ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
528ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("ures_openDirect(\"idna_rules_WronG\") succeeded, should fail!\n");
529ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
530ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(idna_rules);
531ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
532ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode = U_USING_FALLBACK_WARNING;;
533ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    idna_rules=ures_openDirect("testdata", "idna_rules", &errorCode);
534ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
53585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("ures_openDirect(\"idna_rules\") failed when U_USING_FALLBACK_WARNING was set prior to call: %s\n", u_errorName(errorCode));
536ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
537ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
538ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(idna_rules);
539ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
540ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /*
541ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ICU 3.6 has new resource bundle syntax and data for bundles that do not
542ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * participate in locale fallback. Now,
543ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * - ures_open() works like ures_openDirect() on a bundle with a top-level
544ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *   type of ":table(nofallback)" _if_ the bundle exists
545ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * - ures_open() will continue to find a root bundle if the requested one
546ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *   does not exist, unlike ures_openDirect()
547ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     *
548ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * Test with a different bundle than above to avoid confusion in the cache.
549ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
550ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
551ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /*
552ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * verify that ures_open("casing"), which now has a nofallback declaration,
553ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * does not enable fallbacks
554ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
555ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
556ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    casing=ures_open("testdata", "casing", &errorCode);
557ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
55885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("ures_open(\"casing\") failed: %s\n", u_errorName(errorCode));
559ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
560ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
561ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
562ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
563ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    item=ures_getByKey(casing, "Info", NULL, &errorCode);
564ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
565ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("casing.getByKey(Info) failed - %s\n", u_errorName(errorCode));
566ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
567ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(item);
568ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
569ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
570ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
571ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    item=ures_getByKey(casing, "ShortLanguage", NULL, &errorCode);
572ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_SUCCESS(errorCode)) {
573ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("casing.getByKey(root key) succeeded despite nofallback declaration - %s\n", u_errorName(errorCode));
574ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(item);
575ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
576ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(casing);
577ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
578ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /*
579ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * verify that ures_open("ne") finds the root bundle but
580ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     * ures_openDirect("ne") does not
581ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru     */
582ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
583ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ne=ures_open("testdata", "ne", &errorCode);
584ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
58585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("ures_open(\"ne\") failed (expected to get root): %s\n", u_errorName(errorCode));
586ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
587ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(errorCode!=U_USING_DEFAULT_WARNING || 0!=uprv_strcmp("root", ures_getLocale(ne, &errorCode))) {
588ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("ures_open(\"ne\") found something other than \"root\" - %s\n", u_errorName(errorCode));
589ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
590ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(ne);
591ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
592ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
593ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ne=ures_openDirect("testdata", "ne", &errorCode);
594ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_SUCCESS(errorCode)) {
59585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("ures_openDirect(\"ne\") succeeded unexpectedly\n");
596ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(ne);
597ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
598ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
599ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* verify that ures_openDirect("te_IN") does not enable fallbacks */
600ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
601ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    te_IN=ures_openDirect("testdata", "te_IN", &errorCode);
602ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
60385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("ures_open(\"te_IN\") failed: %s\n", u_errorName(errorCode));
604ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
605ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
606ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
607ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    item=ures_getByKey(te_IN, "ShortLanguage", NULL, &errorCode);
608ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_SUCCESS(errorCode)) {
609ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("te_IN.getByKey(root key) succeeded despite use of ures_openDirect() - %s\n", u_errorName(errorCode));
610ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(item);
611ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
612ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(te_IN);
613ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
614ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
615ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic int32_t
616ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruparseTable32Key(const char *key) {
617ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t number;
618ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    char c;
619ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
620ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    number=0;
621ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    while((c=*key++)!=0) {
622ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        number<<=1;
623ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(c=='1') {
624ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            number|=1;
625ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
626ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
627ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    return number;
628ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
629ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
630ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void
631ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTestTable32(void) {
632ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static const struct {
633ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        const char *key;
634ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        int32_t number;
635ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } testcases[]={
636ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "ooooooooooooooooo", 0 },
637ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "oooooooooooooooo1", 1 },
638ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "ooooooooooooooo1o", 2 },
639ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "oo11ooo1ooo11111o", 25150 },
640ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "oo11ooo1ooo111111", 25151 },
641ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "o1111111111111111", 65535 },
642ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "1oooooooooooooooo", 65536 },
643ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "1ooooooo11o11ooo1", 65969 },
644ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "1ooooooo11o11oo1o", 65970 },
645ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "1ooooooo111oo1111", 65999 }
646ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
647ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
648ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* ### TODO UResourceBundle staticItem={ 0 }; - need to know the size */
649ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *res, *item;
650ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const UChar *s;
651ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char *key;
652ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode errorCode;
653ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t i, j, number, parsedNumber, length, count;
654ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
655ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    errorCode=U_ZERO_ERROR;
656ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    res=ures_open(loadTestData(&errorCode), "testtable32", &errorCode);
657ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
658ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("unable to open testdata/testtable32.res - %s\n", u_errorName(errorCode));
659ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
660ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
661ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(ures_getType(res)!=URES_TABLE) {
662ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("testdata/testtable32.res has type %d instead of URES_TABLE\n", ures_getType(res));
663ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
664ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
665ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    count=ures_getSize(res);
666ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(count!=66000) {
667ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("testdata/testtable32.res should have 66000 entries but has %d\n", count);
668ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
669ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
670ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* get the items by index */
671ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    item=NULL;
672ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for(i=0; i<count; ++i) {
673ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        item=ures_getByIndex(res, i, item, &errorCode);
674ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(U_FAILURE(errorCode)) {
675ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("unable to get item %d of %d in testdata/testtable32.res - %s\n",
676ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    i, count, u_errorName(errorCode));
677ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
678ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
679ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
680ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        key=ures_getKey(item);
681ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        parsedNumber=parseTable32Key(key);
682ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
683ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        switch(ures_getType(item)) {
684ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        case URES_STRING:
685ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            s=ures_getString(item, &length, &errorCode);
686ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if(U_FAILURE(errorCode) || s==NULL) {
687ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                log_err("unable to access the string \"%s\" at %d in testdata/testtable32.res - %s\n",
688ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        key, i, u_errorName(errorCode));
689ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                number=-1;
690ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            } else {
691ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                j=0;
692ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                U16_NEXT(s, j, length, number);
693ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
694ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
695ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        case URES_INT:
696ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            number=ures_getInt(item, &errorCode);
697ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if(U_FAILURE(errorCode)) {
698ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                log_err("unable to access the integer \"%s\" at %d in testdata/testtable32.res - %s\n",
699ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        key, i, u_errorName(errorCode));
700ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                number=-1;
701ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
702ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
703ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        default:
704ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("unexpected resource type %d for \"%s\" at %d in testdata/testtable32.res - %s\n",
705ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    ures_getType(item), key, i, u_errorName(errorCode));
706ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            number=-1;
707ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
708ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
709ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
710ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(number>=0 && number!=parsedNumber) {
711ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("\"%s\" at %d in testdata/testtable32.res has a string/int value of %d, expected %d\n",
712ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    key, i, number, parsedNumber);
713ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
714ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
715ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
716ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* search for some items by key */
717ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for(i=0; i<LENGTHOF(testcases); ++i) {
718ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        item=ures_getByKey(res, testcases[i].key, item, &errorCode);
719ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(U_FAILURE(errorCode)) {
720ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("unable to find the key \"%s\" in testdata/testtable32.res - %s\n",
721ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    testcases[i].key, u_errorName(errorCode));
722ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            continue;
723ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
724ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
725ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        switch(ures_getType(item)) {
726ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        case URES_STRING:
727ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            s=ures_getString(item, &length, &errorCode);
728ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if(U_FAILURE(errorCode) || s==NULL) {
729ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                log_err("unable to access the string \"%s\" in testdata/testtable32.res - %s\n",
730ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        testcases[i].key, u_errorName(errorCode));
731ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                number=-1;
732ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            } else {
733ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                j=0;
734ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                U16_NEXT(s, j, length, number);
735ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
736ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
737ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        case URES_INT:
738ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            number=ures_getInt(item, &errorCode);
739ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            if(U_FAILURE(errorCode)) {
740ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                log_err("unable to access the integer \"%s\" in testdata/testtable32.res - %s\n",
741ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                        testcases[i].key, u_errorName(errorCode));
742ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                number=-1;
743ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
744ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
745ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        default:
746ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("unexpected resource type %d for \"%s\" in testdata/testtable32.res - %s\n",
747ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    ures_getType(item), testcases[i].key, u_errorName(errorCode));
748ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            number=-1;
749ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            break;
750ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
751ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
752ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(number>=0 && number!=testcases[i].number) {
753ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("\"%s\" in testdata/testtable32.res has a string/int value of %d, expected %d\n",
754ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    testcases[i].key, number, testcases[i].number);
755ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
756ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
757ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        key=ures_getKey(item);
758ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(0!=uprv_strcmp(key, testcases[i].key)) {
759ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("\"%s\" in testdata/testtable32.res claims to have the key \"%s\"\n",
760ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                    testcases[i].key, key);
761ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
762ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
763ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
764ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(item);
765ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(res);
766ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
767ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
768ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestFileStream(void){
769ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t c = 0;
770ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t c1=0;
771ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
772ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char* testdatapath = loadTestData(&status);
773ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    char* fileName = (char*) malloc(uprv_strlen(testdatapath) +10);
774ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FileStream* stream = NULL;
775ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* these should not be closed */
776ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FileStream* pStdin  = T_FileStream_stdin();
777ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FileStream* pStdout = T_FileStream_stdout();
778ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FileStream* pStderr = T_FileStream_stderr();
779ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
780ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char* testline = "This is a test line";
781ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t bufLen = (int32_t)strlen(testline)+10;
782ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    char* buf = (char*) malloc(bufLen);
783ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t retLen = 0;
784ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
785ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(pStdin==NULL){
786ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("failed to get T_FileStream_stdin()");
787ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
788ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(pStdout==NULL){
789ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("failed to get T_FileStream_stdout()");
790ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
791ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(pStderr==NULL){
792ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("failed to get T_FileStream_stderr()");
793ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
794ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
795ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    uprv_strcpy(fileName,testdatapath);
796ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    uprv_strcat(fileName,".dat");
797ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    stream = T_FileStream_open(fileName, "r");
798ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(stream==NULL){
799ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_open failed to open %s\n",fileName);
800ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
801ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(!T_FileStream_file_exists(fileName)){
802ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_file_exists failed to verify existence of %s \n",fileName);
803ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
804ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
805ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      retLen=T_FileStream_read(stream,&c,1);
806ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(retLen==0){
807ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_read failed to read from %s \n",fileName);
808ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
809ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      retLen=0;
810ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_rewind(stream);
811ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_read(stream,&c1,1);
812ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(c!=c1){
813ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_rewind failed to rewind %s \n",fileName);
814ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
815ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_rewind(stream);
816ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      c1 = T_FileStream_peek(stream);
817ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(c!=c1){
818ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_peek failed to peekd %s \n",fileName);
819ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
820ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      c = T_FileStream_getc(stream);
821ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_ungetc(c,stream);
822ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(c!= T_FileStream_getc(stream)){
823ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_ungetc failed to d %s \n",fileName);
824ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
825ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
826ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(T_FileStream_size(stream)<=0){
827ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_size failed to d %s \n",fileName);
828ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
829ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(T_FileStream_error(stream)){
830ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_error shouldn't have an error %s\n",fileName);
831ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
832ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(!T_FileStream_error(NULL)){
833ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("T_FileStream_error didn't get an error %s\n",fileName);
834ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
835ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_putc(stream, 0x20);
836ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(!T_FileStream_error(stream)){
837ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        /*
838ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          Warning
839ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          writing to a read-only file may not consistently fail on all platforms
840ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru          (e.g. HP-UX, FreeBSD, MacOSX)
841ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        */
842ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_verbose("T_FileStream_error didn't get an error when writing to a readonly file %s\n",fileName);
843ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
844ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
845ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_close(stream);
846ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
847ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    /* test writing function */
848ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    stream=NULL;
849ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    uprv_strcpy(fileName,testdatapath);
850ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    uprv_strcat(fileName,".tmp");
851ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    stream = T_FileStream_open(fileName,"w+");
852ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
853ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(stream == NULL){
854ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("Could not open %s for writing\n",fileName);
855ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
856ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      c= '$';
857ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_putc(stream,c);
858ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_rewind(stream);
859ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(c != T_FileStream_getc(stream)){
860ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_putc failed %s\n",fileName);
861ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
862ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
863ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_rewind(stream);
864ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_writeLine(stream,testline);
865ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_rewind(stream);
866ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_readLine(stream,buf,bufLen);
867ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(uprv_strncmp(testline, buf,uprv_strlen(buf))!=0){
868ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_writeLine failed %s\n",fileName);
869ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
870ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
871ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_rewind(stream);
872ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_write(stream,testline,(int32_t)strlen(testline));
873ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_rewind(stream);
874ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      retLen = T_FileStream_read(stream, buf, bufLen);
875ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(uprv_strncmp(testline, buf,retLen)!=0){
876ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_write failed %s\n",fileName);
877ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
878ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
879ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      T_FileStream_close(stream);
880ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
881ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(!T_FileStream_remove(fileName)){
882ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_data_err("T_FileStream_remove failed to delete %s\n",fileName);
883ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
884ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
885ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
886ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    free(fileName);
887ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    free(buf);
888ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
889ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
890ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
891ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestGetSize(void) {
892ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const struct {
893ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        const char* key;
894ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        int32_t size;
895ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } test[] = {
896ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "zerotest", 1},
897ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "one", 1},
898ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "importtest", 1},
899ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "integerarray", 1},
900ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "emptyarray", 0},
901ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "emptytable", 0},
902ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "emptystring", 1}, /* empty string is still a string */
903ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "emptyint", 1},
904ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "emptybin", 1},
905ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "testinclude", 1},
906ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "collations", 1}, /* not 2 - there is hidden %%CollationBin */
907ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
908ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
909ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
910ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
911ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *rb = NULL;
912ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *res = NULL;
913ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *helper = NULL;
914ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char* testdatapath = loadTestData(&status);
915ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t i = 0, j = 0;
916ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t size = 0;
917ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
918ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status))
919ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
92085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("Could not load testdata.dat %s\n", u_errorName(status));
921ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
922ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
923ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
924ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    rb = ures_open(testdatapath, "testtypes", &status);
925ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status))
926ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
927ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        log_err("Could not testtypes resource bundle %s\n", u_errorName(status));
928ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
929ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
930ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
931ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for(i = 0; i < sizeof(test)/sizeof(test[0]); i++) {
932ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        res = ures_getByKey(rb, test[i].key, res, &status);
933ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(U_FAILURE(status))
934ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
935ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("Couldn't find the key %s. Error: %s\n", test[i].key, u_errorName(status));
936ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            ures_close(rb);
937ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            return;
938ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
939ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        size = ures_getSize(res);
940ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(size != test[i].size) {
941ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("Expected size %i, got size %i for key %s\n", test[i].size, size, test[i].key);
942ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            for(j = 0; j < size; j++) {
943ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                helper = ures_getByIndex(res, j, helper, &status);
944ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru                log_err("%s\n", ures_getKey(helper));
945ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            }
946ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
947ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
948ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(helper);
949ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(res);
950ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(rb);
951ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
952ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
953ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void TestGetLocaleByType(void) {
954ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    static const struct {
955ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        const char *requestedLocale;
956ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        const char *resourceKey;
957ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        const char *validLocale;
958ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        const char *actualLocale;
959ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } test[] = {
960ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "te_IN_BLAH", "string_only_in_te_IN", "te_IN", "te_IN" },
961ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "te_IN_BLAH", "string_only_in_te", "te_IN", "te" },
962ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "te_IN_BLAH", "string_only_in_Root", "te_IN", "root" },
963ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "te_IN_BLAH_01234567890_01234567890_01234567890_01234567890_01234567890_01234567890", "array_2d_only_in_Root", "te_IN", "root" },
964ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "te_IN_BLAH@currency=euro", "array_2d_only_in_te_IN", "te_IN", "te_IN" },
965ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        { "te_IN_BLAH@collation=phonebook;calendar=thai", "array_2d_only_in_te", "te_IN", "te" }
966ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    };
967ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
968ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
969ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
970ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *rb = NULL;
971ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    UResourceBundle *res = NULL;
972ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char* testdatapath = loadTestData(&status);
973ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    int32_t i = 0;
974ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    const char *locale = NULL;
975ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
976ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(U_FAILURE(status))
977ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    {
97885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho        log_data_err("Could not load testdata.dat %s\n", u_errorName(status));
979ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        return;
980ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
981ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
982ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    for(i = 0; i < sizeof(test)/sizeof(test[0]); i++) {
983ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        rb = ures_open(testdatapath, test[i].requestedLocale, &status);
984ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(U_FAILURE(status))
985ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
986ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("Could not open resource bundle %s (error %s)\n", test[i].requestedLocale, u_errorName(status));
987ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            status = U_ZERO_ERROR;
988ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            continue;
989ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
990ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
991ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        res = ures_getByKey(rb, test[i].resourceKey, res, &status);
992ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(U_FAILURE(status))
993ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        {
994ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("Couldn't find the key %s. Error: %s\n", test[i].resourceKey, u_errorName(status));
995ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            ures_close(rb);
996ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            status = U_ZERO_ERROR;
997ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            continue;
998ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
999ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
1000ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        locale = ures_getLocaleByType(res, ULOC_REQUESTED_LOCALE, &status);
1001ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(locale) {
1002ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("Requested locale should return NULL\n");
1003ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
1004ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        locale = ures_getLocaleByType(res, ULOC_VALID_LOCALE, &status);
1005ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(!locale || strcmp(locale, test[i].validLocale) != 0) {
1006ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("Expected valid locale to be %s. Got %s\n", test[i].requestedLocale, locale);
1007ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
1008ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        locale = ures_getLocaleByType(res, ULOC_ACTUAL_LOCALE, &status);
1009ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        if(!locale || strcmp(locale, test[i].actualLocale) != 0) {
1010ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru            log_err("Expected actual locale to be %s. Got %s\n", test[i].requestedLocale, locale);
1011ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        }
1012ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        ures_close(rb);
1013ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
1014ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ures_close(res);
1015ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
1016ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
1017