1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * COPYRIGHT: 327f654740f2a26ad62a5c155af9199af9e69b889claireho * Copyright (c) 1997-2010, International Business Machines Corporation and 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucnv.h" 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ucnv_err.h" 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cintltst.h" 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "ustr_cnv.h" 1227f654740f2a26ad62a5c155af9199af9e69b889claireho#include <string.h> 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestDefaultConverterError(void); /* keep gcc happy */ 1427f654740f2a26ad62a5c155af9199af9e69b889clairehovoid TestDefaultConverterSet(void); /* keep gcc happy */ 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* This makes sure that a converter isn't leaked when an error is passed to 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru u_getDefaultConverter */ 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TestDefaultConverterError(void) { 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode err = U_ZERO_ERROR; 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Remove the default converter */ 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ucnv_close(u_getDefaultConverter(&err)); 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (U_FAILURE(err)) { 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("Didn't expect a failure yet %s\n", myErrorName(err)); 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* Set to any radom error state */ 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru err = U_FILE_ACCESS_ERROR; 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (u_getDefaultConverter(&err) != NULL) { 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("Didn't expect to get a converter on a failure\n"); 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 3727f654740f2a26ad62a5c155af9199af9e69b889claireho/* Get the default converter. Copy its name. Put it back. */ 3827f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void copyDefaultConverterName(char *out, UErrorCode *status) { 3927f654740f2a26ad62a5c155af9199af9e69b889claireho UConverter *defConv; 4027f654740f2a26ad62a5c155af9199af9e69b889claireho const char *itsName; 4127f654740f2a26ad62a5c155af9199af9e69b889claireho out[0]=0; 4227f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(*status)) return; 4327f654740f2a26ad62a5c155af9199af9e69b889claireho defConv = u_getDefaultConverter(status); 4427f654740f2a26ad62a5c155af9199af9e69b889claireho /* get its name */ 4527f654740f2a26ad62a5c155af9199af9e69b889claireho itsName = ucnv_getName(defConv, status); 4627f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(*status)) return; 4727f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(out, itsName); 4827f654740f2a26ad62a5c155af9199af9e69b889claireho /* put it back. */ 4927f654740f2a26ad62a5c155af9199af9e69b889claireho u_releaseDefaultConverter(defConv); 5027f654740f2a26ad62a5c155af9199af9e69b889claireho} 5127f654740f2a26ad62a5c155af9199af9e69b889claireho 5227f654740f2a26ad62a5c155af9199af9e69b889claireho/* 5327f654740f2a26ad62a5c155af9199af9e69b889claireho Changing the default name may not affect the actual name from u_getDefaultConverter 5427f654740f2a26ad62a5c155af9199af9e69b889claireho ( for example, if UTF-8 is the fixed converter ). 5527f654740f2a26ad62a5c155af9199af9e69b889claireho But, if it does cause a change, that change should be reflected when the converter is 5627f654740f2a26ad62a5c155af9199af9e69b889claireho set back. 5727f654740f2a26ad62a5c155af9199af9e69b889claireho*/ 5827f654740f2a26ad62a5c155af9199af9e69b889clairehovoid TestDefaultConverterSet(void) { 5927f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode status = U_ZERO_ERROR; 6027f654740f2a26ad62a5c155af9199af9e69b889claireho static char defaultName[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; 6127f654740f2a26ad62a5c155af9199af9e69b889claireho static char nameBeforeSet[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; 6227f654740f2a26ad62a5c155af9199af9e69b889claireho static char nameAfterSet[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; 6327f654740f2a26ad62a5c155af9199af9e69b889claireho static char nameAfterRestore[UCNV_MAX_CONVERTER_NAME_LENGTH + 1]; 6427f654740f2a26ad62a5c155af9199af9e69b889claireho static const char SET_TO[]="iso-8859-3"; 6527f654740f2a26ad62a5c155af9199af9e69b889claireho strcpy(defaultName, ucnv_getDefaultName()); 6627f654740f2a26ad62a5c155af9199af9e69b889claireho 6727f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("getDefaultName returned %s\n", defaultName); 6827f654740f2a26ad62a5c155af9199af9e69b889claireho 6927f654740f2a26ad62a5c155af9199af9e69b889claireho /* first, flush any extant converter */ 7027f654740f2a26ad62a5c155af9199af9e69b889claireho u_flushDefaultConverter(); 7127f654740f2a26ad62a5c155af9199af9e69b889claireho copyDefaultConverterName(nameBeforeSet, &status); 7227f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("name from u_getDefaultConverter() = %s\n", nameBeforeSet); 7327f654740f2a26ad62a5c155af9199af9e69b889claireho u_flushDefaultConverter(); 7427f654740f2a26ad62a5c155af9199af9e69b889claireho ucnv_setDefaultName(SET_TO); 7527f654740f2a26ad62a5c155af9199af9e69b889claireho copyDefaultConverterName(nameAfterSet, &status); 7627f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("name from u_getDefaultConverter() after set to %s (%s) = %s\n", SET_TO, ucnv_getDefaultName(), nameAfterSet); 7727f654740f2a26ad62a5c155af9199af9e69b889claireho ucnv_setDefaultName(defaultName); 7827f654740f2a26ad62a5c155af9199af9e69b889claireho copyDefaultConverterName(nameAfterRestore, &status); 7927f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("name from u_getDefaultConverter() after restore = %s\n", nameAfterRestore); 8027f654740f2a26ad62a5c155af9199af9e69b889claireho u_flushDefaultConverter(); 8127f654740f2a26ad62a5c155af9199af9e69b889claireho 8227f654740f2a26ad62a5c155af9199af9e69b889claireho if(U_FAILURE(status)) { 8327f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("Error in test: %s\n", u_errorName(status)); 8427f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 8527f654740f2a26ad62a5c155af9199af9e69b889claireho if(!strcmp(nameBeforeSet, nameAfterSet)) { /* changing the default didn't affect. */ 8627f654740f2a26ad62a5c155af9199af9e69b889claireho log_info("Skipping test: ucnv_setDefaultName() did not affect actual name of %s\n", nameBeforeSet); 8727f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 8827f654740f2a26ad62a5c155af9199af9e69b889claireho if(strcmp(nameBeforeSet, nameAfterRestore)) { 8927f654740f2a26ad62a5c155af9199af9e69b889claireho 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); 9027f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 9127f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Test passed. \n"); 9227f654740f2a26ad62a5c155af9199af9e69b889claireho } 9327f654740f2a26ad62a5c155af9199af9e69b889claireho } 9427f654740f2a26ad62a5c155af9199af9e69b889claireho } 9527f654740f2a26ad62a5c155af9199af9e69b889claireho} 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 98