creststn.c revision 50294ead5e5d23f5bbfed76e00e6b510bd41eee1
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/********************************************************************
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT:
3b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Copyright (c) 1997-2009, International Business Machines Corporation and
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*******************************************************************************
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File CRESTST.C
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History:
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*        Name              Date               Description
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Madhu Katragadda    05/09/2000   Ported Tests for New ResourceBundle API
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Madhu Katragadda    05/24/2000   Added new tests to test RES_BINARY for collationElements
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <time.h>
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/putil.h"
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h"
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucnv.h"
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "string.h"
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h"
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h"
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucol_imp.h"  /* for U_ICUDATA_COLL */
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ubrkimpl.h" /* for U_ICUDATA_BRKITR */
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define RESTEST_HEAP_CHECK 0
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h"
32b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "unicode/ulocdata.h"
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uresimp.h"
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "creststn.h"
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ctest.h"
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucbuf.h"
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "ureslocs.h"
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t pass;
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t fail;
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*****************************************************************************/
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a random unsigned long l where 0N <= l <= ULONG_MAX.
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic uint32_t
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querurandul()
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint32_t l=0;
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i;
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static UBool initialized = FALSE;
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (!initialized)
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        srand((unsigned)time(NULL));
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        initialized = TRUE;
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Assume rand has at least 12 bits of precision */
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<sizeof(l); ++i)
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ((char*)&l)[i] = (char)((rand() & 0x0FF0) >> 4);
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return l;
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a random double x where 0.0 <= x < 1.0.
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic double
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querurandd()
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return ((double)randul()) / UINT32_MAX;
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a random integer i where 0 <= i < n.
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t randi(int32_t n)
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (int32_t)(randd() * n);
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/***************************************************************************************/
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Convert an integer, positive or negative, to a character string radix 10.
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic char*
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruitoa1(int32_t i, char* buf)
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  char *p = 0;
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  char* result = buf;
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* Handle negative */
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(i < 0) {
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *buf++ = '-';
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    i = -i;
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* Output digits in reverse order */
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  p = buf;
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  do {
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *p++ = (char)('0' + (i % 10));
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    i /= 10;
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  while(i);
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  *p-- = 0;
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* Reverse the string */
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  while(buf < p) {
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char c = *buf;
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *buf++ = *p;
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    *p-- = c;
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  return result;
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const int32_t kERROR_COUNT = -1234567;
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar kERROR[] = { 0x0045 /*E*/, 0x0052 /*'R'*/, 0x0052 /*'R'*/,
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             0x004F /*'O'*/, 0x0052/*'R'*/, 0x0000 /*'\0'*/};
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*****************************************************************************/
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruenum E_Where
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  e_Root,
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  e_te,
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  e_te_IN,
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  e_Where_count
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum E_Where E_Where;
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*****************************************************************************/
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CONFIRM_EQ(actual,expected) if (u_strcmp(expected,actual)==0){ record_pass(); } else { record_fail(); log_err("%s  returned  %s  instead of %s\n", action, austrdup(actual), austrdup(expected)); }
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CONFIRM_INT_EQ(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of %d\n",  action, actual, expected); }
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CONFIRM_INT_GE(actual,expected) if ((actual)>=(expected)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of x >= %d\n",  action, actual, expected); }
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CONFIRM_INT_NE(actual,expected) if ((expected)!=(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of x != %d\n",  action, actual, expected); }
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*#define CONFIRM_ErrorCode(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail();  log_err("%s returned  %s  instead of %s\n", action, myErrorName(actual), myErrorName(expected)); } */
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCONFIRM_ErrorCode(UErrorCode actual,UErrorCode expected)
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if ((expected)==(actual))
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  {
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    record_pass();
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  } else {
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    record_fail();
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*log_err("%s returned  %s  instead of %s\n", action, myErrorName(actual), myErrorName(expected)); */
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_err("returned  %s  instead of %s\n", myErrorName(actual), myErrorName(expected));
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Array of our test objects */
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic struct
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char* name;
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode expected_constructor_status;
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  E_Where where;
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UBool like[e_Where_count];
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UBool inherits[e_Where_count];
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruparam[] =
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* "te" means test */
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* "IN" means inherits */
163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* "NE" or "ne" means "does not exist" */
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  { "root",         U_ZERO_ERROR,             e_Root,    { TRUE, FALSE, FALSE }, { TRUE, FALSE, FALSE } },
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  { "te",           U_ZERO_ERROR,             e_te,      { FALSE, TRUE, FALSE }, { TRUE, TRUE, FALSE  } },
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  { "te_IN",        U_ZERO_ERROR,             e_te_IN,   { FALSE, FALSE, TRUE }, { TRUE, TRUE, TRUE   } },
168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  { "te_NE",        U_USING_FALLBACK_WARNING, e_te,      { FALSE, TRUE, FALSE }, { TRUE, TRUE, FALSE  } },
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  { "te_IN_NE",     U_USING_FALLBACK_WARNING, e_te_IN,   { FALSE, FALSE, TRUE }, { TRUE, TRUE, TRUE   } },
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  { "ne",           U_USING_DEFAULT_WARNING,  e_Root,    { TRUE, FALSE, FALSE }, { TRUE, FALSE, FALSE } }
171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic int32_t bundles_count = sizeof(param) / sizeof(param[0]);
174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*static void printUChars(UChar*);*/
178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDecodedBundle(void);
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetKeywordValues(void);
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetFunctionalEquivalent(void);
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCLDRStyleAliases(void);
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFallbackCodes(void);
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetUTF8String(void);
18450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void TestCLDRVersion(void);
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/***************************************************************************************/
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Array of our test objects */
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addNEWResourceBundleTest(TestNode** root)
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestErrorCodes,            "tsutil/creststn/TestErrorCodes");
19350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO && !UCONFIG_NO_LEGACY_CONVERSION
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestEmptyBundle,           "tsutil/creststn/TestEmptyBundle");
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestConstruction1,         "tsutil/creststn/TestConstruction1");
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestResourceBundles,       "tsutil/creststn/TestResourceBundles");
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestNewTypes,              "tsutil/creststn/TestNewTypes");
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestEmptyTypes,            "tsutil/creststn/TestEmptyTypes");
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestBinaryCollationData,   "tsutil/creststn/TestBinaryCollationData");
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestAPI,                   "tsutil/creststn/TestAPI");
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestErrorConditions,       "tsutil/creststn/TestErrorConditions");
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestDecodedBundle,         "tsutil/creststn/TestDecodedBundle");
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestResourceLevelAliasing, "tsutil/creststn/TestResourceLevelAliasing");
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestDirectAccess,          "tsutil/creststn/TestDirectAccess");
20550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestXPath,                 "tsutil/creststn/TestXPath");
20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestCLDRStyleAliases,      "tsutil/creststn/TestCLDRStyleAliases");
20750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestFallbackCodes,         "tsutil/creststn/TestFallbackCodes");
20850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestGetUTF8String,         "tsutil/creststn/TestGetUTF8String");
20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestCLDRVersion,           "tsutil/creststn/TestCLDRVersion");
21050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
21150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestFallback,              "tsutil/creststn/TestFallback");
21250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestGetVersion,            "tsutil/creststn/TestGetVersion");
21350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestGetVersionColl,        "tsutil/creststn/TestGetVersionColl");
21450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    addTest(root, &TestAliasConflict,         "tsutil/creststn/TestAliasConflict");
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestGetKeywordValues,      "tsutil/creststn/TestGetKeywordValues");
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestGetFunctionalEquivalent,"tsutil/creststn/TestGetFunctionalEquivalent");
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestJB3763,                "tsutil/creststn/TestJB3763");
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    addTest(root, &TestStackReuse,            "tsutil/creststn/TestStackReuse");
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/***************************************************************************************/
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* norwayNames[] = {
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "no_NO_NY",
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "no_NO",
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "no",
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nn_NO",
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nn",
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nb_NO",
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nb"
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const char* norwayLocales[] = {
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nn_NO",
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nb_NO",
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nb",
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nn_NO",
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nn",
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nb_NO",
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    "nb"
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void checkStatus(int32_t line, UErrorCode expected, UErrorCode status) {
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_FAILURE(status)) {
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_data_err("Resource not present, cannot test (%s:%d)\n", __FILE__, line);
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(status != expected) {
2486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    log_err_status(status, "%s:%d: Expected error code %s, got error code %s\n", __FILE__, line, u_errorName(expected), u_errorName(status));
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestErrorCodes(void) {
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_USING_DEFAULT_WARNING;
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UResourceBundle *r = NULL, *r2 = NULL;
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* First check with ICUDATA */
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* first bundle should return fallback warning */
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_open(NULL, "ti_ER_ASSAB", &status);
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_FALLBACK_WARNING, status);
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  /* this bundle should return zero error, so it shouldn't change the status */
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_USING_DEFAULT_WARNING;
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_open(NULL, "ti_ER", &status);
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* we look up the resource which is aliased, but it lives in fallback */
26950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_SUCCESS(status) && r != NULL) {
27150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    status = U_USING_DEFAULT_WARNING;
27250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    r2 = ures_getByKey(r, "LocaleScript", NULL, &status);  /* LocaleScript lives in ti */
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    checkStatus(__LINE__, U_USING_FALLBACK_WARNING, status);
27450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
27750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  /* this bundle should return zero error, so it shouldn't change the status */
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_USING_DEFAULT_WARNING;
27950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  r = ures_open(U_ICUDATA_REGION, "ti", &status);
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* we look up the resource which is aliased and at our level */
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_SUCCESS(status) && r != NULL) {
28450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    status = U_USING_DEFAULT_WARNING;
28550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    r2 = ures_getByKey(r, "Countries", r2, &status);
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_USING_FALLBACK_WARNING;
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_open(NULL, "nolocale", &status);
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r2);
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Now, with the collation bundle **/
29750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* first bundle should return fallback warning */
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_open(U_ICUDATA_COLL, "sr_YU_VOJVODINA", &status);
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_FALLBACK_WARNING, status);
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
30350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  /* this bundle should return zero error, so it shouldn't change the status */
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_USING_FALLBACK_WARNING;
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_open(U_ICUDATA_COLL, "sr", &status);
306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_FALLBACK_WARNING, status);
307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* we look up the resource which is aliased  */
309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_SUCCESS(status) && r != NULL) {
31050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    status = U_USING_DEFAULT_WARNING;
311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    r2 = ures_getByKey(r, "collations", NULL, &status);
312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
31350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  }
314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  /* this bundle should return zero error, so it shouldn't change the status */
317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_USING_DEFAULT_WARNING;
318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_open(U_ICUDATA_COLL, "sr", &status);
319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /* we look up the resource which is aliased and at our level */
322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(U_SUCCESS(status) && r != NULL) {
32350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    status = U_USING_DEFAULT_WARNING;
324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    r2 = ures_getByKey(r, "collations", r2, &status);
325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_USING_FALLBACK_WARNING;
330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_open(U_ICUDATA_COLL, "nolocale", &status);
331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  checkStatus(__LINE__, U_USING_DEFAULT_WARNING, status);
332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r2);
334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAliasConflict(void) {
337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *he = NULL;
339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *iw = NULL;
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *norway = NULL;
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *result = NULL;
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t resultLen;
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint32_t size = 0;
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint32_t i = 0;
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *realName = NULL;
346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    he = ures_open(NULL, "he", &status);
348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    iw = ures_open(NULL, "iw", &status);
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
3506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "Failed to get resource with %s\n", myErrorName(status));
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(iw);
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result = ures_getStringByKey(he, "ExemplarCharacters", &resultLen, &status);
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status) || result == NULL) {
3556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "Failed to get resource ExemplarCharacters with %s\n", myErrorName(status));
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(he);
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    size = sizeof(norwayNames)/sizeof(norwayNames[0]);
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(i = 0; i < size; i++) {
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        norway = ures_open(NULL, norwayNames[i], &status);
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(status)) {
3646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            log_err_status(status, "Failed to get resource with %s for %s\n", myErrorName(status), norwayNames[i]);
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            continue;
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        realName = ures_getLocale(norway, &status);
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("ures_getLocale(\"%s\")=%s\n", norwayNames[i], realName);
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(realName == NULL || strcmp(norwayLocales[i], realName) != 0) {
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("Wrong locale name for %s, expected %s, got %s\n", norwayNames[i], norwayLocales[i], realName);
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(norway);
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDecodedBundle(){
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode error = U_ZERO_ERROR;
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* resB;
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar* srcFromRes;
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len;
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const UChar uSrc[] = {
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0009,0x092F,0x0941,0x0928,0x0947,0x0938,0x094D,0x0915,0x094B,0x0020,0x002E,0x0915,0x0947,0x0020,0x002E,0x090F,
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0915,0x0020,0x002E,0x0905,0x0927,0x094D,0x092F,0x092F,0x0928,0x0020,0x002E,0x0915,0x0947,0x0020,0x0905,0x0928,
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0941,0x0938,0x093E,0x0930,0x0020,0x0031,0x0039,0x0039,0x0030,0x0020,0x0924,0x0915,0x0020,0x0915,0x0902,0x092A,
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x094D,0x092F,0x0942,0x091F,0x0930,0x002D,0x092A,0x094D,0x0930,0x092C,0x0902,0x0927,0x093F,0x0924,0x0020,0x0938,
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0942,0x091A,0x0928,0x093E,0x092A,0x094D,0x0930,0x0923,0x093E,0x0932,0x0940,0x0020,0x002E,0x0915,0x0947,0x0020,
390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x002E,0x092F,0x094B,0x0917,0x0926,0x093E,0x0928,0x0020,0x002E,0x0915,0x0947,0x0020,0x002E,0x092B,0x0932,0x0938,
391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x094D,0x0935,0x0930,0x0942,0x092A,0x0020,0x002E,0x0935,0x093F,0x0936,0x094D,0x0935,0x0020,0x002E,0x092E,0x0947,
392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0902,0x0020,0x002E,0x0938,0x093E,0x0932,0x093E,0x0928,0x093E,0x0020,0x002E,0x0032,0x0032,0x0030,0x0030,0x0020,
393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0905,0x0930,0x092C,0x0020,0x0930,0x0941,0x092A,0x092F,0x0947,0x0020,0x092E,0x0942,0x0932,0x094D,0x092F,0x0915,
394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0940,0x0020,0x002E,0x0034,0x0935,0x0938,0x094D,0x0924,0x0941,0x0913,0x0902,0x0020,0x002E,0x0034,0x0915,0x093E,
395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0020,0x002E,0x0034,0x0909,0x0924,0x094D,0x092A,0x093E,0x0926,0x0928,0x0020,0x002E,0x0034,0x0939,0x094B,0x0917,
396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x093E,0x002C,0x0020,0x002E,0x0033,0x091C,0x092C,0x0915,0x093F,0x0020,0x002E,0x0033,0x0915,0x0902,0x092A,0x094D,
397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x092F,0x0942,0x091F,0x0930,0x0020,0x002E,0x0033,0x0915,0x093E,0x0020,0x002E,0x0033,0x0915,0x0941,0x0932,0x0020,
398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x002E,0x0033,0x092F,0x094B,0x0917,0x0926,0x093E,0x0928,0x0020,0x002E,0x0033,0x0907,0x0938,0x0938,0x0947,0x0915,
399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0939,0x093F,0x0020,0x002E,0x002F,0x091C,0x094D,0x092F,0x093E,0x0926,0x093E,0x0020,0x002E,0x002F,0x0939,0x094B,
400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0917,0x093E,0x0964,0x0020,0x002E,0x002F,0x0905,0x0928,0x0941,0x0938,0x0902,0x0927,0x093E,0x0928,0x0020,0x002E,
401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x002F,0x0915,0x0940,0x0020,0x002E,0x002F,0x091A,0x0930,0x092E,0x0020,0x0938,0x0940,0x092E,0x093E,0x0913,0x0902,
402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0020,0x092A,0x0930,0x0020,0x092A,0x0939,0x0941,0x0902,0x091A,0x0928,0x0947,0x0020,0x0915,0x0947,0x0020,0x0932,
403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x093F,0x090F,0x0020,0x0915,0x0902,0x092A,0x094D,0x092F,0x0942,0x091F,0x0930,0x090F,0x0915,0x0020,0x002E,0x002F,
404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0906,0x092E,0x0020,0x002E,0x002F,0x091C,0x0930,0x0942,0x0930,0x0924,0x0020,0x002E,0x002F,0x091C,0x0948,0x0938,
405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x093E,0x0020,0x092C,0x0928,0x0020,0x0917,0x092F,0x093E,0x0020,0x0939,0x0948,0x0964,0x0020,0x092D,0x093E,0x0930,
406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0924,0x0020,0x092E,0x0947,0x0902,0x0020,0x092D,0x0940,0x002C,0x0020,0x0916,0x093E,0x0938,0x0915,0x0930,0x0020,
407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x092E,0x094C,0x091C,0x0942,0x0926,0x093E,0x0020,0x0938,0x0930,0x0915,0x093E,0x0930,0x0928,0x0947,0x002C,0x0020,
408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0915,0x0902,0x092A,0x094D,0x092F,0x0942,0x091F,0x0930,0x0020,0x0915,0x0947,0x0020,0x092A,0x094D,0x0930,0x092F,
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x094B,0x0917,0x0020,0x092A,0x0930,0x0020,0x091C,0x092C,0x0930,0x0926,0x0938,0x094D,0x0924,0x0020,0x090F,0x095C,
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0020,0x0932,0x0917,0x093E,0x092F,0x0940,0x0020,0x0939,0x0948,0x002C,0x0020,0x0915,0x093F,0x0902,0x0924,0x0941,
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0020,0x0907,0x0938,0x0915,0x0947,0x0020,0x0938,0x0930,0x092A,0x091F,0x0020,0x0926,0x094C,0x095C,0x0932,0x0917,
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x093E,0x0928,0x0947,0x0020,0x002E,0x0032,0x0915,0x0947,0x0020,0x002E,0x0032,0x0932,0x093F,0x090F,0x0020,0x002E,
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0032,0x0915,0x094D,0x092F,0x093E,0x0020,0x002E,0x0032,0x0938,0x092A,0x093E,0x091F,0x0020,0x002E,0x0032,0x0930,
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x093E,0x0938,0x094D,0x0924,0x093E,0x0020,0x002E,0x0032,0x0909,0x092A,0x0932,0x092C,0x094D,0x0927,0x0020,0x002E,
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0939,0x0948,0x002C,0x0020,0x002E,0x0905,0x0925,0x0935,0x093E,0x0020,0x002E,0x0935,0x093F,0x0936,0x094D,0x0935,
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0020,0x002E,0x092E,0x0947,0x0902,0x0020,0x002E,0x0915,0x0902,0x092A,0x094D,0x092F,0x0942,0x091F,0x0930,0x0020,
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x002E,0x0915,0x0940,0x0938,0x092B,0x0932,0x0924,0x093E,0x0020,0x002E,0x0033,0x0935,0x0020,0x002E,0x0033,0x0935,
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x093F,0x092B,0x0932,0x0924,0x093E,0x0020,0x002E,0x0033,0x0938,0x0947,0x0020,0x002E,0x0033,0x0938,0x092C,0x0915,
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0020,0x002E,0x0033,0x0932,0x0947,0x0020,0x002E,0x0033,0x0915,0x0930,0x0020,0x002E,0x0033,0x0915,0x094D,0x092F,
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x093E,0x0020,0x002E,0x0033,0x0939,0x092E,0x0020,0x002E,0x0033,0x0907,0x0938,0x0915,0x093E,0x0020,0x002E,0x0033,
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x092F,0x0941,0x0915,0x094D,0x0924,0x093F,0x092A,0x0942,0x0930,0x094D,0x0923,0x0020,0x002E,0x0032,0x0935,0x093F,
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0938,0x094D,0x0924,0x093E,0x0930,0x0020,0x0905,0x092A,0x0947,0x0915,0x094D,0x0937,0x093F,0x0924,0x0020,0x0915,
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0x0930,0x0020,0x0938,0x0915,0x0947,0x0902,0x0917,0x0947,0x0020,0x003F,0x0020,
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        0
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* pre-flight */
428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t num =0;
429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *testdatapath = loadTestData(&error);
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    resB = ures_open(testdatapath, "iscii", &error);
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    srcFromRes=tres_getString(resB,-1,"str",&len,&error);
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(error)){
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_LEGACY_CONVERSION
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_info("Couldn't load iscii.bin from test data bundle, (because UCONFIG_NO_LEGACY_CONVERSION  is turned on)\n");
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else
436c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not find iscii.bin from test data bundle. Error: %s\n", u_errorName(error));
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(resB);
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(u_strncmp(srcFromRes,uSrc,len)!=0){
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Genrb produced res files after decoding failed\n");
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while(num<len){
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(uSrc[num]!=srcFromRes[num]){
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_verbose(" Expected:  0x%04X Got: 0x%04X \n", uSrc[num],srcFromRes[num]);
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        num++;
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (len != u_strlen(uSrc)) {
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Genrb produced a string larger than expected\n");
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(resB);
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestNewTypes() {
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* theBundle = NULL;
458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char action[256];
459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath;
460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* res = NULL;
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint8_t *binResult = NULL;
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len = 0;
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i = 0;
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t intResult = 0;
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint32_t uintResult = 0;
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *empty = NULL;
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *zeroString;
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar expected[] = { 'a','b','c','\0','d','e','f' };
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* expect ="tab:\t cr:\r ff:\f newline:\n backslash:\\\\ quote=\\\' doubleQuote=\\\" singlequoutes=''";
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar uExpect[200];
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath=loadTestData(&status);
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
477c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    theBundle = ures_open(testdatapath, "testtypes", &status);
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    empty = tres_getString(theBundle, -1, "emptystring", &len, &status);
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(empty && (*empty != 0 || len != 0)) {
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Empty string returned invalid value\n");
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_NE(theBundle, NULL);
491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* This test reads the string "abc\u0000def" from the bundle   */
493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* if everything is working correctly, the size of this string */
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* should be 7. Everything else is a wrong answer, esp. 3 and 6*/
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of string with embeded zero");
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "zerotest", res, &status);
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_STRING);
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    zeroString=tres_getString(res, -1, NULL, &len, &status);
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(len, 7);
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_NE(len, 3);
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(i=0;i<len;i++){
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(zeroString[i]!= expected[i]){
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_verbose("Output did not match Expected: \\u%4X Got: \\u%4X", expected[i], zeroString[i]);
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of binary type");
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "binarytest", res, &status);
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_BINARY);
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    binResult=(uint8_t*)ures_getBinary(res,  &len, &status);
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(len, 15);
520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for(i = 0; i<15; i++) {
521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(binResult[i], i);
522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of imported binary type");
526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "importtest", res, &status);
527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_BINARY);
529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    binResult=(uint8_t*)ures_getBinary(res,  &len, &status);
530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(len, 15);
533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for(i = 0; i<15; i++) {
534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(binResult[i], i);
535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of integer types");
539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "one", res, &status);
540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_INT);
542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    intResult=ures_getInt(res, &status);
543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uintResult = ures_getUInt(res, &status);
544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(uintResult, (uint32_t)intResult);
547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(intResult, 1);
548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting minusone");
551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "minusone", res, &status);
552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_INT);
554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    intResult=ures_getInt(res, &status);
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uintResult = ures_getUInt(res, &status);
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(uintResult, 0x0FFFFFFF); /* a 28 bit integer */
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(intResult, -1);
560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_NE(uintResult, (uint32_t)intResult);
561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting plusone");
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "plusone", res, &status);
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_INT);
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    intResult=ures_getInt(res, &status);
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uintResult = ures_getUInt(res, &status);
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(uintResult, (uint32_t)intResult);
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(intResult, 1);
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "onehundredtwentythree", res, &status);
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_INT);
578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    intResult=ures_getInt(res, &status);
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(intResult, 123);
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* this tests if escapes are preserved or not */
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar* str = tres_getString(theBundle,-1,"testescape",&len,&status);
587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_SUCCESS(status)){
589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            u_charsToUChars(expect,uExpect,(int32_t)strlen(expect)+1);
590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(u_strcmp(uExpect,str)){
591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Did not get the expected string for testescape\n");
592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* this tests if unescaping works are expected */
596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    len=0;
597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        char pattern[2048] = "";
599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t patternLen;
600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar* expectedEscaped;
601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar* got;
602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t expectedLen;
603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* This strcpy fixes compiler warnings about long strings */
605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(pattern, "[ \\\\u0020 \\\\u00A0 \\\\u1680 \\\\u2000 \\\\u2001 \\\\u2002 \\\\u2003 \\\\u2004 \\\\u2005 \\\\u2006 \\\\u2007 "
606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\\\u2008 \\\\u2009 \\\\u200A \\u200B \\\\u202F \\u205F \\\\u3000 \\u0000-\\u001F \\u007F \\u0080-\\u009F "
607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\\\u06DD \\\\u070F \\\\u180E \\\\u200C \\\\u200D \\\\u2028 \\\\u2029 \\\\u2060 \\\\u2061 \\\\u2062 \\\\u2063 "
608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\\\u206A-\\\\u206F \\\\uFEFF \\\\uFFF9-\\uFFFC \\U0001D173-\\U0001D17A \\U000F0000-\\U000FFFFD "
609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\U00100000-\\U0010FFFD \\uFDD0-\\uFDEF \\uFFFE-\\uFFFF \\U0001FFFE-\\U0001FFFF \\U0002FFFE-\\U0002FFFF "
610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            );
611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(pattern,
612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\U0003FFFE-\\U0003FFFF \\U0004FFFE-\\U0004FFFF \\U0005FFFE-\\U0005FFFF \\U0006FFFE-\\U0006FFFF "
613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\U0007FFFE-\\U0007FFFF \\U0008FFFE-\\U0008FFFF \\U0009FFFE-\\U0009FFFF \\U000AFFFE-\\U000AFFFF "
614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\U000BFFFE-\\U000BFFFF \\U000CFFFE-\\U000CFFFF \\U000DFFFE-\\U000DFFFF \\U000EFFFE-\\U000EFFFF "
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\U000FFFFE-\\U000FFFFF \\U0010FFFE-\\U0010FFFF \\uD800-\\uDFFF \\\\uFFF9 \\\\uFFFA \\\\uFFFB "
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\uFFFC \\uFFFD \\u2FF0-\\u2FFB \\u0340 \\u0341 \\\\u200E \\\\u200F \\\\u202A \\\\u202B \\\\u202C "
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            );
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(pattern,
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "\\\\u202D \\\\u202E \\\\u206A \\\\u206B \\\\u206C \\\\u206D \\\\u206E \\\\u206F \\U000E0001 \\U000E0020-\\U000E007F "
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "]"
621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            );
622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        patternLen = (int32_t)uprv_strlen(pattern);
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expectedEscaped = (UChar*)malloc(U_SIZEOF_UCHAR * patternLen);
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        got = tres_getString(theBundle,-1,"test_unescaping",&len,&status);
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expectedLen = u_unescape(pattern,expectedEscaped,patternLen);
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(got==NULL || u_strncmp(expectedEscaped,got,expectedLen)!=0 || expectedLen != len){
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("genrb failed to unescape string\n");
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(got != NULL){
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for(i=0;i<expectedLen;i++){
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(expectedEscaped[i] != got[i]){
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    log_verbose("Expected: 0x%04X Got: 0x%04X \n",expectedEscaped[i], got[i]);
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        free(expectedEscaped);
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* test for jitterbug#1435 */
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar* str = tres_getString(theBundle,-1,"test_underscores",&len,&status);
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expect ="test message ....";
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        u_charsToUChars(expect,uExpect,(int32_t)strlen(expect)+1);
645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
646c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        if(str == NULL || u_strcmp(uExpect,str)){
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Did not get the expected string for test_underscores.\n");
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* test for jitterbug#2626 */
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UResourceBundle* resB = NULL;
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar* str  = NULL;
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t strLength = 0;
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar my[] = {0x0026,0x0027,0x0075,0x0027,0x0020,0x003d,0x0020,0x0027,0xff55,0x0027,0x0000}; /* &'\u0075' = '\uFF55' */
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        resB = ures_getByKey(theBundle, "collations", resB, &status);
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        resB = ures_getByKey(resB, "standard", resB, &status);
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        str  = tres_getString(resB,-1,"Sequence",&strLength,&status);
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(!str || U_FAILURE(status)) {
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("Could not load collations from theBundle: %s\n", u_errorName(status));
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if(u_strcmp(my,str) != 0){
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Did not get the expected string for escaped \\u0075\n");
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(resB);
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *sourcePath = ctest_dataSrcDir();
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t srcPathLen = (int32_t)strlen(sourcePath);
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *deltaPath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING;
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t deltaPathLen = (int32_t)strlen(deltaPath);
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        char *testDataFileName = (char *) malloc( srcPathLen+ deltaPathLen + 50 );
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        char *path = testDataFileName;
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(path, sourcePath);
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        path += srcPathLen;
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(path, deltaPath);
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        path += deltaPathLen;
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t strLen =0;
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const UChar* str = tres_getString(theBundle, -1, "testincludeUTF",&strLen,&status);
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            strcpy(path, "riwords.txt");
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            path[strlen("riwords.txt")]=0;
687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_FAILURE(status)){
688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Could not get testincludeUTF resource from testtypes bundle. Error: %s\n",u_errorName(status));
689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }else{
690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                /* open the file */
691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                const char* cp = NULL;
692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UCHARBUF* ucbuf = ucbuf_open(testDataFileName,&cp,FALSE,FALSE,&status);
693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                len = 0;
694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(U_SUCCESS(status)){
695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    const UChar* buffer = ucbuf_getBuffer(ucbuf,&len,&status);
696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if(U_SUCCESS(status)){
697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        /* verify the contents */
698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if(strLen != len ){
699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            log_err("Did not get the expected len for riwords. Expected: %i , Got: %i\n", len ,strLen);
700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        /* test string termination */
702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if(u_strlen(str) != strLen || str[strLen]!= 0 ){
703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            log_err("testinclude not null terminated!\n");
704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if(u_strncmp(str, buffer,strLen)!=0){
706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            log_err("Did not get the expected string from riwords. Include functionality failed for genrb.\n");
707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }else{
709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        log_err("ucbuf failed to open %s. Error: %s\n", testDataFileName, u_errorName(status));
710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ucbuf_close(ucbuf);
713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }else{
714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    log_err("Could not get riwords.txt (path : %s). Error: %s\n",testDataFileName,u_errorName(status));
715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t strLen =0;
721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const UChar* str = tres_getString(theBundle, -1, "testinclude",&strLen,&status);
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            strcpy(path, "translit_rules.txt");
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            path[strlen("translit_rules.txt")]=0;
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_FAILURE(status)){
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Could not get testinclude resource from testtypes bundle. Error: %s\n",u_errorName(status));
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }else{
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                /* open the file */
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                const char* cp=NULL;
730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UCHARBUF* ucbuf = ucbuf_open(testDataFileName,&cp,FALSE,FALSE,&status);
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                len = 0;
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(U_SUCCESS(status)){
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    const UChar* buffer = ucbuf_getBuffer(ucbuf,&len,&status);
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if(U_SUCCESS(status)){
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        /* verify the contents */
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if(strLen != len ){
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            log_err("Did not get the expected len for translit_rules. Expected: %i , Got: %i\n", len ,strLen);
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if(u_strncmp(str, buffer,strLen)!=0){
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            log_err("Did not get the expected string from translit_rules. Include functionality failed for genrb.\n");
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }else{
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        log_err("ucbuf failed to open %s. Error: %s\n", testDataFileName, u_errorName(status));
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    ucbuf_close(ucbuf);
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }else{
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    log_err("Could not get translit_rules.txt (path : %s). Error: %s\n",testDataFileName,u_errorName(status));
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        free(testDataFileName);
752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(res);
754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(theBundle);
755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestEmptyTypes() {
759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* theBundle = NULL;
760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char action[256];
761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath;
762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* res = NULL;
764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* resArray = NULL;
765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const uint8_t *binResult = NULL;
766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len = 0;
767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t intResult = 0;
768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *zeroString;
769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const int32_t *zeroIntVect;
770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "Construction of testtypes bundle");
772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath=loadTestData(&status);
773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
775c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    theBundle = ures_open(testdatapath, "testtypes", &status);
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_NE(theBundle, NULL);
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* This test reads the string "abc\u0000def" from the bundle   */
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* if everything is working correctly, the size of this string */
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* should be 7. Everything else is a wrong answer, esp. 3 and 6*/
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of explicit string of zero length string");
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "emptyexplicitstring", res, &status);
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_STRING);
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    zeroString=tres_getString(res, -1, NULL, &len, &status);
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(len, 0);
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(u_strlen(zeroString), 0);
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Couldn't get emptyexplicitstring\n");
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of normal string of zero length string");
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "emptystring", res, &status);
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_STRING);
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    zeroString=tres_getString(res, -1, NULL, &len, &status);
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(len, 0);
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(u_strlen(zeroString), 0);
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Couldn't get emptystring\n");
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of empty int");
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "emptyint", res, &status);
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_INT);
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    intResult=ures_getInt(res, &status);
825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(intResult, 0);
828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Couldn't get emptystring\n");
831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of zero length intvector");
835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "emptyintv", res, &status);
836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_INT_VECTOR);
838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Couldn't get emptyintv key %s\n", u_errorName(status));
841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        zeroIntVect=ures_getIntVector(res, &len, &status);
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(!U_SUCCESS(status) || resArray != NULL || len != 0) {
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Shouldn't get emptyintv\n");
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of zero length emptybin");
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "emptybin", res, &status);
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_BINARY);
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Couldn't get emptybin key %s\n", u_errorName(status));
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        binResult=ures_getBinary(res, &len, &status);
86050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if(!U_SUCCESS(status) || len != 0) {
86150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            log_err("Couldn't get emptybin, or it's not empty\n");
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of zero length emptyarray");
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "emptyarray", res, &status);
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_ARRAY);
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Couldn't get emptyarray key %s\n", u_errorName(status));
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        resArray=ures_getByIndex(res, 0, resArray, &status);
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_SUCCESS(status) || resArray != NULL){
87750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            log_err("Shouldn't get emptyarray[0]\n");
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(action, "getting and testing of zero length emptytable");
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_getByKey(theBundle, "emptytable", res, &status);
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_ErrorCode(status, U_ZERO_ERROR);
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    CONFIRM_INT_EQ(ures_getType(res), URES_TABLE);
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Couldn't get emptytable key %s\n", u_errorName(status));
889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        resArray=ures_getByIndex(res, 0, resArray, &status);
892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_SUCCESS(status) || resArray != NULL){
89350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            log_err("Shouldn't get emptytable[0]\n");
894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(res);
898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(theBundle);
899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestEmptyBundle(){
902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath=NULL;
904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *resb=0, *dResB=0;
905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath=loadTestData(&status);
907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
909c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    resb = ures_open(testdatapath, "testempty", &status);
913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        dResB =  ures_getByKey(resb,"test",dResB,&status);
916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(status!= U_MISSING_RESOURCE_ERROR){
917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Did not get the expected error from an empty resource bundle. Expected : %s Got: %s\n",
918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_errorName(U_MISSING_RESOURCE_ERROR),u_errorName(status));
919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(dResB);
922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(resb);
923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestBinaryCollationData(){
926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status=U_ZERO_ERROR;
927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char*      locale="te";
928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath;
930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *teRes = NULL;
932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *coll=NULL;
933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *binColl = NULL;
934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint8_t *binResult = NULL;
935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len=0;
936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* action="testing the binary collaton data";
937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing binary collation data resource......\n");
940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath=loadTestData(&status);
942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
944c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teRes=ures_open(testdatapath, locale, &status);
950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: Failed to get resource for \"te\" with %s", myErrorName(status));
952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    coll = ures_getByKey(teRes, "collations", coll, &status);
956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    coll = ures_getByKey(coll, "standard", coll, &status);
957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)){
958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, U_ZERO_ERROR);
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(ures_getType(coll), URES_TABLE);
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        binColl=ures_getByKey(coll, "%%CollationBin", binColl, &status);
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_SUCCESS(status)){
962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_ErrorCode(status, U_ZERO_ERROR);
963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(ures_getType(binColl), URES_BINARY);
964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            binResult=(uint8_t*)ures_getBinary(binColl,  &len, &status);
965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_SUCCESS(status)){
966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                CONFIRM_ErrorCode(status, U_ZERO_ERROR);
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                CONFIRM_INT_GE(len, 1);
968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }else{
971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("ERROR: ures_getByKey(locale(te), %%CollationBin) failed\n");
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else{
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getByKey(locale(te), collations) failed\n");
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(binColl);
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(coll);
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(teRes);
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAPI() {
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status=U_ZERO_ERROR;
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len=0;
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* key=NULL;
988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar* value=NULL;
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath;
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar* utestdatapath=NULL;
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char convOutput[256];
992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar largeBuffer[1025];
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *teRes = NULL;
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *teFillin=NULL;
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *teFillin2=NULL;
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing ures_openU()......\n");
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath=loadTestData(&status);
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1002c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    len =(int32_t)strlen(testdatapath);
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    utestdatapath = (UChar*) malloc((len+10)*sizeof(UChar));
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    u_charsToUChars(testdatapath, utestdatapath, (int32_t)strlen(testdatapath)+1);
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR) && U_FILE_SEP_CHAR == '\\'
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* Convert all backslashes to forward slashes so that we can make sure that ures_openU
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           can handle invariant characters. */
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar *backslash;
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        while ((backslash = u_strchr(utestdatapath, 0x005C))) {
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            *backslash = 0x002F;
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    u_memset(largeBuffer, 0x0030, sizeof(largeBuffer)/sizeof(largeBuffer[0]));
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    largeBuffer[sizeof(largeBuffer)/sizeof(largeBuffer[0])-1] = 0;
1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_openU */
1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(ures_openU(largeBuffer, "root", &status));
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_ILLEGAL_ARGUMENT_ERROR){
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_openU() worked when the path is very large. It returned %s\n", myErrorName(status));
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(ures_openU(NULL, "root", &status));
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
10346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "ERROR: ures_openU() failed path = NULL with %s\n", myErrorName(status));
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ILLEGAL_ARGUMENT_ERROR;
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_openU(NULL, "root", &status) != NULL){
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_openU() worked with error status with %s\n", myErrorName(status));
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teRes=ures_openU(utestdatapath, "te", &status);
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
10456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "ERROR: ures_openU() failed path =%s with %s\n", austrdup(utestdatapath), myErrorName(status));
1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getLocale() */
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing ures_getLocale() .....\n");
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(strcmp(ures_getLocale(teRes, &status), "te") != 0){
1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getLocale() failed. Expected = te_TE Got = %s\n", ures_getLocale(teRes, &status));
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getNextString() */
1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getByKey(teRes, "tagged_array_in_te_te_IN", teFillin, &status);
1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    key=ures_getKey(teFillin);
1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    value=(UChar*)ures_getNextString(teFillin, &len, &key, &status);
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_resetIterator(NULL);
1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    value=(UChar*)ures_getNextString(teFillin, &len, &key, &status);
1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status !=U_INDEX_OUTOFBOUNDS_ERROR){
1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: calling getNextString where index out of bounds should return U_INDEX_OUTOFBOUNDS_ERROR, Got : %s\n",
1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       myErrorName(status));
1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_resetIterator(teRes);
1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getNextResource() where resource is table*/
1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if (U_CHARSET_FAMILY == U_ASCII_FAMILY)
1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* The next key varies depending on the charset. */
1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getNextResource(teRes, teFillin, &status);
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getNextResource() failed \n");
1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    key=ures_getKey(teFillin);
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*if(strcmp(key, "%%CollationBin") != 0){*/
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*if(strcmp(key, "array_2d_in_Root_te") != 0){*/ /* added "aliasClient" that goes first */
1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(strcmp(key, "a") != 0){
1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getNextResource() failed\n");
1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getByIndex on string Resource*/
1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getByKey(teRes, "string_only_in_te", teFillin, &status);
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin2=ures_getByIndex(teFillin, 0, teFillin2, &status);
1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getByIndex on string resource failed\n");
1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(strcmp(u_austrcpy(convOutput, tres_getString(teFillin2, -1, NULL, &len, &status)), "TE") != 0){
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status=U_ZERO_ERROR;
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getByIndex on string resource fetched the key=%s, expected \"TE\" \n", austrdup(ures_getString(teFillin2, &len, &status)));
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*ures_close(teRes);*/
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_openFillIn*/
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing ures_openFillIn......\n");
1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_openFillIn(teRes, testdatapath, "te", &status);
1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_openFillIn failed\n");
1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(strcmp(ures_getLocale(teRes, &status), "te") != 0){
1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_openFillIn did not open the ResourceBundle correctly\n");
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_getByKey(teRes, "string_only_in_te", teFillin, &status);
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin2=ures_getNextResource(teFillin, teFillin2, &status);
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getType(teFillin2) != URES_STRING){
1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: getType for getNextResource after ures_openFillIn failed\n");
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin2=ures_getNextResource(teFillin, teFillin2, &status);
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status !=U_INDEX_OUTOFBOUNDS_ERROR){
1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: calling getNextResource where index out of bounds should return U_INDEX_OUTOFBOUNDS_ERROR, Got : %s\n",
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                       myErrorName(status));
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(teFillin);
1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(teFillin2);
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(teRes);
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Test that ures_getLocale() returns the "real" locale ID */
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teRes=ures_open(NULL, "dE_At_NOWHERE_TO_BE_FOUND", &status);
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_data_err("unable to open a locale resource bundle from \"dE_At_NOWHERE_TO_BE_FOUND\"(%s)\n", u_errorName(status));
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(0!=strcmp("de_AT", ures_getLocale(teRes, &status))) {
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("ures_getLocale(\"dE_At_NOWHERE_TO_BE_FOUND\")=%s but must be de_AT\n", ures_getLocale(teRes, &status));
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(teRes);
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* same test, but with an aliased locale resource bundle */
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teRes=ures_open(NULL, "iW_Il_depRecaTed_HebreW", &status);
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_data_err("unable to open a locale resource bundle from \"iW_Il_depRecaTed_HebreW\"(%s)\n", u_errorName(status));
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(0!=strcmp("he_IL", ures_getLocale(teRes, &status))) {
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("ures_getLocale(\"iW_Il_depRecaTed_HebreW\")=%s but must be he_IL\n", ures_getLocale(teRes, &status));
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(teRes);
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    free(utestdatapath);
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestErrorConditions(){
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status=U_ZERO_ERROR;
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *key=NULL;
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *value=NULL;
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath;
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar* utestdatapath;
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len=0;
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *teRes = NULL;
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *coll=NULL;
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *binColl = NULL;
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *teFillin=NULL;
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *teFillin2=NULL;
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint8_t *binResult = NULL;
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t resultLen;
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath = loadTestData(&status);
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1164c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    len = (int32_t)strlen(testdatapath);
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    utestdatapath = (UChar*) malloc(sizeof(UChar) *(len+10));
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    u_uastrcpy(utestdatapath, testdatapath);
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_openU with status != U_ZERO_ERROR*/
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing ures_openU() with status != U_ZERO_ERROR.....\n");
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ILLEGAL_ARGUMENT_ERROR;
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teRes=ures_openU(utestdatapath, "te", &status);
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("ures_openU() failed as expected path =%s with status != U_ZERO_ERROR\n", testdatapath);
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }else{
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_openU() is supposed to fail path =%s with status != U_ZERO_ERROR\n", austrdup(utestdatapath));
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(teRes);
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_openFillIn with UResourceBundle = NULL*/
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing ures_openFillIn with UResourceBundle = NULL.....\n");
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_openFillIn(NULL, testdatapath, "te", &status);
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_ILLEGAL_ARGUMENT_ERROR){
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_openFillIn with UResourceBundle= NULL should fail.  Expected U_ILLEGAL_ARGUMENT_ERROR, Got: %s\n",
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        myErrorName(status));
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getLocale() with status != U_ZERO_ERROR*/
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teRes=ures_openU(utestdatapath, "te", &status);
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_openU() failed path =%s with %s\n", austrdup(utestdatapath), myErrorName(status));
1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ILLEGAL_ARGUMENT_ERROR;
1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getLocale(teRes, &status) != NULL){
1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getLocale is supposed to fail with errorCode != U_ZERO_ERROR\n");
1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getLocale() with UResourceBundle = NULL*/
1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getLocale(NULL, &status) != NULL && status != U_ILLEGAL_ARGUMENT_ERROR){
1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getLocale is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getSize() with UResourceBundle = NULL */
1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getSize(NULL) != 0){
1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getSize() should return 0 when UResourceBundle=NULL.  Got =%d\n", ures_getSize(NULL));
1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getType() with UResourceBundle = NULL should return URES_NONE==-1*/
1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getType(NULL) != URES_NONE){
1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getType() should return URES_NONE when UResourceBundle=NULL.  Got =%d\n", ures_getType(NULL));
1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getKey() with UResourceBundle = NULL*/
1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getKey(NULL) != NULL){
1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getKey() should return NULL when UResourceBundle=NULL.  Got =%d\n", ures_getKey(NULL));
1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_hasNext() with UResourceBundle = NULL*/
1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_hasNext(NULL) != FALSE){
1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_hasNext() should return FALSE when UResourceBundle=NULL.  Got =%d\n", ures_hasNext(NULL));
1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_get() with UResourceBundle = NULL*/
1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getStringByKey(NULL, "string_only_in_te", &resultLen, &status) != NULL && status != U_ILLEGAL_ARGUMENT_ERROR){
1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_get is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getByKey() with UResourceBundle = NULL*/
1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getByKey(NULL, "string_only_in_te", teFillin, &status);
1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if( teFillin != NULL && status != U_ILLEGAL_ARGUMENT_ERROR){
1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getByKey is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getByKey() with status != U_ZERO_ERROR*/
1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getByKey(NULL, "string_only_in_te", teFillin, &status);
1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(teFillin != NULL ){
1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getByKey is supposed to fail when errorCode != U_ZERO_ERROR\n");
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getStringByKey() with UResourceBundle = NULL*/
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getStringByKey(NULL, "string_only_in_te", &len, &status) != NULL && status != U_ILLEGAL_ARGUMENT_ERROR){
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getStringByKey is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getStringByKey() with status != U_ZERO_ERROR*/
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getStringByKey(teRes, "string_only_in_te", &len, &status) != NULL){
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getStringByKey is supposed to fail when status != U_ZERO_ERROR. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getString() with UResourceBundle = NULL*/
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getString(NULL, &len, &status) != NULL && status != U_ILLEGAL_ARGUMENT_ERROR){
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getString is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getString() with status != U_ZERO_ERROR*/
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getString(teRes, &len, &status) != NULL){
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getString is supposed to fail when status != U_ZERO_ERROR. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getBinary() with UResourceBundle = NULL*/
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getBinary(NULL, &len, &status) != NULL && status != U_ILLEGAL_ARGUMENT_ERROR){
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getBinary is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s\n",
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                           myErrorName(status));
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getBinary(0 status != U_ILLEGAL_ARGUMENT_ERROR*/
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    coll = ures_getByKey(teRes, "collations", coll, &status);
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    coll = ures_getByKey(teRes, "standard", coll, &status);
1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    binColl=ures_getByKey(coll, "%%CollationBin", binColl, &status);
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ILLEGAL_ARGUMENT_ERROR;
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    binResult=(uint8_t*)ures_getBinary(binColl,  &len, &status);
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(binResult != NULL){
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getBinary() with status != U_ZERO_ERROR is supposed to fail\n");
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getNextResource() with status != U_ZERO_ERROR*/
1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getNextResource(teRes, teFillin, &status);
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(teFillin != NULL){
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getNextResource() with errorCode != U_ZERO_ERROR is supposed to fail\n");
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getNextResource() with UResourceBundle = NULL*/
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getNextResource(NULL, teFillin, &status);
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(teFillin != NULL || status != U_ILLEGAL_ARGUMENT_ERROR){
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getNextResource() with UResourceBundle = NULL is supposed to fail.  Expected : U_IILEGAL_ARGUMENT_ERROR, Got : %s\n",
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                          myErrorName(status));
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getNextString with errorCode != U_ZERO_ERROR*/
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getByKey(teRes, "tagged_array_in_te_te_IN", teFillin, &status);
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    key=ures_getKey(teFillin);
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ILLEGAL_ARGUMENT_ERROR;
1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    value=(UChar*)ures_getNextString(teFillin, &len, &key, &status);
1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(value != NULL){
1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getNextString() with errorCode != U_ZERO_ERROR is supposed to fail\n");
1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getNextString with UResourceBundle = NULL*/
1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    value=(UChar*)ures_getNextString(NULL, &len, &key, &status);
1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(value != NULL || status != U_ILLEGAL_ARGUMENT_ERROR){
1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getNextString() with UResourceBundle=NULL is supposed to fail\n Expected: U_ILLEGAL_ARGUMENT_ERROR, Got: %s\n",
1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                    myErrorName(status));
1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getByIndex with errorCode != U_ZERO_ERROR*/
1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getByKey(teRes, "array_only_in_te", teFillin, &status);
1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_countArrayItems(teRes, "array_only_in_te", &status) != 4) {
1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("ERROR: Wrong number of items in an array!\n");
1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ILLEGAL_ARGUMENT_ERROR;
1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin2=ures_getByIndex(teFillin, 0, teFillin2, &status);
1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(teFillin2 != NULL){
1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getByIndex() with errorCode != U_ZERO_ERROR is supposed to fail\n");
1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getByIndex with UResourceBundle = NULL */
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin2=ures_getByIndex(NULL, 0, teFillin2, &status);
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_ILLEGAL_ARGUMENT_ERROR){
1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getByIndex() with UResourceBundle=NULL is supposed to fail\n Expected: U_ILLEGAL_ARGUMENT_ERROR, Got: %s\n",
1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                    myErrorName(status));
1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getStringByIndex with errorCode != U_ZERO_ERROR*/
1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    teFillin=ures_getByKey(teRes, "array_only_in_te", teFillin, &status);
1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ILLEGAL_ARGUMENT_ERROR;
1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    value=(UChar*)ures_getStringByIndex(teFillin, 0, &len, &status);
1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if( value != NULL){
1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getSringByIndex() with errorCode != U_ZERO_ERROR is supposed to fail\n");
1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getStringByIndex with UResourceBundle = NULL */
1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    value=(UChar*)ures_getStringByIndex(NULL, 0, &len, &status);
1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(value != NULL || status != U_ILLEGAL_ARGUMENT_ERROR){
1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getStringByIndex() with UResourceBundle=NULL is supposed to fail\n Expected: U_ILLEGAL_ARGUMENT_ERROR, Got: %s\n",
1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                    myErrorName(status));
1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getStringByIndex with UResourceBundle = NULL */
1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    value=(UChar*)ures_getStringByIndex(teFillin, 9999, &len, &status);
1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(value != NULL || status != U_MISSING_RESOURCE_ERROR){
1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getStringByIndex() with index that is too big is supposed to fail\n Expected: U_MISSING_RESOURCE_ERROR, Got: %s\n",
1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                    myErrorName(status));
1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getInt() where UResourceBundle = NULL */
1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status=U_ZERO_ERROR;
1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getInt(NULL, &status) != -1 && status != U_ILLEGAL_ARGUMENT_ERROR){
1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getInt() with UResourceBundle = NULL should fail. Expected: U_IILEGAL_ARGUMENT_ERROR, Got: %s\n",
1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                           myErrorName(status));
1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*Test ures_getInt() where status != U_ZERO_ERROR */
1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(ures_getInt(teRes, &status) != -1){
1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ERROR: ures_getInt() with errorCode != U_ZERO_ERROR should fail\n");
1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(teFillin);
1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(teFillin2);
1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(coll);
1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(binColl);
1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(teRes);
1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    free(utestdatapath);
1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetVersion(){
1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UVersionInfo minVersionArray = {0x01, 0x00, 0x00, 0x00};
1374c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    UVersionInfo maxVersionArray = {0x50, 0xff, 0xcf, 0xcf};
1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UVersionInfo versionArray;
1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status= U_ZERO_ERROR;
1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* resB = NULL;
1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int i=0, j = 0;
1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int locCount = uloc_countAvailable();
1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *locName = "root";
1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("The ures_getVersion tests begin : \n");
1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(j = -1; j < locCount; j++) {
1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(j >= 0) {
1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            locName = uloc_getAvailable(j);
1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("Testing version number for locale %s\n", locName);
1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        resB = ures_open(NULL,locName, &status);
1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) {
13916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            log_err_status(status, "Resource bundle creation for locale %s failed.: %s\n", locName, myErrorName(status));
1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ures_close(resB);
1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_getVersion(resB, versionArray);
1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<4; ++i) {
1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (versionArray[i] < minVersionArray[i] ||
1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                versionArray[i] > maxVersionArray[i])
1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            {
1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Testing ures_getVersion(%-5s) - unexpected result: %d.%d.%d.%d\n",
1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    locName, versionArray[0], versionArray[1], versionArray[2], versionArray[3]);
1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(resB);
1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetVersionColl(){
1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UVersionInfo minVersionArray = {0x00, 0x00, 0x00, 0x00};
1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UVersionInfo maxVersionArray = {0x50, 0x80, 0xcf, 0xcf};
1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UVersionInfo versionArray;
1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status= U_ZERO_ERROR;
1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* resB = NULL;
1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UEnumeration *locs= NULL;
1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int i=0;
1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *locName = "root";
1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t locLen;
1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar* rules =NULL;
1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len = 0;
1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("The ures_getVersion(%s) tests begin : \n", U_ICUDATA_COLL);
1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    locs = ures_openAvailableLocales(U_ICUDATA_COLL, &status);
1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(status)) {
14266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru       log_err_status(status, "enumeration of %s failed.: %s\n", U_ICUDATA_COLL, myErrorName(status));
1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru       return;
1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    do{
1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("Testing version number for locale %s\n", locName);
1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        resB = ures_open(U_ICUDATA_COLL,locName, &status);
1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_FAILURE(status)) {
1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Resource bundle creation for locale %s:%s failed.: %s\n", U_ICUDATA_COLL, locName, myErrorName(status));
1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ures_close(resB);
1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* test NUL termination of UCARules */
1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        rules = tres_getString(resB,-1,"UCARules",&len, &status);
1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(!rules || U_FAILURE(status)) {
1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          log_data_err("Could not load UCARules for locale %s\n", locName);
1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          continue;
1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(u_strlen(rules) != len){
1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("UCARules string not nul terminated! \n");
1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_getVersion(resB, versionArray);
1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (i=0; i<4; ++i) {
1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (versionArray[i] < minVersionArray[i] ||
1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                versionArray[i] > maxVersionArray[i])
1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            {
1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Testing ures_getVersion(%-5s) - unexpected result: %d.%d.%d.%d\n",
1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    locName, versionArray[0], versionArray[1], versionArray[2], versionArray[3]);
1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(resB);
1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } while((locName = uenum_next(locs,&locLen,&status))&&U_SUCCESS(status));
1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Err %s testing Collation locales.\n", u_errorName(status));
1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uenum_close(locs);
1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestResourceBundles()
1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    loadTestData(&status);
1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
1471c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat, status = %s\n", u_errorName(status));
1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("only_in_Root", TRUE, FALSE, FALSE);
1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("in_Root_te", TRUE, TRUE, FALSE);
1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("in_Root_te_te_IN", TRUE, TRUE, TRUE);
1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("in_Root_te_IN", TRUE, FALSE, TRUE);
1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("only_in_te", FALSE, TRUE, FALSE);
1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("only_in_te_IN", FALSE, FALSE, TRUE);
1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("in_te_te_IN", FALSE, TRUE, TRUE);
1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testTag("nonexistent", FALSE, FALSE, FALSE);
1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Passed:=  %d   Failed=   %d \n", pass, fail);
1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestConstruction1()
1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *test1 = 0, *test2 = 0,*empty = 0;
1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *result1, *result2;
1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status= U_ZERO_ERROR;
1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode   err = U_ZERO_ERROR;
1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char*      locale="te_IN";
1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath;
1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len1=0;
1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len2=0;
1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UVersionInfo versionInfo;
1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char versionString[256];
1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char verboseOutput[256];
1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRING_DECL(rootVal, "ROOT", 4);
1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRING_DECL(te_inVal, "TE_IN", 5);
1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRING_INIT(rootVal, "ROOT", 4);
1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    U_STRING_INIT(te_inVal, "TE_IN", 5);
1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath=loadTestData(&status);
1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1513c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing ures_open()......\n");
1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    empty = ures_open(testdatapath, "testempty", &status);
1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(empty == NULL || U_FAILURE(status)) {
1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("opening empty failed!\n");
1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(empty);
1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test1=ures_open(testdatapath, NULL, &err);
1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(err))
1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("construction of NULL did not succeed :  %s \n", myErrorName(status));
1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    test2=ures_open(testdatapath, locale, &err);
1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(err))
1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("construction of %s did not succeed :  %s \n", locale, myErrorName(status));
1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result1= tres_getString(test1, -1, "string_in_Root_te_te_IN", &len1, &err);
1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result2= tres_getString(test2, -1, "string_in_Root_te_te_IN", &len2, &err);
1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (U_FAILURE(err) || len1==0 || len2==0) {
1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Something threw an error in TestConstruction(): %s\n", myErrorName(status));
1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("for string_in_Root_te_te_IN, default.txt had  %s\n", u_austrcpy(verboseOutput, result1));
1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("for string_in_Root_te_te_IN, te_IN.txt had %s\n", u_austrcpy(verboseOutput, result2));
1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(u_strcmp(result1, rootVal) !=0  || u_strcmp(result2, te_inVal) !=0 ){
1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("construction test failed. Run Verbose for more information");
1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Test getVersionNumber*/
1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing version number\n");
1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("for getVersionNumber :  %s\n", ures_getVersionNumber(test1));
1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing version \n");
1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_getVersion(test1, versionInfo);
1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    u_versionToString(versionInfo, versionString);
1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("for getVersion :  %s\n", versionString);
1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(strcmp(versionString, ures_getVersionNumber(test1)) != 0) {
1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Versions differ: %s vs %s\n", versionString, ures_getVersionNumber(test1));
1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(test1);
1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(test2);
1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*****************************************************************************/
1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*****************************************************************************/
1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool testTag(const char* frag,
1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           UBool in_Root,
1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           UBool in_te,
1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru           UBool in_te_IN)
1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t failNum = fail;
1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Make array from input params */
1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool is_in[3];
1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *NAME[] = { "ROOT", "TE", "TE_IN" };
1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Now try to load the desired items */
1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* theBundle = NULL;
1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char tag[99];
1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char action[256];
1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode expected_status,status = U_ZERO_ERROR,expected_resource_status = U_ZERO_ERROR;
1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar* base = NULL;
1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar* expected_string = NULL;
1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar* string = NULL;
1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char buf[5];
1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char item_tag[10];
1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i,j,row,col, len;
1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t actual_bundle;
1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t count = 0;
1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t row_count=0;
1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t column_count=0;
1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t index = 0;
1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t tag_count= 0;
1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath;
1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char verboseOutput[256];
1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* array=NULL;
1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* array2d=NULL;
1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* tags=NULL;
1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle* arrayItem1=NULL;
1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath = loadTestData(&status);
1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1612c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return FALSE;
1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    is_in[0] = in_Root;
1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    is_in[1] = in_te;
1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    is_in[2] = in_te_IN;
1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    strcpy(item_tag, "tag");
1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for (i=0; i<bundles_count; ++i)
1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(action,"construction for ");
1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, param[i].name);
1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        theBundle = ures_open(testdatapath, param[i].name, &status);
1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status,param[i].expected_constructor_status);
1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(i == 5)
1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            actual_bundle = 0; /* ne -> default */
1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if(i == 3)
1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            actual_bundle = 1; /* te_NE -> te */
1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else if(i == 4)
1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            actual_bundle = 2; /* te_IN_NE -> te_IN */
1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else
1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            actual_bundle = i;
1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        expected_resource_status = U_MISSING_RESOURCE_ERROR;
1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (j=e_te_IN; j>=e_Root; --j)
1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (is_in[j] && param[i].inherits[j])
1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            {
1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(j == actual_bundle) /* it's in the same bundle OR it's a nonexistent=default bundle (5) */
1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    expected_resource_status = U_ZERO_ERROR;
1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                else if(j == 0)
1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    expected_resource_status = U_USING_DEFAULT_WARNING;
1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                else
1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    expected_resource_status = U_USING_FALLBACK_WARNING;
1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_verbose("%s[%d]::%s: in<%d:%s> inherits<%d:%s>.  actual_bundle=%s\n",
1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            param[i].name,
1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            i,
1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            frag,
1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            j,
1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            is_in[j]?"Yes":"No",
1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            j,
1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            param[i].inherits[j]?"Yes":"No",
1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            param[actual_bundle].name);
1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (j=param[i].where; j>=0; --j)
1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (is_in[j])
1672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            {
1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(base != NULL) {
1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    free(base);
1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    base = NULL;
1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                base=(UChar*)malloc(sizeof(UChar)*(strlen(NAME[j]) + 1));
1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_uastrcpy(base,NAME[j]);
1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                break;
1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            else {
1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(base != NULL) {
1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    free(base);
1685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    base = NULL;
1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                base = (UChar*) malloc(sizeof(UChar) * 1);
1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                *base = 0x0000;
1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*----string---------------------------------------------------------------- */
1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(tag,"string_");
1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(tag,frag);
1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(action,param[i].name);
1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ".ures_getStringByKey(" );
1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action,tag);
1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ")");
1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        len=0;
1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        string=tres_getString(theBundle, -1, tag, &len, &status);
1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_SUCCESS(status)) {
1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expected_string=(UChar*)malloc(sizeof(UChar)*(u_strlen(base) + 4));
1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            u_strcpy(expected_string,base);
1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(len, u_strlen(expected_string));
1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }else{
1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expected_string = (UChar*)malloc(sizeof(UChar)*(u_strlen(kERROR) + 1));
1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            u_strcpy(expected_string,kERROR);
1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string=kERROR;
1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("%s got %d, expected %d\n", action, status, expected_resource_status);
1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, expected_resource_status);
1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_EQ(string, expected_string);
1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*--------------array------------------------------------------------- */
1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(tag,"array_");
1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(tag,frag);
1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(action,param[i].name);
1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ".ures_getByKey(" );
1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action,tag);
1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ")");
1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        len=0;
1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        count = kERROR_COUNT;
1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        array=ures_getByKey(theBundle, tag, array, &status);
1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status,expected_resource_status);
1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status)) {
1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /*confirm the resource type is an array*/
1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(ures_getType(array), URES_ARRAY);
1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /*confirm the size*/
1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            count=ures_getSize(array);
1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_GE(count,1);
1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for (j=0; j<count; ++j) {
1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UChar element[3];
1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_strcpy(expected_string, base);
1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_uastrcpy(element, itoa1(j,buf));
1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_strcat(expected_string, element);
1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                arrayItem1=ures_getNextResource(array, arrayItem1, &status);
1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(U_SUCCESS(status)){
1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    CONFIRM_EQ(tres_getString(arrayItem1, -1, NULL, &len, &status),expected_string);
1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        else {
1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(count,kERROR_COUNT);
1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_ErrorCode(status, U_MISSING_RESOURCE_ERROR);
1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /*CONFIRM_INT_EQ((int32_t)(unsigned long)array,(int32_t)0);*/
1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            count = 0;
1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*--------------arrayItem------------------------------------------------- */
1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(tag,"array_");
1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(tag,frag);
1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(action,param[i].name);
1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ".ures_getStringByIndex(");
1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, tag);
1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ")");
1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (j=0; j<10; ++j){
1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            index = count ? (randi(count * 3) - count) : (randi(200) - 100);
1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            status = U_ZERO_ERROR;
1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string=kERROR;
1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            array=ures_getByKey(theBundle, tag, array, &status);
1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(!U_FAILURE(status)){
1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UChar *t=NULL;
1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                t=(UChar*)ures_getStringByIndex(array, index, &len, &status);
1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(!U_FAILURE(status)){
1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UChar element[3];
1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    string=t;
1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    u_strcpy(expected_string, base);
1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    u_uastrcpy(element, itoa1(index,buf));
1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    u_strcat(expected_string, element);
1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                } else {
1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    u_strcpy(expected_string, kERROR);
1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expected_status = (index >= 0 && index < count) ? expected_resource_status : U_MISSING_RESOURCE_ERROR;
1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_ErrorCode(status,expected_status);
1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_EQ(string,expected_string);
1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*--------------2dArray------------------------------------------------- */
1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(tag,"array_2d_");
1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(tag,frag);
1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(action,param[i].name);
1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ".ures_getByKey(" );
1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action,tag);
1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, ")");
1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        row_count = kERROR_COUNT, column_count = kERROR_COUNT;
1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        array2d=ures_getByKey(theBundle, tag, array2d, &status);
1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status,expected_resource_status);
1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status))
1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /*confirm the resource type is an 2darray*/
1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(ures_getType(array2d), URES_ARRAY);
1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            row_count=ures_getSize(array2d);
1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_GE(row_count,1);
1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for(row=0; row<row_count; ++row){
1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UResourceBundle *tableRow=NULL;
1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                tableRow=ures_getByIndex(array2d, row, tableRow, &status);
1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                CONFIRM_ErrorCode(status, expected_resource_status);
1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(U_SUCCESS(status)){
1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    /*confirm the resourcetype of each table row is an array*/
1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    CONFIRM_INT_EQ(ures_getType(tableRow), URES_ARRAY);
1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    column_count=ures_getSize(tableRow);
1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    CONFIRM_INT_GE(column_count,1);
1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    for (col=0; j<column_count; ++j) {
1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UChar element[3];
1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_strcpy(expected_string, base);
1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_uastrcpy(element, itoa1(row, buf));
1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_strcat(expected_string, element);
1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_uastrcpy(element, itoa1(col, buf));
1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_strcat(expected_string, element);
1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        arrayItem1=ures_getNextResource(tableRow, arrayItem1, &status);
1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        if(U_SUCCESS(status)){
1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            const UChar *stringValue=tres_getString(arrayItem1, -1, NULL, &len, &status);
1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            CONFIRM_EQ(stringValue, expected_string);
1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        }
1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ures_close(tableRow);
1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }else{
1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(row_count,kERROR_COUNT);
1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(column_count,kERROR_COUNT);
1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            row_count=column_count=0;
1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*------2dArrayItem-------------------------------------------------------------- */
1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* 2dArrayItem*/
1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (j=0; j<10; ++j)
1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            row = row_count ? (randi(row_count * 3) - row_count) : (randi(200) - 100);
1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            col = column_count ? (randi(column_count * 3) - column_count) : (randi(200) - 100);
1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            status = U_ZERO_ERROR;
1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string = kERROR;
1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            len=0;
1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            array2d=ures_getByKey(theBundle, tag, array2d, &status);
1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_SUCCESS(status)){
1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UResourceBundle *tableRow=NULL;
1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                tableRow=ures_getByIndex(array2d, row, tableRow, &status);
1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(U_SUCCESS(status)) {
1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UChar *t=NULL;
1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    t=(UChar*)ures_getStringByIndex(tableRow, col, &len, &status);
1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if(U_SUCCESS(status)){
1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        string=t;
1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ures_close(tableRow);
1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            expected_status = (row >= 0 && row < row_count && col >= 0 && col < column_count) ?
1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                   expected_resource_status: U_MISSING_RESOURCE_ERROR;
1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_ErrorCode(status,expected_status);
1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if (U_SUCCESS(status)){
1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UChar element[3];
1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_strcpy(expected_string, base);
1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_uastrcpy(element, itoa1(row, buf));
1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_strcat(expected_string, element);
1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_uastrcpy(element, itoa1(col, buf));
1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_strcat(expected_string, element);
1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                u_strcpy(expected_string,kERROR);
1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_EQ(string,expected_string);
1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*--------------taggedArray----------------------------------------------- */
1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(tag,"tagged_array_");
1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(tag,frag);
1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(action,param[i].name);
1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action,".ures_getByKey(");
1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action, tag);
1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcat(action,")");
1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tag_count=0;
1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tags=ures_getByKey(theBundle, tag, tags, &status);
1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_ErrorCode(status, expected_resource_status);
1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if (U_SUCCESS(status)) {
1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UResType bundleType=ures_getType(tags);
1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_EQ(bundleType, URES_TABLE);
1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            tag_count=ures_getSize(tags);
1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            CONFIRM_INT_GE((int32_t)tag_count, (int32_t)0);
1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            for(index=0; index <tag_count; index++){
1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UResourceBundle *tagelement=NULL;
1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                const char *key=NULL;
1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UChar* value=NULL;
1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                tagelement=ures_getByIndex(tags, index, tagelement, &status);
1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                key=ures_getKey(tagelement);
1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                value=(UChar*)ures_getNextString(tagelement, &len, &key, &status);
1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_verbose("tag = %s, value = %s\n", key, u_austrcpy(verboseOutput, value));
1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(strncmp(key, "tag", 3) == 0 && u_strncmp(value, base, u_strlen(base)) == 0){
1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    record_pass();
1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }else{
1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    record_fail();
1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ures_close(tagelement);
1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }else{
1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            tag_count=0;
1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*---------taggedArrayItem----------------------------------------------*/
1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        count = 0;
1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        for (index=-20; index<20; ++index)
1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        {
1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            status = U_ZERO_ERROR;
1945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            string = kERROR;
1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            strcpy(item_tag, "tag");
1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            strcat(item_tag, itoa1(index,buf));
1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            tags=ures_getByKey(theBundle, tag, tags, &status);
1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_SUCCESS(status)){
1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UResourceBundle *tagelement=NULL;
1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UChar *t=NULL;
1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                tagelement=ures_getByKey(tags, item_tag, tagelement, &status);
1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if(!U_FAILURE(status)){
1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    UResType elementType=ures_getType(tagelement);
1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    CONFIRM_INT_EQ(elementType, URES_STRING);
1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if(strcmp(ures_getKey(tagelement), item_tag) == 0){
1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        record_pass();
1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }else{
1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        record_fail();
1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    t=(UChar*)tres_getString(tagelement, -1, NULL, &len, &status);
1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if(!U_FAILURE(status)){
1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        string=t;
1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                if (index < 0) {
1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    CONFIRM_ErrorCode(status,U_MISSING_RESOURCE_ERROR);
1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                else{
1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    if (status != U_MISSING_RESOURCE_ERROR) {
1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        UChar element[3];
1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_strcpy(expected_string, base);
1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_uastrcpy(element, itoa1(index,buf));
1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        u_strcat(expected_string, element);
1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        CONFIRM_EQ(string,expected_string);
1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        count++;
1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    }
1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                }
1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                ures_close(tagelement);
1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        CONFIRM_INT_EQ(count, tag_count);
1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        free(expected_string);
1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(theBundle);
1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(array);
1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(array2d);
1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(tags);
1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(arrayItem1);
1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    free(base);
1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return (UBool)(failNum == fail);
1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void record_pass()
1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ++pass;
1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void record_fail()
2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ++fail;
2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test to make sure that the U_USING_FALLBACK_ERROR and U_USING_DEFAULT_ERROR
2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * are set correctly
2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFallback()
2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *fr_FR = NULL;
2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *subResource = NULL;
2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *junk; /* ignored */
2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t resultLen;
2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Opening fr_FR..");
2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    fr_FR = ures_open(NULL, "fr_FR", &status);
2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
20226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "Couldn't open fr_FR - %s\n", u_errorName(status));
2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* clear it out..  just do some calls to get the gears turning */
2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    junk = tres_getString(fr_FR, -1, "LocaleID", &resultLen, &status);
2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    junk = tres_getString(fr_FR, -1, "LocaleString", &resultLen, &status);
2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    junk = tres_getString(fr_FR, -1, "LocaleID", &resultLen, &status);
2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* OK first one. This should be a Default value. */
2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    subResource = ures_getByKey(fr_FR, "MeasurementSystem", NULL, &status);
2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_USING_DEFAULT_WARNING)
2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_data_err("Expected U_USING_DEFAULT_ERROR when trying to get CurrencyMap from fr_FR, got %s\n",
2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            u_errorName(status));
2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(subResource);
2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* and this is a Fallback, to fr */
204950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    junk = tres_getString(fr_FR, -1, "ExemplarCharacters", &resultLen, &status);
2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_USING_FALLBACK_WARNING)
2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
205250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        log_data_err("Expected U_USING_FALLBACK_ERROR when trying to get ExemplarCharacters from fr_FR, got %d\n",
2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            status);
2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(fr_FR);
2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Temporary hack err actually should be U_USING_FALLBACK_ERROR */
2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Test Jitterbug 552 fallback mechanism of aliased data */
2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode err =U_ZERO_ERROR;
2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UResourceBundle* myResB = ures_open(NULL,"no_NO_NY",&err);
2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UResourceBundle* resLocID = ures_getByKey(myResB, "Version", NULL, &err);
2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UResourceBundle* tResB;
206650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        UResourceBundle* zoneResource;
2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar* version = NULL;
206850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        static const UChar versionStr[] = { 0x0032, 0x002E, 0x0030, 0x002E, 0x0034, 0x0031, 0x002E, 0x0032, 0x0033, 0x0000};
2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(err != U_ZERO_ERROR){
2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("Expected U_ZERO_ERROR when trying to test no_NO_NY aliased to nn_NO for Version err=%s\n",u_errorName(err));
2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return;
2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        version = tres_getString(resLocID, -1, NULL, &resultLen, &err);
2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(u_strcmp(version, versionStr) != 0){
2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            char x[100];
2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            char g[100];
2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            u_austrcpy(x, versionStr);
2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            u_austrcpy(g, version);
2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_data_err("ures_getString(resLocID, &resultLen, &err) returned an unexpected version value. Expected '%s', but got '%s'\n",
2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    x, g);
2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
208350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        zoneResource = ures_open(U_ICUDATA_ZONE, "no_NO_NY", &err);
208450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        tResB = ures_getByKey(zoneResource, "zoneStrings", NULL, &err);
2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(err != U_USING_FALLBACK_WARNING){
2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Expected U_USING_FALLBACK_ERROR when trying to test no_NO_NY aliased with nn_NO_NY for zoneStrings err=%s\n",u_errorName(err));
2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
208850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ures_close(tResB);
208950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        ures_close(zoneResource);
2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(resLocID);
2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        ures_close(myResB);
2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* static void printUChars(UChar* uchars){
2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/    int16_t i=0;
2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/    for(i=0; i<u_strlen(uchars); i++){
2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/        log_err("%04X ", *(uchars+i));
2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/    }
2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/ } */
2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestResourceLevelAliasing(void) {
2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *aliasB = NULL, *tb = NULL;
2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *en = NULL, *uk = NULL, *testtypes = NULL;
2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* testdatapath = NULL;
2108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *string = NULL, *sequence = NULL;
2109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*const uint8_t *binary = NULL, *binSequence = NULL;*/
2110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t strLen = 0, seqLen = 0;/*, binLen = 0, binSeqLen = 0;*/
2111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char buffer[100];
2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char *s;
2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath=loadTestData(&status);
2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2117c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    aliasB = ures_open(testdatapath, "testaliases", &status);
2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2125c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testaliases.res %s \n",myErrorName(status));
2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* this should fail - circular alias */
2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tb = ures_getByKey(aliasB, "aaa", tb, &status);
2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_TOO_MANY_ALIASES_ERROR) {
2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Failed to detect circular alias\n");
2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    else {
2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tb = ures_getByKey(aliasB, "aab", tb, &status);
2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_TOO_MANY_ALIASES_ERROR) {
2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Failed to detect circular alias\n");
2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status) ) {
2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_data_err("err loading tb resource\n");
2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }  else {
2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      /* testing aliasing to a non existing resource */
2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      tb = ures_getByKey(aliasB, "nonexisting", tb, &status);
2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(status != U_MISSING_RESOURCE_ERROR) {
2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Managed to find an alias to non-existing resource\n");
2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      } else {
2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      /* testing referencing/composed alias */
2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      uk = ures_findResource("ja/LocaleScript/2", uk, &status);
2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if((uk == NULL) || U_FAILURE(status)) {
21556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "Couldn't findResource('ja/LocaleScript/2') err %s\n", u_errorName(status));
2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        goto cleanup;
2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      sequence = tres_getString(uk, -1, NULL, &seqLen, &status);
2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      tb = ures_getByKey(aliasB, "referencingalias", tb, &status);
2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      string = tres_getString(tb, -1, NULL, &strLen, &status);
2163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) {
216550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        log_err("Referencing alias didn't get the right string (1)\n");
2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      string = tres_getString(aliasB, -1, "referencingalias", &strLen, &status);
2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) {
217050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        log_err("Referencing alias didn't get the right string (2)\n");
2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      checkStatus(__LINE__, U_ZERO_ERROR, status);
2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      tb = ures_getByKey(aliasB, "LocaleScript", tb, &status);
2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      checkStatus(__LINE__, U_ZERO_ERROR, status);
2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      tb = ures_getByIndex(tb, 2, tb, &status);
2177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      checkStatus(__LINE__, U_ZERO_ERROR, status);
2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      string = tres_getString(tb, -1, NULL, &strLen, &status);
2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      checkStatus(__LINE__, U_ZERO_ERROR, status);
2180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(U_FAILURE(status)) {
2182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("%s trying to get string via separate getters\n", u_errorName(status));
2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      } else if(seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) {
218450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        log_err("Referencing alias didn't get the right string (3)\n");
2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      {
2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UResourceBundle* ja = ures_open(U_ICUDATA_BRKITR,"ja", &status);
2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const UChar *got = NULL, *exp=NULL;
2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t gotLen = 0, expLen=0;
2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ja = ures_getByKey(ja, "boundaries", ja, &status);
2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            exp = tres_getString(ja, -1, "word", &expLen, &status);
2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            tb = ures_getByKey(aliasB, "boundaries", tb, &status);
2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            got = tres_getString(tb, -1, "word", &gotLen, &status);
2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(U_FAILURE(status)) {
2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("%s trying to read str boundaries\n", u_errorName(status));
2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else if(gotLen != expLen || u_strncmp(exp, got, gotLen) != 0) {
2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Referencing alias didn't get the right data\n");
2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            ures_close(ja);
2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            status = U_ZERO_ERROR;
2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      /* simple alias */
2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      testtypes = ures_open(testdatapath, "testtypes", &status);
2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      strcpy(buffer, "menu/file/open");
2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      s = buffer;
2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      uk = ures_findSubResource(testtypes, s, uk, &status);
2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      sequence = tres_getString(uk, -1, NULL, &seqLen, &status);
2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      tb = ures_getByKey(aliasB, "simplealias", tb, &status);
2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      string = tres_getString(tb, -1, NULL, &strLen, &status);
2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(U_FAILURE(status) || seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) {
221750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        log_err("Referencing alias didn't get the right string (4)\n");
2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      /* test indexed aliasing */
2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      tb = ures_getByKey(aliasB, "zoneTests", tb, &status);
2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      tb = ures_getByKey(tb, "zoneAlias2", tb, &status);
2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      string = tres_getString(tb, -1, NULL, &strLen, &status);
2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
222650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho      en = ures_findResource("/ICUDATA-zone/en/zoneStrings/3/0", en, &status);
2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      sequence = tres_getString(en, -1, NULL, &seqLen, &status);
2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(U_FAILURE(status) || seqLen != strLen || u_strncmp(sequence, string, seqLen) != 0) {
223050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        log_err("Referencing alias didn't get the right string (5)\n");
2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* test getting aliased string by index */
2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* keys[] = {
2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "KeyAlias0PST",
2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "KeyAlias1PacificStandardTime",
2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "KeyAlias2PDT",
2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "KeyAlias3LosAngeles"
2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char* strings[] = {
2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "America/Los_Angeles",
2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "Pacific Standard Time",
2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "PDT",
2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                "Los Angeles",
2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        };
2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar uBuffer[256];
2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar* result;
2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t uBufferLen = 0, resultLen = 0;
2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t i = 0;
2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *key = NULL;
2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tb = ures_getByKey(aliasB, "testGetStringByKeyAliasing", tb, &status);
2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(status)) {
225550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          log_err("FAIL: Couldn't get testGetStringByKeyAliasing resource: %s\n", u_errorName(status));
225650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else {
225750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
225850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = tres_getString(tb, -1, keys[i], &resultLen, &status);
225950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(U_FAILURE(status)){
226050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    log_err("(1) Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status));
226150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    continue;
226250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
226350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                uBufferLen = u_unescape(strings[i], uBuffer, 256);
226450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) {
226550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  log_err("(1) Didn't get correct string while accessing alias table by key (%s)\n", keys[i]);
226650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
226850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
226950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = tres_getString(tb, i, NULL, &resultLen, &status);
227050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(U_FAILURE(status)){
227150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    log_err("(2) Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status));
227250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    continue;
227350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
227450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                uBufferLen = u_unescape(strings[i], uBuffer, 256);
227550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) {
227650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  log_err("(2) Didn't get correct string while accesing alias table by index (%s)\n", strings[i]);
227750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
227950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
228050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = ures_getNextString(tb, &resultLen, &key, &status);
228150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(U_FAILURE(status)){
228250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    log_err("(3) Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status));
228350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    continue;
228450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
228550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                uBufferLen = u_unescape(strings[i], uBuffer, 256);
228650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) {
228750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  log_err("(3) Didn't get correct string while iterating over alias table (%s)\n", strings[i]);
228850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        tb = ures_getByKey(aliasB, "testGetStringByIndexAliasing", tb, &status);
2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(status)) {
229350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho          log_err("FAIL: Couldn't get testGetStringByIndexAliasing resource: %s\n", u_errorName(status));
229450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        } else {
229550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
229650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = tres_getString(tb, i, NULL, &resultLen, &status);
229750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(U_FAILURE(status)){
229850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    log_err("Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status));
229950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    continue;
230050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
230150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                uBufferLen = u_unescape(strings[i], uBuffer, 256);
230250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) {
230350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  log_err("Didn't get correct string while accesing alias by index in an array (%s)\n", strings[i]);
230450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
230650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            for(i = 0; i < sizeof(strings)/sizeof(strings[0]); i++) {
230750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                result = ures_getNextString(tb, &resultLen, &key, &status);
230850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(U_FAILURE(status)){
230950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    log_err("Fetching the resource with key %s failed. Error: %s\n", keys[i], u_errorName(status));
231050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                    continue;
231150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
231250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                uBufferLen = u_unescape(strings[i], uBuffer, 256);
231350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                if(result==NULL || resultLen != uBufferLen || u_strncmp(result, uBuffer, resultLen) != 0) {
231450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                  log_err("Didn't get correct string while iterating over aliases in an array (%s)\n", strings[i]);
231550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                }
2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    tb = ures_getByKey(aliasB, "testAliasToTree", tb, &status);
2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Fetching the resource with key \"testAliasToTree\" failed. Error: %s\n", u_errorName(status));
2322c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        goto cleanup;
2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if (strcmp(ures_getKey(tb), "collations") != 0) {
2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ures_getKey(aliasB) unexpectedly returned %s instead of \"collations\"\n", ures_getKey(tb));
2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querucleanup:
2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(aliasB);
2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(tb);
2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(en);
2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(uk);
2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(testtypes);
2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDirectAccess(void) {
2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *t = NULL, *t2 = NULL;
2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* key = NULL;
2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char buffer[100];
2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char *s;
2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*const char* testdatapath=loadTestData(&status);
2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)){
2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Could not load testdata.dat %s \n",myErrorName(status));
2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }*/
2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_findResource("/testdata/te/zoneStrings/3/2", t, &status);
2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2350c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Couldn't access indexed resource, error %s\n", u_errorName(status));
2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        key = ures_getKey(t);
2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(key != NULL) {
2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Got a strange key, expected NULL, got %s\n", key);
2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_findResource("en/calendar/gregorian/DateTimePatterns/3", t, &status);
2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2360c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Couldn't access indexed resource, error %s\n", u_errorName(status));
2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        key = ures_getKey(t);
2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(key != NULL) {
2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Got a strange key, expected NULL, got %s\n", key);
2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_findResource("ja/LocaleScript", t, &status);
2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2371c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Couldn't access keyed resource, error %s\n", u_errorName(status));
2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        key = ures_getKey(t);
2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(strcmp(key, "LocaleScript")!=0) {
2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Got a strange key, expected 'LocaleScript', got %s\n", key);
2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
238050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    t2 = ures_open(U_ICUDATA_LANG, "sr", &status);
2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
23826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "Couldn't open 'sr' resource bundle, error %s\n", u_errorName(status));
2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_data_err("No 'sr', no test - you have bigger problems than testing direct access. "
2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     "You probably have no data! Aborting this test\n");
2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        strcpy(buffer, "Languages/hr");
2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s = buffer;
2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        t = ures_findSubResource(t2, s, t, &status);
2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(status)) {
2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("Couldn't access keyed resource, error %s\n", u_errorName(status));
2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            status = U_ZERO_ERROR;
2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            key = ures_getKey(t);
2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(strcmp(key, "hr")!=0) {
2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("Got a strange key, expected 'hr', got %s\n", key);
2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_findResource("root/calendar/islamic-civil/DateTime", t, &status);
2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
2404c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("This resource does not exist. How did it get here?\n");
2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* this one will freeze */
2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_findResource("root/calendar/islamic-civil/eras/abbreviated/0/mikimaus/pera", t, &status);
2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
2411c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Second resource does not exist. How did it get here?\n");
2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(t2);
2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_open(NULL, "he", &status);
2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "calendar", t2, &status);
2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "islamic-civil", t2, &status);
2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "DateTime", t2, &status);
2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("This resource does not exist. How did it get here?\n");
2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(t2);
2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_open(NULL, "he", &status);
2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* George's fix */
2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "calendar", t2, &status);
2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "islamic-civil", t2, &status);
2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "eras", t2, &status);
2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
24326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "Didn't get Eras. I know they are there!\n");
2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(t2);
2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_open(NULL, "root", &status);
2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "calendar", t2, &status);
2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "islamic-civil", t2, &status);
2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t2 = ures_getByKeyWithFallback(t2, "DateTime", t2, &status);
2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_SUCCESS(status)) {
2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("This resource does not exist. How did it get here?\n");
2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(t2);
2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(t);
2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestJB3763(void) {
2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* Nasty bug prevented using parent as fill-in, since it would
2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * stomp the path information.
2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *t = NULL;
2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_open(NULL, "sr_Latn", &status);
2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_getByKeyWithFallback(t, "calendar", t, &status);
2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_getByKeyWithFallback(t, "gregorian", t, &status);
2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    t = ures_getByKeyWithFallback(t, "AmPmMarkers", t, &status);
2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
24616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "This resource should be available?\n");
2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(t);
2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetKeywordValues(void) {
2470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UEnumeration *kwVals;
2471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool foundStandard = FALSE;
2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *kw;
2474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
2475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    kwVals = ures_getKeywordValues( U_ICUDATA_COLL, "collations", &status);
2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing getting collation keyword values:\n");
2478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while((kw=uenum_next(kwVals, NULL, &status))) {
2480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("  %s\n", kw);
2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(!strcmp(kw,"standard")) {
2482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(foundStandard == FALSE) {
2483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                foundStandard = TRUE;
2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("'standard' was found twice in the keyword list.\n");
2486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(foundStandard == FALSE) {
24906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "'standard' was not found in the keyword list.\n");
2491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uenum_close(kwVals);
2493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
24946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "err %s getting collation values\n", u_errorName(status));
2495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    foundStandard = FALSE;
2499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    kwVals = ures_getKeywordValues( "ICUDATA", "calendar", &status);
2500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing getting calendar keyword values:\n");
2502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    while((kw=uenum_next(kwVals, NULL, &status))) {
2504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("  %s\n", kw);
2505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(!strcmp(kw,"japanese")) {
2506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(foundStandard == FALSE) {
2507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                foundStandard = TRUE;
2508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("'japanese' was found twice in the calendar keyword list.\n");
2510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(foundStandard == FALSE) {
25146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "'japanese' was not found in the calendar keyword list.\n");
2515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uenum_close(kwVals);
2517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
25186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru        log_err_status(status, "err %s getting calendar values\n", u_errorName(status));
2519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetFunctionalEquivalentOf(const char *path, const char *resName, const char *keyword, UBool truncate, const char * const testCases[]) {
2523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i;
2524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(i=0;testCases[i];i+=3) {
2525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool expectAvail = (testCases[i][0]=='t')?TRUE:FALSE;
2526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool gotAvail = FALSE;
2527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *inLocale = testCases[i+1];
2528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const char *expectLocale = testCases[i+2];
2529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        char equivLocale[256];
2530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t len;
2531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
2532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_verbose("%d:   %c      %s\texpect %s\n",i/3,  expectAvail?'t':'f', inLocale, expectLocale);
2533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        len = ures_getFunctionalEquivalent(equivLocale, 255, path,
2534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            resName, keyword, inLocale,
2535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            &gotAvail, truncate, &status);
2536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(status) || (len <= 0)) {
25376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru            log_err_status(status, "FAIL: got len %d, err %s  on #%d: %c\t%s\t%s\n",
2538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                len, u_errorName(status),
2539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                i/3,expectAvail?'t':'f', inLocale, expectLocale);
2540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
2541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_verbose("got:  %c   %s\n", expectAvail?'t':'f',equivLocale);
2542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if((gotAvail != expectAvail) || strcmp(equivLocale, expectLocale)) {
2544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("FAIL: got avail=%c, loc=%s but  expected #%d: %c\t%s\t-> loc=%s\n",
2545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    gotAvail?'t':'f', equivLocale,
2546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    i/3,
2547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    expectAvail?'t':'f', inLocale, expectLocale);
2548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetFunctionalEquivalent(void) {
2555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const char * const collCases[] = {
2556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*   avail   locale          equiv   */
2557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "de_US_CALIFORNIA",               "de",
2558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_TW@collation=stroke",         "zh@collation=stroke", /* alias of zh_Hant_TW */
2559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hant_TW@collation=stroke",    "zh@collation=stroke",
2560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "de_CN@collation=pinyin",         "de",
2561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh@collation=pinyin",            "zh",
2562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_CN@collation=pinyin",         "zh", /* alias of zh_Hans_CN */
2563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hans_CN@collation=pinyin",    "zh",
2564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_HK@collation=pinyin",         "zh", /* alias of zh_Hant_HK */
2565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hant_HK@collation=pinyin",    "zh",
2566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_HK@collation=stroke",         "zh@collation=stroke", /* alias of zh_Hant_HK */
2567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hant_HK@collation=stroke",    "zh@collation=stroke",
2568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_HK",                          "zh@collation=stroke", /* alias of zh_Hant_HK */
2569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hant_HK",                     "zh@collation=stroke",
2570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_MO",                          "zh@collation=stroke", /* alias of zh_Hant_MO */
2571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hant_MO",                     "zh@collation=stroke",
2572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_TW_STROKE",                   "zh@collation=stroke",
2573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_TW_STROKE@collation=big5han", "zh@collation=big5han",
2574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "de_CN@calendar=japanese",        "de",
2575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "de@calendar=japanese",           "de",
2576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_TW@collation=big5han",        "zh@collation=big5han", /* alias of zh_Hant_TW */
2577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hant_TW@collation=big5han",   "zh@collation=big5han",
2578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_TW@collation=gb2312han",      "zh@collation=gb2312han", /* alias of zh_Hant_TW */
2579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hant_TW@collation=gb2312han", "zh@collation=gb2312han",
2580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_CN@collation=big5han",        "zh@collation=big5han", /* alias of zh_Hans_CN */
2581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hans_CN@collation=big5han",   "zh@collation=big5han",
2582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "zh_CN@collation=gb2312han",      "zh@collation=gb2312han", /* alias of zh_Hans_CN */
2583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh_Hans_CN@collation=gb2312han", "zh@collation=gb2312han",
2584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh@collation=big5han",           "zh@collation=big5han",
2585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "zh@collation=gb2312han",         "zh@collation=gb2312han",
2586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "hi_IN@collation=direct",         "hi@collation=direct",
2587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "hi@collation=standard",          "hi",
2588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "hi@collation=direct",            "hi@collation=direct",
2589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "hi_AU@collation=direct;currency=CHF;calendar=buddhist",      "hi@collation=direct",
2590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "hi_AU@collation=standard;currency=CHF;calendar=buddhist",    "hi",
2591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "de_DE@collation=pinyin",         "de", /* bug 4582 tests */
2592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "de_DE_BONN@collation=pinyin",    "de",
2593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "nl",                             "root",
2594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "nl_NL",                          "root",
2595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "nl_NL_EEXT",                     "root",
2596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "nl@collation=stroke",            "root",
2597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "nl_NL@collation=stroke",         "root",
2598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "nl_NL_EEXT@collation=stroke",    "root",
2599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL
2600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static const char *calCases[] = {
2603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /*   avail   locale                       equiv   */
2604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "en_US_POSIX",                   "en_US@calendar=gregorian",
2605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "ja_JP_TOKYO",                   "ja_JP@calendar=gregorian",
2606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "f",    "ja_JP_TOKYO@calendar=japanese", "ja@calendar=japanese",
2607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "sr@calendar=gregorian", "sr@calendar=gregorian",
2608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        "t",    "en", "en@calendar=gregorian",
2609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        NULL
2610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    };
2611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
2613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestGetFunctionalEquivalentOf(U_ICUDATA_COLL, "collations", "collation", TRUE, collCases);
2614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    TestGetFunctionalEquivalentOf("ICUDATA", "calendar", "calendar", FALSE, calCases);
2616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION
2618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing error conditions:\n");
2619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        char equivLocale[256] = "???";
2621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t len;
2622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode status = U_ZERO_ERROR;
2623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool gotAvail = FALSE;
2624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        len = ures_getFunctionalEquivalent(equivLocale, 255, U_ICUDATA_COLL,
2626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            "calendar", "calendar", "ar_EG@calendar=islamic",
2627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            &gotAvail, FALSE, &status);
2628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(status == U_MISSING_RESOURCE_ERROR) {
2630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_verbose("PASS: Got expected U_MISSING_RESOURCE_ERROR\n");
2631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
2632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("ures_getFunctionalEquivalent  returned locale %s, avail %c, err %s, but expected U_MISSING_RESOURCE_ERROR \n",
2633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                equivLocale, gotAvail?'t':'f', u_errorName(status));
2634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
2637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestXPath(void) {
2640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *rb = NULL, *alias = NULL;
2642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t len = 0;
2643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar* result = NULL;
2644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar expResult[] = { 0x0063, 0x006F, 0x0072, 0x0072, 0x0065, 0x0063, 0x0074, 0x0000 }; /* "correct" */
2645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /*const UChar expResult[] = { 0x0074, 0x0065, 0x0069, 0x006E, 0x0064, 0x0065, 0x0073, 0x0074, 0x0000 }; *//*teindest*/
2646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *testdatapath=loadTestData(&status);
2648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status))
2649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
2650c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
2651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing ures_open()......\n");
2655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    rb = ures_open(testdatapath, "te_IN", &status);
2657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Could not open te_IN (%s)\n", myErrorName(status));
2659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
2660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    alias = ures_getByKey(rb, "rootAliasClient", alias, &status);
2662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Couldn't find the aliased resource (%s)\n", myErrorName(status));
2664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(rb);
2665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
2666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result = tres_getString(alias, -1, NULL, &len, &status);
2669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status) || result == NULL || u_strcmp(result, expResult)) {
2670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Couldn't get correct string value (%s)\n", myErrorName(status));
2671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    alias = ures_getByKey(rb, "aliasClient", alias, &status);
2674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Couldn't find the aliased resource (%s)\n", myErrorName(status));
2676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(rb);
2677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
2678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result = tres_getString(alias, -1, NULL, &len, &status);
2681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status) || result == NULL || u_strcmp(result, expResult)) {
2682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Couldn't get correct string value (%s)\n", myErrorName(status));
2683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    alias = ures_getByKey(rb, "nestedRootAliasClient", alias, &status);
2686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Couldn't find the aliased resource (%s)\n", myErrorName(status));
2688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(rb);
2689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
2690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    result = tres_getString(alias, -1, NULL, &len, &status);
2693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status) || result == NULL || u_strcmp(result, expResult)) {
2694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Couldn't get correct string value (%s)\n", myErrorName(status));
2695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(alias);
2698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(rb);
2699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCLDRStyleAliases(void) {
2701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status = U_ZERO_ERROR;
2702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *rb = NULL, *alias = NULL, *a=NULL;
2703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t i, len;
2704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char resource[256];
2705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *result = NULL;
2706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar expected[256];
2707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *expects[7] = { "", "a41", "a12", "a03", "ar4" };
2708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *testdatapath=loadTestData(&status);
2709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2710c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat %s \n",myErrorName(status));
2711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    log_verbose("Testing CLDR style aliases......\n");
2714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    rb = ures_open(testdatapath, "te_IN_REVISED", &status);
2716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Could not open te_IN (%s)\n", myErrorName(status));
2718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
2719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    alias = ures_getByKey(rb, "a", alias, &status);
2721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      log_err("Couldn't find the aliased with name \"a\" resource (%s)\n", myErrorName(status));
2723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      ures_close(rb);
2724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      return;
2725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(i = 1; i < 5 ; i++) {
2727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      resource[0]='a';
2728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      resource[1]='0'+i;
2729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      resource[2]=0;
2730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      /* instead of sprintf(resource, "a%i", i); */
2731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      a = ures_getByKeyWithFallback(alias, resource, a, &status);
2732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      result = tres_getString(a, -1, NULL, &len, &status);
2733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      u_charsToUChars(expects[i], expected, strlen(expects[i])+1);
2734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      if(U_FAILURE(status) || !result || u_strcmp(result, expected)) {
2735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("CLDR style aliases failed resource with name \"%s\" resource, exp %s, got %S (%s)\n", resource, expects[i], result, myErrorName(status));
2736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        status = U_ZERO_ERROR;
2737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru      }
2738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(a);
2741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(alias);
2742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(rb);
2743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFallbackCodes(void) {
2746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
2747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  const char *testdatapath=loadTestData(&status);
2748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UResourceBundle *res = ures_open(testdatapath, "te_IN", &status);
2750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UResourceBundle *r = NULL, *fall = NULL;
2752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  r = ures_getByKey(res, "tagged_array_in_Root_te_te_IN", r, &status);
2754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
2756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fall = ures_getByKeyWithFallback(r, "tag2", fall, &status);
2757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(status != U_ZERO_ERROR) {
2759c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    log_data_err("Expected error code to be U_ZERO_ERROR, got %s\n", u_errorName(status));
2760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
2762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fall = ures_getByKeyWithFallback(r, "tag7", fall, &status);
2764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(status != U_USING_FALLBACK_WARNING) {
2766c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    log_data_err("Expected error code to be U_USING_FALLBACK_WARNING, got %s\n", u_errorName(status));
2767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
2768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
2769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  fall = ures_getByKeyWithFallback(r, "tag1", fall, &status);
2771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  if(status != U_USING_DEFAULT_WARNING) {
2773c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru    log_data_err("Expected error code to be U_USING_DEFAULT_WARNING, got %s\n", u_errorName(status));
2774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  }
2775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  status = U_ZERO_ERROR;
2776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(fall);
2778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(r);
2779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  ures_close(res);
2780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* This test will crash if this doesn't work. Results don't need testing. */
2783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestStackReuse(void) {
2784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle table;
2785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode errorCode = U_ZERO_ERROR;
2786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *rb = ures_open(NULL, "en_US", &errorCode);
2787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(errorCode)) {
2789c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load en_US locale. status=%s\n",myErrorName(errorCode));
2790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_initStackObject(&table);
2793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_getByKeyWithFallback(rb, "Types", &table, &errorCode);
2794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_getByKeyWithFallback(&table, "collation", &table, &errorCode);
2795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(rb);
2796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(&table);
2797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Test ures_getUTF8StringXYZ() --------------------------------------------- */
2800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Replace most ures_getStringXYZ() with this function which wraps the
2803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * desired call and also calls the UTF-8 variant and checks that it works.
2804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruextern const UChar *
2806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutres_getString(const UResourceBundle *resB,
2807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               int32_t index, const char *key,
2808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               int32_t *length,
2809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               UErrorCode *status) {
2810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char buffer8[16];
2811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char *p8;
2812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UChar *s16;
2813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *s8;
2814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UChar32 c16, c8;
2815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t length16, length8, i16, i8;
2816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool forceCopy;
2817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(length == NULL) {
2819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        length = &length16;
2820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(index >= 0) {
2822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s16 = ures_getStringByIndex(resB, index, length, status);
2823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else if(key != NULL) {
2824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s16 = ures_getStringByKey(resB, key, length, status);
2825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    } else {
2826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        s16 = ures_getString(resB, length, status);
2827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(*status)) {
2829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return s16;
2830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    length16 = *length;
2832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* try the UTF-8 variant of ures_getStringXYZ() */
2834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    for(forceCopy = FALSE; forceCopy <= TRUE; ++forceCopy) {
2835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        p8 = buffer8;
2836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        length8 = (int32_t)sizeof(buffer8);
2837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(index >= 0) {
2838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            s8 = ures_getUTF8StringByIndex(resB, index, p8, &length8, forceCopy, status);
2839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else if(key != NULL) {
2840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            s8 = ures_getUTF8StringByKey(resB, key, p8, &length8, forceCopy, status);
2841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        } else {
2842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            s8 = ures_getUTF8String(resB, p8, &length8, forceCopy, status);
2843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(*status == U_INVALID_CHAR_FOUND) {
2845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* the UTF-16 string contains an unpaired surrogate, can't test UTF-8 variant */
2846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return s16;
2847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(*status == U_BUFFER_OVERFLOW_ERROR) {
2849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            *status = U_ZERO_ERROR;
2850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            p8 = (char *)malloc(++length8);
2851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(p8 == NULL) {
2852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                return s16;
2853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(index >= 0) {
2855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                s8 = ures_getUTF8StringByIndex(resB, index, p8, &length8, forceCopy, status);
2856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else if(key != NULL) {
2857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                s8 = ures_getUTF8StringByKey(resB, key, p8, &length8, forceCopy, status);
2858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            } else {
2859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                s8 = ures_getUTF8String(resB, p8, &length8, forceCopy, status);
2860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(U_FAILURE(*status)) {
2863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            /* something unexpected happened */
2864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(p8 != buffer8) {
2865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                free(p8);
2866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            return s16;
2868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(forceCopy && s8 != p8) {
2871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("ures_getUTF8String(%p, %ld, '%s') did not write the string to dest\n",
2872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    resB, (long)index, key);
2873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* verify NUL-termination */
2876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if((p8 != buffer8 || length8 < sizeof(buffer8)) && s8[length8] != 0) {
2877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("ures_getUTF8String(%p, %ld, '%s') did not NUL-terminate\n",
2878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    resB, (long)index, key);
2879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* verify correct string */
2881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        i16 = i8 = 0;
2882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        while(i16 < length16 && i8 < length8) {
2883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            U16_NEXT(s16, i16, length16, c16);
2884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            U8_NEXT(s8, i8, length8, c8);
2885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            if(c16 != c8) {
2886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                log_err("ures_getUTF8String(%p, %ld, '%s') got a bad string, c16=U+%04lx!=U+%04lx=c8 before i16=%ld\n",
2887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                        resB, (long)index, key, (long)c16, (long)c8, (long)i16);
2888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            }
2889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* verify correct length */
2891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(i16 < length16) {
2892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("ures_getUTF8String(%p, %ld, '%s') UTF-8 string too short, length8=%ld, length16=%ld\n",
2893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    resB, (long)index, key, (long)length8, (long)length16);
2894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(i8 < length8) {
2896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            log_err("ures_getUTF8String(%p, %ld, '%s') UTF-8 string too long, length8=%ld, length16=%ld\n",
2897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    resB, (long)index, key, (long)length8, (long)length16);
2898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        /* clean up */
2901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        if(p8 != buffer8) {
2902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            free(p8);
2903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        }
2904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return s16;
2906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API tests for ures_getUTF8String().
2910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Most cases are handled by tres_getString(), which leaves argument checking
2911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to be tested here.
2912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Since the variants share most of their implementation, we only need to test
2913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * one of them.
2914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * We also need not test for checking arguments which will be checked by the
2915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UTF-16 ures_getStringXYZ() that are called internally.
2916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
2917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void
2918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestGetUTF8String() {
2919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UResourceBundle *res;
2920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *testdatapath;
2921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char buffer8[16];
2922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char *s8;
2923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t length8;
2924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UErrorCode status;
2925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    testdatapath = loadTestData(&status);
2928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2929c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru        log_data_err("Could not load testdata.dat - %s\n", u_errorName(status));
2930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    res = ures_open(testdatapath, "", &status);
2934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(U_FAILURE(status)) {
2935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("Unable to ures_open(testdata, \"\") - %s\n", u_errorName(status));
2936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        return;
2937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* one good call */
2940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    length8 = (int32_t)sizeof(buffer8);
2942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s8 = ures_getUTF8StringByKey(res, "string_only_in_Root", buffer8, &length8, FALSE, &status);
2943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_ZERO_ERROR) {
2944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ures_getUTF8StringByKey(testdata/root string) malfunctioned - %s\n", u_errorName(status));
2945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* negative capacity */
2948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    length8 = -1;
2950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s8 = ures_getUTF8StringByKey(res, "string_only_in_Root", buffer8, &length8, FALSE, &status);
2951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_ILLEGAL_ARGUMENT_ERROR) {
2952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ures_getUTF8StringByKey(capacity<0) malfunctioned - %s\n", u_errorName(status));
2953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /* capacity>0 but dest=NULL */
2956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    status = U_ZERO_ERROR;
2957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    length8 = (int32_t)sizeof(buffer8);
2958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s8 = ures_getUTF8StringByKey(res, "string_only_in_Root", NULL, &length8, FALSE, &status);
2959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    if(status != U_ILLEGAL_ARGUMENT_ERROR) {
2960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        log_err("ures_getUTF8StringByKey(dest=NULL capacity>0) malfunctioned - %s\n", u_errorName(status));
2961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
2962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ures_close(res);
2964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
2965b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
296650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void TestCLDRVersion(void) {
2967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  UVersionInfo zeroVersion;
2968b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  UVersionInfo testExpect;
2969b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  UVersionInfo testCurrent;
2970b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  UVersionInfo cldrVersion;
2971b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  char tmp[200];
2972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  UErrorCode status = U_ZERO_ERROR;
2973b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2974b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  /* setup the constant value */
2975b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  u_versionFromString(zeroVersion, "0.0.0.0");
2976b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2977b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  /* test CLDR value from API */
2978b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  ulocdata_getCLDRVersion(cldrVersion, &status);
2979b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  if(U_FAILURE(status)) {
2980b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    /* the show is pretty much over at this point */
29816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru    log_err_status(status, "FAIL: ulocdata_getCLDRVersion() returned %s\n", u_errorName(status));
2982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    return;
2983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  } else {
2984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    u_versionToString(cldrVersion, tmp);
2985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    log_info("ulocdata_getCLDRVersion() returned: '%s'\n", tmp);
2986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  }
2987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  /* setup from resource bundle */
2990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  {
2991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    UResourceBundle *res;
2992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    const char *testdatapath;
2993b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
2994b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    status = U_ZERO_ERROR;
2995b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    testdatapath = loadTestData(&status);
2996b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(U_FAILURE(status)) {
2997b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        log_data_err("Could not load testdata.dat - %s\n", u_errorName(status));
2998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
2999b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3000b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3001b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    res = ures_openDirect(testdatapath, "root", &status);
3002b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(U_FAILURE(status)) {
3003b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        log_err("Unable to ures_open(testdata, \"\") - %s\n", u_errorName(status
3004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru));
3005b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        return;
3006b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3007b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    ures_getVersionByKey(res, "ExpectCLDRVersionAtLeast", testExpect, &status);
3008b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    ures_getVersionByKey(res, "CurrentCLDRVersion", testCurrent, &status);
3009b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    ures_close(res);
3010b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    if(U_FAILURE(status)) {
3011b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru        log_err("Unable to get test data for CLDR version - %s\n", u_errorName(status));
3012b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    }
3013b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  }
3014b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  if(U_FAILURE(status)) return;
3015b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3016b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3017b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  u_versionToString(testExpect,tmp);
3018b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  log_verbose("(data) ExpectCLDRVersionAtLeast { %s }\n", tmp);
301950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  if(memcmp(cldrVersion, testExpect, sizeof(UVersionInfo)) < 0) {
3020b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    log_data_err("CLDR version is too old, expect at least %s.", tmp);
3021b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  }
3022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  u_versionToString(testCurrent,tmp);
3023b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  log_verbose("(data) CurrentCLDRVersion { %s }\n", tmp);
302450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  switch(memcmp(cldrVersion, testCurrent, sizeof(UVersionInfo))) {
3025b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    case 0: break; /* OK- current. */
3026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    case -1: log_info("CLDR version is behind 'current' (for testdata/root.txt) %s. Some things may fail.\n", tmp); break;
3027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    case 1: log_info("CLDR version is ahead of 'current' (for testdata/root.txt) %s. Some things may fail.\n", tmp); break;
3028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru  }
3029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru
3030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}
3031