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