2000-05-15 18:39:17 +00:00
/********************************************************************
* COPYRIGHT :
2003-04-16 23:52:32 +00:00
* Copyright ( c ) 1997 - 2003 , International Business Machines Corporation and
2000-05-15 18:39:17 +00:00
* others . All Rights Reserved .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/********************************************************************************
*
* File CRESTST . C
*
* Modification History :
2000-05-24 23:42:34 +00:00
* Name Date Description
* Madhu Katragadda 05 / 09 / 2000 Ported Tests for New ResourceBundle API
* Madhu Katragadda 05 / 24 / 2000 Added new tests to test RES_BINARY for collationElements
2000-05-15 18:39:17 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
2000-08-28 21:43:03 +00:00
# include <time.h>
2000-05-15 18:39:17 +00:00
# include "unicode/utypes.h"
# include "cintltst.h"
# include "unicode/utypes.h"
# include "unicode/ustring.h"
2001-11-01 19:42:38 +00:00
# include "unicode/ucnv.h"
2000-05-15 18:39:17 +00:00
# include "string.h"
# include "cstring.h"
2003-02-15 01:37:29 +00:00
# include "unicode/uchar.h"
2000-05-15 18:39:17 +00:00
# define RESTEST_HEAP_CHECK 0
# include "unicode/uloc.h"
2002-07-13 05:36:27 +00:00
# include "uresimp.h"
2000-05-15 18:39:17 +00:00
# include "creststn.h"
# include "unicode/ctest.h"
2003-04-24 23:08:42 +00:00
# include "ucbuf.h"
2001-08-27 18:51:43 +00:00
static int32_t pass ;
static int32_t fail ;
2000-05-15 18:39:17 +00:00
/*****************************************************************************/
/**
* Return a random unsigned long l where 0 N < = l < = ULONG_MAX .
*/
static uint32_t
randul ( )
{
2000-08-14 17:13:09 +00:00
uint32_t l = 0 ;
2000-08-09 23:34:41 +00:00
int32_t i ;
2000-05-18 22:08:39 +00:00
static UBool initialized = FALSE ;
2000-05-15 18:39:17 +00:00
if ( ! initialized )
{
srand ( ( unsigned ) time ( NULL ) ) ;
initialized = TRUE ;
}
2000-05-15 22:22:48 +00:00
/* Assume rand has at least 12 bits of precision */
2000-05-15 18:39:17 +00:00
2000-08-21 22:28:56 +00:00
for ( i = 0 ; i < sizeof ( l ) ; + + i )
( ( char * ) & l ) [ i ] = ( char ) ( ( rand ( ) & 0x0FF0 ) > > 4 ) ;
2000-05-15 18:39:17 +00:00
return l ;
}
/**
* Return a random double x where 0.0 < = x < 1.0 .
*/
static double
randd ( )
{
2001-01-02 02:28:45 +00:00
return ( ( double ) randul ( ) ) / UINT32_MAX ;
2000-05-15 18:39:17 +00:00
}
/**
* Return a random integer i where 0 < = i < n .
*/
static int32_t randi ( int32_t n )
{
return ( int32_t ) ( randd ( ) * n ) ;
}
2000-05-15 22:22:48 +00:00
/***************************************************************************************/
2000-05-15 18:39:17 +00:00
/**
* Convert an integer , positive or negative , to a character string radix 10.
*/
static char *
itoa1 ( int32_t i , char * buf )
{
char * p = 0 ;
char * result = buf ;
/* Handle negative */
if ( i < 0 ) {
* buf + + = ' - ' ;
i = - i ;
}
/* Output digits in reverse order */
p = buf ;
do {
2000-08-09 23:34:41 +00:00
* p + + = ( char ) ( ' 0 ' + ( i % 10 ) ) ;
2000-05-15 18:39:17 +00:00
i / = 10 ;
}
while ( i ) ;
* p - - = 0 ;
/* Reverse the string */
while ( buf < p ) {
char c = * buf ;
* buf + + = * p ;
* p - - = c ;
}
return result ;
}
static const int32_t kERROR_COUNT = - 1234567 ;
static const UChar kERROR [ ] = { 0x0045 /*E*/ , 0x0052 /*'R'*/ , 0x0052 /*'R'*/ ,
0x004F /*'O'*/ , 0x0052 /*'R'*/ , 0x0000 /*'\0'*/ } ;
/*****************************************************************************/
enum E_Where
{
e_Root ,
e_te ,
e_te_IN ,
e_Where_count
} ;
typedef enum E_Where E_Where ;
/*****************************************************************************/
2001-03-22 18:32:54 +00:00
# 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)); }
# define CONFIRM_INT_EQ(actual,expected) if ((expected)==(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of %d\n", action, actual, expected); }
# define CONFIRM_INT_GE(actual,expected) if ((actual)>=(expected)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of x >= %d\n", action, actual, expected); }
# define CONFIRM_INT_NE(actual,expected) if ((expected)!=(actual)) { record_pass(); } else { record_fail(); log_err("%s returned %d instead of x != %d\n", action, actual, expected); }
# 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)); }
2000-05-15 18:39:17 +00:00
/* Array of our test objects */
static struct
{
const char * name ;
UErrorCode expected_constructor_status ;
E_Where where ;
2000-05-18 22:08:39 +00:00
UBool like [ e_Where_count ] ;
UBool inherits [ e_Where_count ] ;
2000-05-15 18:39:17 +00:00
}
param [ ] =
{
/* "te" means test */
/* "IN" means inherits */
/* "NE" or "ne" means "does not exist" */
2002-08-21 19:09:33 +00:00
{ " root " , U_ZERO_ERROR , e_Root , { TRUE , FALSE , FALSE } , { TRUE , FALSE , FALSE } } ,
{ " te " , U_ZERO_ERROR , e_te , { FALSE , TRUE , FALSE } , { TRUE , TRUE , FALSE } } ,
{ " te_IN " , U_ZERO_ERROR , e_te_IN , { FALSE , FALSE , TRUE } , { TRUE , TRUE , TRUE } } ,
{ " te_NE " , U_USING_FALLBACK_WARNING , e_te , { FALSE , TRUE , FALSE } , { TRUE , TRUE , FALSE } } ,
{ " te_IN_NE " , U_USING_FALLBACK_WARNING , e_te_IN , { FALSE , FALSE , TRUE } , { TRUE , TRUE , TRUE } } ,
{ " ne " , U_USING_DEFAULT_WARNING , e_Root , { TRUE , FALSE , FALSE } , { TRUE , FALSE , FALSE } }
2000-05-15 18:39:17 +00:00
} ;
static int32_t bundles_count = sizeof ( param ) / sizeof ( param [ 0 ] ) ;
static void printUChars ( UChar * ) ;
2001-11-13 23:04:29 +00:00
static void TestDecodedBundle ( void ) ;
2001-03-21 00:55:52 +00:00
2000-05-15 18:39:17 +00:00
/***************************************************************************************/
/* Array of our test objects */
void addNEWResourceBundleTest ( TestNode * * root )
{
2002-12-11 01:39:59 +00:00
addTest ( root , & TestErrorCodes , " tsutil/creststn/TestErrorCodes " ) ;
2002-06-24 20:58:56 +00:00
addTest ( root , & TestEmptyBundle , " tsutil/creststn/TestEmptyBundle " ) ;
addTest ( root , & TestConstruction1 , " tsutil/creststn/TestConstruction1 " ) ;
addTest ( root , & TestResourceBundles , " tsutil/creststn/TestResourceBundle " ) ;
addTest ( root , & TestFallback , " tsutil/creststn/TestFallback " ) ;
addTest ( root , & TestGetVersion , " tsutil/creststn/TestGetVersion " ) ;
addTest ( root , & TestAliasConflict , " tsutil/creststn/TestAliasConflict " ) ;
addTest ( root , & TestNewTypes , " tsutil/creststn/TestNewTypes " ) ;
addTest ( root , & TestEmptyTypes , " tsutil/creststn/TestEmptyTypes " ) ;
addTest ( root , & TestBinaryCollationData , " tsutil/creststn/TestBinaryCollationData " ) ;
addTest ( root , & TestAPI , " tsutil/creststn/TestAPI " ) ;
addTest ( root , & TestErrorConditions , " tsutil/creststn/TestErrorConditions " ) ;
addTest ( root , & TestDecodedBundle , " tsutil/creststn/TestDecodedBundle " ) ;
addTest ( root , & TestResourceLevelAliasing , " tsutil/creststn/TestResourceLevelAliasing " ) ;
addTest ( root , & TestDirectAccess , " tsutil/creststn/TestDirectAccess " ) ;
2002-08-21 19:09:33 +00:00
2000-05-15 18:39:17 +00:00
}
/***************************************************************************************/
2001-04-17 19:09:23 +00:00
static const char * norwayNames [ ] = {
" no_NO_NY " ,
" no_NO " ,
" no " ,
" nn_NO " ,
" nn " ,
" nb_NO " ,
" nb "
} ;
static const char * norwayLocales [ ] = {
" nn_NO " ,
" nb_NO " ,
" nb " ,
" nn_NO " ,
" nn " ,
" nb_NO " ,
" nb "
} ;
2002-12-11 01:39:59 +00:00
static void checkStatus ( UErrorCode expected , UErrorCode status ) {
2002-12-11 23:57:06 +00:00
if ( U_FAILURE ( status ) ) {
log_data_err ( " Resource not present, cannot test \n " ) ;
}
2002-12-11 01:39:59 +00:00
if ( status ! = expected ) {
log_err ( " Expected error code %s, got error code %s \n " , u_errorName ( expected ) , u_errorName ( status ) ) ;
}
}
static void TestErrorCodes ( void ) {
UErrorCode status = U_USING_DEFAULT_WARNING ;
UResourceBundle * r = NULL , * r2 = NULL ;
/* first bundle should return fallback warning */
r = ures_open ( NULL , " sr_YU_VOJVODINA " , & status ) ;
checkStatus ( U_USING_FALLBACK_WARNING , status ) ;
ures_close ( r ) ;
/* this bundle should return zero error, so it shouldn't change the status*/
status = U_USING_DEFAULT_WARNING ;
r = ures_open ( NULL , " sr_YU " , & status ) ;
checkStatus ( U_USING_DEFAULT_WARNING , status ) ;
/* we look up the resource which is aliased, but it lives in fallback */
2002-12-11 23:57:06 +00:00
if ( U_SUCCESS ( status ) & & r ! = NULL ) {
status = U_USING_DEFAULT_WARNING ;
2003-11-11 21:41:47 +00:00
r2 = ures_getByKey ( r , " collations " , NULL , & status ) ;
2002-12-11 23:57:06 +00:00
checkStatus ( U_USING_FALLBACK_WARNING , status ) ;
}
2002-12-11 01:39:59 +00:00
ures_close ( r ) ;
/* this bundle should return zero error, so it shouldn't change the status*/
status = U_USING_DEFAULT_WARNING ;
r = ures_open ( NULL , " sr " , & status ) ;
checkStatus ( U_USING_DEFAULT_WARNING , status ) ;
/* we look up the resource which is aliased and at our level */
2002-12-13 06:01:49 +00:00
if ( U_SUCCESS ( status ) & & r ! = NULL ) {
status = U_USING_DEFAULT_WARNING ;
2003-11-11 21:41:47 +00:00
r2 = ures_getByKey ( r , " collations " , r2 , & status ) ;
2002-12-13 06:01:49 +00:00
checkStatus ( U_USING_DEFAULT_WARNING , status ) ;
}
2002-12-11 01:39:59 +00:00
ures_close ( r ) ;
status = U_USING_FALLBACK_WARNING ;
r = ures_open ( NULL , " nolocale " , & status ) ;
checkStatus ( U_USING_DEFAULT_WARNING , status ) ;
ures_close ( r ) ;
2002-12-13 06:01:49 +00:00
ures_close ( r2 ) ;
2002-12-11 01:39:59 +00:00
}
2000-11-21 04:05:39 +00:00
static void TestAliasConflict ( void ) {
2000-05-15 18:39:17 +00:00
UErrorCode status = U_ZERO_ERROR ;
UResourceBundle * he = NULL ;
UResourceBundle * iw = NULL ;
2001-04-17 19:09:23 +00:00
UResourceBundle * norway = NULL ;
2000-05-15 18:39:17 +00:00
const UChar * result = NULL ;
2001-03-22 00:42:37 +00:00
int32_t resultLen ;
2001-04-17 19:09:23 +00:00
uint32_t size = 0 ;
uint32_t i = 0 ;
const char * realName = NULL ;
2000-08-28 21:43:03 +00:00
2000-05-15 18:39:17 +00:00
he = ures_open ( NULL , " he " , & status ) ;
iw = ures_open ( NULL , " iw " , & status ) ;
if ( U_FAILURE ( status ) ) {
2002-01-30 06:16:26 +00:00
log_err ( " Failed to get resource with %s \n " , myErrorName ( status ) ) ;
2000-05-15 18:39:17 +00:00
}
ures_close ( iw ) ;
2002-01-30 06:16:26 +00:00
result = ures_getStringByKey ( he , " localPatternChars " , & resultLen , & status ) ;
2000-05-15 18:39:17 +00:00
if ( U_FAILURE ( status ) | | result = = NULL ) {
2002-01-30 06:16:26 +00:00
log_err ( " Failed to get resource localPatternChars with %s \n " , myErrorName ( status ) ) ;
2000-05-15 18:39:17 +00:00
}
ures_close ( he ) ;
2001-04-17 19:09:23 +00:00
size = sizeof ( norwayNames ) / sizeof ( norwayNames [ 0 ] ) ;
for ( i = 0 ; i < size ; i + + ) {
2002-01-30 06:16:26 +00:00
status = U_ZERO_ERROR ;
norway = ures_open ( NULL , norwayNames [ i ] , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " Failed to get resource with %s for %s \n " , myErrorName ( status ) , norwayNames [ i ] ) ;
continue ;
}
realName = ures_getLocale ( norway , & status ) ;
log_verbose ( " ures_getLocale( \" %s \" )=%s \n " , norwayNames [ i ] , realName ) ;
if ( realName = = NULL | | strcmp ( norwayLocales [ i ] , realName ) ! = 0 ) {
2002-09-17 19:45:50 +00:00
log_data_err ( " Wrong locale name for %s, expected %s, got %s \n " , norwayNames [ i ] , norwayLocales [ i ] , realName ) ;
2002-01-30 06:16:26 +00:00
}
ures_close ( norway ) ;
2001-04-17 19:09:23 +00:00
}
2000-05-15 18:39:17 +00:00
}
2001-11-01 19:42:38 +00:00
static void TestDecodedBundle ( ) {
UErrorCode error = U_ZERO_ERROR ;
UResourceBundle * resB ;
2002-09-18 21:11:59 +00:00
2001-11-01 19:42:38 +00:00
const UChar * srcFromRes ;
2003-04-25 16:27:10 +00:00
int32_t len ;
static const UChar uSrc [ ] = {
0x0009 , 0x092F , 0x0941 , 0x0928 , 0x0947 , 0x0938 , 0x094D , 0x0915 , 0x094B , 0x0020 , 0x002E , 0x0915 , 0x0947 , 0x0020 , 0x002E , 0x090F ,
0x0915 , 0x0020 , 0x002E , 0x0905 , 0x0927 , 0x094D , 0x092F , 0x092F , 0x0928 , 0x0020 , 0x002E , 0x0915 , 0x0947 , 0x0020 , 0x0905 , 0x0928 ,
0x0941 , 0x0938 , 0x093E , 0x0930 , 0x0020 , 0x0031 , 0x0039 , 0x0039 , 0x0030 , 0x0020 , 0x0924 , 0x0915 , 0x0020 , 0x0915 , 0x0902 , 0x092A ,
0x094D , 0x092F , 0x0942 , 0x091F , 0x0930 , 0x002D , 0x092A , 0x094D , 0x0930 , 0x092C , 0x0902 , 0x0927 , 0x093F , 0x0924 , 0x0020 , 0x0938 ,
0x0942 , 0x091A , 0x0928 , 0x093E , 0x092A , 0x094D , 0x0930 , 0x0923 , 0x093E , 0x0932 , 0x0940 , 0x0020 , 0x002E , 0x0915 , 0x0947 , 0x0020 ,
0x002E , 0x092F , 0x094B , 0x0917 , 0x0926 , 0x093E , 0x0928 , 0x0020 , 0x002E , 0x0915 , 0x0947 , 0x0020 , 0x002E , 0x092B , 0x0932 , 0x0938 ,
0x094D , 0x0935 , 0x0930 , 0x0942 , 0x092A , 0x0020 , 0x002E , 0x0935 , 0x093F , 0x0936 , 0x094D , 0x0935 , 0x0020 , 0x002E , 0x092E , 0x0947 ,
0x0902 , 0x0020 , 0x002E , 0x0938 , 0x093E , 0x0932 , 0x093E , 0x0928 , 0x093E , 0x0020 , 0x002E , 0x0032 , 0x0032 , 0x0030 , 0x0030 , 0x0020 ,
0x0905 , 0x0930 , 0x092C , 0x0020 , 0x0930 , 0x0941 , 0x092A , 0x092F , 0x0947 , 0x0020 , 0x092E , 0x0942 , 0x0932 , 0x094D , 0x092F , 0x0915 ,
0x0940 , 0x0020 , 0x002E , 0x0034 , 0x0935 , 0x0938 , 0x094D , 0x0924 , 0x0941 , 0x0913 , 0x0902 , 0x0020 , 0x002E , 0x0034 , 0x0915 , 0x093E ,
0x0020 , 0x002E , 0x0034 , 0x0909 , 0x0924 , 0x094D , 0x092A , 0x093E , 0x0926 , 0x0928 , 0x0020 , 0x002E , 0x0034 , 0x0939 , 0x094B , 0x0917 ,
0x093E , 0x002C , 0x0020 , 0x002E , 0x0033 , 0x091C , 0x092C , 0x0915 , 0x093F , 0x0020 , 0x002E , 0x0033 , 0x0915 , 0x0902 , 0x092A , 0x094D ,
0x092F , 0x0942 , 0x091F , 0x0930 , 0x0020 , 0x002E , 0x0033 , 0x0915 , 0x093E , 0x0020 , 0x002E , 0x0033 , 0x0915 , 0x0941 , 0x0932 , 0x0020 ,
0x002E , 0x0033 , 0x092F , 0x094B , 0x0917 , 0x0926 , 0x093E , 0x0928 , 0x0020 , 0x002E , 0x0033 , 0x0907 , 0x0938 , 0x0938 , 0x0947 , 0x0915 ,
0x0939 , 0x093F , 0x0020 , 0x002E , 0x002F , 0x091C , 0x094D , 0x092F , 0x093E , 0x0926 , 0x093E , 0x0020 , 0x002E , 0x002F , 0x0939 , 0x094B ,
0x0917 , 0x093E , 0x0964 , 0x0020 , 0x002E , 0x002F , 0x0905 , 0x0928 , 0x0941 , 0x0938 , 0x0902 , 0x0927 , 0x093E , 0x0928 , 0x0020 , 0x002E ,
0x002F , 0x0915 , 0x0940 , 0x0020 , 0x002E , 0x002F , 0x091A , 0x0930 , 0x092E , 0x0020 , 0x0938 , 0x0940 , 0x092E , 0x093E , 0x0913 , 0x0902 ,
0x0020 , 0x092A , 0x0930 , 0x0020 , 0x092A , 0x0939 , 0x0941 , 0x0902 , 0x091A , 0x0928 , 0x0947 , 0x0020 , 0x0915 , 0x0947 , 0x0020 , 0x0932 ,
0x093F , 0x090F , 0x0020 , 0x0915 , 0x0902 , 0x092A , 0x094D , 0x092F , 0x0942 , 0x091F , 0x0930 , 0x090F , 0x0915 , 0x0020 , 0x002E , 0x002F ,
0x0906 , 0x092E , 0x0020 , 0x002E , 0x002F , 0x091C , 0x0930 , 0x0942 , 0x0930 , 0x0924 , 0x0020 , 0x002E , 0x002F , 0x091C , 0x0948 , 0x0938 ,
0x093E , 0x0020 , 0x092C , 0x0928 , 0x0020 , 0x0917 , 0x092F , 0x093E , 0x0020 , 0x0939 , 0x0948 , 0x0964 , 0x0020 , 0x092D , 0x093E , 0x0930 ,
0x0924 , 0x0020 , 0x092E , 0x0947 , 0x0902 , 0x0020 , 0x092D , 0x0940 , 0x002C , 0x0020 , 0x0916 , 0x093E , 0x0938 , 0x0915 , 0x0930 , 0x0020 ,
0x092E , 0x094C , 0x091C , 0x0942 , 0x0926 , 0x093E , 0x0020 , 0x0938 , 0x0930 , 0x0915 , 0x093E , 0x0930 , 0x0928 , 0x0947 , 0x002C , 0x0020 ,
0x0915 , 0x0902 , 0x092A , 0x094D , 0x092F , 0x0942 , 0x091F , 0x0930 , 0x0020 , 0x0915 , 0x0947 , 0x0020 , 0x092A , 0x094D , 0x0930 , 0x092F ,
0x094B , 0x0917 , 0x0020 , 0x092A , 0x0930 , 0x0020 , 0x091C , 0x092C , 0x0930 , 0x0926 , 0x0938 , 0x094D , 0x0924 , 0x0020 , 0x090F , 0x095C ,
0x0020 , 0x0932 , 0x0917 , 0x093E , 0x092F , 0x0940 , 0x0020 , 0x0939 , 0x0948 , 0x002C , 0x0020 , 0x0915 , 0x093F , 0x0902 , 0x0924 , 0x0941 ,
0x0020 , 0x0907 , 0x0938 , 0x0915 , 0x0947 , 0x0020 , 0x0938 , 0x0930 , 0x092A , 0x091F , 0x0020 , 0x0926 , 0x094C , 0x095C , 0x0932 , 0x0917 ,
0x093E , 0x0928 , 0x0947 , 0x0020 , 0x002E , 0x0032 , 0x0915 , 0x0947 , 0x0020 , 0x002E , 0x0032 , 0x0932 , 0x093F , 0x090F , 0x0020 , 0x002E ,
0x0032 , 0x0915 , 0x094D , 0x092F , 0x093E , 0x0020 , 0x002E , 0x0032 , 0x0938 , 0x092A , 0x093E , 0x091F , 0x0020 , 0x002E , 0x0032 , 0x0930 ,
0x093E , 0x0938 , 0x094D , 0x0924 , 0x093E , 0x0020 , 0x002E , 0x0032 , 0x0909 , 0x092A , 0x0932 , 0x092C , 0x094D , 0x0927 , 0x0020 , 0x002E ,
0x0939 , 0x0948 , 0x002C , 0x0020 , 0x002E , 0x0905 , 0x0925 , 0x0935 , 0x093E , 0x0020 , 0x002E , 0x0935 , 0x093F , 0x0936 , 0x094D , 0x0935 ,
0x0020 , 0x002E , 0x092E , 0x0947 , 0x0902 , 0x0020 , 0x002E , 0x0915 , 0x0902 , 0x092A , 0x094D , 0x092F , 0x0942 , 0x091F , 0x0930 , 0x0020 ,
0x002E , 0x0915 , 0x0940 , 0x0938 , 0x092B , 0x0932 , 0x0924 , 0x093E , 0x0020 , 0x002E , 0x0033 , 0x0935 , 0x0020 , 0x002E , 0x0033 , 0x0935 ,
0x093F , 0x092B , 0x0932 , 0x0924 , 0x093E , 0x0020 , 0x002E , 0x0033 , 0x0938 , 0x0947 , 0x0020 , 0x002E , 0x0033 , 0x0938 , 0x092C , 0x0915 ,
0x0020 , 0x002E , 0x0033 , 0x0932 , 0x0947 , 0x0020 , 0x002E , 0x0033 , 0x0915 , 0x0930 , 0x0020 , 0x002E , 0x0033 , 0x0915 , 0x094D , 0x092F ,
0x093E , 0x0020 , 0x002E , 0x0033 , 0x0939 , 0x092E , 0x0020 , 0x002E , 0x0033 , 0x0907 , 0x0938 , 0x0915 , 0x093E , 0x0020 , 0x002E , 0x0033 ,
0x092F , 0x0941 , 0x0915 , 0x094D , 0x0924 , 0x093F , 0x092A , 0x0942 , 0x0930 , 0x094D , 0x0923 , 0x0020 , 0x002E , 0x0032 , 0x0935 , 0x093F ,
0x0938 , 0x094D , 0x0924 , 0x093E , 0x0930 , 0x0020 , 0x0905 , 0x092A , 0x0947 , 0x0915 , 0x094D , 0x0937 , 0x093F , 0x0924 , 0x0020 , 0x0915 ,
0x0930 , 0x0020 , 0x0938 , 0x0915 , 0x0947 , 0x0902 , 0x0917 , 0x0947 , 0x0020 , 0x003F , 0x0020 ,
0
} ;
2002-09-18 21:11:59 +00:00
2001-11-01 19:42:38 +00:00
/* pre-flight */
int32_t num = 0 ;
2002-07-17 03:56:50 +00:00
const char * testdatapath = loadTestData ( & error ) ;
2002-09-18 21:11:59 +00:00
resB = ures_open ( testdatapath , " iscii " , & error ) ;
2001-11-01 19:42:38 +00:00
srcFromRes = ures_getStringByKey ( resB , " str " , & len , & error ) ;
2002-09-19 00:31:11 +00:00
if ( U_FAILURE ( error ) ) {
2002-10-02 17:18:04 +00:00
# if UCONFIG_NO_LEGACY_CONVERSION
log_info ( " Couldn't load iscii.bin from test data bundle, (because UCONFIG_NO_LEGACY_CONVERSION is turned on) \n " ) ;
# else
log_err ( " Could not find iscii.bin from test data bundle. Error: %s \n " , u_errorName ( error ) ) ;
# endif
2003-04-25 16:27:10 +00:00
ures_close ( resB ) ;
return ;
2002-09-19 00:31:11 +00:00
}
2002-09-18 21:11:59 +00:00
if ( u_strncmp ( srcFromRes , uSrc , len ) ! = 0 ) {
2001-11-01 19:42:38 +00:00
log_err ( " Genrb produced res files after decoding failed \n " ) ;
}
2003-04-25 16:27:10 +00:00
while ( num < len ) {
if ( uSrc [ num ] ! = srcFromRes [ num ] ) {
log_verbose ( " Expected: 0x%04X Got: 0x%04X \n " , uSrc [ num ] , srcFromRes [ num ] ) ;
2001-11-01 19:42:38 +00:00
}
num + + ;
}
2003-04-25 16:27:10 +00:00
if ( len ! = u_strlen ( uSrc ) ) {
log_err ( " Genrb produced a string larger than expected \n " ) ;
}
2001-11-13 22:25:38 +00:00
ures_close ( resB ) ;
2001-11-01 19:42:38 +00:00
}
2000-11-21 04:05:39 +00:00
static void TestNewTypes ( ) {
2000-08-28 21:43:03 +00:00
UResourceBundle * theBundle = NULL ;
char action [ 256 ] ;
2002-02-07 19:37:34 +00:00
const char * testdatapath ;
2000-08-28 21:43:03 +00:00
UErrorCode status = U_ZERO_ERROR ;
UResourceBundle * res = NULL ;
uint8_t * binResult = NULL ;
int32_t len = 0 ;
int32_t i = 0 ;
int32_t intResult = 0 ;
2001-09-18 16:09:48 +00:00
uint32_t uintResult = 0 ;
const UChar * empty = NULL ;
2001-07-27 17:20:48 +00:00
const UChar * zeroString ;
2001-07-30 20:25:43 +00:00
UChar expected [ ] = { ' a ' , ' b ' , ' c ' , ' \0 ' , ' d ' , ' e ' , ' f ' } ;
2001-09-20 02:39:50 +00:00
const char * expect = " tab: \t cr: \r ff: \f newline: \n backslash: \\ \\ quote= \\ \' doubleQuote= \\ \" singlequoutes='' " ;
UChar uExpect [ 200 ] ;
2000-08-28 21:43:03 +00:00
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-07-17 03:56:50 +00:00
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
2000-08-28 21:43:03 +00:00
theBundle = ures_open ( testdatapath , " testtypes " , & status ) ;
2001-09-18 16:09:48 +00:00
empty = ures_getStringByKey ( theBundle , " emptystring " , & len , & status ) ;
2002-01-21 21:10:18 +00:00
if ( empty & & ( * empty ! = 0 | | len ! = 0 ) ) {
2001-09-18 16:09:48 +00:00
log_err ( " Empty string returned invalid value \n " ) ;
}
2000-08-28 21:43:03 +00:00
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_NE ( theBundle , NULL ) ;
2001-07-27 17:20:48 +00:00
/* This test reads the string "abc\u0000def" from the bundle */
/* if everything is working correctly, the size of this string */
/* should be 7. Everything else is a wrong answer, esp. 3 and 6*/
strcpy ( action , " getting and testing of string with embeded zero " ) ;
res = ures_getByKey ( theBundle , " zerotest " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_STRING ) ;
2001-07-27 17:20:48 +00:00
zeroString = ures_getString ( res , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( len , 7 ) ;
CONFIRM_INT_NE ( len , 3 ) ;
}
2001-07-30 20:25:43 +00:00
for ( i = 0 ; i < len ; i + + ) {
if ( zeroString [ i ] ! = expected [ i ] ) {
2003-04-25 16:27:10 +00:00
log_verbose ( " Output did not match Expected: \\ u%4X Got: \\ u%4X " , expected [ i ] , zeroString [ i ] ) ;
2001-07-30 20:25:43 +00:00
}
}
2001-07-27 17:20:48 +00:00
2000-08-28 21:43:03 +00:00
strcpy ( action , " getting and testing of binary type " ) ;
res = ures_getByKey ( theBundle , " binarytest " , res , & status ) ;
2000-07-11 23:27:11 +00:00
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_BINARY ) ;
2000-08-28 21:43:03 +00:00
binResult = ( uint8_t * ) ures_getBinary ( res , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( len , 15 ) ;
for ( i = 0 ; i < 15 ; i + + ) {
CONFIRM_INT_EQ ( binResult [ i ] , i ) ;
}
2000-07-11 23:27:11 +00:00
}
2000-08-28 21:43:03 +00:00
strcpy ( action , " getting and testing of imported binary type " ) ;
res = ures_getByKey ( theBundle , " importtest " , res , & status ) ;
2000-07-11 23:27:11 +00:00
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_BINARY ) ;
2000-08-28 21:43:03 +00:00
binResult = ( uint8_t * ) ures_getBinary ( res , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( len , 15 ) ;
for ( i = 0 ; i < 15 ; i + + ) {
CONFIRM_INT_EQ ( binResult [ i ] , i ) ;
}
2000-07-11 23:27:11 +00:00
}
2000-08-28 21:43:03 +00:00
strcpy ( action , " getting and testing of integer types " ) ;
res = ures_getByKey ( theBundle , " one " , res , & status ) ;
2000-07-11 23:27:11 +00:00
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_INT ) ;
2000-08-28 21:43:03 +00:00
intResult = ures_getInt ( res , & status ) ;
2001-09-18 16:09:48 +00:00
uintResult = ures_getUInt ( res , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( uintResult , ( uint32_t ) intResult ) ;
CONFIRM_INT_EQ ( intResult , 1 ) ;
}
strcpy ( action , " getting minusone " ) ;
res = ures_getByKey ( theBundle , " minusone " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_INT ) ;
2001-09-18 16:09:48 +00:00
intResult = ures_getInt ( res , & status ) ;
uintResult = ures_getUInt ( res , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( uintResult , 0x0FFFFFFF ) ; /* a 28 bit integer */
CONFIRM_INT_EQ ( intResult , - 1 ) ;
CONFIRM_INT_NE ( uintResult , ( uint32_t ) intResult ) ;
}
strcpy ( action , " getting plusone " ) ;
res = ures_getByKey ( theBundle , " plusone " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_INT ) ;
2001-09-18 16:09:48 +00:00
intResult = ures_getInt ( res , & status ) ;
uintResult = ures_getUInt ( res , & status ) ;
2000-08-28 21:43:03 +00:00
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2001-09-18 16:09:48 +00:00
CONFIRM_INT_EQ ( uintResult , ( uint32_t ) intResult ) ;
2000-08-28 21:43:03 +00:00
CONFIRM_INT_EQ ( intResult , 1 ) ;
}
2000-07-11 23:27:11 +00:00
2000-08-28 21:43:03 +00:00
res = ures_getByKey ( theBundle , " onehundredtwentythree " , res , & status ) ;
2000-07-11 23:27:11 +00:00
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_INT ) ;
2000-08-28 21:43:03 +00:00
intResult = ures_getInt ( res , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( intResult , 123 ) ;
}
2000-07-11 23:27:11 +00:00
2001-09-20 02:39:50 +00:00
/* this tests if escapes are preserved or not */
{
const UChar * str = ures_getStringByKey ( theBundle , " testescape " , & len , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2001-09-20 02:39:51 +00:00
if ( U_SUCCESS ( status ) ) {
2002-01-29 04:01:49 +00:00
u_charsToUChars ( expect , uExpect , uprv_strlen ( expect ) + 1 ) ;
2001-09-20 02:39:51 +00:00
if ( u_strcmp ( uExpect , str ) ) {
2002-01-29 04:01:49 +00:00
log_err ( " Did not get the expected string for testescape \n " ) ;
2001-09-20 02:39:51 +00:00
}
2001-09-20 02:39:50 +00:00
}
}
2003-04-25 16:27:10 +00:00
/* this tests if unescaping works are expected */
len = 0 ;
{
static const char pattern [ ] = " [ \\ \\ u0020 \\ \\ u00A0 \\ \\ u1680 \\ \\ u2000 \\ \\ u2001 \\ \\ u2002 \\ \\ u2003 \\ \\ u2004 \\ \\ u2005 \\ \\ u2006 \\ \\ u2007 "
" \\ \\ u2008 \\ \\ u2009 \\ \\ u200A \\ u200B \\ \\ u202F \\ u205F \\ \\ u3000 \\ u0000- \\ u001F \\ u007F \\ u0080- \\ u009F "
" \\ \\ u06DD \\ \\ u070F \\ \\ u180E \\ \\ u200C \\ \\ u200D \\ \\ u2028 \\ \\ u2029 \\ \\ u2060 \\ \\ u2061 \\ \\ u2062 \\ \\ u2063 "
" \\ \\ u206A- \\ \\ u206F \\ \\ uFEFF \\ \\ uFFF9- \\ uFFFC \\ U0001D173- \\ U0001D17A \\ U000F0000- \\ U000FFFFD "
" \\ U00100000- \\ U0010FFFD \\ uFDD0- \\ uFDEF \\ uFFFE- \\ uFFFF \\ U0001FFFE- \\ U0001FFFF \\ U0002FFFE- \\ U0002FFFF "
" \\ U0003FFFE- \\ U0003FFFF \\ U0004FFFE- \\ U0004FFFF \\ U0005FFFE- \\ U0005FFFF \\ U0006FFFE- \\ U0006FFFF "
" \\ U0007FFFE- \\ U0007FFFF \\ U0008FFFE- \\ U0008FFFF \\ U0009FFFE- \\ U0009FFFF \\ U000AFFFE- \\ U000AFFFF "
" \\ U000BFFFE- \\ U000BFFFF \\ U000CFFFE- \\ U000CFFFF \\ U000DFFFE- \\ U000DFFFF \\ U000EFFFE- \\ U000EFFFF "
" \\ U000FFFFE- \\ U000FFFFF \\ U0010FFFE- \\ U0010FFFF \\ uD800- \\ uDFFF \\ \\ uFFF9 \\ \\ uFFFA \\ \\ uFFFB "
" \\ uFFFC \\ uFFFD \\ u2FF0- \\ u2FFB \\ u0340 \\ u0341 \\ \\ u200E \\ \\ u200F \\ \\ u202A \\ \\ u202B \\ \\ u202C "
" \\ \\ u202D \\ \\ u202E \\ \\ u206A \\ \\ u206B \\ \\ u206C \\ \\ u206D \\ \\ u206E \\ \\ u206F \\ U000E0001 \\ U000E0020- \\ U000E007F "
" ] " ;
int32_t patternLen = uprv_strlen ( pattern ) ;
2003-05-07 01:22:34 +00:00
UChar * expectedEscaped = ( UChar * ) malloc ( U_SIZEOF_UCHAR * patternLen ) ;
2003-04-25 16:27:10 +00:00
const UChar * got = ures_getStringByKey ( theBundle , " test_unescaping " , & len , & status ) ;
int32_t expectedLen = u_unescape ( pattern , expectedEscaped , patternLen ) ;
2003-07-24 23:23:19 +00:00
if ( got = = NULL | | u_strncmp ( expectedEscaped , got , expectedLen ) ! = 0 | | expectedLen ! = len ) {
2003-04-25 16:27:10 +00:00
log_err ( " genrb failed to unescape string \n " ) ;
}
2003-07-24 23:23:19 +00:00
if ( got ! = NULL ) {
for ( i = 0 ; i < expectedLen ; i + + ) {
if ( expectedEscaped [ i ] ! = got [ i ] ) {
log_verbose ( " Expected: 0x%04X Got: 0x%04X \n " , expectedEscaped [ i ] , got [ i ] ) ;
}
2003-04-25 16:27:10 +00:00
}
}
2003-05-07 01:22:34 +00:00
free ( expectedEscaped ) ;
2003-04-25 16:27:10 +00:00
status = U_ZERO_ERROR ;
}
2001-11-06 00:46:23 +00:00
/* test for jitterbug#1435 */
{
const UChar * str = ures_getStringByKey ( theBundle , " test_underscores " , & len , & status ) ;
2001-11-13 23:04:29 +00:00
expect = " test message .... " ;
2001-11-06 00:46:23 +00:00
u_charsToUChars ( expect , uExpect , uprv_strlen ( expect ) + 1 ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
if ( u_strcmp ( uExpect , str ) ) {
2002-01-29 04:01:49 +00:00
log_err ( " Did not get the expected string for test_underscores. \n " ) ;
2001-11-06 00:46:23 +00:00
}
}
2003-04-25 16:27:10 +00:00
/* test for jitterbug#2626 */
2003-04-24 23:08:42 +00:00
{
UResourceBundle * resB = NULL ;
2003-04-25 16:27:10 +00:00
const UChar * str = NULL ;
int32_t strLength = 0 ;
const UChar my [ ] = { 0x0026 , 0x0027 , 0x0075 , 0x0027 , 0x0020 , 0x003d , 0x0020 , 0x0027 , 0xff55 , 0x0027 , 0x0000 } ; /* &'\u0075' = '\uFF55' */
status = U_ZERO_ERROR ;
2003-11-11 21:41:47 +00:00
resB = ures_getByKey ( theBundle , " collations " , resB , & status ) ;
resB = ures_getByKey ( resB , " standard " , resB , & status ) ;
2003-04-25 16:27:10 +00:00
str = ures_getStringByKey ( resB , " Sequence " , & strLength , & status ) ;
2003-05-30 00:29:34 +00:00
if ( ! str | | U_FAILURE ( status ) ) {
2003-11-11 21:41:47 +00:00
log_data_err ( " Could not load collations from theBundle: %s \n " , u_errorName ( status ) ) ;
2003-05-30 00:29:34 +00:00
} else if ( u_strcmp ( my , str ) ! = 0 ) {
log_err ( " Did not get the expected string for escaped \\ u0075 \n " ) ;
2003-04-25 16:27:10 +00:00
}
ures_close ( resB ) ;
}
{
2003-04-24 23:08:42 +00:00
const char * sourcePath = ctest_dataSrcDir ( ) ;
int32_t srcPathLen = strlen ( sourcePath ) ;
2003-05-07 01:22:34 +00:00
const char * deltaPath = " .. " U_FILE_SEP_STRING " test " U_FILE_SEP_STRING " testdata " U_FILE_SEP_STRING ;
2003-04-24 23:08:42 +00:00
int32_t deltaPathLen = strlen ( deltaPath ) ;
char * testDataFileName = ( char * ) malloc ( srcPathLen + deltaPathLen + 50 ) ;
char * path = testDataFileName ;
strcpy ( path , sourcePath ) ;
path + = srcPathLen ;
strcpy ( path , deltaPath ) ;
path + = deltaPathLen ;
status = U_ZERO_ERROR ;
{
int32_t strLen = 0 ;
const UChar * str = ures_getStringByKey ( theBundle , " testincludeUTF " , & strLen , & status ) ;
2003-09-25 18:42:54 +00:00
strcpy ( path , " riwords.txt " ) ;
path [ strlen ( " riwords.txt " ) ] = 0 ;
2003-04-24 23:08:42 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Could not get testincludeUTF resource from testtypes bundle. Error: %s \n " , u_errorName ( status ) ) ;
} else {
/* open the file */
2003-04-25 16:27:10 +00:00
const char * cp = NULL ;
UCHARBUF * ucbuf = ucbuf_open ( testDataFileName , & cp , FALSE , FALSE , & status ) ;
len = 0 ;
2003-04-24 23:08:42 +00:00
if ( U_SUCCESS ( status ) ) {
const UChar * buffer = ucbuf_getBuffer ( ucbuf , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
/* verify the contents */
if ( strLen ! = len ) {
2003-09-25 18:42:54 +00:00
log_err ( " Did not get the expected len for riwords. Expected: %i , Got: %i \n " , len , strLen ) ;
2003-04-24 23:08:42 +00:00
}
if ( u_strncmp ( str , buffer , strLen ) ! = 0 ) {
2003-09-25 18:42:54 +00:00
log_err ( " Did not get the expected string from riwords. Include functionality failed for genrb. \n " ) ;
2003-04-24 23:08:42 +00:00
}
} else {
log_err ( " ucbuf failed to open %s. Error: %s \n " , testDataFileName , u_errorName ( status ) ) ;
}
2003-05-07 01:22:34 +00:00
ucbuf_close ( ucbuf ) ;
2003-04-24 23:08:42 +00:00
} else {
2003-09-25 18:42:54 +00:00
log_err ( " Could not get riwords.txt (path : %s). Error: %s \n " , testDataFileName , u_errorName ( status ) ) ;
2003-04-24 23:08:42 +00:00
}
}
}
status = U_ZERO_ERROR ;
{
int32_t strLen = 0 ;
const UChar * str = ures_getStringByKey ( theBundle , " testinclude " , & strLen , & status ) ;
strcpy ( path , " translit_rules.txt " ) ;
path [ strlen ( " translit_rules.txt " ) ] = 0 ;
if ( U_FAILURE ( status ) ) {
log_err ( " Could not get testinclude resource from testtypes bundle. Error: %s \n " , u_errorName ( status ) ) ;
} else {
/* open the file */
2003-04-25 16:27:10 +00:00
const char * cp = NULL ;
UCHARBUF * ucbuf = ucbuf_open ( testDataFileName , & cp , FALSE , FALSE , & status ) ;
len = 0 ;
2003-04-24 23:08:42 +00:00
if ( U_SUCCESS ( status ) ) {
const UChar * buffer = ucbuf_getBuffer ( ucbuf , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
/* verify the contents */
if ( strLen ! = len ) {
log_err ( " Did not get the expected len for translit_rules. Expected: %i , Got: %i \n " , len , strLen ) ;
}
if ( u_strncmp ( str , buffer , strLen ) ! = 0 ) {
log_err ( " Did not get the expected string from translit_rules. Include functionality failed for genrb. \n " ) ;
}
} else {
log_err ( " ucbuf failed to open %s. Error: %s \n " , testDataFileName , u_errorName ( status ) ) ;
}
2003-05-07 01:22:34 +00:00
ucbuf_close ( ucbuf ) ;
2003-04-24 23:08:42 +00:00
} else {
log_err ( " Could not get translit_rules.txt (path : %s). Error: %s \n " , testDataFileName , u_errorName ( status ) ) ;
}
}
}
2003-05-07 01:22:34 +00:00
free ( testDataFileName ) ;
2003-04-24 23:08:42 +00:00
}
2000-08-28 21:43:03 +00:00
ures_close ( res ) ;
ures_close ( theBundle ) ;
2000-07-11 23:27:11 +00:00
}
2001-08-27 18:51:43 +00:00
static void TestEmptyTypes ( ) {
UResourceBundle * theBundle = NULL ;
char action [ 256 ] ;
2002-02-07 19:37:34 +00:00
const char * testdatapath ;
2001-08-27 18:51:43 +00:00
UErrorCode status = U_ZERO_ERROR ;
UResourceBundle * res = NULL ;
UResourceBundle * resArray = NULL ;
const uint8_t * binResult = NULL ;
int32_t len = 0 ;
int32_t intResult = 0 ;
const UChar * zeroString ;
const int32_t * zeroIntVect ;
2002-01-21 21:10:18 +00:00
2001-08-27 18:51:43 +00:00
strcpy ( action , " Construction of testtypes bundle " ) ;
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
2001-08-27 18:51:43 +00:00
theBundle = ures_open ( testdatapath , " testtypes " , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_NE ( theBundle , NULL ) ;
/* This test reads the string "abc\u0000def" from the bundle */
/* if everything is working correctly, the size of this string */
/* should be 7. Everything else is a wrong answer, esp. 3 and 6*/
status = U_ZERO_ERROR ;
strcpy ( action , " getting and testing of explicit string of zero length string " ) ;
res = ures_getByKey ( theBundle , " emptyexplicitstring " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_STRING ) ;
2001-08-27 18:51:43 +00:00
zeroString = ures_getString ( res , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( len , 0 ) ;
CONFIRM_INT_EQ ( u_strlen ( zeroString ) , 0 ) ;
}
else {
log_err ( " Couldn't get emptyexplicitstring \n " ) ;
}
status = U_ZERO_ERROR ;
strcpy ( action , " getting and testing of normal string of zero length string " ) ;
res = ures_getByKey ( theBundle , " emptystring " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_STRING ) ;
2001-08-27 18:51:43 +00:00
zeroString = ures_getString ( res , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( len , 0 ) ;
CONFIRM_INT_EQ ( u_strlen ( zeroString ) , 0 ) ;
}
else {
log_err ( " Couldn't get emptystring \n " ) ;
}
status = U_ZERO_ERROR ;
strcpy ( action , " getting and testing of empty int " ) ;
res = ures_getByKey ( theBundle , " emptyint " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_INT ) ;
2001-08-27 18:51:43 +00:00
intResult = ures_getInt ( res , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_EQ ( intResult , 0 ) ;
}
else {
log_err ( " Couldn't get emptystring \n " ) ;
}
status = U_ZERO_ERROR ;
strcpy ( action , " getting and testing of zero length intvector " ) ;
res = ures_getByKey ( theBundle , " emptyintv " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_INT_VECTOR ) ;
2001-08-27 18:51:43 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't get emptyintv key %s \n " , u_errorName ( status ) ) ;
}
else {
zeroIntVect = ures_getIntVector ( res , & len , & status ) ;
2001-09-05 18:44:27 +00:00
if ( ! U_SUCCESS ( status ) | | resArray ! = NULL | | len ! = 0 ) {
2001-08-27 18:51:43 +00:00
log_err ( " Shouldn't get emptyintv \n " ) ;
}
}
status = U_ZERO_ERROR ;
strcpy ( action , " getting and testing of zero length emptybin " ) ;
res = ures_getByKey ( theBundle , " emptybin " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_BINARY ) ;
2001-08-27 18:51:43 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't get emptybin key %s \n " , u_errorName ( status ) ) ;
}
else {
binResult = ures_getBinary ( res , & len , & status ) ;
2001-09-05 18:44:27 +00:00
if ( ! U_SUCCESS ( status ) | | binResult ! = NULL | | len ! = 0 ) {
2001-08-27 18:51:43 +00:00
log_err ( " Shouldn't get emptybin \n " ) ;
}
}
status = U_ZERO_ERROR ;
strcpy ( action , " getting and testing of zero length emptyarray " ) ;
res = ures_getByKey ( theBundle , " emptyarray " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_ARRAY ) ;
2001-08-27 18:51:43 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't get emptyarray key %s \n " , u_errorName ( status ) ) ;
}
else {
resArray = ures_getByIndex ( res , 0 , resArray , & status ) ;
if ( U_SUCCESS ( status ) | | resArray ! = NULL ) {
log_err ( " Shouldn't get emptyarray \n " ) ;
}
}
status = U_ZERO_ERROR ;
strcpy ( action , " getting and testing of zero length emptytable " ) ;
res = ures_getByKey ( theBundle , " emptytable " , res , & status ) ;
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( res ) , URES_TABLE ) ;
2001-08-27 18:51:43 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't get emptytable key %s \n " , u_errorName ( status ) ) ;
}
else {
resArray = ures_getByIndex ( res , 0 , resArray , & status ) ;
if ( U_SUCCESS ( status ) | | resArray ! = NULL ) {
log_err ( " Shouldn't get emptytable \n " ) ;
}
}
ures_close ( res ) ;
ures_close ( theBundle ) ;
}
2001-08-17 22:15:39 +00:00
static void TestEmptyBundle ( ) {
UErrorCode status = U_ZERO_ERROR ;
2002-02-07 19:37:34 +00:00
const char * testdatapath = NULL ;
2001-08-17 22:15:39 +00:00
UResourceBundle * resb = 0 , * dResB = 0 ;
2002-01-29 04:01:49 +00:00
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
2001-08-17 22:15:39 +00:00
resb = ures_open ( testdatapath , " testempty " , & status ) ;
if ( U_SUCCESS ( status ) ) {
dResB = ures_getByKey ( resb , " test " , dResB , & status ) ;
if ( status ! = U_MISSING_RESOURCE_ERROR ) {
log_err ( " Did not get the expected error from an empty resource bundle. Expected : %s Got: %s \n " ,
u_errorName ( U_MISSING_RESOURCE_ERROR ) , u_errorName ( status ) ) ;
}
}
ures_close ( dResB ) ;
ures_close ( resb ) ;
}
2000-11-21 04:05:39 +00:00
static void TestBinaryCollationData ( ) {
2000-08-28 21:43:03 +00:00
UErrorCode status = U_ZERO_ERROR ;
2000-05-24 23:42:34 +00:00
const char * locale = " te " ;
2002-02-07 19:37:34 +00:00
const char * testdatapath ;
2000-08-28 21:43:03 +00:00
UResourceBundle * teRes = NULL ;
UResourceBundle * coll = NULL ;
UResourceBundle * binColl = NULL ;
uint8_t * binResult = NULL ;
int32_t len = 0 ;
2001-03-22 18:32:54 +00:00
const char * action = " testing the binary collaton data " ;
2002-10-02 17:18:04 +00:00
# if !UCONFIG_NO_COLLATION
2002-01-29 04:01:49 +00:00
log_verbose ( " Testing binary collation data resource...... \n " ) ;
2000-05-24 23:42:34 +00:00
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
2000-05-24 23:42:34 +00:00
2000-08-28 21:43:03 +00:00
teRes = ures_open ( testdatapath , locale , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " ERROR: Failed to get resource for \" te \" with %s " , myErrorName ( status ) ) ;
return ;
}
status = U_ZERO_ERROR ;
2003-11-11 21:41:47 +00:00
coll = ures_getByKey ( teRes , " collations " , coll , & status ) ;
coll = ures_getByKey ( coll , " standard " , coll , & status ) ;
2000-08-28 21:43:03 +00:00
if ( U_SUCCESS ( status ) ) {
2000-05-24 23:42:34 +00:00
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( coll ) , URES_TABLE ) ;
2002-06-14 05:59:49 +00:00
binColl = ures_getByKey ( coll , " %%CollationBin " , binColl , & status ) ;
2000-08-28 21:43:03 +00:00
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( binColl ) , URES_BINARY ) ;
2000-08-28 21:43:03 +00:00
binResult = ( uint8_t * ) ures_getBinary ( binColl , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_ErrorCode ( status , U_ZERO_ERROR ) ;
CONFIRM_INT_GE ( len , 1 ) ;
}
} else {
2002-02-14 02:27:03 +00:00
log_err ( " ERROR: ures_getByKey(locale(te), %%CollationBin) failed \n " ) ;
2000-08-28 21:43:03 +00:00
}
}
else {
2003-11-11 21:41:47 +00:00
log_err ( " ERROR: ures_getByKey(locale(te), collations) failed \n " ) ;
2000-08-28 21:43:03 +00:00
return ;
}
2000-07-12 22:59:57 +00:00
ures_close ( binColl ) ;
ures_close ( coll ) ;
ures_close ( teRes ) ;
2002-10-02 17:18:04 +00:00
# endif
2000-05-24 23:42:34 +00:00
}
2000-11-21 04:05:39 +00:00
static void TestAPI ( ) {
2000-07-12 01:09:23 +00:00
UErrorCode status = U_ZERO_ERROR ;
int32_t len = 0 ;
const char * key = NULL ;
const UChar * value = NULL ;
2002-02-07 19:37:34 +00:00
const char * testdatapath ;
UChar * utestdatapath = NULL ;
2001-05-25 18:25:49 +00:00
char convOutput [ 256 ] ;
2000-08-28 21:43:03 +00:00
UResourceBundle * teRes = NULL ;
2000-07-12 01:09:23 +00:00
UResourceBundle * teFillin = NULL ;
UResourceBundle * teFillin2 = NULL ;
2002-01-29 04:01:49 +00:00
log_verbose ( " Testing ures_openU()...... \n " ) ;
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
2002-02-07 19:37:34 +00:00
len = strlen ( testdatapath ) ;
utestdatapath = ( UChar * ) malloc ( ( len + 10 ) * sizeof ( UChar ) ) ;
2000-08-02 19:06:18 +00:00
u_charsToUChars ( testdatapath , utestdatapath , strlen ( testdatapath ) + 1 ) ;
/*u_uastrcpy(utestdatapath, testdatapath);*/
2000-07-12 01:09:23 +00:00
/*Test ures_openU */
2002-01-29 04:01:49 +00:00
2000-08-28 21:43:03 +00:00
teRes = ures_openU ( utestdatapath , " te " , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " ERROR: ures_openU() failed path =%s with %s " , austrdup ( utestdatapath ) , myErrorName ( status ) ) ;
return ;
}
2000-07-12 01:09:23 +00:00
/*Test ures_getLocale() */
log_verbose ( " Testing ures_getLocale() ..... \n " ) ;
if ( strcmp ( ures_getLocale ( teRes , & status ) , " te " ) ! = 0 ) {
log_err ( " ERROR: ures_getLocale() failed. Expected = te_TE Got = %s \n " , ures_getLocale ( teRes , & status ) ) ;
}
/*Test ures_getNextString() */
teFillin = ures_getByKey ( teRes , " tagged_array_in_te_te_IN " , teFillin , & status ) ;
key = ures_getKey ( teFillin ) ;
value = ( UChar * ) ures_getNextString ( teFillin , & len , & key , & status ) ;
ures_resetIterator ( NULL ) ;
value = ( UChar * ) ures_getNextString ( teFillin , & len , & key , & status ) ;
if ( status ! = U_INDEX_OUTOFBOUNDS_ERROR ) {
log_err ( " ERROR: calling getNextString where index out of bounds should return U_INDEX_OUTOFBOUNDS_ERROR, Got : %s \n " ,
myErrorName ( status ) ) ;
}
ures_resetIterator ( teRes ) ;
/*Test ures_getNextResource() where resource is table*/
status = U_ZERO_ERROR ;
2002-07-12 22:17:29 +00:00
# if (U_CHARSET_FAMILY == U_ASCII_FAMILY)
/* The next key varies depending on the charset. */
2000-07-12 01:09:23 +00:00
teFillin = ures_getNextResource ( teRes , teFillin , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " ERROR: ures_getNextResource() failed \n " ) ;
}
key = ures_getKey ( teFillin ) ;
2002-06-14 05:59:49 +00:00
/*if(strcmp(key, "%%CollationBin") != 0){*/
2003-11-11 21:41:47 +00:00
if ( strcmp ( key , " array_2d_in_Root_te " ) ! = 0 ) {
2000-07-12 01:09:23 +00:00
log_err ( " ERROR: ures_getNextResource() failed \n " ) ;
}
2002-07-12 22:17:29 +00:00
# endif
2000-07-12 01:09:23 +00:00
/*Test ures_getByIndex on string Resource*/
teFillin = ures_getByKey ( teRes , " string_only_in_te " , teFillin , & status ) ;
teFillin2 = ures_getByIndex ( teFillin , 0 , teFillin2 , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " ERROR: ures_getByIndex on string resource failed \n " ) ;
}
2001-05-25 18:25:49 +00:00
if ( strcmp ( u_austrcpy ( convOutput , ures_getString ( teFillin2 , & len , & status ) ) , " TE " ) ! = 0 ) {
2000-07-12 01:09:23 +00:00
status = U_ZERO_ERROR ;
log_err ( " ERROR: ures_getByIndex on string resource fetched the key=%s, expected \" TE \" \n " , austrdup ( ures_getString ( teFillin2 , & len , & status ) ) ) ;
}
2000-08-28 21:43:03 +00:00
2000-07-12 22:59:57 +00:00
/*ures_close(teRes);*/
2000-08-28 21:43:03 +00:00
2000-07-12 01:09:23 +00:00
/*Test ures_openFillIn*/
log_verbose ( " Testing ures_openFillIn...... \n " ) ;
status = U_ZERO_ERROR ;
ures_openFillIn ( teRes , testdatapath , " te " , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " ERROR: ures_openFillIn failed \n " ) ;
return ;
}
if ( strcmp ( ures_getLocale ( teRes , & status ) , " te " ) ! = 0 ) {
log_err ( " ERROR: ures_openFillIn did not open the ResourceBundle correctly \n " ) ;
}
ures_getByKey ( teRes , " string_only_in_te " , teFillin , & status ) ;
teFillin2 = ures_getNextResource ( teFillin , teFillin2 , & status ) ;
2003-04-16 23:52:32 +00:00
if ( ures_getType ( teFillin2 ) ! = URES_STRING ) {
2000-07-12 01:09:23 +00:00
log_err ( " ERROR: getType for getNextResource after ures_openFillIn failed \n " ) ;
}
teFillin2 = ures_getNextResource ( teFillin , teFillin2 , & status ) ;
if ( status ! = U_INDEX_OUTOFBOUNDS_ERROR ) {
log_err ( " ERROR: calling getNextResource where index out of bounds should return U_INDEX_OUTOFBOUNDS_ERROR, Got : %s \n " ,
myErrorName ( status ) ) ;
}
2000-08-28 21:43:03 +00:00
2000-07-12 22:59:57 +00:00
ures_close ( teFillin ) ;
ures_close ( teFillin2 ) ;
2000-07-12 01:09:23 +00:00
ures_close ( teRes ) ;
2001-10-11 00:52:21 +00:00
/* Test that ures_getLocale() returns the "real" locale ID */
status = U_ZERO_ERROR ;
teRes = ures_open ( NULL , " dE_At_NOWHERE_TO_BE_FOUND " , & status ) ;
if ( U_FAILURE ( status ) ) {
2002-09-17 19:45:50 +00:00
log_data_err ( " unable to open a locale resource bundle from \" dE_At_NOWHERE_TO_BE_FOUND \" (%s) \n " , u_errorName ( status ) ) ;
2001-10-11 00:52:21 +00:00
} else {
if ( 0 ! = strcmp ( " de_AT " , ures_getLocale ( teRes , & status ) ) ) {
2002-09-17 19:45:50 +00:00
log_data_err ( " ures_getLocale( \" dE_At_NOWHERE_TO_BE_FOUND \" )=%s but must be de_AT \n " , ures_getLocale ( teRes , & status ) ) ;
2001-10-11 00:52:21 +00:00
}
ures_close ( teRes ) ;
}
2001-10-11 16:12:08 +00:00
/* same test, but with an aliased locale resource bundle */
status = U_ZERO_ERROR ;
teRes = ures_open ( NULL , " iW_Il_depRecaTed_HebreW " , & status ) ;
if ( U_FAILURE ( status ) ) {
2002-09-17 19:45:50 +00:00
log_data_err ( " unable to open a locale resource bundle from \" iW_Il_depRecaTed_HebreW \" (%s) \n " , u_errorName ( status ) ) ;
2001-10-11 16:12:08 +00:00
} else {
if ( 0 ! = strcmp ( " he_IL " , ures_getLocale ( teRes , & status ) ) ) {
2002-09-17 19:45:50 +00:00
log_data_err ( " ures_getLocale( \" iW_Il_depRecaTed_HebreW \" )=%s but must be he_IL \n " , ures_getLocale ( teRes , & status ) ) ;
2001-10-11 16:12:08 +00:00
}
ures_close ( teRes ) ;
}
2002-02-07 19:37:34 +00:00
free ( utestdatapath ) ;
2000-07-12 01:09:23 +00:00
}
2000-11-21 04:05:39 +00:00
static void TestErrorConditions ( ) {
2002-02-07 21:36:52 +00:00
UErrorCode status = U_ZERO_ERROR ;
2000-07-12 01:09:23 +00:00
const char * key = NULL ;
const UChar * value = NULL ;
2002-02-07 19:37:34 +00:00
const char * testdatapath ;
UChar * utestdatapath ;
2000-07-12 01:09:23 +00:00
int32_t len = 0 ;
2000-08-28 21:43:03 +00:00
UResourceBundle * teRes = NULL ;
2000-07-12 01:09:23 +00:00
UResourceBundle * coll = NULL ;
2000-08-28 21:43:03 +00:00
UResourceBundle * binColl = NULL ;
2000-07-12 01:09:23 +00:00
UResourceBundle * teFillin = NULL ;
UResourceBundle * teFillin2 = NULL ;
2000-08-28 21:43:03 +00:00
uint8_t * binResult = NULL ;
2001-03-22 00:42:37 +00:00
int32_t resultLen ;
2002-01-29 04:01:49 +00:00
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
2002-02-07 19:37:34 +00:00
len = strlen ( testdatapath ) ;
utestdatapath = ( UChar * ) malloc ( sizeof ( UChar ) * ( len + 10 ) ) ;
2000-07-12 01:09:23 +00:00
u_uastrcpy ( utestdatapath , testdatapath ) ;
/*Test ures_openU with status != U_ZERO_ERROR*/
log_verbose ( " Testing ures_openU() with status != U_ZERO_ERROR..... \n " ) ;
status = U_ILLEGAL_ARGUMENT_ERROR ;
2000-08-28 21:43:03 +00:00
teRes = ures_openU ( utestdatapath , " te " , & status ) ;
if ( U_FAILURE ( status ) ) {
2002-02-07 21:36:52 +00:00
log_verbose ( " ures_openU() failed as expected path =%s with status != U_ZERO_ERROR \n " , testdatapath ) ;
2000-07-12 01:09:23 +00:00
} else {
2002-02-07 21:36:52 +00:00
log_err ( " ERROR: ures_openU() is supposed to fail path =%s with status != U_ZERO_ERROR \n " , austrdup ( utestdatapath ) ) ;
2000-07-12 01:09:23 +00:00
ures_close ( teRes ) ;
}
/*Test ures_openFillIn with UResourceBundle = NULL*/
log_verbose ( " Testing ures_openFillIn with UResourceBundle = NULL..... \n " ) ;
status = U_ZERO_ERROR ;
ures_openFillIn ( NULL , testdatapath , " te " , & status ) ;
if ( status ! = U_INTERNAL_PROGRAM_ERROR ) {
log_err ( " ERROR: ures_openFillIn with UResourceBundle= NULL should fail. Expected U_INTERNAL_PROGRAM_ERROR, Got: %s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getLocale() with status != U_ZERO_ERROR*/
status = U_ZERO_ERROR ;
teRes = ures_openU ( utestdatapath , " te " , & status ) ;
2000-08-28 21:43:03 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " ERROR: ures_openU() failed path =%s with %s " , austrdup ( utestdatapath ) , myErrorName ( status ) ) ;
return ;
}
2000-07-12 01:09:23 +00:00
status = U_ILLEGAL_ARGUMENT_ERROR ;
if ( ures_getLocale ( teRes , & status ) ! = NULL ) {
log_err ( " ERROR: ures_getLocale is supposed to fail with errorCode != U_ZERO_ERROR \n " ) ;
}
/*Test ures_getLocale() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
if ( ures_getLocale ( NULL , & status ) ! = NULL & & status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getLocale is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getSize() with UResourceBundle = NULL */
status = U_ZERO_ERROR ;
if ( ures_getSize ( NULL ) ! = 0 ) {
log_err ( " ERROR: ures_getSize() should return 0 when UResourceBundle=NULL. Got =%d \n " , ures_getSize ( NULL ) ) ;
}
2003-04-16 23:52:32 +00:00
/*Test ures_getType() with UResourceBundle = NULL should return URES_NONE==-1*/
2000-07-12 01:09:23 +00:00
status = U_ZERO_ERROR ;
2003-04-16 23:52:32 +00:00
if ( ures_getType ( NULL ) ! = URES_NONE ) {
log_err ( " ERROR: ures_getType() should return URES_NONE when UResourceBundle=NULL. Got =%d \n " , ures_getType ( NULL ) ) ;
2000-07-12 01:09:23 +00:00
}
/*Test ures_getKey() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
if ( ures_getKey ( NULL ) ! = NULL ) {
log_err ( " ERROR: ures_getKey() should return NULL when UResourceBundle=NULL. Got =%d \n " , ures_getKey ( NULL ) ) ;
}
/*Test ures_hasNext() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
if ( ures_hasNext ( NULL ) ! = FALSE ) {
log_err ( " ERROR: ures_hasNext() should return FALSE when UResourceBundle=NULL. Got =%d \n " , ures_hasNext ( NULL ) ) ;
}
/*Test ures_get() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
2001-03-22 00:42:37 +00:00
if ( ures_getStringByKey ( NULL , " string_only_in_te " , & resultLen , & status ) ! = NULL & & status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
2000-07-12 01:09:23 +00:00
log_err ( " ERROR: ures_get is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getByKey() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
teFillin = ures_getByKey ( NULL , " string_only_in_te " , teFillin , & status ) ;
if ( teFillin ! = NULL & & status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getByKey is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getByKey() with status != U_ZERO_ERROR*/
teFillin = ures_getByKey ( NULL , " string_only_in_te " , teFillin , & status ) ;
if ( teFillin ! = NULL ) {
log_err ( " ERROR: ures_getByKey is supposed to fail when errorCode != U_ZERO_ERROR \n " ) ;
}
/*Test ures_getStringByKey() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
if ( ures_getStringByKey ( NULL , " string_only_in_te " , & len , & status ) ! = NULL & & status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getStringByKey is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getStringByKey() with status != U_ZERO_ERROR*/
if ( ures_getStringByKey ( teRes , " string_only_in_te " , & len , & status ) ! = NULL ) {
log_err ( " ERROR: ures_getStringByKey is supposed to fail when status != U_ZERO_ERROR. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getString() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
if ( ures_getString ( NULL , & len , & status ) ! = NULL & & status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getString is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getString() with status != U_ZERO_ERROR*/
if ( ures_getString ( teRes , & len , & status ) ! = NULL ) {
log_err ( " ERROR: ures_getString is supposed to fail when status != U_ZERO_ERROR. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getBinary() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
if ( ures_getBinary ( NULL , & len , & status ) ! = NULL & & status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getBinary is supposed to fail when UResourceBundle = NULL. Expected: errorCode = U_ILLEGAL_ARGUMENT_ERROR, Got: errorCode=%s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getBinary(0 status != U_ILLEGAL_ARGUMENT_ERROR*/
status = U_ZERO_ERROR ;
2003-11-11 21:41:47 +00:00
coll = ures_getByKey ( teRes , " collations " , coll , & status ) ;
coll = ures_getByKey ( teRes , " standard " , coll , & status ) ;
2002-06-14 05:59:49 +00:00
binColl = ures_getByKey ( coll , " %%CollationBin " , binColl , & status ) ;
2000-08-28 21:43:03 +00:00
2000-07-12 01:09:23 +00:00
status = U_ILLEGAL_ARGUMENT_ERROR ;
2000-08-28 21:43:03 +00:00
binResult = ( uint8_t * ) ures_getBinary ( binColl , & len , & status ) ;
2000-07-12 01:09:23 +00:00
if ( binResult ! = NULL ) {
log_err ( " ERROR: ures_getBinary() with status != U_ZERO_ERROR is supposed to fail \n " ) ;
}
/*Test ures_getNextResource() with status != U_ZERO_ERROR*/
teFillin = ures_getNextResource ( teRes , teFillin , & status ) ;
if ( teFillin ! = NULL ) {
log_err ( " ERROR: ures_getNextResource() with errorCode != U_ZERO_ERROR is supposed to fail \n " ) ;
}
/*Test ures_getNextResource() with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
teFillin = ures_getNextResource ( NULL , teFillin , & status ) ;
if ( teFillin ! = NULL | | status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getNextResource() with UResourceBundle = NULL is supposed to fail. Expected : U_IILEGAL_ARGUMENT_ERROR, Got : %s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getNextString with errorCode != U_ZERO_ERROR*/
teFillin = ures_getByKey ( teRes , " tagged_array_in_te_te_IN " , teFillin , & status ) ;
key = ures_getKey ( teFillin ) ;
status = U_ILLEGAL_ARGUMENT_ERROR ;
value = ( UChar * ) ures_getNextString ( teFillin , & len , & key , & status ) ;
if ( value ! = NULL ) {
log_err ( " ERROR: ures_getNextString() with errorCode != U_ZERO_ERROR is supposed to fail \n " ) ;
}
/*Test ures_getNextString with UResourceBundle = NULL*/
status = U_ZERO_ERROR ;
value = ( UChar * ) ures_getNextString ( NULL , & len , & key , & status ) ;
if ( value ! = NULL | | status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getNextString() with UResourceBundle=NULL is supposed to fail \n Expected: U_ILLEGAL_ARGUMENT_ERROR, Got: %s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getByIndex with errorCode != U_ZERO_ERROR*/
status = U_ZERO_ERROR ;
teFillin = ures_getByKey ( teRes , " array_only_in_te " , teFillin , & status ) ;
2001-09-18 16:09:48 +00:00
if ( ures_countArrayItems ( teRes , " array_only_in_te " , & status ) ! = 4 ) {
log_err ( " ERROR: Wrong number of items in an array! \n " ) ;
}
2000-07-12 01:09:23 +00:00
status = U_ILLEGAL_ARGUMENT_ERROR ;
teFillin2 = ures_getByIndex ( teFillin , 0 , teFillin2 , & status ) ;
if ( teFillin2 ! = NULL ) {
log_err ( " ERROR: ures_getByIndex() with errorCode != U_ZERO_ERROR is supposed to fail \n " ) ;
}
/*Test ures_getByIndex with UResourceBundle = NULL */
status = U_ZERO_ERROR ;
teFillin2 = ures_getByIndex ( NULL , 0 , teFillin2 , & status ) ;
if ( status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getByIndex() with UResourceBundle=NULL is supposed to fail \n Expected: U_ILLEGAL_ARGUMENT_ERROR, Got: %s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getStringByIndex with errorCode != U_ZERO_ERROR*/
status = U_ZERO_ERROR ;
teFillin = ures_getByKey ( teRes , " array_only_in_te " , teFillin , & status ) ;
status = U_ILLEGAL_ARGUMENT_ERROR ;
value = ( UChar * ) ures_getStringByIndex ( teFillin , 0 , & len , & status ) ;
if ( value ! = NULL ) {
log_err ( " ERROR: ures_getSringByIndex() with errorCode != U_ZERO_ERROR is supposed to fail \n " ) ;
}
/*Test ures_getStringByIndex with UResourceBundle = NULL */
status = U_ZERO_ERROR ;
value = ( UChar * ) ures_getStringByIndex ( NULL , 0 , & len , & status ) ;
if ( value ! = NULL | | status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getStringByIndex() with UResourceBundle=NULL is supposed to fail \n Expected: U_ILLEGAL_ARGUMENT_ERROR, Got: %s \n " ,
myErrorName ( status ) ) ;
}
2001-09-18 16:09:48 +00:00
/*Test ures_getStringByIndex with UResourceBundle = NULL */
status = U_ZERO_ERROR ;
value = ( UChar * ) ures_getStringByIndex ( teFillin , 9999 , & len , & status ) ;
if ( value ! = NULL | | status ! = U_MISSING_RESOURCE_ERROR ) {
log_err ( " ERROR: ures_getStringByIndex() with index that is too big is supposed to fail \n Expected: U_MISSING_RESOURCE_ERROR, Got: %s \n " ,
myErrorName ( status ) ) ;
}
2000-07-12 01:09:23 +00:00
/*Test ures_getInt() where UResourceBundle = NULL */
status = U_ZERO_ERROR ;
if ( ures_getInt ( NULL , & status ) ! = - 1 & & status ! = U_ILLEGAL_ARGUMENT_ERROR ) {
log_err ( " ERROR: ures_getInt() with UResourceBundle = NULL should fail. Expected: U_IILEGAL_ARGUMENT_ERROR, Got: %s \n " ,
myErrorName ( status ) ) ;
}
/*Test ures_getInt() where status != U_ZERO_ERROR */
if ( ures_getInt ( teRes , & status ) ! = - 1 ) {
log_err ( " ERROR: ures_getInt() with errorCode != U_ZERO_ERROR should fail \n " ) ;
}
2000-07-12 22:59:57 +00:00
ures_close ( teFillin ) ;
ures_close ( teFillin2 ) ;
ures_close ( coll ) ;
ures_close ( binColl ) ;
2000-07-12 01:09:23 +00:00
ures_close ( teRes ) ;
2002-02-07 19:37:34 +00:00
free ( utestdatapath ) ;
2000-07-12 01:09:23 +00:00
}
2000-05-15 18:39:17 +00:00
2001-03-21 00:55:52 +00:00
static void TestGetVersion ( ) {
2003-06-11 03:12:41 +00:00
UVersionInfo minVersionArray = { 0x01 , 0x00 , 0x00 , 0x00 } ;
2001-03-21 00:55:52 +00:00
UVersionInfo maxVersionArray = { 0x50 , 0x80 , 0xcf , 0xcf } ;
UVersionInfo versionArray ;
UErrorCode status = U_ZERO_ERROR ;
2003-06-11 03:12:41 +00:00
UResourceBundle * resB = NULL ;
int i = 0 , j = 0 ;
int locCount = uloc_countAvailable ( ) ;
const char * locName = " root " ;
2001-03-21 00:55:52 +00:00
log_verbose ( " The ures_getVersion tests begin : \n " ) ;
2003-06-11 03:12:41 +00:00
for ( j = - 1 ; j < locCount ; j + + ) {
if ( j > = 0 ) {
locName = uloc_getAvailable ( j ) ;
}
log_verbose ( " Testing version number for locale %s \n " , locName ) ;
resB = ures_open ( NULL , locName , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " Resource bundle creation for locale %s failed.: %s \n " , locName , myErrorName ( status ) ) ;
ures_close ( resB ) ;
return ;
}
ures_getVersion ( resB , versionArray ) ;
for ( i = 0 ; i < 4 ; + + i ) {
if ( versionArray [ i ] < minVersionArray [ i ] | |
versionArray [ i ] > maxVersionArray [ i ] )
{
log_err ( " Testing ures_getVersion() - unexpected result: %d.%d.%d.%d \n " ,
versionArray [ 0 ] , versionArray [ 1 ] , versionArray [ 2 ] , versionArray [ 3 ] ) ;
break ;
}
}
ures_close ( resB ) ;
2001-03-21 00:55:52 +00:00
}
}
2000-11-21 04:05:39 +00:00
static void TestResourceBundles ( )
2000-05-15 18:39:17 +00:00
{
testTag ( " only_in_Root " , TRUE , FALSE , FALSE ) ;
testTag ( " in_Root_te " , TRUE , TRUE , FALSE ) ;
testTag ( " in_Root_te_te_IN " , TRUE , TRUE , TRUE ) ;
testTag ( " in_Root_te_IN " , TRUE , FALSE , TRUE ) ;
testTag ( " only_in_te " , FALSE , TRUE , FALSE ) ;
testTag ( " only_in_te_IN " , FALSE , FALSE , TRUE ) ;
testTag ( " in_te_te_IN " , FALSE , TRUE , TRUE ) ;
testTag ( " nonexistent " , FALSE , FALSE , FALSE ) ;
log_verbose ( " Passed:= %d Failed= %d \n " , pass , fail ) ;
}
2000-11-21 04:05:39 +00:00
static void TestConstruction1 ( )
2000-05-15 18:39:17 +00:00
{
2001-04-17 19:09:23 +00:00
UResourceBundle * test1 = 0 , * test2 = 0 , * empty = 0 ;
2000-08-28 21:43:03 +00:00
const UChar * result1 , * result2 ;
UErrorCode status = U_ZERO_ERROR ;
UErrorCode err = U_ZERO_ERROR ;
const char * locale = " te_IN " ;
2002-02-07 19:37:34 +00:00
const char * testdatapath ;
2002-01-21 21:10:18 +00:00
2000-08-28 21:43:03 +00:00
int32_t len1 = 0 ;
int32_t len2 = 0 ;
UVersionInfo versionInfo ;
char versionString [ 256 ] ;
2001-05-25 18:25:49 +00:00
char verboseOutput [ 256 ] ;
2000-08-28 21:43:03 +00:00
U_STRING_DECL ( rootVal , " ROOT " , 4 ) ;
U_STRING_DECL ( te_inVal , " TE_IN " , 5 ) ;
U_STRING_INIT ( rootVal , " ROOT " , 4 ) ;
U_STRING_INIT ( te_inVal , " TE_IN " , 5 ) ;
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
2000-08-28 21:43:03 +00:00
log_verbose ( " Testing ures_open()...... \n " ) ;
2001-10-11 18:41:03 +00:00
empty = ures_open ( testdatapath , " testempty " , & status ) ;
2001-04-17 19:09:23 +00:00
if ( empty = = NULL | | U_FAILURE ( status ) ) {
2001-05-25 18:25:49 +00:00
log_err ( " opening empty failed! \n " ) ;
2001-04-17 19:09:23 +00:00
}
ures_close ( empty ) ;
2000-08-28 21:43:03 +00:00
test1 = ures_open ( testdatapath , NULL , & err ) ;
if ( U_FAILURE ( err ) )
2000-05-15 18:39:17 +00:00
{
2002-01-21 21:10:18 +00:00
log_err ( " construction of NULL did not succeed : %s \n " , myErrorName ( status ) ) ;
return ;
}
test2 = ures_open ( testdatapath , locale , & err ) ;
if ( U_FAILURE ( err ) )
{
log_err ( " construction of %s did not succeed : %s \n " , locale , myErrorName ( status ) ) ;
2000-08-28 21:43:03 +00:00
return ;
2000-05-15 18:39:17 +00:00
}
2000-08-28 21:43:03 +00:00
result1 = ures_getStringByKey ( test1 , " string_in_Root_te_te_IN " , & len1 , & err ) ;
result2 = ures_getStringByKey ( test2 , " string_in_Root_te_te_IN " , & len2 , & err ) ;
if ( U_FAILURE ( err ) | | len1 = = 0 | | len2 = = 0 ) {
log_err ( " Something threw an error in TestConstruction(): %s \n " , myErrorName ( status ) ) ;
return ;
}
2001-05-25 18:25:49 +00:00
log_verbose ( " for string_in_Root_te_te_IN, default.txt had %s \n " , u_austrcpy ( verboseOutput , result1 ) ) ;
log_verbose ( " for string_in_Root_te_te_IN, te_IN.txt had %s \n " , u_austrcpy ( verboseOutput , result2 ) ) ;
2000-08-28 21:43:03 +00:00
if ( u_strcmp ( result1 , rootVal ) ! = 0 | | u_strcmp ( result2 , te_inVal ) ! = 0 ) {
log_err ( " construction test failed. Run Verbose for more information " ) ;
}
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
/* Test getVersionNumber*/
log_verbose ( " Testing version number \n " ) ;
log_verbose ( " for getVersionNumber : %s \n " , ures_getVersionNumber ( test1 ) ) ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
log_verbose ( " Testing version \n " ) ;
ures_getVersion ( test1 , versionInfo ) ;
u_versionToString ( versionInfo , versionString ) ;
2000-08-10 20:20:10 +00:00
2000-08-28 21:43:03 +00:00
log_verbose ( " for getVersion : %s \n " , versionString ) ;
2000-08-10 20:20:10 +00:00
2000-08-28 21:43:03 +00:00
if ( strcmp ( versionString , ures_getVersionNumber ( test1 ) ) ! = 0 ) {
log_err ( " Versions differ: %s vs %s \n " , versionString , ures_getVersionNumber ( test1 ) ) ;
}
2000-08-10 20:20:10 +00:00
2000-08-28 21:43:03 +00:00
ures_close ( test1 ) ;
ures_close ( test2 ) ;
2001-04-17 19:09:23 +00:00
2000-05-15 18:39:17 +00:00
}
/*****************************************************************************/
/*****************************************************************************/
2000-11-21 04:05:39 +00:00
static UBool testTag ( const char * frag ,
2000-05-18 22:08:39 +00:00
UBool in_Root ,
UBool in_te ,
UBool in_te_IN )
2000-05-15 18:39:17 +00:00
{
2001-03-22 18:32:54 +00:00
int32_t failNum = fail ;
2000-08-28 21:43:03 +00:00
/* Make array from input params */
UBool is_in [ 3 ] ;
const char * NAME [ ] = { " ROOT " , " TE " , " TE_IN " } ;
/* Now try to load the desired items */
UResourceBundle * theBundle = NULL ;
char tag [ 99 ] ;
char action [ 256 ] ;
UErrorCode expected_status , status = U_ZERO_ERROR , expected_resource_status = U_ZERO_ERROR ;
UChar * base = NULL ;
UChar * expected_string = NULL ;
const UChar * string = NULL ;
char buf [ 5 ] ;
char item_tag [ 10 ] ;
int32_t i , j , row , col , len ;
int32_t actual_bundle ;
int32_t count = 0 ;
int32_t row_count = 0 ;
int32_t column_count = 0 ;
int32_t index = 0 ;
int32_t tag_count = 0 ;
2002-02-07 19:37:34 +00:00
const char * testdatapath ;
2001-05-25 18:25:49 +00:00
char verboseOutput [ 256 ] ;
2000-08-28 21:43:03 +00:00
UResourceBundle * array = NULL ;
UResourceBundle * array2d = NULL ;
UResourceBundle * tags = NULL ;
UResourceBundle * arrayItem1 = NULL ;
2002-02-07 19:37:34 +00:00
testdatapath = loadTestData ( & status ) ;
2002-01-29 04:01:49 +00:00
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return FALSE ;
}
2000-08-28 21:43:03 +00:00
is_in [ 0 ] = in_Root ;
is_in [ 1 ] = in_te ;
is_in [ 2 ] = in_te_IN ;
strcpy ( item_tag , " tag " ) ;
for ( i = 0 ; i < bundles_count ; + + i )
2000-05-15 18:39:17 +00:00
{
2001-10-11 18:41:03 +00:00
strcpy ( action , " construction for " ) ;
2000-08-28 21:43:03 +00:00
strcat ( action , param [ i ] . name ) ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
theBundle = ures_open ( testdatapath , param [ i ] . name , & status ) ;
CONFIRM_ErrorCode ( status , param [ i ] . expected_constructor_status ) ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
if ( i = = 5 )
actual_bundle = 0 ; /* ne -> default */
else if ( i = = 3 )
actual_bundle = 1 ; /* te_NE -> te */
else if ( i = = 4 )
actual_bundle = 2 ; /* te_IN_NE -> te_IN */
else
actual_bundle = i ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
expected_resource_status = U_MISSING_RESOURCE_ERROR ;
for ( j = e_te_IN ; j > = e_Root ; - - j )
2000-05-15 18:39:17 +00:00
{
2000-08-28 21:43:03 +00:00
if ( is_in [ j ] & & param [ i ] . inherits [ j ] )
2000-05-15 18:39:17 +00:00
{
2000-08-28 21:43:03 +00:00
if ( j = = actual_bundle ) /* it's in the same bundle OR it's a nonexistent=default bundle (5) */
expected_resource_status = U_ZERO_ERROR ;
else if ( j = = 0 )
2002-08-21 19:09:33 +00:00
expected_resource_status = U_USING_DEFAULT_WARNING ;
2000-08-28 21:43:03 +00:00
else
2002-08-21 19:09:33 +00:00
expected_resource_status = U_USING_FALLBACK_WARNING ;
2000-08-28 21:43:03 +00:00
log_verbose ( " %s[%d]::%s: in<%d:%s> inherits<%d:%s>. actual_bundle=%s \n " ,
param [ i ] . name ,
i ,
frag ,
j ,
is_in [ j ] ? " Yes " : " No " ,
j ,
param [ i ] . inherits [ j ] ? " Yes " : " No " ,
param [ actual_bundle ] . name ) ;
break ;
2000-05-15 18:39:17 +00:00
}
}
2000-08-28 21:43:03 +00:00
for ( j = param [ i ] . where ; j > = 0 ; - - j )
2000-05-15 18:39:17 +00:00
{
2000-08-28 21:43:03 +00:00
if ( is_in [ j ] )
{
if ( base ! = NULL ) {
free ( base ) ;
base = NULL ;
}
2002-07-29 21:04:18 +00:00
base = ( UChar * ) malloc ( sizeof ( UChar ) * ( strlen ( NAME [ j ] ) + 1 ) ) ;
2000-08-28 21:43:03 +00:00
u_uastrcpy ( base , NAME [ j ] ) ;
break ;
}
else {
if ( base ! = NULL ) {
free ( base ) ;
base = NULL ;
}
2002-07-29 21:04:18 +00:00
base = ( UChar * ) malloc ( sizeof ( UChar ) * 1 ) ;
2000-08-28 21:43:03 +00:00
* base = 0x0000 ;
2000-05-15 18:39:17 +00:00
}
}
2000-08-28 21:43:03 +00:00
/*----string---------------------------------------------------------------- */
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
strcpy ( tag , " string_ " ) ;
strcat ( tag , frag ) ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
strcpy ( action , param [ i ] . name ) ;
strcat ( action , " .ures_getStringByKey( " ) ;
strcat ( action , tag ) ;
strcat ( action , " ) " ) ;
status = U_ZERO_ERROR ;
len = 0 ;
string = ures_getStringByKey ( theBundle , tag , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
2002-07-29 21:04:18 +00:00
expected_string = ( UChar * ) malloc ( sizeof ( UChar ) * ( u_strlen ( base ) + 4 ) ) ;
2000-08-28 21:43:03 +00:00
u_strcpy ( expected_string , base ) ;
CONFIRM_INT_EQ ( len , u_strlen ( expected_string ) ) ;
} else {
2002-07-29 21:04:18 +00:00
expected_string = ( UChar * ) malloc ( sizeof ( UChar ) * ( u_strlen ( kERROR ) + 1 ) ) ;
2000-08-28 21:43:03 +00:00
u_strcpy ( expected_string , kERROR ) ;
string = kERROR ;
}
log_verbose ( " %s got %d, expected %d \n " , action , status , expected_resource_status ) ;
CONFIRM_ErrorCode ( status , expected_resource_status ) ;
CONFIRM_EQ ( string , expected_string ) ;
/*--------------array------------------------------------------------- */
strcpy ( tag , " array_ " ) ;
strcat ( tag , frag ) ;
strcpy ( action , param [ i ] . name ) ;
strcat ( action , " .ures_getByKey( " ) ;
strcat ( action , tag ) ;
strcat ( action , " ) " ) ;
len = 0 ;
count = kERROR_COUNT ;
status = U_ZERO_ERROR ;
array = ures_getByKey ( theBundle , tag , array , & status ) ;
CONFIRM_ErrorCode ( status , expected_resource_status ) ;
if ( U_SUCCESS ( status ) ) {
/*confirm the resource type is an array*/
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( array ) , URES_ARRAY ) ;
2000-08-28 21:43:03 +00:00
/*confirm the size*/
count = ures_getSize ( array ) ;
2000-05-15 18:39:17 +00:00
CONFIRM_INT_GE ( count , 1 ) ;
for ( j = 0 ; j < count ; + + j ) {
2000-08-28 21:43:03 +00:00
UChar element [ 3 ] ;
2000-05-15 18:39:17 +00:00
u_strcpy ( expected_string , base ) ;
u_uastrcpy ( element , itoa1 ( j , buf ) ) ;
2000-08-28 21:43:03 +00:00
u_strcat ( expected_string , element ) ;
arrayItem1 = ures_getNextResource ( array , arrayItem1 , & status ) ;
if ( U_SUCCESS ( status ) ) {
CONFIRM_EQ ( ures_getString ( arrayItem1 , & len , & status ) , expected_string ) ;
}
2000-05-15 18:39:17 +00:00
}
2000-08-28 21:43:03 +00:00
}
else {
2000-05-15 18:39:17 +00:00
CONFIRM_INT_EQ ( count , kERROR_COUNT ) ;
2000-07-06 23:01:50 +00:00
CONFIRM_ErrorCode ( status , U_MISSING_RESOURCE_ERROR ) ;
2000-08-28 21:43:03 +00:00
/*CONFIRM_INT_EQ((int32_t)(unsigned long)array,(int32_t)0);*/
2000-05-15 18:39:17 +00:00
count = 0 ;
2000-08-28 21:43:03 +00:00
}
/*--------------arrayItem------------------------------------------------- */
strcpy ( tag , " array_ " ) ;
strcat ( tag , frag ) ;
strcpy ( action , param [ i ] . name ) ;
strcat ( action , " .ures_getStringByIndex( " ) ;
strcat ( action , tag ) ;
strcat ( action , " ) " ) ;
for ( j = 0 ; j < 10 ; + + j ) {
index = count ? ( randi ( count * 3 ) - count ) : ( randi ( 200 ) - 100 ) ;
status = U_ZERO_ERROR ;
string = kERROR ;
array = ures_getByKey ( theBundle , tag , array , & status ) ;
if ( ! U_FAILURE ( status ) ) {
UChar * t = NULL ;
t = ( UChar * ) ures_getStringByIndex ( array , index , & len , & status ) ;
if ( ! U_FAILURE ( status ) ) {
UChar element [ 3 ] ;
string = t ;
u_strcpy ( expected_string , base ) ;
u_uastrcpy ( element , itoa1 ( index , buf ) ) ;
u_strcat ( expected_string , element ) ;
} else {
u_strcpy ( expected_string , kERROR ) ;
}
}
expected_status = ( index > = 0 & & index < count ) ? expected_resource_status : U_MISSING_RESOURCE_ERROR ;
CONFIRM_ErrorCode ( status , expected_status ) ;
CONFIRM_EQ ( string , expected_string ) ;
}
/*--------------2dArray------------------------------------------------- */
strcpy ( tag , " array_2d_ " ) ;
2000-05-15 18:39:17 +00:00
strcat ( tag , frag ) ;
strcpy ( action , param [ i ] . name ) ;
strcat ( action , " .ures_getByKey( " ) ;
strcat ( action , tag ) ;
strcat ( action , " ) " ) ;
row_count = kERROR_COUNT , column_count = kERROR_COUNT ;
status = U_ZERO_ERROR ;
2000-08-28 21:43:03 +00:00
array2d = ures_getByKey ( theBundle , tag , array2d , & status ) ;
2000-05-15 18:39:17 +00:00
CONFIRM_ErrorCode ( status , expected_resource_status ) ;
if ( U_SUCCESS ( status ) )
{
2000-08-28 21:43:03 +00:00
/*confirm the resource type is an 2darray*/
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( array2d ) , URES_ARRAY ) ;
2000-08-28 21:43:03 +00:00
row_count = ures_getSize ( array2d ) ;
CONFIRM_INT_GE ( row_count , 1 ) ;
for ( row = 0 ; row < row_count ; + + row ) {
UResourceBundle * tableRow = NULL ;
tableRow = ures_getByIndex ( array2d , row , tableRow , & status ) ;
CONFIRM_ErrorCode ( status , expected_resource_status ) ;
2000-05-15 18:39:17 +00:00
if ( U_SUCCESS ( status ) ) {
2000-08-28 21:43:03 +00:00
/*confirm the resourcetype of each table row is an array*/
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( ures_getType ( tableRow ) , URES_ARRAY ) ;
2000-08-28 21:43:03 +00:00
column_count = ures_getSize ( tableRow ) ;
2000-05-15 18:39:17 +00:00
CONFIRM_INT_GE ( column_count , 1 ) ;
2000-08-28 21:43:03 +00:00
2000-05-15 18:39:17 +00:00
for ( col = 0 ; j < column_count ; + + j ) {
2000-08-28 21:43:03 +00:00
UChar element [ 3 ] ;
u_strcpy ( expected_string , base ) ;
u_uastrcpy ( element , itoa1 ( row , buf ) ) ;
u_strcat ( expected_string , element ) ;
u_uastrcpy ( element , itoa1 ( col , buf ) ) ;
u_strcat ( expected_string , element ) ;
arrayItem1 = ures_getNextResource ( tableRow , arrayItem1 , & status ) ;
if ( U_SUCCESS ( status ) ) {
const UChar * stringValue = ures_getString ( arrayItem1 , & len , & status ) ;
CONFIRM_EQ ( stringValue , expected_string ) ;
}
}
}
2000-07-06 23:01:50 +00:00
ures_close ( tableRow ) ;
2000-08-28 21:43:03 +00:00
}
} else {
CONFIRM_INT_EQ ( row_count , kERROR_COUNT ) ;
2000-05-15 18:39:17 +00:00
CONFIRM_INT_EQ ( column_count , kERROR_COUNT ) ;
row_count = column_count = 0 ;
2000-08-28 21:43:03 +00:00
}
/*------2dArrayItem-------------------------------------------------------------- */
/* 2dArrayItem*/
for ( j = 0 ; j < 10 ; + + j )
{
row = row_count ? ( randi ( row_count * 3 ) - row_count ) : ( randi ( 200 ) - 100 ) ;
col = column_count ? ( randi ( column_count * 3 ) - column_count ) : ( randi ( 200 ) - 100 ) ;
status = U_ZERO_ERROR ;
string = kERROR ;
len = 0 ;
array2d = ures_getByKey ( theBundle , tag , array2d , & status ) ;
if ( U_SUCCESS ( status ) ) {
2000-05-15 18:39:17 +00:00
UResourceBundle * tableRow = NULL ;
2000-08-28 21:43:03 +00:00
tableRow = ures_getByIndex ( array2d , row , tableRow , & status ) ;
2000-05-15 18:39:17 +00:00
if ( U_SUCCESS ( status ) ) {
UChar * t = NULL ;
2000-08-28 21:43:03 +00:00
t = ( UChar * ) ures_getStringByIndex ( tableRow , col , & len , & status ) ;
if ( U_SUCCESS ( status ) ) {
string = t ;
}
}
2000-07-06 23:01:50 +00:00
ures_close ( tableRow ) ;
2000-08-28 21:43:03 +00:00
}
expected_status = ( row > = 0 & & row < row_count & & col > = 0 & & col < column_count ) ?
expected_resource_status : U_MISSING_RESOURCE_ERROR ;
CONFIRM_ErrorCode ( status , expected_status ) ;
if ( U_SUCCESS ( status ) ) {
UChar element [ 3 ] ;
u_strcpy ( expected_string , base ) ;
u_uastrcpy ( element , itoa1 ( row , buf ) ) ;
u_strcat ( expected_string , element ) ;
u_uastrcpy ( element , itoa1 ( col , buf ) ) ;
u_strcat ( expected_string , element ) ;
} else {
2000-05-15 18:39:17 +00:00
u_strcpy ( expected_string , kERROR ) ;
2000-08-28 21:43:03 +00:00
}
CONFIRM_EQ ( string , expected_string ) ;
2000-05-15 18:39:17 +00:00
}
2000-07-06 23:01:50 +00:00
2000-08-28 21:43:03 +00:00
/*--------------taggedArray----------------------------------------------- */
strcpy ( tag , " tagged_array_ " ) ;
strcat ( tag , frag ) ;
strcpy ( action , param [ i ] . name ) ;
strcat ( action , " .ures_getByKey( " ) ;
strcat ( action , tag ) ;
strcat ( action , " ) " ) ;
status = U_ZERO_ERROR ;
tag_count = 0 ;
tags = ures_getByKey ( theBundle , tag , tags , & status ) ;
CONFIRM_ErrorCode ( status , expected_resource_status ) ;
if ( U_SUCCESS ( status ) ) {
2000-05-15 18:39:17 +00:00
UResType bundleType = ures_getType ( tags ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( bundleType , URES_TABLE ) ;
2000-08-28 21:43:03 +00:00
tag_count = ures_getSize ( tags ) ;
2000-05-15 18:39:17 +00:00
CONFIRM_INT_GE ( ( int32_t ) tag_count , ( int32_t ) 0 ) ;
2000-08-28 21:43:03 +00:00
for ( index = 0 ; index < tag_count ; index + + ) {
UResourceBundle * tagelement = NULL ;
const char * key = NULL ;
UChar * value = NULL ;
tagelement = ures_getByIndex ( tags , index , tagelement , & status ) ;
key = ures_getKey ( tagelement ) ;
value = ( UChar * ) ures_getNextString ( tagelement , & len , & key , & status ) ;
2001-05-25 18:25:49 +00:00
log_verbose ( " tag = %s, value = %s \n " , key , u_austrcpy ( verboseOutput , value ) ) ;
2000-08-28 21:43:03 +00:00
if ( strncmp ( key , " tag " , 3 ) = = 0 & & u_strncmp ( value , base , u_strlen ( base ) ) = = 0 ) {
record_pass ( ) ;
} else {
record_fail ( ) ;
}
ures_close ( tagelement ) ;
}
} else {
tag_count = 0 ;
}
/*---------taggedArrayItem----------------------------------------------*/
count = 0 ;
2000-05-15 18:39:17 +00:00
for ( index = - 20 ; index < 20 ; + + index )
{
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
2000-05-15 18:39:17 +00:00
string = kERROR ;
2000-08-28 21:43:03 +00:00
strcpy ( item_tag , " tag " ) ;
2000-05-15 18:39:17 +00:00
strcat ( item_tag , itoa1 ( index , buf ) ) ;
2000-08-28 21:43:03 +00:00
tags = ures_getByKey ( theBundle , tag , tags , & status ) ;
if ( U_SUCCESS ( status ) ) {
UResourceBundle * tagelement = NULL ;
UChar * t = NULL ;
tagelement = ures_getByKey ( tags , item_tag , tagelement , & status ) ;
if ( ! U_FAILURE ( status ) ) {
UResType elementType = ures_getType ( tagelement ) ;
2003-04-16 23:52:32 +00:00
CONFIRM_INT_EQ ( elementType , URES_STRING ) ;
2000-08-28 21:43:03 +00:00
if ( strcmp ( ures_getKey ( tagelement ) , item_tag ) = = 0 ) {
record_pass ( ) ;
} else {
record_fail ( ) ;
}
t = ( UChar * ) ures_getString ( tagelement , & len , & status ) ;
if ( ! U_FAILURE ( status ) ) {
string = t ;
}
}
if ( index < 0 ) {
CONFIRM_ErrorCode ( status , U_MISSING_RESOURCE_ERROR ) ;
}
2000-05-15 18:39:17 +00:00
else {
2000-08-28 21:43:03 +00:00
if ( status ! = U_MISSING_RESOURCE_ERROR ) {
UChar element [ 3 ] ;
u_strcpy ( expected_string , base ) ;
u_uastrcpy ( element , itoa1 ( index , buf ) ) ;
u_strcat ( expected_string , element ) ;
CONFIRM_EQ ( string , expected_string ) ;
count + + ;
}
}
2000-07-06 23:01:50 +00:00
ures_close ( tagelement ) ;
2000-08-28 21:43:03 +00:00
}
}
CONFIRM_INT_EQ ( count , tag_count ) ;
free ( expected_string ) ;
ures_close ( theBundle ) ;
2000-05-15 18:39:17 +00:00
}
2000-08-28 21:43:03 +00:00
ures_close ( array ) ;
ures_close ( array2d ) ;
ures_close ( tags ) ;
ures_close ( arrayItem1 ) ;
free ( base ) ;
2001-03-22 18:32:54 +00:00
return ( UBool ) ( failNum = = fail ) ;
2000-05-15 18:39:17 +00:00
}
2000-11-21 04:05:39 +00:00
static void record_pass ( )
2000-05-15 18:39:17 +00:00
{
2000-08-28 21:43:03 +00:00
+ + pass ;
2000-05-15 18:39:17 +00:00
}
2000-11-21 04:05:39 +00:00
static void record_fail ( )
2000-05-15 18:39:17 +00:00
{
2000-08-28 21:43:03 +00:00
+ + fail ;
2000-05-15 18:39:17 +00:00
}
/**
* Test to make sure that the U_USING_FALLBACK_ERROR and U_USING_DEFAULT_ERROR
* are set correctly
*/
2000-11-21 04:05:39 +00:00
static void TestFallback ( )
2000-05-15 18:39:17 +00:00
{
2000-08-28 21:43:03 +00:00
UErrorCode status = U_ZERO_ERROR ;
UResourceBundle * fr_FR = NULL ;
2003-09-27 01:09:40 +00:00
UResourceBundle * subResource = NULL ;
2000-08-28 21:43:03 +00:00
const UChar * junk ; /* ignored */
2001-03-22 00:42:37 +00:00
int32_t resultLen ;
2000-08-28 21:43:03 +00:00
log_verbose ( " Opening fr_FR.. " ) ;
fr_FR = ures_open ( NULL , " fr_FR " , & status ) ;
if ( U_FAILURE ( status ) )
2000-05-15 18:39:17 +00:00
{
2000-08-28 21:43:03 +00:00
log_err ( " Couldn't open fr_FR - %d \n " , status ) ;
return ;
2000-05-15 18:39:17 +00:00
}
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
/* clear it out.. just do some calls to get the gears turning */
2001-03-22 00:42:37 +00:00
junk = ures_getStringByKey ( fr_FR , " LocaleID " , & resultLen , & status ) ;
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
2001-03-22 00:42:37 +00:00
junk = ures_getStringByKey ( fr_FR , " LocaleString " , & resultLen , & status ) ;
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
2001-03-22 00:42:37 +00:00
junk = ures_getStringByKey ( fr_FR , " LocaleID " , & resultLen , & status ) ;
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
2000-05-15 18:39:17 +00:00
2000-08-28 21:43:03 +00:00
/* OK first one. This should be a Default value. */
2003-09-30 18:23:06 +00:00
subResource = ures_getByKey ( fr_FR , " CurrencyMap " , NULL , & status ) ;
2002-08-21 19:09:33 +00:00
if ( status ! = U_USING_DEFAULT_WARNING )
2000-05-15 18:39:17 +00:00
{
2003-09-27 01:09:40 +00:00
log_data_err ( " Expected U_USING_DEFAULT_ERROR when trying to get LocaleScript from fr_FR, got %s \n " ,
2001-03-20 23:05:42 +00:00
u_errorName ( status ) ) ;
2000-05-15 18:39:17 +00:00
}
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
2003-09-27 01:09:40 +00:00
ures_close ( subResource ) ;
2000-08-28 21:43:03 +00:00
/* and this is a Fallback, to fr */
2002-01-30 06:16:26 +00:00
junk = ures_getStringByKey ( fr_FR , " DayNames " , & resultLen , & status ) ;
2002-08-21 19:09:33 +00:00
if ( status ! = U_USING_FALLBACK_WARNING )
2000-05-15 18:39:17 +00:00
{
2002-09-17 19:45:50 +00:00
log_data_err ( " Expected U_USING_FALLBACK_ERROR when trying to get DayNames from fr_FR, got %d \n " ,
2000-08-28 21:43:03 +00:00
status ) ;
2000-05-15 18:39:17 +00:00
}
2001-03-21 01:50:24 +00:00
2000-08-28 21:43:03 +00:00
status = U_ZERO_ERROR ;
ures_close ( fr_FR ) ;
2001-03-21 02:20:51 +00:00
/* Temporary hack err actually should be U_USING_FALLBACK_ERROR */
2001-03-21 01:50:24 +00:00
/* Test Jitterbug 552 fallback mechanism of aliased data */
{
UErrorCode err = U_ZERO_ERROR ;
2001-03-21 02:20:51 +00:00
UResourceBundle * myResB = ures_open ( NULL , " no_NO_NY " , & err ) ;
2003-06-22 22:23:05 +00:00
UResourceBundle * resLocID = ures_getByKey ( myResB , " Version " , NULL , & err ) ;
2001-05-24 20:59:12 +00:00
UResourceBundle * tResB ;
2003-06-22 22:23:05 +00:00
static const UChar versionStr [ ] = { 0x0033 , 0x002E , 0x0030 , 0 } ;
2001-05-24 20:59:12 +00:00
if ( err ! = U_ZERO_ERROR ) {
2003-06-22 22:23:05 +00:00
log_data_err ( " Expected U_ZERO_ERROR when trying to test no_NO_NY aliased to nn_NO for Version err=%s \n " , u_errorName ( err ) ) ;
2002-02-08 01:08:50 +00:00
return ;
2001-05-24 20:59:12 +00:00
}
2003-06-22 22:23:05 +00:00
if ( u_strcmp ( ures_getString ( resLocID , & resultLen , & err ) , versionStr ) ! = 0 ) {
log_data_err ( " ures_getString(resLocID, &resultLen, &err) returned an unexpected version value \n " ) ;
2001-05-24 20:59:12 +00:00
}
tResB = ures_getByKey ( myResB , " DayNames " , NULL , & err ) ;
2002-08-21 19:09:33 +00:00
if ( err ! = U_USING_FALLBACK_WARNING ) {
2001-05-24 20:59:12 +00:00
log_err ( " Expected U_USING_FALLBACK_ERROR when trying to test no_NO_NY aliased with nn_NO_NY for DayNames err=%s \n " , u_errorName ( err ) ) ;
2001-03-21 01:50:24 +00:00
}
2002-02-08 01:08:50 +00:00
ures_close ( resLocID ) ;
2001-03-21 02:20:51 +00:00
ures_close ( myResB ) ;
ures_close ( tResB ) ;
2001-03-21 01:50:24 +00:00
}
2000-05-15 18:39:17 +00:00
}
2000-08-28 21:43:03 +00:00
2000-11-21 04:05:39 +00:00
static void printUChars ( UChar * uchars ) {
2000-08-28 21:43:03 +00:00
int16_t i = 0 ;
for ( i = 0 ; i < u_strlen ( uchars ) ; i + + ) {
2001-05-24 20:59:12 +00:00
log_err ( " %04X " , * ( uchars + i ) ) ;
2000-08-28 21:43:03 +00:00
}
2000-05-15 18:39:17 +00:00
}
2002-06-24 20:58:56 +00:00
static void TestResourceLevelAliasing ( void ) {
UErrorCode status = U_ZERO_ERROR ;
UResourceBundle * aliasB = NULL , * tb = NULL ;
UResourceBundle * en = NULL , * uk = NULL , * testtypes = NULL ;
const char * testdatapath = NULL ;
const UChar * string = NULL , * sequence = NULL ;
const uint8_t * binary = NULL , * binSequence = NULL ;
int32_t strLen = 0 , seqLen = 0 , binLen = 0 , binSeqLen = 0 ;
2003-10-17 23:58:52 +00:00
char buffer [ 100 ] ;
char * s ;
2002-06-24 20:58:56 +00:00
testdatapath = loadTestData ( & status ) ;
if ( U_FAILURE ( status ) )
{
log_err ( " Could not load testdata.dat %s \n " , myErrorName ( status ) ) ;
return ;
}
aliasB = ures_open ( testdatapath , " testaliases " , & status ) ;
/* this should fail - circular alias */
tb = ures_getByKey ( aliasB , " aaa " , tb , & status ) ;
if ( status ! = U_TOO_MANY_ALIASES_ERROR ) {
log_err ( " Failed to detect circular alias \n " ) ;
} else {
status = U_ZERO_ERROR ;
}
tb = ures_getByKey ( aliasB , " aab " , tb , & status ) ;
if ( status ! = U_TOO_MANY_ALIASES_ERROR ) {
log_err ( " Failed to detect circular alias \n " ) ;
} else {
status = U_ZERO_ERROR ;
}
2002-09-18 01:59:06 +00:00
if ( U_FAILURE ( status ) ) {
2002-09-17 19:45:50 +00:00
log_data_err ( " err loading tb resource \n " ) ;
} else {
/* testing aliasing to a non existing resource */
tb = ures_getByKey ( aliasB , " nonexisting " , tb , & status ) ;
if ( status ! = U_MISSING_RESOURCE_ERROR ) {
log_err ( " Managed to find an alias to non-existing resource \n " ) ;
} else {
status = U_ZERO_ERROR ;
}
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
/* testing referencing/composed alias */
2003-11-11 21:41:47 +00:00
uk = ures_findResource ( " uk/collations/standard/Sequence " , uk , & status ) ;
2002-09-17 19:45:50 +00:00
if ( ( uk = = NULL ) | | U_FAILURE ( status ) ) {
2003-11-11 21:41:47 +00:00
log_err ( " Couldn't findResource('uk/collations/standard/sequence') err %s \n " , u_errorName ( status ) ) ;
2002-09-17 19:45:50 +00:00
return ;
}
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
sequence = ures_getString ( uk , & seqLen , & status ) ;
tb = ures_getByKey ( aliasB , " referencingalias " , tb , & status ) ;
string = ures_getString ( tb , & strLen , & status ) ;
if ( seqLen ! = strLen | | u_strncmp ( sequence , string , seqLen ) ! = 0 ) {
2003-04-23 06:59:50 +00:00
log_err ( " Referencing alias didn't get the right string \n " ) ;
}
string = ures_getStringByKey ( aliasB , " referencingalias " , & strLen , & status ) ;
if ( seqLen ! = strLen | | u_strncmp ( sequence , string , seqLen ) ! = 0 ) {
2002-09-17 19:45:50 +00:00
log_err ( " Referencing alias didn't get the right string \n " ) ;
}
2002-06-24 20:58:56 +00:00
2003-11-11 21:41:47 +00:00
tb = ures_getByKey ( aliasB , " collations " , tb , & status ) ;
tb = ures_getByKey ( tb , " standard " , tb , & status ) ;
2002-09-17 19:45:50 +00:00
tb = ures_getByKey ( tb , " Sequence " , tb , & status ) ;
string = ures_getString ( tb , & strLen , & status ) ;
if ( seqLen ! = strLen | | u_strncmp ( sequence , string , seqLen ) ! = 0 ) {
log_err ( " Referencing alias didn't get the right string \n " ) ;
}
2002-06-24 20:58:56 +00:00
2002-10-01 18:47:36 +00:00
# if !UCONFIG_NO_COLLATION
/*
* TODO for Vladimir : Make this test independent of UCONFIG_NO_xyz - switchable
* modules like collation , so that it can be tested even when collation
* data is not included in resource bundles .
*/
2002-09-17 19:45:50 +00:00
/* check whether the binary collation data is properly referenced by an alias */
2003-11-11 21:41:47 +00:00
uk = ures_findResource ( " uk/collations/standard/%%CollationBin " , uk , & status ) ;
2002-09-17 19:45:50 +00:00
binSequence = ures_getBinary ( uk , & binSeqLen , & status ) ;
2002-06-24 20:58:56 +00:00
2003-11-11 21:41:47 +00:00
tb = ures_getByKey ( aliasB , " collations " , tb , & status ) ;
tb = ures_getByKey ( tb , " standard " , tb , & status ) ;
2002-09-17 19:45:50 +00:00
tb = ures_getByKey ( tb , " %%CollationBin " , tb , & status ) ;
binary = ures_getBinary ( tb , & binLen , & status ) ;
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
if ( binSeqLen ! = binLen | | uprv_memcmp ( binSequence , binary , binSeqLen ) ! = 0 ) {
log_err ( " Referencing alias didn't get the right string \n " ) ;
}
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
/* simple alias */
testtypes = ures_open ( testdatapath , " testtypes " , & status ) ;
2003-10-17 23:58:52 +00:00
strcpy ( buffer , " menu/file/open " ) ;
s = buffer ;
uk = ures_findSubResource ( testtypes , s , uk , & status ) ;
2002-09-17 19:45:50 +00:00
sequence = ures_getString ( uk , & seqLen , & status ) ;
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
tb = ures_getByKey ( aliasB , " simplealias " , tb , & status ) ;
string = ures_getString ( tb , & strLen , & status ) ;
2002-06-24 20:58:56 +00:00
2002-10-01 18:47:36 +00:00
if ( U_FAILURE ( status ) | | seqLen ! = strLen | | u_strncmp ( sequence , string , seqLen ) ! = 0 ) {
2002-09-17 19:45:50 +00:00
log_err ( " Referencing alias didn't get the right string \n " ) ;
}
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
/* test indexed aliasing */
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
tb = ures_getByKey ( aliasB , " zoneTests " , tb , & status ) ;
tb = ures_getByKey ( tb , " zoneAlias2 " , tb , & status ) ;
string = ures_getString ( tb , & strLen , & status ) ;
2002-06-24 20:58:56 +00:00
2002-09-17 19:45:50 +00:00
en = ures_findResource ( " en/zoneStrings/3/0 " , en , & status ) ;
sequence = ures_getString ( en , & seqLen , & status ) ;
2002-06-24 20:58:56 +00:00
2002-10-01 18:47:36 +00:00
if ( U_FAILURE ( status ) | | seqLen ! = strLen | | u_strncmp ( sequence , string , seqLen ) ! = 0 ) {
2002-09-17 19:45:50 +00:00
log_err ( " Referencing alias didn't get the right string \n " ) ;
}
2002-10-01 18:47:36 +00:00
# endif
2002-06-24 20:58:56 +00:00
}
2003-05-12 18:24:01 +00:00
/* test getting aliased string by index */
{
const char * keys [ ] = {
" KeyAlias0PST " ,
" KeyAlias1PacificStandardTime " ,
" KeyAlias2PDT " ,
" KeyAlias3LosAngeles "
} ;
const char * strings [ ] = {
" PST " ,
" Pacific Standard Time " ,
" PDT " ,
" Los Angeles " ,
} ;
UChar buffer [ 256 ] ;
const UChar * result ;
int32_t bufferLen = 0 , resultLen = 0 ;
int32_t i = 0 ;
const char * key = NULL ;
tb = ures_getByKey ( aliasB , " testGetStringByKeyAliasing " , tb , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't get testGetStringByKeyAliasing resource \n " ) ;
}
for ( i = 0 ; i < sizeof ( strings ) / sizeof ( strings [ 0 ] ) ; i + + ) {
result = ures_getStringByKey ( tb , keys [ i ] , & resultLen , & status ) ;
bufferLen = u_unescape ( strings [ i ] , buffer , 256 ) ;
if ( resultLen ! = bufferLen | | u_strncmp ( result , buffer , resultLen ) ! = 0 ) {
log_err ( " Didn't get correct string while accesing alias table by key \n " ) ;
}
}
for ( i = 0 ; i < sizeof ( strings ) / sizeof ( strings [ 0 ] ) ; i + + ) {
result = ures_getStringByIndex ( tb , i , & resultLen , & status ) ;
bufferLen = u_unescape ( strings [ i ] , buffer , 256 ) ;
if ( resultLen ! = bufferLen | | u_strncmp ( result , buffer , resultLen ) ! = 0 ) {
log_err ( " Didn't get correct string while accesing alias table by index \n " ) ;
}
}
for ( i = 0 ; i < sizeof ( strings ) / sizeof ( strings [ 0 ] ) ; i + + ) {
result = ures_getNextString ( tb , & resultLen , & key , & status ) ;
bufferLen = u_unescape ( strings [ i ] , buffer , 256 ) ;
if ( resultLen ! = bufferLen | | u_strncmp ( result , buffer , resultLen ) ! = 0 ) {
log_err ( " Didn't get correct string while iterating over alias table \n " ) ;
}
}
tb = ures_getByKey ( aliasB , " testGetStringByIndexAliasing " , tb , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't get testGetStringByIndexAliasing resource \n " ) ;
}
for ( i = 0 ; i < sizeof ( strings ) / sizeof ( strings [ 0 ] ) ; i + + ) {
result = ures_getStringByIndex ( tb , i , & resultLen , & status ) ;
bufferLen = u_unescape ( strings [ i ] , buffer , 256 ) ;
if ( resultLen ! = bufferLen | | u_strncmp ( result , buffer , resultLen ) ! = 0 ) {
log_err ( " Didn't get correct string while accesing alias by index in an array \n " ) ;
}
}
for ( i = 0 ; i < sizeof ( strings ) / sizeof ( strings [ 0 ] ) ; i + + ) {
result = ures_getNextString ( tb , & resultLen , & key , & status ) ;
bufferLen = u_unescape ( strings [ i ] , buffer , 256 ) ;
if ( resultLen ! = bufferLen | | u_strncmp ( result , buffer , resultLen ) ! = 0 ) {
log_err ( " Didn't get correct string while iterating over aliases in an array \n " ) ;
}
}
}
2002-06-24 20:58:56 +00:00
ures_close ( aliasB ) ;
ures_close ( tb ) ;
ures_close ( en ) ;
ures_close ( uk ) ;
ures_close ( testtypes ) ;
}
2000-05-15 18:39:17 +00:00
2002-06-24 20:58:56 +00:00
static void TestDirectAccess ( void ) {
UErrorCode status = U_ZERO_ERROR ;
UResourceBundle * t = NULL , * t2 = NULL ;
2002-07-30 20:49:30 +00:00
const char * key = NULL ;
2000-05-15 18:39:17 +00:00
2003-10-17 23:58:52 +00:00
char buffer [ 100 ] ;
char * s ;
2002-06-24 20:58:56 +00:00
t = ures_findResource ( " en/zoneStrings/3/2 " , t , & status ) ;
2002-07-29 23:01:44 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't access indexed resource, error %s \n " , u_errorName ( status ) ) ;
status = U_ZERO_ERROR ;
2002-07-30 20:49:30 +00:00
} else {
key = ures_getKey ( t ) ;
if ( key ! = NULL ) {
log_err ( " Got a strange key, expected NULL, got %s \n " , key ) ;
}
2002-07-29 23:01:44 +00:00
}
t = ures_findResource ( " en/zoneStrings/3 " , t , & status ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't access indexed resource, error %s \n " , u_errorName ( status ) ) ;
status = U_ZERO_ERROR ;
2002-07-30 20:49:30 +00:00
} else {
key = ures_getKey ( t ) ;
if ( key ! = NULL ) {
log_err ( " Got a strange key, expected NULL, got %s \n " , key ) ;
}
2002-07-29 23:01:44 +00:00
}
2003-11-11 21:41:47 +00:00
t = ures_findResource ( " sh/collations/standard/Sequence " , t , & status ) ;
2002-07-29 23:01:44 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't access keyed resource, error %s \n " , u_errorName ( status ) ) ;
status = U_ZERO_ERROR ;
2002-07-30 20:49:30 +00:00
} else {
key = ures_getKey ( t ) ;
if ( strcmp ( key , " Sequence " ) ! = 0 ) {
log_err ( " Got a strange key, expected 'Sequence', got %s \n " , key ) ;
}
2002-07-29 23:01:44 +00:00
}
2002-06-24 20:58:56 +00:00
t2 = ures_open ( NULL , " sh " , & status ) ;
2002-07-29 23:01:44 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't open 'sh' resource bundle, error %s \n " , u_errorName ( status ) ) ;
2003-06-04 05:19:50 +00:00
log_data_err ( " No 'sh', no test - you have bigger problems than testing direct access. You probably have no data! Aborting this test \n " ) ;
2002-07-29 23:01:44 +00:00
}
2003-06-04 05:19:50 +00:00
if ( U_SUCCESS ( status ) ) {
2003-11-11 21:41:47 +00:00
strcpy ( buffer , " collations/standard/Sequence " ) ;
2003-10-17 23:58:52 +00:00
s = buffer ;
t = ures_findSubResource ( t2 , s , t , & status ) ;
2003-06-04 05:19:50 +00:00
if ( U_FAILURE ( status ) ) {
log_err ( " Couldn't access keyed resource, error %s \n " , u_errorName ( status ) ) ;
status = U_ZERO_ERROR ;
} else {
key = ures_getKey ( t ) ;
if ( strcmp ( key , " Sequence " ) ! = 0 ) {
log_err ( " Got a strange key, expected 'Sequence', got %s \n " , key ) ;
}
2002-07-30 20:49:30 +00:00
}
2002-07-29 23:01:44 +00:00
}
ures_close ( t ) ;
ures_close ( t2 ) ;
2002-07-09 22:41:04 +00:00
}