| OLD | NEW |
| (Empty) |
| 1 /******************************************************************** | |
| 2 * COPYRIGHT: | |
| 3 * Copyright (c) 1997-2010, International Business Machines Corporation and | |
| 4 * others. All Rights Reserved. | |
| 5 ********************************************************************/ | |
| 6 | |
| 7 #include "unicode/ucnv.h" | |
| 8 #include "unicode/ucnv_err.h" | |
| 9 | |
| 10 #include "cintltst.h" | |
| 11 #include "ustr_cnv.h" | |
| 12 #include <string.h> | |
| 13 void TestDefaultConverterError(void); /* keep gcc happy */ | |
| 14 void TestDefaultConverterSet(void); /* keep gcc happy */ | |
| 15 | |
| 16 | |
| 17 /* This makes sure that a converter isn't leaked when an error is passed to | |
| 18 u_getDefaultConverter */ | |
| 19 void TestDefaultConverterError(void) { | |
| 20 UErrorCode err = U_ZERO_ERROR; | |
| 21 | |
| 22 /* Remove the default converter */ | |
| 23 ucnv_close(u_getDefaultConverter(&err)); | |
| 24 | |
| 25 if (U_FAILURE(err)) { | |
| 26 log_err("Didn't expect a failure yet %s\n", myErrorName(err)); | |
| 27 return; | |
| 28 } | |
| 29 | |
| 30 /* Set to any radom error state */ | |
| 31 err = U_FILE_ACCESS_ERROR; | |
| 32 if (u_getDefaultConverter(&err) != NULL) { | |
| 33 log_err("Didn't expect to get a converter on a failure\n"); | |
| 34 } | |
| 35 } | |
| 36 | |
| 37 /* Get the default converter. Copy its name. Put it back. */ | |
| 38 static void copyDefaultConverterName(char *out, UErrorCode *status) { | |
| 39 UConverter *defConv; | |
| 40 const char *itsName; | |
| 41 out[0]=0; | |
| 42 if(U_FAILURE(*status)) return; | |
| 43 defConv = u_getDefaultConverter(status); | |
| 44 /* get its name */ | |
| 45 itsName = ucnv_getName(defConv, status); | |
| 46 if(U_FAILURE(*status)) return; | |
| 47 strcpy(out, itsName); | |
| 48 /* put it back. */ | |
| 49 u_releaseDefaultConverter(defConv); | |
| 50 } | |
| 51 | |
| 52 /* | |
| 53 Changing the default name may not affect the actual name from u_getDefaultConv
erter | |
| 54 ( for example, if UTF-8 is the fixed converter ). | |
| 55 But, if it does cause a change, that change should be reflected when the conve
rter is | |
| 56 set back. | |
| 57 */ | |
| 58 void TestDefaultConverterSet(void) { | |
| 59 UErrorCode status = U_ZERO_ERROR; | |
| 60 static char defaultName[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; | |
| 61 static char nameBeforeSet[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; | |
| 62 static char nameAfterSet[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; | |
| 63 static char nameAfterRestore[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; | |
| 64 static const char SET_TO[]="iso-8859-3"; | |
| 65 strcpy(defaultName, ucnv_getDefaultName()); | |
| 66 | |
| 67 log_verbose("getDefaultName returned %s\n", defaultName); | |
| 68 | |
| 69 /* first, flush any extant converter */ | |
| 70 u_flushDefaultConverter(); | |
| 71 copyDefaultConverterName(nameBeforeSet, &status); | |
| 72 log_verbose("name from u_getDefaultConverter() = %s\n", nameBeforeSet); | |
| 73 u_flushDefaultConverter(); | |
| 74 ucnv_setDefaultName(SET_TO); | |
| 75 copyDefaultConverterName(nameAfterSet, &status); | |
| 76 log_verbose("name from u_getDefaultConverter() after set to %s (%s) = %s\n",
SET_TO, ucnv_getDefaultName(), nameAfterSet); | |
| 77 ucnv_setDefaultName(defaultName); | |
| 78 copyDefaultConverterName(nameAfterRestore, &status); | |
| 79 log_verbose("name from u_getDefaultConverter() after restore = %s\n", nameAft
erRestore); | |
| 80 u_flushDefaultConverter(); | |
| 81 | |
| 82 if(U_FAILURE(status)) { | |
| 83 log_err("Error in test: %s\n", u_errorName(status)); | |
| 84 } else { | |
| 85 if(!strcmp(nameBeforeSet, nameAfterSet)) { /* changing the default didn't
affect. */ | |
| 86 log_info("Skipping test: ucnv_setDefaultName() did not affect actual n
ame of %s\n", nameBeforeSet); | |
| 87 } else { | |
| 88 if(strcmp(nameBeforeSet, nameAfterRestore)) { | |
| 89 log_err("Error: u_getDefaultConverter() is still returning %s (ex
pected %s) even though default converter was set back to %s (was %s)\n", nameAft
erRestore, nameBeforeSet, defaultName , SET_TO); | |
| 90 } else { | |
| 91 log_verbose("Test passed. \n"); | |
| 92 } | |
| 93 } | |
| 94 } | |
| 95 } | |
| 96 | |
| 97 | |
| OLD | NEW |