+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
*
- * Copyright (C) 2003-2012, International Business Machines
+ * Copyright (C) 2003-2016, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
* file name: testidna.cpp
- * encoding: US-ASCII
+ * encoding: UTF-8
* tab size: 8 (not used)
* indentation:4
*
#include "unicode/ustring.h"
#include "unicode/usprep.h"
#include "unicode/uniset.h"
+#include "unicode/utf16.h"
+#include "cmemory.h"
#include "testidna.h"
#include "idnaref.h"
#include "nptrans.h"
// test null-terminated source and return value of number of UChars required
destLen = func(src,-1,NULL,0,options, &parseError , &status);
+ if (status == U_FILE_ACCESS_ERROR) {
+ dataerrln("U_FILE_ACCESS_ERROR. Skipping the remainder of this test.");
+ return;
+ }
if(status == U_BUFFER_OVERFLOW_ERROR){
status = U_ZERO_ERROR; // reset error code
if(destLen+1 < MAX_DEST_SIZE){
int32_t i;
UChar buf[MAX_DEST_SIZE];
- for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(unicodeIn); i++){
u_charsToUChars(asciiIn[i],buf, (int32_t)(strlen(asciiIn[i])+1));
testAPI(unicodeIn[i], buf,testName, FALSE,U_ZERO_ERROR, TRUE, TRUE, func);
int32_t i;
UChar buf[MAX_DEST_SIZE];
- for(i=0;i< (int32_t)(sizeof(asciiIn)/sizeof(asciiIn[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(asciiIn); i++){
u_charsToUChars(asciiIn[i],buf, (int32_t)(strlen(asciiIn[i])+1));
testAPI(buf,unicodeIn[i],testName,FALSE,U_ZERO_ERROR, TRUE, TRUE, func);
}
UErrorCode status = U_ZERO_ERROR;
int32_t bufLen = 0;
UParseError parseError;
- for(i=0;i< (int32_t)(sizeof(domainNames)/sizeof(domainNames[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(domainNames); i++){
bufLen = (int32_t)strlen(domainNames[i]);
bufLen = u_unescape(domainNames[i],buf, bufLen+1);
func(buf,bufLen,expected,MAX_DEST_SIZE, UIDNA_ALLOW_UNASSIGNED, &parseError,&status);
UErrorCode status = U_ZERO_ERROR;
int32_t bufLen = 0;
UParseError parseError;
- for(i=0;i< (int32_t)(sizeof(domainNames)/sizeof(domainNames[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(domainNames); i++){
bufLen = (int32_t)strlen(domainNames[i]);
bufLen = u_unescape(domainNames[i],buf, bufLen+1);
func(buf,bufLen,expected,MAX_DEST_SIZE, UIDNA_ALLOW_UNASSIGNED, &parseError,&status);
ascii1.append(com);
ascii1.append((UChar)0x0000);
- for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(unicodeIn); i++){
u_charsToUChars(asciiIn[i],buf+4, (int32_t)(strlen(asciiIn[i])+1));
u_strcat(buf,com);
int32_t labelLen=0;
UBool caseFlags[MAX_DEST_SIZE];
- for(int32_t i=0;i< sizeof(errorCases)/sizeof(errorCases[0]);i++){
+ for(int32_t i=0;i< UPRV_LENGTHOF(errorCases);i++){
ErrorCases errorCase = errorCases[i];
UErrorCode status = U_ZERO_ERROR;
start = errorCase.unicode;
UChar buf[MAX_DEST_SIZE];
int32_t bufLen=0;
- for(int32_t i=0;i< (int32_t)(sizeof(errorCases)/sizeof(errorCases[0]));i++){
+ for(int32_t i=0;i< UPRV_LENGTHOF(errorCases);i++){
ErrorCases errorCase = errorCases[i];
UChar* src =NULL;
if(errorCase.ascii != NULL){
int32_t srcLen=0;
UChar expected[MAX_DEST_SIZE];
int32_t expectedLen = 0;
- for(int32_t i=0;i< (int32_t)(sizeof(conformanceTestCases)/sizeof(conformanceTestCases[0]));i++){
+ for(int32_t i=0;i< UPRV_LENGTHOF(conformanceTestCases);i++){
const char* utf8Chars1 = conformanceTestCases[i].in;
int32_t utf8Chars1Len = (int32_t)strlen(utf8Chars1);
const char* utf8Chars2 = conformanceTestCases[i].out;
int32_t i;
UChar buf[MAX_DEST_SIZE];
- for(i=0;i< (int32_t)(sizeof(asciiIn)/sizeof(asciiIn[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(asciiIn); i++){
u_charsToUChars(asciiIn[i],buf, (int32_t)(strlen(asciiIn[i])+1));
testChaining(buf,5,toUnicodeName, FALSE, FALSE, toUnicode);
}
- for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(unicodeIn); i++){
testChaining(unicodeIn[i], 5,toASCIIName, FALSE, TRUE, toASCII);
}
}
ascii1.append(com);
ascii1.append((UChar)0x0000);
- for(i=0;i< (int32_t)(sizeof(unicodeIn)/sizeof(unicodeIn[0])); i++){
+ for(i=0;i< UPRV_LENGTHOF(unicodeIn); i++){
u_charsToUChars(asciiIn[i],buf+4, (int32_t)(strlen(asciiIn[i])+1));
u_strcat(buf,com);
testIDNToUnicode("uidna_IDNToUnicode", uidna_IDNToUnicode);
}
void TestIDNA::TestCompare(){
- testCompare("uidna_compare",uidna_compare);
+ UErrorCode status = U_ZERO_ERROR;
+ uidna_close(uidna_openUTS46(0, &status)); // Fail quickly if no data.
+ if (assertSuccess("", status, true, __FILE__, __LINE__)) {
+ testCompare("uidna_compare",uidna_compare);
+ }
}
void TestIDNA::TestErrorCases(){
testErrorCases( "uidna_IDNToASCII",uidna_IDNToASCII,
"uidna_IDNToUnicode",uidna_IDNToUnicode);
}
void TestIDNA::TestRootLabelSeparator(){
- testRootLabelSeparator( "uidna_compare",uidna_compare,
- "uidna_IDNToASCII", uidna_IDNToASCII,
- "uidna_IDNToUnicode",uidna_IDNToUnicode
- );
+ UErrorCode status = U_ZERO_ERROR;
+ uidna_close(uidna_openUTS46(0, &status)); // Fail quickly if no data.
+ if (assertSuccess("", status, true, __FILE__, __LINE__)) {
+ testRootLabelSeparator( "uidna_compare",uidna_compare,
+ "uidna_IDNToASCII", uidna_IDNToASCII,
+ "uidna_IDNToUnicode",uidna_IDNToUnicode
+ );
+ }
}
void TestIDNA::TestChaining(){
testChaining("uidna_toASCII",uidna_toASCII, "uidna_toUnicode", uidna_toUnicode);
static const int loopCount = 100;
static const int maxCharCount = 20;
-static const int maxCodePoint = 0x10ffff;
+
static uint32_t
randul()
{
}
/* for debugging */
- for (i=0; i<(int)(sizeof(failures)/sizeof(failures[0])); i++){
+ for (i=0; i<UPRV_LENGTHOF(failures); i++){
source.truncate(0);
source.append( UnicodeString(failures[i], -1, US_INV) );
source = source.unescape();
int32_t srcLen = 0;
// data even OK?
- {
- UErrorCode dataStatus = U_ZERO_ERROR;
- loadTestData(dataStatus);
- if(U_FAILURE(dataStatus)) {
+ UErrorCode dataStatus = U_ZERO_ERROR;
+ loadTestData(dataStatus);
+ if(U_FAILURE(dataStatus)) {
dataerrln("Couldn't load test data: %s\n", u_errorName(dataStatus)); // save us from thousands and thousands of errors
return;
- }
}
+ uidna_close(uidna_openUTS46(0, &dataStatus)); // Fail quickly if no data.
+ if (!assertSuccess("", dataStatus, true, __FILE__, __LINE__)) { return; }
for (int32_t i = 0; i <= 0x10FFFF; i++){
if (quick == TRUE && i > 0x0FFF){
void TestIDNA::TestRefIDNA(){
UErrorCode status = U_ZERO_ERROR;
- getInstance(status); // Init prep
- if (U_FAILURE(status)) {
- if (status == U_FILE_ACCESS_ERROR) {
- dataerrln("Test could not initialize. Got %s", u_errorName(status));
- }
- return;
- }
+
+ getInstance(status); // Init prep. Abort test early if no data.
+ if (!assertSuccess("", status, true, __FILE__, __LINE__)) { return; }
testToASCII("idnaref_toASCII", idnaref_toASCII);
testToUnicode("idnaref_toUnicode", idnaref_toUnicode);