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 |