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