1 // 2 //******************************************************************** 3 // Copyright (C) 2002-2003, International Business Machines 4 // Corporation and others. All Rights Reserved. 5 //******************************************************************** 6 // 7 // File converttest.cpp 8 // 9 10 #include "threadtest.h" 11 #include "unicode/utypes.h" 12 #include "unicode/ucnv.h" 13 #include "unicode/uclean.h" 14 #include "stdio.h" 15 16 U_CAPI UBool U_EXPORT2 ucnv_cleanup(); 17 18 class ConvertThreadTest: public AbstractThreadTest { 19 public: 20 ConvertThreadTest(); 21 virtual ~ConvertThreadTest(); 22 virtual void check(); 23 virtual void runOnce(); 24 25 private: 26 UConverter *fCnv; 27 }; 28 29 30 ConvertThreadTest::ConvertThreadTest() { 31 UErrorCode err = U_ZERO_ERROR; 32 33 fCnv = ucnv_open("gb18030", &err); 34 if (U_FAILURE(err)) { 35 fprintf(stderr, "ConvertTest - could not ucnv_open(\"gb18030\")\n"); 36 fCnv = NULL; 37 } 38 }; 39 40 41 ConvertThreadTest::~ConvertThreadTest() { 42 ucnv_close(fCnv); 43 fCnv = 0; 44 } 45 46 void ConvertThreadTest::runOnce() { 47 UErrorCode err = U_ZERO_ERROR; 48 UConverter *cnv1; 49 UConverter *cnv2; 50 char buf[U_CNV_SAFECLONE_BUFFERSIZE]; 51 int32_t bufSize = U_CNV_SAFECLONE_BUFFERSIZE; 52 53 cnv1 = ucnv_open("shift_jis", &err); 54 if (U_FAILURE(err)) { 55 fprintf(stderr, "ucnv_open(\"shift_jis\") failed.\n"); 56 } 57 58 cnv2 = ucnv_safeClone(fCnv, // The source converter, common to all threads. 59 buf, 60 &bufSize, 61 &err); 62 if (U_FAILURE(err)) { 63 fprintf(stderr, "ucnv_safeClone() failed.\n"); 64 } 65 ucnv_close(cnv1); 66 ucnv_close(cnv2); 67 ucnv_flushCache(); 68 } 69 70 void ConvertThreadTest::check() { 71 UErrorCode err = U_ZERO_ERROR; 72 73 if (fCnv) {ucnv_close(fCnv);} 74 //if (ucnv_cleanup () == FALSE) { 75 // fprintf(stderr, "ucnv_cleanup() failed - cache was not empty.\n"); 76 //} 77 fCnv = ucnv_open("gb18030", &err); 78 if (U_FAILURE(err)) { 79 fprintf(stderr, "ConvertTest::check() - could not redo ucnv_open(\"gb18030\")\n"); 80 fCnv = NULL; 81 } 82 } 83 84 85 AbstractThreadTest *createConvertTest() { 86 return new ConvertThreadTest(); 87 } 88 89