16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2013, International Business Machines Corporation and
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*******************************************************************************
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File CRESTST.C
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History:
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*        Name                     Description
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*     Madhu Katragadda            Ported for C API
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*  06/14/99     stephen           Updated for RB API changes (no suffix).
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************************
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cintltst.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h"
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h"
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "filestrm.h"
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h>
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define RESTEST_HEAP_CHECK 0
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ures.h"
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "crestst.h"
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ctest.h"
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ucol_imp.h" /* collation */
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestOpenDirect(void);
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestFallback(void);
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestTable32(void);
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestFileStream(void);
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*****************************************************************************/
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst UChar kERROR[] = { 0x0045 /*E*/, 0x0052 /*'R'*/, 0x0052 /*'R'*/,
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org             0x004F /*'O'*/, 0x0052/*'R'*/, 0x0000 /*'\0'*/};
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*****************************************************************************/
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum E_Where
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  e_Root,
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  e_te,
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  e_te_IN,
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  e_Where_count
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum E_Where E_Where;
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*****************************************************************************/
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#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)); }
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#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)); }
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Array of our test objects */
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic struct
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  const char* name;
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UErrorCode expected_constructor_status;
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  E_Where where;
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool like[e_Where_count];
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UBool inherits[e_Where_count];
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} param[] =
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* "te" means test */
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* "IN" means inherits */
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /* "NE" or "ne" means "does not exist" */
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  { "root",         U_ZERO_ERROR,             e_Root,    { TRUE, FALSE, FALSE }, { TRUE, FALSE, FALSE } },
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  { "te",           U_ZERO_ERROR,             e_te,      { FALSE, TRUE, FALSE }, { TRUE, TRUE, FALSE } },
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  { "te_IN",        U_ZERO_ERROR,             e_te_IN,   { FALSE, FALSE, TRUE }, { TRUE, TRUE, TRUE } },
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  { "te_NE",        U_USING_FALLBACK_WARNING, e_te,      { FALSE, TRUE, FALSE }, { TRUE, TRUE, FALSE } },
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  { "te_IN_NE",     U_USING_FALLBACK_WARNING, e_te_IN,   { FALSE, FALSE, TRUE }, { TRUE, TRUE, TRUE } },
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  { "ne",           U_USING_DEFAULT_WARNING,  e_Root,    { TRUE, FALSE, FALSE }, { TRUE, FALSE, FALSE } }
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int32_t bundles_count = sizeof(param) / sizeof(param[0]);
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/***************************************************************************************/
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Array of our test objects */
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addResourceBundleTest(TestNode** root);
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addResourceBundleTest(TestNode** root)
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestConstruction1, "tsutil/crestst/TestConstruction1");
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestOpenDirect, "tsutil/crestst/TestOpenDirect");
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestResourceBundles, "tsutil/crestst/TestResourceBundles");
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestTable32, "tsutil/crestst/TestTable32");
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestFileStream, "tsutil/crestst/TestFileStream");
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestGetSize, "tsutil/crestst/TestGetSize");
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestGetLocaleByType, "tsutil/crestst/TestGetLocaleByType");
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestFallback, "tsutil/crestst/TestFallback");
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    addTest(root, &TestAliasConflict, "tsutil/crestst/TestAliasConflict");
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/***************************************************************************************/
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid TestAliasConflict(void) {
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *he = NULL;
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *iw = NULL;
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar *result = NULL;
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t resultLen;
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    he = ures_open(NULL, "he", &status);
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    iw = ures_open(NULL, "iw", &status);
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err_status(status, "Failed to get resource with %s\n", myErrorName(status));
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(iw);
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    result = ures_getStringByKey(he, "ExemplarCharacters", &resultLen, &status);
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status) || result == NULL) {
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err_status(status, "Failed to get resource with %s\n", myErrorName(status));
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(he);
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid TestResourceBundles()
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    loadTestData(&status);
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status)) {
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("Could not load testdata.dat, status = %s\n", u_errorName(status));
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("only_in_Root", TRUE, FALSE, FALSE);
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("in_Root_te", TRUE, TRUE, FALSE);
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("in_Root_te_te_IN", TRUE, TRUE, TRUE);
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("in_Root_te_IN", TRUE, FALSE, TRUE);
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("only_in_te", FALSE, TRUE, FALSE);
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("only_in_te_IN", FALSE, FALSE, TRUE);
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("in_te_te_IN", FALSE, TRUE, TRUE);
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testTag("nonexistent", FALSE, FALSE, FALSE);
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    log_verbose("Passed:=  %d   Failed=   %d \n", pass, fail);
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid TestConstruction1()
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *test1 = 0, *test2 = 0;
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar *result1, *result2;
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t resultLen;
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar temp[7];
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode   err = U_ZERO_ERROR;
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* testdatapath ;
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char*      locale="te_IN";
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    log_verbose("Testing ures_open()......\n");
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    testdatapath=loadTestData(&err);
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(err))
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("Could not load testdata.dat %s \n",myErrorName(err));
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    test1=ures_open(testdatapath, NULL, &err);
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(err))
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("construction of %s did not succeed :  %s \n",NULL, myErrorName(err));
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    test2=ures_open(testdatapath, locale, &err);
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(err))
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("construction of %s did not succeed :  %s \n",locale, myErrorName(err));
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    result1= ures_getStringByKey(test1, "string_in_Root_te_te_IN", &resultLen, &err);
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    result2= ures_getStringByKey(test2, "string_in_Root_te_te_IN", &resultLen, &err);
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (U_FAILURE(err)) {
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("Something threw an error in TestConstruction(): %s\n", myErrorName(err));
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_uastrcpy(temp, "TE_IN");
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(u_strcmp(result2, temp)!=0)
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int n;
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("Construction test failed for ures_open();\n");
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(!getTestOption(VERBOSITY_OPTION))
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_info("(run verbose for more information)\n");
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_verbose("\nGot->");
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for(n=0;result2[n];n++)
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_verbose("%04X ",result2[n]);
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_verbose("<\n");
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_verbose("\nWant>");
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for(n=0;temp[n];n++)
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_verbose("%04X ",temp[n]);
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_verbose("<\n");
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    log_verbose("for string_in_Root_te_te_IN, default.txt had  %s\n", austrdup(result1));
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    log_verbose("for string_in_Root_te_te_IN, te_IN.txt had %s\n", austrdup(result2));
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Test getVersionNumber*/
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    log_verbose("Testing version number\n");
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    log_verbose("for getVersionNumber :  %s\n", ures_getVersionNumber(test1));
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(test1);
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(test2);
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*****************************************************************************/
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*****************************************************************************/
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgUBool testTag(const char* frag,
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org           UBool in_Root,
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org           UBool in_te,
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org           UBool in_te_IN)
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t passNum=pass;
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Make array from input params */
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBool is_in[3];
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char *NAME[] = { "ROOT", "TE", "TE_IN" };
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* Now try to load the desired items */
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle* theBundle = NULL;
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char tag[99];
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char action[256];
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR,expected_resource_status = U_ZERO_ERROR;
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar* base = NULL;
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UChar* expected_string = NULL;
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar* string = NULL;
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char item_tag[10];
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t i,j;
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t actual_bundle;
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t resultLen;
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char *testdatapath = loadTestData(&status);
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    is_in[0] = in_Root;
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    is_in[1] = in_te;
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    is_in[2] = in_te_IN;
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    strcpy(item_tag, "tag");
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    theBundle = ures_open(testdatapath, "root", &status);
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status))
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(theBundle);
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("Couldn't open root bundle in %s", testdatapath);
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return FALSE;
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(theBundle);
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    theBundle = NULL;
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (i=0; i<bundles_count; ++i)
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcpy(action,"construction for");
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcat(action, param[i].name);
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        theBundle = ures_open(testdatapath, param[i].name, &status);
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        /*theBundle = ures_open("c:\\icu\\icu\\source\\test\\testdata\\testdata", param[i].name, &status);*/
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CONFIRM_ErrorCode(status,param[i].expected_constructor_status);
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(i == 5)
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            actual_bundle = 0; /* ne -> default */
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        else if(i == 3)
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            actual_bundle = 1; /* te_NE -> te */
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        else if(i == 4)
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            actual_bundle = 2; /* te_IN_NE -> te_IN */
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        else
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            actual_bundle = i;
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        expected_resource_status = U_MISSING_RESOURCE_ERROR;
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (j=e_te_IN; j>=e_Root; --j)
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (is_in[j] && param[i].inherits[j])
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if(j == actual_bundle) /* it's in the same bundle OR it's a nonexistent=default bundle (5) */
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    expected_resource_status = U_ZERO_ERROR;
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                else if(j == 0)
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    expected_resource_status = U_USING_DEFAULT_WARNING;
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                else
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    expected_resource_status = U_USING_FALLBACK_WARNING;
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                log_verbose("%s[%d]::%s: in<%d:%s> inherits<%d:%s>.  actual_bundle=%s\n",
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            param[i].name,
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            i,
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            frag,
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            j,
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            is_in[j]?"Yes":"No",
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            j,
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            param[i].inherits[j]?"Yes":"No",
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            param[actual_bundle].name);
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        for (j=param[i].where; j>=0; --j)
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if (is_in[j])
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            {
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if(base != NULL) {
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    free(base);
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    base = NULL;
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                base=(UChar*)malloc(sizeof(UChar)*(strlen(NAME[j]) + 1));
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                u_uastrcpy(base,NAME[j]);
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                break;
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            else {
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                if(base != NULL) {
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    free(base);
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    base = NULL;
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                }
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                base = (UChar*) malloc(sizeof(UChar) * 1);
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                *base = 0x0000;
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        /*-------------------------------------------------------------------- */
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        /* string */
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcpy(tag,"string_");
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcat(tag,frag);
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcpy(action,param[i].name);
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcat(action, ".ures_get(" );
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcat(action,tag);
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        strcat(action, ")");
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        string=    kERROR;
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        status = U_ZERO_ERROR;
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_getStringByKey(theBundle, tag, &resultLen, &status);
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_SUCCESS(status))
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            status = U_ZERO_ERROR;
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            string=ures_getStringByKey(theBundle, tag, &resultLen, &status);
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_verbose("%s got %d, expected %d\n", action, status, expected_resource_status);
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CONFIRM_ErrorCode(status, expected_resource_status);
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_SUCCESS(status)){
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            expected_string=(UChar*)malloc(sizeof(UChar)*(u_strlen(base) + 3));
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            u_strcpy(expected_string,base);
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        else
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            expected_string = (UChar*)malloc(sizeof(UChar)*(u_strlen(kERROR) + 1));
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            u_strcpy(expected_string,kERROR);
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        CONFIRM_EQ(string, expected_string);
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        free(expected_string);
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(theBundle);
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    free(base);
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return (UBool)(passNum == pass);
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid record_pass()
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  ++pass;
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid record_fail()
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  ++fail;
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test to make sure that the U_USING_FALLBACK_ERROR and U_USING_DEFAULT_ERROR
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are set correctly
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestFallback()
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *fr_FR = NULL;
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *subResource = NULL;
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar *junk; /* ignored */
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t resultLen;
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    log_verbose("Opening fr_FR..");
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    fr_FR = ures_open(NULL, "fr_FR", &status);
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status))
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err_status(status, "Couldn't open fr_FR - %s\n", u_errorName(status));
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* clear it out..  just do some calls to get the gears turning */
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    junk = ures_getStringByKey(fr_FR, "LocaleID", &resultLen, &status);
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    (void)junk;    /* Suppress set but not used warning. */
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    junk = ures_getStringByKey(fr_FR, "LocaleString", &resultLen, &status);
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    junk = ures_getStringByKey(fr_FR, "LocaleID", &resultLen, &status);
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* OK first one. This should be a Default value. */
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    subResource = ures_getByKey(fr_FR, "layout", NULL, &status);
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(status != U_USING_DEFAULT_WARNING)
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("Expected U_USING_DEFAULT_ERROR when trying to get layout from fr_FR, got %s\n",
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            u_errorName(status));
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(subResource);
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* and this is a Fallback, to fr */
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    junk = ures_getStringByKey(fr_FR, "ExemplarCharacters", &resultLen, &status);
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(status != U_USING_FALLBACK_WARNING)
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("Expected U_USING_FALLBACK_ERROR when trying to get ExemplarCharacters from fr_FR, got %s\n",
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            u_errorName(status));
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    status = U_ZERO_ERROR;
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(fr_FR);
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestOpenDirect(void) {
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *idna_rules, *casing, *te_IN, *ne, *item;
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode errorCode;
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * test that ures_openDirect() opens a resource bundle
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * where one can look up its own items but not fallback items
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * from root or similar
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    idna_rules=ures_openDirect(loadTestData(&errorCode), "idna_rules", &errorCode);
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("ures_openDirect(\"idna_rules\") failed: %s\n", u_errorName(errorCode));
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(0!=uprv_strcmp("idna_rules", ures_getLocale(idna_rules, &errorCode))) {
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("ures_openDirect(\"idna_rules\").getLocale()!=idna_rules\n");
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* try an item in idna_rules, must work */
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    item=ures_getByKey(idna_rules, "UnassignedSet", NULL, &errorCode);
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("translit_index.getByKey(local key) failed: %s\n", u_errorName(errorCode));
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errorCode=U_ZERO_ERROR;
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(item);
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* try an item in root, must fail */
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    item=ures_getByKey(idna_rules, "ShortLanguage", NULL, &errorCode);
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errorCode=U_ZERO_ERROR;
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("idna_rules.getByKey(root key) succeeded!\n");
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(item);
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(idna_rules);
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* now make sure that "idna_rules" will not work with ures_open() */
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    idna_rules=ures_open("testdata", "idna_rules", &errorCode);
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode) || errorCode==U_USING_DEFAULT_WARNING || errorCode==U_USING_FALLBACK_WARNING) {
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        /* falling back to default or root is ok */
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errorCode=U_ZERO_ERROR;
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else if(0!=uprv_strcmp("idna_rules", ures_getLocale(idna_rules, &errorCode))) {
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        /* Opening this file will work in "files mode" on Windows and the Mac,
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org           which have case insensitive file systems */
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("ures_open(\"idna_rules\") succeeded, should fail! Got: %s\n", u_errorName(errorCode));
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(idna_rules);
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* ures_openDirect("translit_index_WronG") must fail */
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    idna_rules=ures_openDirect(NULL, "idna_rules_WronG", &errorCode);
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        errorCode=U_ZERO_ERROR;
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("ures_openDirect(\"idna_rules_WronG\") succeeded, should fail!\n");
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(idna_rules);
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode = U_USING_FALLBACK_WARNING;;
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    idna_rules=ures_openDirect("testdata", "idna_rules", &errorCode);
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("ures_openDirect(\"idna_rules\") failed when U_USING_FALLBACK_WARNING was set prior to call: %s\n", u_errorName(errorCode));
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(idna_rules);
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * ICU 3.6 has new resource bundle syntax and data for bundles that do not
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * participate in locale fallback. Now,
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - ures_open() works like ures_openDirect() on a bundle with a top-level
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   type of ":table(nofallback)" _if_ the bundle exists
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * - ures_open() will continue to find a root bundle if the requested one
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *   does not exist, unlike ures_openDirect()
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     *
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Test with a different bundle than above to avoid confusion in the cache.
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * verify that ures_open("casing"), which now has a nofallback declaration,
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * does not enable fallbacks
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    casing=ures_open("testdata", "casing", &errorCode);
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("ures_open(\"casing\") failed: %s\n", u_errorName(errorCode));
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    item=ures_getByKey(casing, "Info", NULL, &errorCode);
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("casing.getByKey(Info) failed - %s\n", u_errorName(errorCode));
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(item);
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    item=ures_getByKey(casing, "ShortLanguage", NULL, &errorCode);
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_SUCCESS(errorCode)) {
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("casing.getByKey(root key) succeeded despite nofallback declaration - %s\n", u_errorName(errorCode));
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(item);
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(casing);
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /*
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * verify that ures_open("ne") finds the root bundle but
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * ures_openDirect("ne") does not
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ne=ures_open("testdata", "ne", &errorCode);
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("ures_open(\"ne\") failed (expected to get root): %s\n", u_errorName(errorCode));
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(errorCode!=U_USING_DEFAULT_WARNING || 0!=uprv_strcmp("root", ures_getLocale(ne, &errorCode))) {
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("ures_open(\"ne\") found something other than \"root\" - %s\n", u_errorName(errorCode));
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(ne);
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ne=ures_openDirect("testdata", "ne", &errorCode);
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_SUCCESS(errorCode)) {
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("ures_openDirect(\"ne\") succeeded unexpectedly\n");
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(ne);
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* verify that ures_openDirect("te_IN") does not enable fallbacks */
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    te_IN=ures_openDirect("testdata", "te_IN", &errorCode);
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("ures_open(\"te_IN\") failed: %s\n", u_errorName(errorCode));
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    item=ures_getByKey(te_IN, "ShortLanguage", NULL, &errorCode);
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_SUCCESS(errorCode)) {
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("te_IN.getByKey(root key) succeeded despite use of ures_openDirect() - %s\n", u_errorName(errorCode));
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(item);
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(te_IN);
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int32_t
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgparseTable32Key(const char *key) {
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t number;
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char c;
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    number=0;
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    while((c=*key++)!=0) {
6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        number<<=1;
6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(c=='1') {
6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            number|=1;
6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return number;
6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void
6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTestTable32(void) {
6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const struct {
6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const char *key;
6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t number;
6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } testcases[]={
6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "ooooooooooooooooo", 0 },
6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "oooooooooooooooo1", 1 },
6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "ooooooooooooooo1o", 2 },
6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "oo11ooo1ooo11111o", 25150 },
6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "oo11ooo1ooo111111", 25151 },
6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "o1111111111111111", 65535 },
6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "1oooooooooooooooo", 65536 },
6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "1ooooooo11o11ooo1", 65969 },
6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "1ooooooo11o11oo1o", 65970 },
6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "1ooooooo111oo1111", 65999 }
6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* ### TODO UResourceBundle staticItem={ 0 }; - need to know the size */
6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *res, *item;
6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const UChar *s;
6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char *key;
6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode errorCode;
6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t i, j, number, parsedNumber, length, count;
6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    errorCode=U_ZERO_ERROR;
6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    res=ures_open(loadTestData(&errorCode), "testtable32", &errorCode);
6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(errorCode)) {
6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("unable to open testdata/testtable32.res - %s\n", u_errorName(errorCode));
6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(ures_getType(res)!=URES_TABLE) {
6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("testdata/testtable32.res has type %d instead of URES_TABLE\n", ures_getType(res));
6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    count=ures_getSize(res);
6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(count!=66000) {
6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("testdata/testtable32.res should have 66000 entries but has %d\n", count);
6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* get the items by index */
6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    item=NULL;
6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(i=0; i<count; ++i) {
6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        item=ures_getByIndex(res, i, item, &errorCode);
6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_FAILURE(errorCode)) {
6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("unable to get item %d of %d in testdata/testtable32.res - %s\n",
6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    i, count, u_errorName(errorCode));
6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        key=ures_getKey(item);
6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        parsedNumber=parseTable32Key(key);
6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        switch(ures_getType(item)) {
6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case URES_STRING:
6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            s=ures_getString(item, &length, &errorCode);
6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if(U_FAILURE(errorCode) || s==NULL) {
6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                log_err("unable to access the string \"%s\" at %d in testdata/testtable32.res - %s\n",
6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        key, i, u_errorName(errorCode));
6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                number=-1;
6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else {
6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                j=0;
6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                U16_NEXT(s, j, length, number);
6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case URES_INT:
6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            number=ures_getInt(item, &errorCode);
6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if(U_FAILURE(errorCode)) {
7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                log_err("unable to access the integer \"%s\" at %d in testdata/testtable32.res - %s\n",
7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        key, i, u_errorName(errorCode));
7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                number=-1;
7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        default:
7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("unexpected resource type %d for \"%s\" at %d in testdata/testtable32.res - %s\n",
7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    ures_getType(item), key, i, u_errorName(errorCode));
7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            number=-1;
7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(number>=0 && number!=parsedNumber) {
7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("\"%s\" at %d in testdata/testtable32.res has a string/int value of %d, expected %d\n",
7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    key, i, number, parsedNumber);
7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* search for some items by key */
7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(i=0; i<LENGTHOF(testcases); ++i) {
7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        item=ures_getByKey(res, testcases[i].key, item, &errorCode);
7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_FAILURE(errorCode)) {
7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("unable to find the key \"%s\" in testdata/testtable32.res - %s\n",
7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    testcases[i].key, u_errorName(errorCode));
7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            continue;
7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        switch(ures_getType(item)) {
7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case URES_STRING:
7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            s=ures_getString(item, &length, &errorCode);
7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if(U_FAILURE(errorCode) || s==NULL) {
7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                log_err("unable to access the string \"%s\" in testdata/testtable32.res - %s\n",
7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        testcases[i].key, u_errorName(errorCode));
7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                number=-1;
7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            } else {
7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                j=0;
7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                U16_NEXT(s, j, length, number);
7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        case URES_INT:
7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            number=ures_getInt(item, &errorCode);
7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            if(U_FAILURE(errorCode)) {
7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                log_err("unable to access the integer \"%s\" in testdata/testtable32.res - %s\n",
7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        testcases[i].key, u_errorName(errorCode));
7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                number=-1;
7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        default:
7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("unexpected resource type %d for \"%s\" in testdata/testtable32.res - %s\n",
7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    ures_getType(item), testcases[i].key, u_errorName(errorCode));
7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            number=-1;
7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            break;
7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(number>=0 && number!=testcases[i].number) {
7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("\"%s\" in testdata/testtable32.res has a string/int value of %d, expected %d\n",
7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    testcases[i].key, number, testcases[i].number);
7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        key=ures_getKey(item);
7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(0!=uprv_strcmp(key, testcases[i].key)) {
7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("\"%s\" in testdata/testtable32.res claims to have the key \"%s\"\n",
7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    testcases[i].key, key);
7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(item);
7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(res);
7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestFileStream(void){
7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t c = 0;
7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t c1=0;
7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* testdatapath = loadTestData(&status);
7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char* fileName = (char*) malloc(uprv_strlen(testdatapath) +10);
7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FileStream* stream = NULL;
7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* these should not be closed */
7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FileStream* pStdin  = T_FileStream_stdin();
7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FileStream* pStdout = T_FileStream_stdout();
7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    FileStream* pStderr = T_FileStream_stderr();
7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* testline = "This is a test line";
7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t bufLen = (int32_t)strlen(testline)+10;
7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    char* buf = (char*) malloc(bufLen);
7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t retLen = 0;
7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(pStdin==NULL){
7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("failed to get T_FileStream_stdin()");
7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(pStdout==NULL){
7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("failed to get T_FileStream_stdout()");
7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(pStderr==NULL){
7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("failed to get T_FileStream_stderr()");
7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uprv_strcpy(fileName,testdatapath);
7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uprv_strcat(fileName,".dat");
7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    stream = T_FileStream_open(fileName, "r");
8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(stream==NULL){
8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_open failed to open %s\n",fileName);
8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(!T_FileStream_file_exists(fileName)){
8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_file_exists failed to verify existence of %s \n",fileName);
8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      retLen=T_FileStream_read(stream,&c,1);
8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(retLen==0){
8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_read failed to read from %s \n",fileName);
8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      retLen=0;
8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_rewind(stream);
8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_read(stream,&c1,1);
8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(c!=c1){
8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_rewind failed to rewind %s \n",fileName);
8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_rewind(stream);
8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      c1 = T_FileStream_peek(stream);
8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(c!=c1){
8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_peek failed to peekd %s \n",fileName);
8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      c = T_FileStream_getc(stream);
8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_ungetc(c,stream);
8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(c!= T_FileStream_getc(stream)){
8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_ungetc failed to d %s \n",fileName);
8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(T_FileStream_size(stream)<=0){
8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_size failed to d %s \n",fileName);
8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(T_FileStream_error(stream)){
8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_error shouldn't have an error %s\n",fileName);
8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(!T_FileStream_error(NULL)){
8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("T_FileStream_error didn't get an error %s\n",fileName);
8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_putc(stream, 0x20);
8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(!T_FileStream_error(stream)){
8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        /*
8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          Warning
8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          writing to a read-only file may not consistently fail on all platforms
8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          (e.g. HP-UX, FreeBSD, MacOSX)
8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        */
8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_verbose("T_FileStream_error didn't get an error when writing to a readonly file %s\n",fileName);
8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_close(stream);
8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /* test writing function */
8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    stream=NULL;
8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uprv_strcpy(fileName,testdatapath);
8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    uprv_strcat(fileName,".tmp");
8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    stream = T_FileStream_open(fileName,"w+");
8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(stream == NULL){
8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("Could not open %s for writing\n",fileName);
8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } else {
8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      c= '$';
8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_putc(stream,c);
8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_rewind(stream);
8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(c != T_FileStream_getc(stream)){
8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_putc failed %s\n",fileName);
8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_rewind(stream);
8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_writeLine(stream,testline);
8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_rewind(stream);
8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_readLine(stream,buf,bufLen);
8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(uprv_strncmp(testline, buf,uprv_strlen(buf))!=0){
8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_writeLine failed %s\n",fileName);
8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_rewind(stream);
8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_write(stream,testline,(int32_t)strlen(testline));
8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_rewind(stream);
8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      retLen = T_FileStream_read(stream, buf, bufLen);
8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      if(uprv_strncmp(testline, buf,retLen)!=0){
8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_write failed %s\n",fileName);
8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      }
8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      T_FileStream_close(stream);
8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(!T_FileStream_remove(fileName)){
8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("T_FileStream_remove failed to delete %s\n",fileName);
8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    free(fileName);
8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    free(buf);
8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestGetSize(void) {
8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const struct {
8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const char* key;
8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t size;
8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } test[] = {
8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "zerotest", 1},
8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "one", 1},
9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "importtest", 1},
9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "integerarray", 1},
9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "emptyarray", 0},
9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "emptytable", 0},
9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "emptystring", 1}, /* empty string is still a string */
9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "emptyint", 1},
9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "emptybin", 1},
9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "testinclude", 1},
9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "collations", 1}, /* not 2 - there is hidden %%CollationBin */
9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *rb = NULL;
9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *res = NULL;
9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *helper = NULL;
9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* testdatapath = loadTestData(&status);
9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t i = 0, j = 0;
9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t size = 0;
9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status))
9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("Could not load testdata.dat %s\n", u_errorName(status));
9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    rb = ures_open(testdatapath, "testtypes", &status);
9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status))
9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_err("Could not testtypes resource bundle %s\n", u_errorName(status));
9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(i = 0; i < sizeof(test)/sizeof(test[0]); i++) {
9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        res = ures_getByKey(rb, test[i].key, res, &status);
9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_FAILURE(status))
9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("Couldn't find the key %s. Error: %s\n", test[i].key, u_errorName(status));
9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ures_close(rb);
9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            return;
9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        size = ures_getSize(res);
9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(size != test[i].size) {
9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("Expected size %i, got size %i for key %s\n", test[i].size, size, test[i].key);
9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            for(j = 0; j < size; j++) {
9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                helper = ures_getByIndex(res, j, helper, &status);
9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                log_err("%s\n", ures_getKey(helper));
9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(helper);
9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(res);
9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(rb);
9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestGetLocaleByType(void) {
9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const struct {
9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const char *requestedLocale;
9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const char *resourceKey;
9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const char *validLocale;
9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const char *actualLocale;
9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    } test[] = {
9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "te_IN_BLAH", "string_only_in_te_IN", "te_IN", "te_IN" },
9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "te_IN_BLAH", "string_only_in_te", "te_IN", "te" },
9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "te_IN_BLAH", "string_only_in_Root", "te_IN", "root" },
9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "te_IN_BLAH_01234567890_01234567890_01234567890_01234567890_01234567890_01234567890", "array_2d_only_in_Root", "te_IN", "root" },
9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "te_IN_BLAH@currency=euro", "array_2d_only_in_te_IN", "te_IN", "te_IN" },
9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        { "te_IN_BLAH@collation=phonebook;calendar=thai", "array_2d_only_in_te", "te_IN", "te" }
9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *rb = NULL;
9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UResourceBundle *res = NULL;
9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char* testdatapath = loadTestData(&status);
9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    int32_t i = 0;
9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const char *locale = NULL;
9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if(U_FAILURE(status))
9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    {
9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        log_data_err("Could not load testdata.dat %s\n", u_errorName(status));
9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        return;
9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for(i = 0; i < sizeof(test)/sizeof(test[0]); i++) {
9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        rb = ures_open(testdatapath, test[i].requestedLocale, &status);
9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_FAILURE(status))
9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("Could not open resource bundle %s (error %s)\n", test[i].requestedLocale, u_errorName(status));
9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            status = U_ZERO_ERROR;
9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            continue;
9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        res = ures_getByKey(rb, test[i].resourceKey, res, &status);
9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(U_FAILURE(status))
9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        {
9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("Couldn't find the key %s. Error: %s\n", test[i].resourceKey, u_errorName(status));
9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ures_close(rb);
9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            status = U_ZERO_ERROR;
9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            continue;
10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        locale = ures_getLocaleByType(res, ULOC_REQUESTED_LOCALE, &status);
10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(locale) {
10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("Requested locale should return NULL\n");
10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        locale = ures_getLocaleByType(res, ULOC_VALID_LOCALE, &status);
10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(!locale || strcmp(locale, test[i].validLocale) != 0) {
10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("Expected valid locale to be %s. Got %s\n", test[i].requestedLocale, locale);
10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        locale = ures_getLocaleByType(res, ULOC_ACTUAL_LOCALE, &status);
10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        if(!locale || strcmp(locale, test[i].actualLocale) != 0) {
10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            log_err("Expected actual locale to be %s. Got %s\n", test[i].requestedLocale, locale);
10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        ures_close(rb);
10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ures_close(res);
10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1019