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