diff options
Diffstat (limited to 'Build/source/libs/icu/icu-50.1/test/cintltst/cctest.c')
-rw-r--r-- | Build/source/libs/icu/icu-50.1/test/cintltst/cctest.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-50.1/test/cintltst/cctest.c b/Build/source/libs/icu/icu-50.1/test/cintltst/cctest.c new file mode 100644 index 00000000000..4f4db0e6838 --- /dev/null +++ b/Build/source/libs/icu/icu-50.1/test/cintltst/cctest.c @@ -0,0 +1,97 @@ +/******************************************************************** + * COPYRIGHT: + * Copyright (c) 1997-2010, International Business Machines Corporation and + * others. All Rights Reserved. + ********************************************************************/ + +#include "unicode/ucnv.h" +#include "unicode/ucnv_err.h" + +#include "cintltst.h" +#include "ustr_cnv.h" +#include <string.h> +void TestDefaultConverterError(void); /* keep gcc happy */ +void TestDefaultConverterSet(void); /* keep gcc happy */ + + +/* This makes sure that a converter isn't leaked when an error is passed to + u_getDefaultConverter */ +void TestDefaultConverterError(void) { + UErrorCode err = U_ZERO_ERROR; + + /* Remove the default converter */ + ucnv_close(u_getDefaultConverter(&err)); + + if (U_FAILURE(err)) { + log_err("Didn't expect a failure yet %s\n", myErrorName(err)); + return; + } + + /* 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"); + } +} + +/* 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"); + } + } + } +} + + |