ICU-1627 implement fallback for loading data

X-SVN-Rev: 7518
This commit is contained in:
Ram Viswanadha 2002-01-29 04:01:49 +00:00
parent 7ef6ef2d77
commit 7b4ed42d34
5 changed files with 159 additions and 73 deletions

View File

@ -312,7 +312,58 @@ char *aescstrdup(const UChar* unichars){
return newString;
}
void loadTestData(char* testdatapath,int32_t len, UErrorCode* err ){
const char* directory=NULL;
UResourceBundle* test =NULL;
char tdpath[256];
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
char tdpathFallback[256];
directory= u_getDataDirectory();
strcpy(tdpath, directory);
strcpy(tdpathFallback,directory);
if(len < 256){
*err = U_BUFFER_OVERFLOW_ERROR;
return ;
}
/* u_getDataDirectory shoul return \source\data ... set the
* directory to ..\source\data\..\test\testdata\out\testdata
*
* Fallback: When Memory mapped file is built
* ..\source\data\out\..\..\test\testdata\out\testdata
*/
strcat(tdpath, tdrelativepath);
strcat(tdpath,"testdata");
strcat(tdpathFallback,".."U_FILE_SEP_STRING);
strcat(tdpathFallback, tdrelativepath);
strcat(tdpathFallback,"testdata");
test=ures_open(tdpath, "testtypes", err);
/* we could not find the data in tdpath
* try tdpathFallback
*/
if(U_FAILURE(*err))
{
testdatapath=tdpathFallback;
*err =U_ZERO_ERROR;
test=ures_open(testdatapath, "ja_data", err);
/* Fall back did not succeed either so return */
if(U_FAILURE(*err)){
*err = U_FILE_ACCESS_ERROR;
log_err("construction of NULL did not succeed : %s \n", myErrorName(*err));
return;
}
ures_close(test);
strcpy(testdatapath,tdpathFallback);
return;
}
ures_close(test);
strcpy(testdatapath,tdpath);
}
#define CTST_MAX_ALLOC 10000
/* Array used as a queue */

View File

