From d683b867bf04b5ed4990d35fcf13cac7d279724f Mon Sep 17 00:00:00 2001 From: Yoshito Umaoka Date: Fri, 7 Oct 2011 22:28:32 +0000 Subject: [PATCH] ICU-8874 Fixed test case problem which triggered TestIDNAMonkeyTest failure intermittently. Also updated TestCompareReferenceImpl to cover the case which used to trigger the test failure. X-SVN-Rev: 30804 --- icu4c/source/test/intltest/idnaref.cpp | 38 +++++++++++++------------ icu4c/source/test/intltest/testidna.cpp | 25 ++++++++-------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/icu4c/source/test/intltest/idnaref.cpp b/icu4c/source/test/intltest/idnaref.cpp index eabe1f56d3..33f0918f24 100644 --- a/icu4c/source/test/intltest/idnaref.cpp +++ b/icu4c/source/test/intltest/idnaref.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2007, International Business Machines + * Copyright (C) 2003-2011, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -285,31 +285,33 @@ idnaref_toASCII(const UChar* src, int32_t srcLength, } b1[b1Len++] = src[j]; } - // step 2 - NamePrepTransform* prep = TestIDNA::getInstance(*status); + NamePrepTransform* prep = TestIDNA::getInstance(*status); if(U_FAILURE(*status)){ goto CLEANUP; } - b1Len = prep->process(src,srcLength,b1, b1Capacity,allowUnassigned,parseError,*status); + // step 2 is performed only if the source contains non ASCII + if (!srcIsASCII) { + b1Len = prep->process(src,srcLength,b1, b1Capacity,allowUnassigned,parseError,*status); - if(*status == U_BUFFER_OVERFLOW_ERROR){ - // redo processing of string - /* we do not have enough room so grow the buffer*/ - b1 = (UChar*) uprv_malloc(b1Len * U_SIZEOF_UCHAR); - if(b1==NULL){ - *status = U_MEMORY_ALLOCATION_ERROR; + if(*status == U_BUFFER_OVERFLOW_ERROR){ + // redo processing of string + /* we do not have enough room so grow the buffer*/ + b1 = (UChar*) uprv_malloc(b1Len * U_SIZEOF_UCHAR); + if(b1==NULL){ + *status = U_MEMORY_ALLOCATION_ERROR; + goto CLEANUP; + } + + *status = U_ZERO_ERROR; // reset error + + b1Len = prep->process(src,srcLength,b1, b1Len,allowUnassigned, parseError, *status); + } + // error bail out + if(U_FAILURE(*status)){ goto CLEANUP; } - - *status = U_ZERO_ERROR; // reset error - - b1Len = prep->process(src,srcLength,b1, b1Len,allowUnassigned, parseError, *status); - } - // error bail out - if(U_FAILURE(*status)){ - goto CLEANUP; } if(b1Len == 0){ diff --git a/icu4c/source/test/intltest/testidna.cpp b/icu4c/source/test/intltest/testidna.cpp index d15cc6a499..617d960311 100644 --- a/icu4c/source/test/intltest/testidna.cpp +++ b/icu4c/source/test/intltest/testidna.cpp @@ -1,7 +1,7 @@ /* ******************************************************************************* * - * Copyright (C) 2003-2010, International Business Machines + * Copyright (C) 2003-2011, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* @@ -1520,23 +1520,24 @@ void TestIDNA::TestIDNAMonkeyTest(){ } void TestIDNA::TestCompareReferenceImpl(){ - + UChar src [2] = {0,0}; int32_t srcLen = 0; - - for(int32_t i = 0x40000 ; i< 0x10ffff; i++){ - if(quick==TRUE && i> 0x1FFFF){ + + for (int32_t i = 0; i <= 0x10FFFF; i++){ + if (quick == TRUE && i > 0x0FFF){ return; } - if(i >= 0x30000 && i <= 0xF0000){ - i+=0xB0000; + if(i == 0x30000){ + // jump to E0000, no characters assigned in plain 3 to plain 13 as of Unicode 6.0 + i = 0xE0000; } - if(i>0xFFFF){ - src[0] = U16_LEAD(i); - src[1] = U16_TRAIL(i); - srcLen =2; - }else{ + if (i > 0xFFFF){ + src[0] = U16_LEAD(i); + src[1] = U16_TRAIL(i); + srcLen =2; + } else { src[0] = (UChar)i; src[1] = 0; srcLen = 1;