/* ***************************************************************************************** * * * COPYRIGHT: * * (C) Copyright Taligent, Inc., 1996 * * (C) Copyright International Business Machines Corporation, 1999 * * Licensed Material - Program-Property of IBM - All Rights Reserved. * * US Government Users Restricted Rights - Use, duplication, or disclosure * * restricted by GSA ADP Schedule Contract with IBM Corp. * * * ***************************************************************************************** ******************************************************************************** * * File NCCBTST.C * * Modification History: * Name Description * Madhu Katragadda 7/21/1999 Testing error callback routines ************************************************************************************** */ #include #include #include #include #include "uloc.h" #include "ucnv.h" #include "ucnv_err.h" #include "cintltst.h" #include "utypes.h" #include "ustring.h" #include "nccbtst.h" #define NEW_MAX_BUFFER 999 #define nct_min(x,y) ((x ibm-949 with skip did not match.\n"); if(!testConvertFromUnicode(sampleText2, sizeof(sampleText2)/sizeof(sampleText2[0]), expskipIBM_943, sizeof(expskipIBM_943), "ibm-943", (UCNV_FromUCallBack)MissingUnicodeAction_SKIP, toIBM943Offsskip )) log_err("u-> ibm-943 with skip did not match.\n"); if(!testConvertFromUnicode(sampleText2, sizeof(sampleText2)/sizeof(sampleText2[0]), expskipIBM_930, sizeof(expskipIBM_930), "ibm-930", (UCNV_FromUCallBack)MissingUnicodeAction_SKIP, toIBM930Offsskip )) log_err("u-> ibm-930 with skip did not match.\n"); /*to Unicode*/ if(!testConvertToUnicode(expskipIBM_949, sizeof(expskipIBM_949), IBM_949skiptoUnicode, sizeof(IBM_949skiptoUnicode)/sizeof(IBM_949skiptoUnicode),"ibm-949", (UCNV_ToUCallBack)MissingCharAction_SKIP, fromIBM949Offs )) log_err("ibm-949->u with skip did not match.\n"); if(!testConvertToUnicode(expskipIBM_943, sizeof(expskipIBM_943), IBM_943skiptoUnicode, sizeof(IBM_943skiptoUnicode)/sizeof(IBM_943skiptoUnicode[0]),"ibm-943", (UCNV_ToUCallBack)MissingCharAction_SKIP, fromIBM943Offs )) log_err("ibm-943->u with skip did not match.\n"); if(!testConvertToUnicode(expskipIBM_930, sizeof(expskipIBM_930), IBM_930skiptoUnicode, sizeof(IBM_930skiptoUnicode)/sizeof(IBM_930skiptoUnicode[0]),"ibm-930", (UCNV_ToUCallBack)MissingCharAction_SKIP, fromIBM930Offs )) log_err("ibm-930->u with skip did not match.\n"); } void TestSub(int32_t inputsize, int32_t outputsize) { UChar sampleText[] = { 0x0000, 0xAC00, 0xAC01, 0xEF67, 0xD700 }; UChar sampleText2[]= { 0x6D63, 0x6D64, 0x6D65, 0x6D66 }; const char expsubIBM_949[] = { (char)0x00, (char)0xb0, (char)0xa1, (char)0xb0, (char)0xa2, (char)0xaf, (char)0xfe, (char)0xc8, (char)0xd3 }; const char expsubIBM_943[] = { (char)0x9f, (char)0xaf, (char)0x9f, (char)0xb1, (char)0xfc, (char)0xfc, (char)0x89, (char)0x59 }; const char expsubIBM_930[] = { (char)0x0e, (char)0x5d, (char)0x5f, (char)0x5d, (char)0x63, (char)0xfe, (char)0xfe, (char)0x46, (char)0x6b }; UChar IBM_949subtoUnicode[]= {0x0000, 0xAC00, 0xAC01, 0xfffd, 0xD700 }; UChar IBM_943subtoUnicode[]= {0x6D63, 0x6D64, 0xfffd, 0x6D66 }; UChar IBM_930subtoUnicode[]= {0x6D63, 0x6D64, 0xfffd, 0x6D66 }; int32_t toIBM949Offssub [] ={ 0, 1, 1, 2, 2, 3, 3, 4, 4}; int32_t toIBM943Offssub [] ={ 0, 0, 1, 1, 2, 2, 3, 3}; int32_t toIBM930Offssub [] ={ 0, 0, 0, 1, 1, 2, 2, 3, 3}; int32_t fromIBM949Offs [] = { 0, 1, 3, 5, 7}; int32_t fromIBM943Offs [] = { 0, 2, 4, 6}; int32_t fromIBM930Offs [] = { 1, 3, 5, 7}; gInBufferSize = inputsize; gOutBufferSize = outputsize; /*from unicode*/ if(!testConvertFromUnicode(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expsubIBM_949, sizeof(expsubIBM_949), "ibm-949", (UCNV_FromUCallBack)MissingUnicodeAction_SUBSTITUTE, toIBM949Offssub )) log_err("u-> ibm-949 with subst did not match.\n"); if(!testConvertFromUnicode(sampleText2, sizeof(sampleText2)/sizeof(sampleText2[0]), expsubIBM_943, sizeof(expsubIBM_943), "ibm-943", (UCNV_FromUCallBack)MissingUnicodeAction_SUBSTITUTE, toIBM943Offssub )) log_err("u-> ibm-943 with subst did not match.\n"); if(!testConvertFromUnicode(sampleText2, sizeof(sampleText2)/sizeof(sampleText2[0]), expsubIBM_930, sizeof(expsubIBM_930), "ibm-930", (UCNV_FromUCallBack)MissingUnicodeAction_SUBSTITUTE, toIBM930Offssub )) log_err("u-> ibm-930 with subst did not match.\n"); /*to unicode*/ if(!testConvertToUnicode(expsubIBM_949, sizeof(expsubIBM_949), IBM_949subtoUnicode, sizeof(IBM_949subtoUnicode)/sizeof(IBM_949subtoUnicode[0]),"ibm-949", (UCNV_ToUCallBack)MissingCharAction_SUBSTITUTE, fromIBM949Offs )) log_err("ibm-949->u with substitute did not match.\n"); if(!testConvertToUnicode(expsubIBM_943, sizeof(expsubIBM_943), IBM_943subtoUnicode, sizeof(IBM_943subtoUnicode)/sizeof(IBM_943subtoUnicode[0]),"ibm-943", (UCNV_ToUCallBack)MissingCharAction_SUBSTITUTE, fromIBM943Offs )) log_err("ibm-943->u with substitute did not match.\n"); if(!testConvertToUnicode(expsubIBM_930, sizeof(expsubIBM_930), IBM_930subtoUnicode, sizeof(IBM_930subtoUnicode)/sizeof(IBM_930subtoUnicode[0]),"ibm-930", (UCNV_ToUCallBack)MissingCharAction_SUBSTITUTE, fromIBM930Offs )) log_err("ibm-930->u with substitute did not match.\n"); } void TestSubWithValue(int32_t inputsize, int32_t outputsize) { UChar sampleText[] = { 0x0000, 0xAC00, 0xAC01, 0xEF67, 0xD700 }; UChar sampleText2[] = { 0x6D63, 0x6D64, 0x6D65, 0x6D66 }; const char sampleTxtToU[]= { (char)0x00, (char)0x9f, (char)0xaf, (char)0xff, (char)0x89, (char)0xd3 }; UChar IBM_943toUnicode[] = { 0x0000, 0x6D63, '%', 'X', 'F', 'F', 0x6D66}; int32_t fromIBM943Offs [] = { 0, 1, 3, 3, 3, 3, 4}; const char expsubwvalIBM_949[]= { (char)0x00, (char)0xb0, (char)0xa1, (char)0xb0, (char)0xa2, '%', 'U', 'E', 'F', '6', '7', (char)0xc8, (char)0xd3 }; const char expsubwvalIBM_943[]= { (char)0x9f, (char)0xaf, (char)0x9f, (char)0xb1, '%', 'U', '6', 'D', '6', '5', (char)0x89, (char)0x59 }; const char expsubwvalIBM_930[] = { (char)0x0e, (char)0x5d, (char)0x5f, (char)0x5d, (char)0x63, (char)0x0f, (char)0x6c, (char)0xe4, (char)0xf6, (char)0xc4, (char)0xf6, (char)0xf5, (char)0x46, (char)0x6b }; int32_t toIBM949Offs [] ={ 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4}; int32_t toIBM943Offs [] = { 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3}; int32_t toIBM930Offs [] = { 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3}; gInBufferSize = inputsize; gOutBufferSize = outputsize; /*from Unicode*/ if(!testConvertFromUnicode(sampleText, sizeof(sampleText)/sizeof(sampleText[0]), expsubwvalIBM_949, sizeof(expsubwvalIBM_949), "ibm-949", (UCNV_FromUCallBack)MissingUnicodeAction_SUBSTITUTEwithValue, toIBM949Offs )) log_err("u-> ibm-949 with subst with value did not match.\n"); if(!testConvertFromUnicode(sampleText2, sizeof(sampleText2)/sizeof(sampleText2[0]), expsubwvalIBM_943, sizeof(expsubwvalIBM_943), "ibm-943", (UCNV_FromUCallBack)MissingUnicodeAction_SUBSTITUTEwithValue, toIBM943Offs )) log_err("u-> ibm-943 with sub with value did not match.\n"); if(!testConvertFromUnicode(sampleText2, sizeof(sampleText2)/sizeof(sampleText2[0]), expsubwvalIBM_930, sizeof(expsubwvalIBM_930), "ibm-930", (UCNV_FromUCallBack)MissingUnicodeAction_SUBSTITUTEwithValue, toIBM930Offs )) log_err("u-> ibm-930 with subst with value did not match.\n"); /*to Unicode*/ if(!testConvertToUnicode(sampleTxtToU, sizeof(sampleTxtToU), IBM_943toUnicode, sizeof(IBM_943toUnicode)/sizeof(IBM_943toUnicode),"ibm-943", (UCNV_ToUCallBack)MissingCharAction_SUBSTITUTEwithValue, fromIBM943Offs )) log_err("ibm-943->u with substitute did not match.\n"); } void TestLegalAndOthers(int32_t inputsize, int32_t outputsize) { UChar legalText[] = { 0x0000, 0xAC00, 0xAC01, 0xD700 }; const char templegal949[] ={ (char)0x00, (char)0xb0, (char)0xa1, (char)0xb0, (char)0xa2, (char)0xc8, (char)0xd3 }; int32_t to949legal[] = {0, 1, 1, 2, 2, 3, 3}; const char text943[] = { (char)0x82, (char)0xa9, (char)0x82, (char)0x20, /*(char)0xc8,*/ 'a', (char)0x8a, (char)0xbf, (char)0x8e, (char)0x9a }; UChar toUnicode943sub[] = { 0x304b, 0xfffd, /*0xff88,*/ 0x0061, 0x6f22, 0x5b57}; UChar toUnicode943skip[]= { 0x304b, /*0xff88,*/ 0x0061, 0x6f22, 0x5b57}; UChar toUnicode943stop[]= { 0x304b}; int32_t fromIBM943Offssub[] = {0, 2, 4, 5, 7}; int32_t fromIBM943Offsskip[] = { 0, 4, 5, 7}; int32_t fromIBM943Offsstop[] = { 0}; gInBufferSize = inputsize; gOutBufferSize = outputsize; /*checking with a legal value*/ if(!testConvertFromUnicode(legalText, sizeof(legalText)/sizeof(legalText[0]), templegal949, sizeof(templegal949), "ibm-949", (UCNV_FromUCallBack)MissingUnicodeAction_SKIP, to949legal )) log_err("u-> ibm-949 with skip did not match.\n"); /*checking illegal value for ibm-943 with substitute*/ if(!testConvertToUnicode(text943, sizeof(text943), toUnicode943sub, sizeof(toUnicode943sub)/sizeof(toUnicode943sub[0]),"ibm-943", (UCNV_ToUCallBack)MissingCharAction_SUBSTITUTE, fromIBM943Offssub )) log_err("ibm-943->u with subst did not match.\n"); /*checking illegal value for ibm-943 with skip */ if(!testConvertToUnicode(text943, sizeof(text943), toUnicode943skip, sizeof(toUnicode943skip)/sizeof(toUnicode943skip[0]),"ibm-943", (UCNV_ToUCallBack)MissingCharAction_SKIP, fromIBM943Offsskip )) log_err("ibm-943->u with skip did not match.\n"); /*checking illegal value for ibm-943 with stop */ if(!testConvertToUnicode(text943, sizeof(text943), toUnicode943stop, sizeof(toUnicode943stop)/sizeof(toUnicode943stop[0]),"ibm-943", (UCNV_ToUCallBack)MissingCharAction_STOP, fromIBM943Offsstop )) log_err("ibm-943->u with stop did not match.\n"); } void TestSingleByte(int32_t inputsize, int32_t outputsize) { const char sampleText[] = {(char)0x82, (char)0xa9, 'a', 'b', 'c' , (char)0x82, (char)0xff, /*(char)0x82, (char)0xa9,*/ '2', '3'}; UChar toUnicode943sub[] = {0x304b, 0x0061, 0x0062, 0x0063, 0xfffd,/*0x304b,*/ 0x0032, 0x0033}; int32_t fromIBM943Offssub[] = {0, 2, 3, 4, 5, 7, 8}; /*checking illegal value for ibm-943 with substitute*/ gInBufferSize = inputsize; gOutBufferSize = outputsize; if(!testConvertToUnicode(sampleText, sizeof(sampleText), toUnicode943sub, sizeof(toUnicode943sub)/sizeof(toUnicode943sub[0]),"ibm-943", (UCNV_ToUCallBack)MissingCharAction_SUBSTITUTE, fromIBM943Offssub )) log_err("ibm-943->u with subst did not match.\n"); } bool_t testConvertFromUnicode(const UChar *source, int sourceLen, const char *expect, int expectLen, const char *codepage, UCNV_FromUCallBack callback , int32_t *expectOffsets) { UErrorCode status = ZERO_ERROR; UConverter *conv = 0; char junkout[NEW_MAX_BUFFER]; /* FIX */ int32_t junokout[NEW_MAX_BUFFER]; /* FIX */ const UChar *src; char *end; char *targ; int32_t *offs; int i; int32_t realBufferSize; char *realBufferEnd; const UChar *realSourceEnd; const UChar *sourceLimit; bool_t checkOffsets = TRUE; bool_t doFlush; UCNV_FromUCallBack action; char junk[9999]; char offset_str[9999]; char expOff[9999]; char *p; for(i=0;i %d chars out]. \nResult :", sourceLen, targ-junkout); if(VERBOSITY) { junk[0] = 0; offset_str[0] = 0; for(p = junkout;p %d chars.\nResult :", sourcelen, targ-junkout); if(VERBOSITY) { junk[0] = 0; offset_str[0] = 0; for(p = junkout;p