@ -61,7 +61,7 @@ U_CFUNC char *aescstrdup(const UChar* unichars);
U_CFUNC void *ctst_malloc(size_t size);
U_CFUNC void ctst_freeAll();
U_CFUNC void loadTestData(char* testdatapath,int32_t len, UErrorCode* err );
/**
* function used to specify the error

View File

@ -132,35 +132,34 @@ void TestResourceBundles()
log_verbose("Passed:= %d Failed= %d \n", pass, fail);
}
void TestConstruction1()
{
UResourceBundle *test1 = 0, *test2 = 0;
const UChar *result1, *result2;
int32_t resultLen;
UErrorCode err = U_ZERO_ERROR;
const char* directory=NULL;
const char* locale="te_IN";
char testdatapath[256];
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
directory= u_getDataDirectory();
uprv_strcpy(testdatapath, directory);
/* u_getDataDirectory shoul return \source\data ... set the
* directory to ..\source\data\..\test\testdata\out\testdata
*/
uprv_strcat(testdatapath, tdrelativepath);
uprv_strcat(testdatapath,"testdata");
UErrorCode err = U_ZERO_ERROR;
char testdatapath[256] ;
const char* locale="te_IN";
log_verbose("Testing ures_open()......\n");
test1=ures_open(testdatapath, NULL, &err);
loadTestData(testdatapath,256,&err);
if(U_FAILURE(err))
{
log_err("construction of NULL did not succeed : %s \n", myErrorName(err));
log_err("Could not load testdata.dat %s \n",myErrorName(err));
return;
}
test1=ures_open(testdatapath, NULL, &err);
if(U_FAILURE(err))
{
log_err("construction of %s did not succeed : %s \n",NULL, myErrorName(err));
return;
}
test2=ures_open(testdatapath, locale, &err);
if(U_FAILURE(err))
{

View File

@ -291,14 +291,14 @@ static void TestNewTypes() {
UChar expected[] = { 'a','b','c','\0','d','e','f' };
const char* expect ="tab:\t cr:\r ff:\f newline:\n backslash:\\\\ quote=\\\' doubleQuote=\\\" singlequoutes=''";
UChar uExpect[200];
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
u_charsToUChars(expect,uExpect,uprv_strlen(expect)+1);
strcpy(action, "Construction of testtypes bundle");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return;
}
strcpy(testdatapath, directory);
strcat(testdatapath,tdrelativepath);
strcat(testdatapath, "testdata");
theBundle = ures_open(testdatapath, "testtypes", &status);
empty = ures_getStringByKey(theBundle, "emptystring", &len, &status);
@ -407,8 +407,9 @@ static void TestNewTypes() {
const UChar* str = ures_getStringByKey(theBundle,"testescape",&len,&status);
CONFIRM_ErrorCode(status, U_ZERO_ERROR);
if(U_SUCCESS(status)){
u_charsToUChars(expect,uExpect,uprv_strlen(expect)+1);
if(u_strcmp(uExpect,str)){
log_err("Did not get the expected string for testescape");
log_err("Did not get the expected string for testescape\n");
}
}
}
@ -419,7 +420,7 @@ static void TestNewTypes() {
u_charsToUChars(expect,uExpect,uprv_strlen(expect)+1);
CONFIRM_ErrorCode(status, U_ZERO_ERROR);
if(u_strcmp(uExpect,str)){
log_err("Did not get the expected string for test_underscores.");
log_err("Did not get the expected string for test_underscores.\n");
}
}
ures_close(res);
@ -440,13 +441,16 @@ static void TestEmptyTypes() {
int32_t intResult = 0;
const UChar *zeroString;
const int32_t *zeroIntVect;
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
strcpy(action, "Construction of testtypes bundle");
strcpy(testdatapath, directory);
strcat(testdatapath,tdrelativepath);
strcat(testdatapath, "testdata");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return;
}
theBundle = ures_open(testdatapath, "testtypes", &status);
CONFIRM_ErrorCode(status, U_ZERO_ERROR);
@ -574,11 +578,13 @@ static void TestEmptyBundle(){
char testdatapath[256];
const char *directory= u_getDataDirectory();
UResourceBundle *resb=0, *dResB=0;
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
strcpy(testdatapath, directory);
strcat(testdatapath,tdrelativepath);
strcat(testdatapath, "testdata");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return;
}
resb = ures_open(testdatapath, "testempty", &status);
if(U_SUCCESS(status)){
@ -594,7 +600,6 @@ static void TestEmptyBundle(){
static void TestBinaryCollationData(){
UErrorCode status=U_ZERO_ERROR;
const char* directory=NULL;
const char* locale="te";
char testdatapath[256];
UResourceBundle *teRes = NULL;
@ -603,15 +608,17 @@ static void TestBinaryCollationData(){
uint8_t *binResult = NULL;
int32_t len=0;
const char* action="testing the binary collaton data";
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
directory= u_getDataDirectory();
uprv_strcpy(testdatapath, directory);
uprv_strcat(testdatapath,tdrelativepath);
uprv_strcat(testdatapath, "testdata");
log_verbose("Testing binary collation data resource......\n");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return;
}
teRes=ures_open(testdatapath, locale, &status);
if(U_FAILURE(status)){
log_err("ERROR: Failed to get resource for \"te\" with %s", myErrorName(status));
@ -658,17 +665,21 @@ static void TestAPI() {
UResourceBundle *teRes = NULL;
UResourceBundle *teFillin=NULL;
UResourceBundle *teFillin2=NULL;
char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
directory= u_getDataDirectory();
uprv_strcpy(testdatapath, directory);
uprv_strcat(testdatapath,tdrelativepath);
uprv_strcat(testdatapath, "testdata");
log_verbose("Testing ures_openU()......\n");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return;
}
u_charsToUChars(testdatapath, utestdatapath, strlen(testdatapath)+1);
/*u_uastrcpy(utestdatapath, testdatapath);*/
/*Test ures_openU */
log_verbose("Testing ures_openU()......\n");
teRes=ures_openU(utestdatapath, "te", &status);
if(U_FAILURE(status)){
log_err("ERROR: ures_openU() failed path =%s with %s", austrdup(utestdatapath), myErrorName(status));
@ -780,13 +791,15 @@ static void TestErrorConditions(){
UResourceBundle *teFillin2=NULL;
uint8_t *binResult = NULL;
int32_t resultLen;
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
directory= u_getDataDirectory();
uprv_strcpy(testdatapath, directory);
uprv_strcat(testdatapath,tdrelativepath);
uprv_strcat(testdatapath, "testdata");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return;
}
u_uastrcpy(utestdatapath, testdatapath);
/*Test ures_openU with status != U_ZERO_ERROR*/
@ -1042,8 +1055,6 @@ static void TestConstruction1()
const char* locale="te_IN";
char testdatapath[256];
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
int32_t len1=0;
int32_t len2=0;
UVersionInfo versionInfo;
@ -1056,10 +1067,13 @@ static void TestConstruction1()
U_STRING_INIT(rootVal, "ROOT", 4);
U_STRING_INIT(te_inVal, "TE_IN", 5);
directory= u_getDataDirectory();
uprv_strcpy(testdatapath, directory);
uprv_strcat(testdatapath, tdrelativepath);
uprv_strcat(testdatapath,"testdata");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return;
}
log_verbose("Testing ures_open()......\n");
empty = ures_open(testdatapath, "testempty", &status);
@ -1206,12 +1220,12 @@ static UBool testTag(const char* frag,
UResourceBundle* tags=NULL;
UResourceBundle* arrayItem1=NULL;
const char* directory = u_getDataDirectory();
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
uprv_strcpy(testdatapath, directory);
uprv_strcat(testdatapath,tdrelativepath);
uprv_strcat(testdatapath, "testdata");
loadTestData(testdatapath,256,&status);
if(U_FAILURE(status))
{
log_err("Could not load testdata.dat %s \n",myErrorName(status));
return FALSE;
}
is_in[0] = in_Root;
is_in[1] = in_te;

View File

@ -1031,17 +1031,39 @@ static void TestNewConvertWithBufferSizes(int32_t outsize, int32_t insize )
}
static void TestCoverageMBCS(){
char testdatapath[256];
char tdpath[256];
char tdfallbackpath[256];
char saveDirectory[256];
const char *directory= u_getDataDirectory();
const char* tdrelativepath = ".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"out"U_FILE_SEP_STRING;
UConverter* conv = NULL;
UErrorCode status = U_ZERO_ERROR;
/*save the data directory */
strcpy(saveDirectory, directory);
strcpy(testdatapath, directory);
strcat(testdatapath,tdrelativepath);
u_setDataDirectory(testdatapath);
strcpy(tdpath, directory);
strcat(tdpath,tdrelativepath);
/* set the fallback path for Memory Mapped build */
strcpy(tdfallbackpath,directory);
strcat(tdfallbackpath,".."U_FILE_SEP_STRING);
strcat(tdfallbackpath,tdrelativepath);
u_setDataDirectory(tdpath);
/* test if we can open test1.cnv from testdatapath */
conv = ucnv_open("test1",&status);
if(U_FAILURE(status)){
status=U_ZERO_ERROR;
/* try the fallback path */
u_setDataDirectory(tdfallbackpath);
conv= ucnv_open("test1",&status);
if(U_FAILURE(status)){
log_err("Could not open converters from fallback path :%s . Error : %s \n",tdfallbackpath,u_errorName(status));
}
ucnv_close(conv);
}
ucnv_close(conv);
/*some more test to increase the code coverage in MBCS. Create an test converter from test1.ucm
which is test file for MBCS conversion with single-byte codepage data.*/