Home | History | Annotate | Download | only in threadtest
      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