Index: icu46/source/test/cintltst/cctest.c |
=================================================================== |
--- icu46/source/test/cintltst/cctest.c (revision 0) |
+++ icu46/source/test/cintltst/cctest.c (revision 0) |
@@ -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"); |
+ } |
+ } |
+ } |
+} |
+ |
+ |
Property changes on: icu46/source/test/cintltst/cctest.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |