2003-05-15 16:28:58 +00:00
/********************************************************************
* COPYRIGHT :
2010-07-14 23:01:37 +00:00
* Copyright ( c ) 1997 - 2010 , International Business Machines Corporation and
2003-05-15 16:28:58 +00:00
* others . All Rights Reserved .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "unicode/ucnv.h"
# include "unicode/ucnv_err.h"
# include "cintltst.h"
2004-08-27 17:56:01 +00:00
# include "ustr_cnv.h"
2010-07-14 23:01:37 +00:00
# include <string.h>
2004-05-14 22:06:34 +00:00
void TestDefaultConverterError ( void ) ; /* keep gcc happy */
2010-07-14 23:01:37 +00:00
void TestDefaultConverterSet ( void ) ; /* keep gcc happy */
2003-05-15 16:28:58 +00:00
2004-05-14 22:06:34 +00:00
/* This makes sure that a converter isn't leaked when an error is passed to
u_getDefaultConverter */
void TestDefaultConverterError ( void ) {
2003-05-15 16:28:58 +00:00
UErrorCode err = U_ZERO_ERROR ;
2004-05-14 22:06:34 +00:00
/* Remove the default converter */
ucnv_close ( u_getDefaultConverter ( & err ) ) ;
2003-05-15 16:28:58 +00:00
if ( U_FAILURE ( err ) ) {
2004-05-14 22:06:34 +00:00
log_err ( " Didn't expect a failure yet %s \n " , myErrorName ( err ) ) ;
return ;
2003-05-15 16:28:58 +00:00
}
2004-05-14 22:06:34 +00:00
/* Set to any radom error state */
err = U_FILE_ACCESS_ERROR ;
if ( u_getDefaultConverter ( & err ) ! = NULL ) {
log_err ( " Didn't expect to get a converter on a failure \n " ) ;
2003-05-15 16:28:58 +00:00
}
2003-05-15 17:37:33 +00:00
}
2010-07-14 23:01:37 +00:00
/* Get the default converter. Copy its name. Put it back. */
static void copyDefaultConverterName ( char * out , UErrorCode * status ) {
UConverter * defConv ;
const char * itsName ;
out [ 0 ] = 0 ;
if ( U_FAILURE ( * status ) ) return ;
defConv = u_getDefaultConverter ( status ) ;
/* get its name */
itsName = ucnv_getName ( defConv , status ) ;
if ( U_FAILURE ( * status ) ) return ;
strcpy ( out , itsName ) ;
/* put it back. */
u_releaseDefaultConverter ( defConv ) ;
}
/*
Changing the default name may not affect the actual name from u_getDefaultConverter
( for example , if UTF - 8 is the fixed converter ) .
But , if it does cause a change , that change should be reflected when the converter is
set back .
*/
void TestDefaultConverterSet ( void ) {
UErrorCode status = U_ZERO_ERROR ;
static char defaultName [ UCNV_MAX_CONVERTER_NAME_LENGTH + 1 ] ;
static char nameBeforeSet [ UCNV_MAX_CONVERTER_NAME_LENGTH + 1 ] ;
static char nameAfterSet [ UCNV_MAX_CONVERTER_NAME_LENGTH + 1 ] ;
static char nameAfterRestore [ UCNV_MAX_CONVERTER_NAME_LENGTH + 1 ] ;
static const char SET_TO [ ] = " iso-8859-3 " ;
strcpy ( defaultName , ucnv_getDefaultName ( ) ) ;
log_verbose ( " getDefaultName returned %s \n " , defaultName ) ;
/* first, flush any extant converter */
u_flushDefaultConverter ( ) ;
copyDefaultConverterName ( nameBeforeSet , & status ) ;
log_verbose ( " name from u_getDefaultConverter() = %s \n " , nameBeforeSet ) ;
u_flushDefaultConverter ( ) ;
ucnv_setDefaultName ( SET_TO ) ;
copyDefaultConverterName ( nameAfterSet , & status ) ;
log_verbose ( " name from u_getDefaultConverter() after set to %s (%s) = %s \n " , SET_TO , ucnv_getDefaultName ( ) , nameAfterSet ) ;
ucnv_setDefaultName ( defaultName ) ;
copyDefaultConverterName ( nameAfterRestore , & status ) ;
log_verbose ( " name from u_getDefaultConverter() after restore = %s \n " , nameAfterRestore ) ;
u_flushDefaultConverter ( ) ;
if ( U_FAILURE ( status ) ) {
log_err ( " Error in test: %s \n " , u_errorName ( status ) ) ;
} else {
if ( ! strcmp ( nameBeforeSet , nameAfterSet ) ) { /* changing the default didn't affect. */
log_info ( " Skipping test: ucnv_setDefaultName() did not affect actual name of %s \n " , nameBeforeSet ) ;
} else {
if ( strcmp ( nameBeforeSet , nameAfterRestore ) ) {
log_err ( " Error: u_getDefaultConverter() is still returning %s (expected %s) even though default converter was set back to %s (was %s) \n " , nameAfterRestore , nameBeforeSet , defaultName , SET_TO ) ;
} else {
log_verbose ( " Test passed. \n " ) ;
}
}
}
}
2003-05-15 17:37:33 +00:00