| 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
|
|
|
|
|