Index: source/test/intltest/uts46test.cpp |
diff --git a/source/test/intltest/uts46test.cpp b/source/test/intltest/uts46test.cpp |
index 1039acdc3aafc4afc063ec2ba043f8fb9dcdb68b..5bdf305a6665ded5aa2a612d32c76cd1ecc13e0c 100644 |
--- a/source/test/intltest/uts46test.cpp |
+++ b/source/test/intltest/uts46test.cpp |
@@ -1,6 +1,6 @@ |
/* |
******************************************************************************* |
-* Copyright (C) 2010-2011, International Business Machines |
+* Copyright (C) 2010-2014, International Business Machines |
* Corporation and others. All Rights Reserved. |
******************************************************************************* |
* file name: uts46test.cpp |
@@ -25,8 +25,7 @@ |
#include "unicode/uidna.h" |
#include "unicode/unistr.h" |
#include "intltest.h" |
- |
-#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) |
+#include "cmemory.h" |
class UTS46Test : public IntlTest { |
public: |
@@ -147,7 +146,7 @@ void UTS46Test::TestAPI() { |
} |
// UTF-8 |
char buffer[100]; |
- TestCheckedArrayByteSink sink(buffer, LENGTHOF(buffer)); |
+ TestCheckedArrayByteSink sink(buffer, UPRV_LENGTHOF(buffer)); |
errorCode=U_ZERO_ERROR; |
nontrans->labelToUnicodeUTF8(StringPiece(NULL, 5), sink, info, errorCode); |
if(errorCode!=U_ILLEGAL_ARGUMENT_ERROR || sink.NumberOfBytesWritten()!=0) { |
@@ -214,7 +213,7 @@ void UTS46Test::TestNotSTD3() { |
UNICODE_STRING_SIMPLE("\\u0000a_2+2=4\\u000A.essen.net").unescape() || |
info.hasErrors() |
) { |
- prettify(result).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(result).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
errln("notSTD3.nameToUnicode(non-LDH ASCII) unexpected errors %04lx string %s", |
(long)info.getErrors(), buffer); |
} |
@@ -228,7 +227,7 @@ void UTS46Test::TestNotSTD3() { |
input=UNICODE_STRING_SIMPLE("a\\u2260b\\u226Ec\\u226Fd").unescape(); |
not3->nameToUnicode(input, result, info, errorCode); |
if(result!=input || info.hasErrors()) { |
- prettify(result).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(result).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
errln("notSTD3.nameToUnicode(equiv to non-LDH ASCII) unexpected errors %04lx string %s", |
(long)info.getErrors(), buffer); |
} |
@@ -466,6 +465,9 @@ static const TestCase testCases[]={ |
"1234567890123456789012345678901234567890123456789012345678901", |
UIDNA_ERROR_LABEL_TOO_LONG|UIDNA_ERROR_DOMAIN_NAME_TOO_LONG }, |
// hyphen errors and empty-label errors |
+ // Ticket #10883: ToUnicode also checks for empty labels. |
+ { ".", "B", ".", UIDNA_ERROR_EMPTY_LABEL }, |
+ { "\\uFF0E", "B", ".", UIDNA_ERROR_EMPTY_LABEL }, |
// "xn---q----jra"=="-q--a-umlaut-" |
{ "a.b..-q--a-.e", "B", "a.b..-q--a-.e", |
UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN| |
@@ -477,11 +479,13 @@ static const TestCase testCases[]={ |
UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN| |
UIDNA_ERROR_HYPHEN_3_4 }, |
{ "a..c", "B", "a..c", UIDNA_ERROR_EMPTY_LABEL }, |
+ { "a.xn--.c", "B", "a..c", UIDNA_ERROR_EMPTY_LABEL }, |
{ "a.-b.", "B", "a.-b.", UIDNA_ERROR_LEADING_HYPHEN }, |
{ "a.b-.c", "B", "a.b-.c", UIDNA_ERROR_TRAILING_HYPHEN }, |
{ "a.-.c", "B", "a.-.c", UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN }, |
{ "a.bc--de.f", "B", "a.bc--de.f", UIDNA_ERROR_HYPHEN_3_4 }, |
{ "\\u00E4.\\u00AD.c", "B", "\\u00E4..c", UIDNA_ERROR_EMPTY_LABEL }, |
+ { "\\u00E4.xn--.c", "B", "\\u00E4..c", UIDNA_ERROR_EMPTY_LABEL }, |
{ "\\u00E4.-b.", "B", "\\u00E4.-b.", UIDNA_ERROR_LEADING_HYPHEN }, |
{ "\\u00E4.b-.c", "B", "\\u00E4.b-.c", UIDNA_ERROR_TRAILING_HYPHEN }, |
{ "\\u00E4.-.c", "B", "\\u00E4.-.c", UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN }, |
@@ -581,7 +585,7 @@ void UTS46Test::TestSomeCases() { |
IcuTestErrorCode errorCode(*this, "TestSomeCases"); |
char buffer[400], buffer2[400]; |
int32_t i; |
- for(i=0; i<LENGTHOF(testCases); ++i) { |
+ for(i=0; i<UPRV_LENGTHOF(testCases); ++i) { |
const TestCase &testCase=testCases[i]; |
UnicodeString input(ctou(testCase.s)); |
UnicodeString expected(ctou(testCase.u)); |
@@ -597,10 +601,9 @@ void UTS46Test::TestSomeCases() { |
) { |
continue; |
} |
- // ToUnicode does not set length errors. |
+ // ToUnicode does not set length-overflow errors. |
uint32_t uniErrors=testCase.errors&~ |
- (UIDNA_ERROR_EMPTY_LABEL| |
- UIDNA_ERROR_LABEL_TOO_LONG| |
+ (UIDNA_ERROR_LABEL_TOO_LONG| |
UIDNA_ERROR_DOMAIN_NAME_TOO_LONG); |
char mode=testCase.o[0]; |
if(mode=='B' || mode=='N') { |
@@ -610,7 +613,7 @@ void UTS46Test::TestSomeCases() { |
continue; |
} |
if(uN!=expected) { |
- prettify(uN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(uN).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
errln("N.nameToUnicode([%d] %s) unexpected string %s", |
(int)i, testCase.s, buffer); |
continue; |
@@ -628,7 +631,7 @@ void UTS46Test::TestSomeCases() { |
continue; |
} |
if(uT!=expected) { |
- prettify(uT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(uT).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
errln("T.nameToUnicode([%d] %s) unexpected string %s", |
(int)i, testCase.s, buffer); |
continue; |
@@ -641,24 +644,24 @@ void UTS46Test::TestSomeCases() { |
} |
// ToASCII is all-ASCII if no severe errors |
if((aNInfo.getErrors()&severeErrors)==0 && !isASCII(aN)) { |
- prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(aN).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
errln("N.nameToASCII([%d] %s) (errors %04lx) result is not ASCII %s", |
(int)i, testCase.s, aNInfo.getErrors(), buffer); |
continue; |
} |
if((aTInfo.getErrors()&severeErrors)==0 && !isASCII(aT)) { |
- prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(aT).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
errln("T.nameToASCII([%d] %s) (errors %04lx) result is not ASCII %s", |
(int)i, testCase.s, aTInfo.getErrors(), buffer); |
continue; |
} |
if(verbose) { |
char m= mode=='B' ? mode : 'N'; |
- prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(aN).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
logln("%c.nameToASCII([%d] %s) (errors %04lx) result string: %s", |
m, (int)i, testCase.s, aNInfo.getErrors(), buffer); |
if(mode!='B') { |
- prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
+ prettify(aT).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
logln("T.nameToASCII([%d] %s) (errors %04lx) result string: %s", |
(int)i, testCase.s, aTInfo.getErrors(), buffer); |
} |
@@ -676,32 +679,32 @@ void UTS46Test::TestSomeCases() { |
continue; |
} |
if(aN!=uNaN) { |
- prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(uNaN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(aN).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(uNaN).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("N.nameToASCII([%d] %s)!=N.nameToUnicode().N.nameToASCII() " |
"(errors %04lx) %s vs. %s", |
(int)i, testCase.s, aNInfo.getErrors(), buffer, buffer2); |
continue; |
} |
if(aT!=uTaN) { |
- prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(uTaN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(aT).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(uTaN).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("T.nameToASCII([%d] %s)!=T.nameToUnicode().N.nameToASCII() " |
"(errors %04lx) %s vs. %s", |
(int)i, testCase.s, aNInfo.getErrors(), buffer, buffer2); |
continue; |
} |
if(uN!=aNuN) { |
- prettify(uN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(aNuN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(uN).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(aNuN).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("N.nameToUnicode([%d] %s)!=N.nameToASCII().N.nameToUnicode() " |
"(errors %04lx) %s vs. %s", |
(int)i, testCase.s, uNInfo.getErrors(), buffer, buffer2); |
continue; |
} |
if(uT!=aTuN) { |
- prettify(uT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(aTuN).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(uT).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(aTuN).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("T.nameToUnicode([%d] %s)!=T.nameToASCII().N.nameToUnicode() " |
"(errors %04lx) %s vs. %s", |
(int)i, testCase.s, uNInfo.getErrors(), buffer, buffer2); |
@@ -721,8 +724,8 @@ void UTS46Test::TestSomeCases() { |
} |
if(aN.indexOf((UChar)0x2e)<0) { |
if(aN!=aNL || aNInfo.getErrors()!=aNLInfo.getErrors()) { |
- prettify(aN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(aNL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(aN).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(aNL).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("N.nameToASCII([%d] %s)!=N.labelToASCII() " |
"(errors %04lx vs %04lx) %s vs. %s", |
(int)i, testCase.s, aNInfo.getErrors(), aNLInfo.getErrors(), buffer, buffer2); |
@@ -737,8 +740,8 @@ void UTS46Test::TestSomeCases() { |
} |
if(aT.indexOf((UChar)0x2e)<0) { |
if(aT!=aTL || aTInfo.getErrors()!=aTLInfo.getErrors()) { |
- prettify(aT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(aTL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(aT).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(aTL).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("T.nameToASCII([%d] %s)!=T.labelToASCII() " |
"(errors %04lx vs %04lx) %s vs. %s", |
(int)i, testCase.s, aTInfo.getErrors(), aTLInfo.getErrors(), buffer, buffer2); |
@@ -753,8 +756,8 @@ void UTS46Test::TestSomeCases() { |
} |
if(uN.indexOf((UChar)0x2e)<0) { |
if(uN!=uNL || uNInfo.getErrors()!=uNLInfo.getErrors()) { |
- prettify(uN).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(uNL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(uN).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(uNL).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("N.nameToUnicode([%d] %s)!=N.labelToUnicode() " |
"(errors %04lx vs %04lx) %s vs. %s", |
(int)i, testCase.s, uNInfo.getErrors(), uNLInfo.getErrors(), buffer, buffer2); |
@@ -769,8 +772,8 @@ void UTS46Test::TestSomeCases() { |
} |
if(uT.indexOf((UChar)0x2e)<0) { |
if(uT!=uTL || uTInfo.getErrors()!=uTLInfo.getErrors()) { |
- prettify(uT).extract(0, 0x7fffffff, buffer, LENGTHOF(buffer)); |
- prettify(uTL).extract(0, 0x7fffffff, buffer2, LENGTHOF(buffer2)); |
+ prettify(uT).extract(0, 0x7fffffff, buffer, UPRV_LENGTHOF(buffer)); |
+ prettify(uTL).extract(0, 0x7fffffff, buffer2, UPRV_LENGTHOF(buffer2)); |
errln("T.nameToUnicode([%d] %s)!=T.labelToUnicode() " |
"(errors %04lx vs %04lx) %s vs. %s", |
(int)i, testCase.s, uTInfo.getErrors(), uTLInfo.getErrors(), buffer, buffer2); |