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