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